def test_NestedBlockDataContainer(self): ig0 = ImageGeometry(2,3,4) ig1 = ImageGeometry(2,3,5) data0 = ig0.allocate(0) data2 = ig0.allocate(1) cp0 = BlockDataContainer(data0,data2) #cp1 = BlockDataContainer(data2,data3) nested = BlockDataContainer(cp0, data2, data2) out = BlockDataContainer(BlockDataContainer(data0 , data0), data0, data0) nested.divide(data2,out=out) self.assertBlockDataContainerEqual(out, nested)
def test_BlockDataContainer_with_SIRF_DataContainer_divide(self): os.chdir(self.cwd) image1 = pet.ImageData('emission.hv') image2 = pet.ImageData('emission.hv') image1.fill(1.) image2.fill(2.) print(image1.shape, image2.shape) tmp = image1.divide(1.) # numpy.testing.assert_array_equal(image1.as_array(), tmp.as_array()) tmp = image2.divide(1.) # numpy.testing.assert_array_equal(image2.as_array(), tmp.as_array()) # image.fill(1.) bdc = BlockDataContainer(image1, image2) bdc1 = bdc.divide(1.) self.assertBlockDataContainerEqual(bdc, bdc1)
def test_BlockDataContainer(self): ig0 = ImageGeometry(2, 3, 4) ig1 = ImageGeometry(2, 3, 5) # data0 = ImageData(geometry=ig0) # data1 = ImageData(geometry=ig1) + 1 data0 = ig0.allocate(0.) data1 = ig1.allocate(1.) # data2 = ImageData(geometry=ig0) + 2 # data3 = ImageData(geometry=ig1) + 3 data2 = ig0.allocate(2.) data3 = ig1.allocate(3.) cp0 = BlockDataContainer(data0, data1) cp1 = BlockDataContainer(data2, data3) cp2 = BlockDataContainer(data0 + 1, data2 + 1) d = cp2 + data0 self.assertEqual(d.get_item(0).as_array()[0][0][0], 1) try: d = cp2 + data1 self.assertTrue(False) except ValueError as ve: self.assertTrue(True) d = cp2 - data0 self.assertEqual(d.get_item(0).as_array()[0][0][0], 1) try: d = cp2 - data1 self.assertTrue(False) except ValueError as ve: self.assertTrue(True) d = cp2 * data2 self.assertEqual(d.get_item(0).as_array()[0][0][0], 2) try: d = cp2 * data1 self.assertTrue(False) except ValueError as ve: self.assertTrue(True) a = [(el, ot) for el, ot in zip(cp0.containers, cp1.containers)] #cp2 = BlockDataContainer(*a) cp2 = cp0.add(cp1) self.assertEqual(cp2.get_item(0).as_array()[0][0][0], 2.) self.assertEqual(cp2.get_item(1).as_array()[0][0][0], 4.) cp2 = cp0 + cp1 self.assertTrue(cp2.get_item(0).as_array()[0][0][0] == 2.) self.assertTrue(cp2.get_item(1).as_array()[0][0][0] == 4.) cp2 = cp0 + 1 numpy.testing.assert_almost_equal(cp2.get_item(0).as_array()[0][0][0], 1., decimal=5) numpy.testing.assert_almost_equal(cp2.get_item(1).as_array()[0][0][0], 2., decimal=5) cp2 = cp0 + [1, 2] numpy.testing.assert_almost_equal(cp2.get_item(0).as_array()[0][0][0], 1., decimal=5) numpy.testing.assert_almost_equal(cp2.get_item(1).as_array()[0][0][0], 3., decimal=5) cp2 += cp1 numpy.testing.assert_almost_equal(cp2.get_item(0).as_array()[0][0][0], +3., decimal=5) numpy.testing.assert_almost_equal(cp2.get_item(1).as_array()[0][0][0], +6., decimal=5) cp2 += 1 numpy.testing.assert_almost_equal(cp2.get_item(0).as_array()[0][0][0], +4., decimal=5) numpy.testing.assert_almost_equal(cp2.get_item(1).as_array()[0][0][0], +7., decimal=5) cp2 += [-2, -1] numpy.testing.assert_almost_equal(cp2.get_item(0).as_array()[0][0][0], 2., decimal=5) numpy.testing.assert_almost_equal(cp2.get_item(1).as_array()[0][0][0], 6., decimal=5) cp2 = cp0.subtract(cp1) assert (cp2.get_item(0).as_array()[0][0][0] == -2.) assert (cp2.get_item(1).as_array()[0][0][0] == -2.) cp2 = cp0 - cp1 assert (cp2.get_item(0).as_array()[0][0][0] == -2.) assert (cp2.get_item(1).as_array()[0][0][0] == -2.) cp2 = cp0 - 1 numpy.testing.assert_almost_equal(cp2.get_item(0).as_array()[0][0][0], -1., decimal=5) numpy.testing.assert_almost_equal(cp2.get_item(1).as_array()[0][0][0], 0, decimal=5) cp2 = cp0 - [1, 2] numpy.testing.assert_almost_equal(cp2.get_item(0).as_array()[0][0][0], -1., decimal=5) numpy.testing.assert_almost_equal(cp2.get_item(1).as_array()[0][0][0], -1., decimal=5) cp2 -= cp1 numpy.testing.assert_almost_equal(cp2.get_item(0).as_array()[0][0][0], -3., decimal=5) numpy.testing.assert_almost_equal(cp2.get_item(1).as_array()[0][0][0], -4., decimal=5) cp2 -= 1 numpy.testing.assert_almost_equal(cp2.get_item(0).as_array()[0][0][0], -4., decimal=5) numpy.testing.assert_almost_equal(cp2.get_item(1).as_array()[0][0][0], -5., decimal=5) cp2 -= [-2, -1] numpy.testing.assert_almost_equal(cp2.get_item(0).as_array()[0][0][0], -2., decimal=5) numpy.testing.assert_almost_equal(cp2.get_item(1).as_array()[0][0][0], -4., decimal=5) cp2 = cp0.multiply(cp1) assert (cp2.get_item(0).as_array()[0][0][0] == 0.) assert (cp2.get_item(1).as_array()[0][0][0] == 3.) cp2 = cp0 * cp1 assert (cp2.get_item(0).as_array()[0][0][0] == 0.) assert (cp2.get_item(1).as_array()[0][0][0] == 3.) cp2 = cp0 * 2 numpy.testing.assert_almost_equal(cp2.get_item(0).as_array()[0][0][0], 0., decimal=5) numpy.testing.assert_almost_equal(cp2.get_item(1).as_array()[0][0][0], 2, decimal=5) cp2 = 2 * cp0 numpy.testing.assert_almost_equal(cp2.get_item(0).as_array()[0][0][0], 0., decimal=5) numpy.testing.assert_almost_equal(cp2.get_item(1).as_array()[0][0][0], 2, decimal=5) cp2 = cp0 * [3, 2] numpy.testing.assert_almost_equal(cp2.get_item(0).as_array()[0][0][0], 0., decimal=5) numpy.testing.assert_almost_equal(cp2.get_item(1).as_array()[0][0][0], 2., decimal=5) cp2 = cp0 * numpy.asarray([3, 2]) numpy.testing.assert_almost_equal(cp2.get_item(0).as_array()[0][0][0], 0., decimal=5) numpy.testing.assert_almost_equal(cp2.get_item(1).as_array()[0][0][0], 2., decimal=5) cp2 = [3, 2] * cp0 numpy.testing.assert_almost_equal(cp2.get_item(0).as_array()[0][0][0], 0., decimal=5) numpy.testing.assert_almost_equal(cp2.get_item(1).as_array()[0][0][0], 2., decimal=5) cp2 = numpy.asarray([3, 2]) * cp0 numpy.testing.assert_almost_equal(cp2.get_item(0).as_array()[0][0][0], 0., decimal=5) numpy.testing.assert_almost_equal(cp2.get_item(1).as_array()[0][0][0], 2., decimal=5) try: cp2 = [3, 2, 3] * cp0 #numpy.testing.assert_almost_equal(cp2.get_item(0).as_array()[0][0][0] , 0. , decimal=5) #numpy.testing.assert_almost_equal(cp2.get_item(1).as_array()[0][0][0] , 2., decimal = 5) self.assertTrue(False) except ValueError as ve: self.assertTrue(True) cp2 *= cp1 numpy.testing.assert_almost_equal(cp2.get_item(0).as_array()[0][0][0], 0, decimal=5) numpy.testing.assert_almost_equal(cp2.get_item(1).as_array()[0][0][0], +6., decimal=5) cp2 *= 1 numpy.testing.assert_almost_equal(cp2.get_item(0).as_array()[0][0][0], 0., decimal=5) numpy.testing.assert_almost_equal(cp2.get_item(1).as_array()[0][0][0], +6., decimal=5) cp2 *= [-2, -1] numpy.testing.assert_almost_equal(cp2.get_item(0).as_array()[0][0][0], 0., decimal=5) numpy.testing.assert_almost_equal(cp2.get_item(1).as_array()[0][0][0], -6., decimal=5) try: cp2 *= [2, 3, 5] self.assertTrue(False) except ValueError as ve: self.assertTrue(True) cp2 = cp0.divide(cp1) assert (cp2.get_item(0).as_array()[0][0][0] == 0.) numpy.testing.assert_almost_equal(cp2.get_item(1).as_array()[0][0][0], 1. / 3., decimal=4) cp2 = cp0 / cp1 assert (cp2.get_item(0).as_array()[0][0][0] == 0.) numpy.testing.assert_almost_equal(cp2.get_item(1).as_array()[0][0][0], 1. / 3., decimal=4) cp2 = cp0 / 2 numpy.testing.assert_almost_equal(cp2.get_item(0).as_array()[0][0][0], 0., decimal=5) numpy.testing.assert_almost_equal(cp2.get_item(1).as_array()[0][0][0], 0.5, decimal=5) cp2 = cp0 / [3, 2] numpy.testing.assert_almost_equal(cp2.get_item(0).as_array()[0][0][0], 0., decimal=5) numpy.testing.assert_almost_equal(cp2.get_item(1).as_array()[0][0][0], 0.5, decimal=5) cp2 = cp0 / numpy.asarray([3, 2]) numpy.testing.assert_almost_equal(cp2.get_item(0).as_array()[0][0][0], 0., decimal=5) numpy.testing.assert_almost_equal(cp2.get_item(1).as_array()[0][0][0], 0.5, decimal=5) cp3 = numpy.asarray([3, 2]) / (cp0 + 1) numpy.testing.assert_almost_equal(cp3.get_item(0).as_array()[0][0][0], 3., decimal=5) numpy.testing.assert_almost_equal(cp3.get_item(1).as_array()[0][0][0], 1, decimal=5) cp2 += 1 cp2 /= cp1 # TODO fix inplace division numpy.testing.assert_almost_equal(cp2.get_item(0).as_array()[0][0][0], 1. / 2, decimal=5) numpy.testing.assert_almost_equal(cp2.get_item(1).as_array()[0][0][0], 1.5 / 3., decimal=5) cp2 /= 1 numpy.testing.assert_almost_equal(cp2.get_item(0).as_array()[0][0][0], 0.5, decimal=5) numpy.testing.assert_almost_equal(cp2.get_item(1).as_array()[0][0][0], 0.5, decimal=5) cp2 /= [-2, -1] numpy.testing.assert_almost_equal(cp2.get_item(0).as_array()[0][0][0], -0.5 / 2., decimal=5) numpy.testing.assert_almost_equal(cp2.get_item(1).as_array()[0][0][0], -0.5, decimal=5) #### cp2 = cp0.power(cp1) assert (cp2.get_item(0).as_array()[0][0][0] == 0.) numpy.testing.assert_almost_equal(cp2.get_item(1).as_array()[0][0][0], 1., decimal=4) cp2 = cp0**cp1 assert (cp2.get_item(0).as_array()[0][0][0] == 0.) numpy.testing.assert_almost_equal(cp2.get_item(1).as_array()[0][0][0], 1., decimal=4) cp2 = cp0**2 numpy.testing.assert_almost_equal(cp2.get_item(0).as_array()[0][0][0], 0., decimal=5) numpy.testing.assert_almost_equal(cp2.get_item(1).as_array()[0][0][0], 1., decimal=5) cp2 = cp0.maximum(cp1) assert (cp2.get_item(0).as_array()[0][0][0] == cp1.get_item( 0).as_array()[0][0][0]) numpy.testing.assert_almost_equal(cp2.get_item(1).as_array()[0][0][0], cp2.get_item(1).as_array()[0][0][0], decimal=4) cp2 = cp0.abs() numpy.testing.assert_almost_equal(cp2.get_item(0).as_array()[0][0][0], 0., decimal=4) numpy.testing.assert_almost_equal(cp2.get_item(1).as_array()[0][0][0], 1., decimal=4) cp2 = cp0.subtract(cp1) s = cp2.sign() numpy.testing.assert_almost_equal(s.get_item(0).as_array()[0][0][0], -1., decimal=4) numpy.testing.assert_almost_equal(s.get_item(1).as_array()[0][0][0], -1., decimal=4) cp2 = cp0.add(cp1) s = cp2.sqrt() numpy.testing.assert_almost_equal(s.get_item(0).as_array()[0][0][0], numpy.sqrt(2), decimal=4) numpy.testing.assert_almost_equal(s.get_item(1).as_array()[0][0][0], numpy.sqrt(4), decimal=4) s = cp0.sum() size = functools.reduce(lambda x, y: x * y, data1.shape, 1) numpy.testing.assert_almost_equal(s, 0 + size, decimal=4) s0 = 1 s1 = 1 for i in cp0.get_item(0).shape: s0 *= i for i in cp0.get_item(1).shape: s1 *= i