def test_subset(self): shape = (4, 3, 2) a = [i for i in range(2*3*4)] a = numpy.asarray(a) a = numpy.reshape(a, shape) ds = DataContainer(a, True, ['X', 'Y', 'Z']) sub = ds.subset(['X']) res = True try: numpy.testing.assert_array_equal(sub.as_array(), numpy.asarray([0, 6, 12, 18])) except AssertionError as err: res = False print(err) self.assertTrue(res) sub = ds.subset(['X'], Y=2, Z=0) res = True try: numpy.testing.assert_array_equal(sub.as_array(), numpy.asarray([4, 10, 16, 22])) except AssertionError as err: res = False print(err) self.assertTrue(res) sub = ds.subset(['Y']) try: numpy.testing.assert_array_equal( sub.as_array(), numpy.asarray([0, 2, 4])) res = True except AssertionError as err: res = False print(err) self.assertTrue(res) sub = ds.subset(['Z']) try: numpy.testing.assert_array_equal( sub.as_array(), numpy.asarray([0, 1])) res = True except AssertionError as err: res = False print(err) self.assertTrue(res) sub = ds.subset(['Z'], X=1, Y=2) try: numpy.testing.assert_array_equal( sub.as_array(), numpy.asarray([10, 11])) res = True except AssertionError as err: res = False print(err) self.assertTrue(res) print(a) sub = ds.subset(['X', 'Y'], Z=1) res = True try: numpy.testing.assert_array_equal(sub.as_array(), numpy.asarray([[1, 3, 5], [7, 9, 11], [13, 15, 17], [19, 21, 23]])) except AssertionError as err: res = False print(err) self.assertTrue(res)
def test_DataProcessorChaining(self): shape = (2, 3, 4, 5) size = shape[0] for i in range(1, len(shape)): size = size * shape[i] #print("a refcount " , sys.getrefcount(a)) a = numpy.asarray([i for i in range(size)]) a = numpy.reshape(a, shape) ds = DataContainer(a, False, ['X', 'Y', 'Z', 'W']) c = ds.subset(['Z', 'W', 'X']) arr = c.as_array() #[ 0 60 1 61 2 62 3 63 4 64 5 65 6 66 7 67 8 68 9 69 10 70 11 71 # 12 72 13 73 14 74 15 75 16 76 17 77 18 78 19 79] ax = AX() ax.scalar = 2 ax.set_input(c) #ax.apply() print("ax in {0} out {1}".format( c.as_array().flatten(), ax.get_output().as_array().flatten())) numpy.testing.assert_array_equal(ax.get_output().as_array(), arr * 2) cast = CastDataContainer(dtype=numpy.float32) cast.set_input(c) out = cast.get_output() self.assertTrue(out.as_array().dtype == numpy.float32) out *= 0 axm = AX() axm.scalar = 0.5 axm.set_input(c) axm.get_output(out) numpy.testing.assert_array_equal(out.as_array(), arr * 0.5) # check out in DataSetProcessor #a = numpy.asarray([i for i in range( size )]) # create a PixelByPixelDataProcessor #define a python function which will take only one input (the pixel value) pyfunc = lambda x: -x if x > 20 else x clip = PixelByPixelDataProcessor() clip.pyfunc = pyfunc clip.set_input(c) #clip.apply() v = clip.get_output().as_array() self.assertTrue(v.max() == 19) self.assertTrue(v.min() == -79) print("clip in {0} out {1}".format(c.as_array(), clip.get_output().as_array())) #dsp = DataProcessor() #dsp.set_input(ds) #dsp.input = a # pipeline chain = AX() chain.scalar = 0.5 chain.set_input_processor(ax) print("chain in {0} out {1}".format(ax.get_output().as_array(), chain.get_output().as_array())) numpy.testing.assert_array_equal(chain.get_output().as_array(), arr)