def testNumpyDtypePBSerialize(self): provider = ProtobufSerializeProvider() node9 = Node9(b1=np.int8(-2), b2=np.int16(2000), b3=np.int32(-5000), b4=np.int64(500000), c1=np.uint8(2), c2=np.uint16(2000), c3=np.uint32(5000), c4=np.uint64(500000), d1=np.float16(2.5), d2=np.float32(7.37), d3=np.float64(5.976321), f=np.int8(3)) serials = serializes(provider, [node9]) d_node9, = deserializes(provider, [Node9], serials) self.assertIsNot(node9, d_node9) self.assertEqual(node9.b1, d_node9.b1) self.assertEqual(node9.b2, d_node9.b2) self.assertEqual(node9.b3, d_node9.b3) self.assertEqual(node9.b4, d_node9.b4) self.assertEqual(node9.c1, d_node9.c1) self.assertEqual(node9.c2, d_node9.c2) self.assertEqual(node9.c3, d_node9.c3) self.assertEqual(node9.c4, d_node9.c4) self.assertAlmostEqual(node9.d1, d_node9.d1, places=2) self.assertAlmostEqual(node9.d2, d_node9.d2, places=4) self.assertAlmostEqual(node9.d3, d_node9.d3) self.assertEqual(node9.f, d_node9.f)
def testPBSerialize(self): provider = ProtobufSerializeProvider() node2 = Node2(a=[['ss'], ['dd']], data=[3, 7, 212]) node1 = Node1(a='test1', b1=-2, b2=2000, b3=-5000, b4=500000, c1=2, c2=2000, c3=5000, c4=500000, d1=2.5, d2=7.37, d3=5.976321, cl1=1+2j, cl2=2.5+3.1j, e=False, f=node2, g=Node2(a=[['1', '2'], ['3', '4']]), h=[[2, 3], node2, True, {1: node2}, np.datetime64('1066-10-13'), np.timedelta64(1, 'D'), np.complex64(1+2j), np.complex128(2+3j)], i=[Node8(b1=111), Node8(b1=222)]) node3 = Node3(value=node1) serials = serializes(provider, [node2, node3]) d_node2, d_node3 = deserializes(provider, [Node2, Node3], serials) self.assertIsNot(node2, d_node2) self.assertEqual(node2.a, d_node2.a) self.assertEqual(node2.data, d_node2.data) self.assertIsNot(node3, d_node3) self.assertIsInstance(d_node3.value, Node8) self.assertIsNot(node3.value, d_node3.value) self.assertEqual(node3.value.a, d_node3.value.a) self.assertEqual(node3.value.b1, d_node3.value.b1) self.assertEqual(node3.value.b2, d_node3.value.b2) self.assertEqual(node3.value.b3, d_node3.value.b3) self.assertEqual(node3.value.b4, d_node3.value.b4) self.assertEqual(node3.value.c1, d_node3.value.c1) self.assertEqual(node3.value.c2, d_node3.value.c2) self.assertEqual(node3.value.c3, d_node3.value.c3) self.assertEqual(node3.value.c4, d_node3.value.c4) self.assertAlmostEqual(node3.value.d1, d_node3.value.d1, places=2) self.assertAlmostEqual(node3.value.d2, d_node3.value.d2, places=4) self.assertAlmostEqual(node3.value.d3, d_node3.value.d3) self.assertAlmostEqual(node3.value.cl1, d_node3.value.cl1) self.assertAlmostEqual(node3.value.cl2, d_node3.value.cl2) self.assertEqual(node3.value.e, d_node3.value.e) self.assertIsNot(node3.value.f, d_node3.value.f) self.assertEqual(node3.value.f.a, d_node3.value.f.a) self.assertIsNot(node3.value.g, d_node3.value.g) self.assertEqual(node3.value.g.a, d_node3.value.g.a) self.assertEqual(node3.value.h[0], d_node3.value.h[0]) self.assertNotIsInstance(d_node3.value.h[1], str) self.assertIs(d_node3.value.h[1], d_node3.value.f) self.assertEqual(node3.value.h[2], True) self.assertAlmostEqual(node3.value.h[6], d_node3.value.h[6]) self.assertAlmostEqual(node3.value.h[7], d_node3.value.h[7]) self.assertEqual([n.b1 for n in node3.value.i], [n.b1 for n in d_node3.value.i]) self.assertIsInstance(d_node3.value.i[0], Node8) with self.assertRaises(ValueError): serializes(provider, [Node3(value='sth else')])
def testNumpyDtypePBSerialize(self): provider = ProtobufSerializeProvider() node9 = Node9(b1=np.int8(-2), b2=np.int16(2000), b3=np.int32(-5000), b4=np.int64(500000), c1=np.uint8(2), c2=np.uint16(2000), c3=np.uint32(5000), c4=np.uint64(500000), d1=np.float16(2.5), d2=np.float32(7.37), d3=np.float64(5.976321), f=np.int8(3)) serials = serializes(provider, [node9]) d_node9, = deserializes(provider, [Node9], serials) self.assertIsNot(node9, d_node9) self.assertEqual(node9.b1, d_node9.b1) self.assertEqual(node9.b2, d_node9.b2) self.assertEqual(node9.b3, d_node9.b3) self.assertEqual(node9.b4, d_node9.b4) self.assertEqual(node9.c1, d_node9.c1) self.assertEqual(node9.c2, d_node9.c2) self.assertEqual(node9.c3, d_node9.c3) self.assertEqual(node9.c4, d_node9.c4) self.assertAlmostEqual(node9.d1, d_node9.d1, places=2) self.assertAlmostEqual(node9.d2, d_node9.d2, places=4) self.assertAlmostEqual(node9.d3, d_node9.d3) self.assertEqual(node9.f, d_node9.f) node_rec1 = Node9(f=np.dtype([('label', 'int32'), ( 's0', '<U16'), ('s1', 'int32'), ('s2', 'int32'), ( 'd0', '<U16'), ('d1', 'int32'), ('d2', 'int32'), ('d3', '<U256')])) node_rec2 = Node9(f=np.dtype([('label', 'int32'), ( 's0', '<U16'), ('s1', 'int32'), ('s2', 'int32'), ( 's3', '<U256'), ('d0', '<U16'), ('d1', 'int32'), ('d2', 'int32'), ('d3', '<U256')])) serials = serializes(provider, [node_rec1]) d_node_rec1, = deserializes(provider, [Node9], serials) self.assertIsNot(node_rec1, d_node_rec1) self.assertEqual(node_rec1.f, d_node_rec1.f) serials = serializes(provider, [node_rec2]) d_node_rec2, = deserializes(provider, [Node9], serials) self.assertIsNot(node_rec2, d_node_rec2) self.assertEqual(node_rec2.f, d_node_rec2.f)
def testNumpyDtypePBSerialize(self): for serial_type in self._get_serial_types(): provider = ProtobufSerializeProvider( data_serial_type=serial_type, pickle_protocol=TEST_PICKLE_PROTOCOL) node9 = Node9(b1=np.int8(-2), b2=np.int16(2000), b3=np.int32(-5000), b4=np.int64(500000), c1=np.uint8(2), c2=np.uint16(2000), c3=np.uint32(5000), c4=np.uint64(500000), d1=np.float16(2.5), d2=np.float32(7.37), d3=np.float64(5.976321), f1=np.int8(3)) serials = serializes(provider, [node9]) loads_fun = _loads_with_check if serial_type == dataserializer.SerialType.PICKLE \ else original_pickle_loads with unittest.mock.patch('pickle.loads', new=loads_fun): d_node9, = deserializes(provider, [Node9], serials) self.assertIsNot(node9, d_node9) self.assertEqual(node9.b1, d_node9.b1) self.assertEqual(node9.b2, d_node9.b2) self.assertEqual(node9.b3, d_node9.b3) self.assertEqual(node9.b4, d_node9.b4) self.assertEqual(node9.c1, d_node9.c1) self.assertEqual(node9.c2, d_node9.c2) self.assertEqual(node9.c3, d_node9.c3) self.assertEqual(node9.c4, d_node9.c4) self.assertAlmostEqual(node9.d1, d_node9.d1, places=2) self.assertAlmostEqual(node9.d2, d_node9.d2, places=4) self.assertAlmostEqual(node9.d3, d_node9.d3) self.assertEqual(node9.f1, d_node9.f1) node_rec1 = Node9(f1=np.dtype([('label', 'int32'), ('s0', '<U16'), ('s1', 'int32'), ('s2', 'int32'), ('d0', '<U16'), ('d1', 'int32'), ('d2', 'int32'), ('d3', '<U256')])) node_rec2 = Node9(f1=np.dtype([('label', 'int32'), ('s0', '<U16'), ('s1', 'int32'), ('s2', 'int32'), ('s3', '<U256'), ('d0', '<U16'), ('d1', 'int32'), ('d2', 'int32'), ('d3', '<U256')])) serials = serializes(provider, [node_rec1]) loads_fun = _loads_with_check if serial_type == dataserializer.SerialType.PICKLE \ else original_pickle_loads with unittest.mock.patch('pickle.loads', new=loads_fun): d_node_rec1, = deserializes(provider, [Node9], serials) self.assertIsNot(node_rec1, d_node_rec1) self.assertEqual(node_rec1.f1, d_node_rec1.f1) serials = serializes(provider, [node_rec2]) loads_fun = _loads_with_check if serial_type == dataserializer.SerialType.PICKLE \ else original_pickle_loads with unittest.mock.patch('pickle.loads', new=loads_fun): d_node_rec2, = deserializes(provider, [Node9], serials) self.assertIsNot(node_rec2, d_node_rec2) self.assertEqual(node_rec2.f1, d_node_rec2.f1)
def testAttributeAsDict(self): node4 = Node4(a=to_binary('中文'), b=np.random.randint(4, size=(3, 4)), c=np.datetime64(datetime.datetime.now()), d=np.timedelta64(datetime.timedelta(seconds=1234)), e=np.dtype('int'), f={'a': [True, False, False], 'd': [False, None]}, h=(1234, to_text('测试'), '属性', None, np.datetime64('1066-10-13'), np.timedelta64(1, 'D'), np.dtype([('x', 'i4'), ('y', 'f4')])), i=(slice(10), slice(0, 2), None, slice(2, 0, -1)), j=Node5(a='aa'), k=[Node5(a='bb'), None], l=Node6(b=3, nid=1)) pbs = ProtobufSerializeProvider() serial = node4.serialize(pbs) d_node4 = Node4.deserialize(pbs, serial) self.assertEqual(node4.a, d_node4.a) self.assertTrue(np.array_equal(node4.b, d_node4.b)) self.assertEqual(node4.c, d_node4.c) self.assertEqual(node4.d, d_node4.d) self.assertEqual(node4.e, d_node4.e) self.assertEqual(node4.f, d_node4.f) self.assertFalse(hasattr(d_node4, 'g')) self.assertEqual(node4.h, d_node4.h) self.assertEqual(node4.i, d_node4.i) self.assertEqual(node4.j.a, d_node4.j.a) self.assertEqual(node4.k[0].a, d_node4.k[0].a) self.assertIsNone(d_node4.k[1]) self.assertIsInstance(d_node4.l, Node7) self.assertEqual(d_node4.l.b, 3) jss = JsonSerializeProvider() serial = node4.serialize(jss) serial = json.loads(json.dumps(serial), object_hook=OrderedDict) d_node4 = Node4.deserialize(jss, serial) self.assertEqual(node4.a, d_node4.a) self.assertTrue(np.array_equal(node4.b, d_node4.b)) self.assertEqual(node4.c, d_node4.c) self.assertEqual(node4.d, d_node4.d) self.assertEqual(node4.e, d_node4.e) self.assertEqual(node4.f, d_node4.f) self.assertFalse(hasattr(d_node4, 'g')) self.assertEqual(node4.h, d_node4.h) self.assertEqual(node4.i, d_node4.i) self.assertEqual(node4.j.a, d_node4.j.a) self.assertEqual(node4.k[0].a, d_node4.k[0].a) self.assertIsNone(d_node4.k[1]) self.assertIsInstance(d_node4.l, Node7) self.assertEqual(d_node4.l.b, 3)
def testException(self): node1 = Node1(h=[object()]) pbs = ProtobufSerializeProvider() with self.assertRaises(TypeError): node1.serialize(pbs) jss = JsonSerializeProvider() with self.assertRaises(TypeError): node1.serialize(jss)
def testException(self): class Unserializable: def __getstate__(self): raise SystemError node1 = Node1(h=[Unserializable()]) pbs = ProtobufSerializeProvider() with self.assertRaises(TypeError): node1.serialize(pbs) jss = JsonSerializeProvider() with self.assertRaises(TypeError): node1.serialize(jss)
def testAttributeAsDict(self): other_data = {} if pd: df = pd.DataFrame( { 'a': [1, 2, 3], 'b': [to_text('测试'), to_binary('属性'), 'c'] }, index=[[0, 0, 1], ['测试', '属性', '测试']]) other_data['m'] = df.columns other_data['mm'] = df.index other_data['n'] = df['b'] other_data['o'] = df other_data['p'] = [df.columns, df.index, df['a'], df] node4 = Node4(a=to_binary('中文'), b=np.random.randint(4, size=(3, 4)), c=np.datetime64(datetime.datetime.now()), d=np.timedelta64(datetime.timedelta(seconds=1234)), e=np.dtype('int'), f={ 'a': [True, False, False], 'd': [False, None] }, h=(1234, to_text('测试'), '属性', None, np.datetime64('1066-10-13'), np.timedelta64(1, 'D'), np.dtype([('x', 'i4'), ('y', 'f4')])), i=(slice(10), slice(0, 2), None, slice(2, 0, -1)), j=Node5(a='aa'), k=[Node5(a='bb'), None], l=Node6(b=3, nid=1), **other_data) pbs = ProtobufSerializeProvider() serial = node4.serialize(pbs) d_node4 = Node4.deserialize(pbs, serial) self.assertEqual(node4.a, d_node4.a) np.testing.assert_array_equal(node4.b, d_node4.b) self.assertEqual(node4.c, d_node4.c) self.assertEqual(node4.d, d_node4.d) self.assertEqual(node4.e, d_node4.e) self.assertEqual(node4.f, d_node4.f) self.assertFalse(hasattr(d_node4, 'g')) self.assertEqual(node4.h, d_node4.h) self.assertEqual(node4.i, d_node4.i) self.assertEqual(node4.j.a, d_node4.j.a) self.assertEqual(node4.k[0].a, d_node4.k[0].a) self.assertIsNone(d_node4.k[1]) self.assertIsInstance(d_node4.l, Node7) self.assertEqual(d_node4.l.b, 3) if pd: pd.testing.assert_index_equal(node4.m, d_node4.m) pd.testing.assert_index_equal(node4.mm, d_node4.mm) pd.testing.assert_series_equal(node4.n, d_node4.n) pd.testing.assert_frame_equal(node4.o, d_node4.o) pd.testing.assert_index_equal(node4.p[0], d_node4.p[0]) pd.testing.assert_index_equal(node4.p[1], d_node4.p[1]) pd.testing.assert_series_equal(node4.p[2], d_node4.p[2]) pd.testing.assert_frame_equal(node4.p[3], d_node4.p[3]) jss = JsonSerializeProvider() serial = node4.serialize(jss) serial = json.loads(json.dumps(serial), object_hook=OrderedDict) d_node4 = Node4.deserialize(jss, serial) self.assertEqual(node4.a, d_node4.a) np.testing.assert_array_equal(node4.b, d_node4.b) self.assertEqual(node4.c, d_node4.c) self.assertEqual(node4.d, d_node4.d) self.assertEqual(node4.e, d_node4.e) self.assertEqual(node4.f, d_node4.f) self.assertFalse(hasattr(d_node4, 'g')) self.assertEqual(node4.h, d_node4.h) self.assertEqual(node4.i, d_node4.i) self.assertEqual(node4.j.a, d_node4.j.a) self.assertEqual(node4.k[0].a, d_node4.k[0].a) self.assertIsNone(d_node4.k[1]) self.assertIsInstance(d_node4.l, Node7) self.assertEqual(d_node4.l.b, 3) if pd: pd.testing.assert_index_equal(node4.m, d_node4.m) pd.testing.assert_index_equal(node4.mm, d_node4.mm) pd.testing.assert_series_equal(node4.n, d_node4.n) pd.testing.assert_frame_equal(node4.o, d_node4.o) pd.testing.assert_index_equal(node4.p[0], d_node4.p[0]) pd.testing.assert_index_equal(node4.p[1], d_node4.p[1]) pd.testing.assert_series_equal(node4.p[2], d_node4.p[2]) pd.testing.assert_frame_equal(node4.p[3], d_node4.p[3])
def testAttributeAsDict(self): other_data = {} if pd: df = pd.DataFrame( { 'a': [1, 2, 3], 'b': [to_text('测试'), to_binary('属性'), 'c'] }, index=[[0, 0, 1], ['测试', '属性', '测试']]) other_data['w'] = df.columns other_data['ww'] = df.index other_data['x'] = df['b'] other_data['y'] = df other_data['z'] = [df.columns, df.index, df['a'], df] node4 = Node4(a=to_binary('中文'), b=np.random.randint(4, size=(3, 4)), c=np.datetime64(datetime.datetime.now()), d=np.timedelta64(datetime.timedelta(seconds=1234)), e=np.dtype('int'), f={ 'a': [True, False, False], 'd': [False, None] }, h=(1234, to_text('测试'), '属性', None, np.datetime64('1066-10-13'), np.timedelta64(1, 'D'), np.dtype([('x', 'i4'), ('y', 'f4')])), i=(slice(10), slice(0, 2), None, slice(2, 0, -1), slice('a', 'b'), slice(datetime.datetime.now(), datetime.datetime.now())), j=Node5(a='aa', b=slice(1, 100, 3)), k=[Node5(a='bb', b=slice(200, -1, -4)), None], l=Node6(b=3, nid=1), m=Node6(b=4, nid=2), n=[Node5(a='cc', b=slice(100, -2, -5)), None], **other_data) pbs = ProtobufSerializeProvider() serial = node4.serialize(pbs) d_node4 = Node4.deserialize(pbs, serial) self.assertEqual(node4.a, d_node4.a) np.testing.assert_array_equal(node4.b, d_node4.b) self.assertEqual(node4.c, d_node4.c) self.assertEqual(node4.d, d_node4.d) self.assertEqual(node4.e, d_node4.e) self.assertEqual(node4.f, d_node4.f) self.assertFalse(hasattr(d_node4, 'g')) self.assertEqual(node4.h, d_node4.h) self.assertEqual(node4.i, d_node4.i) self.assertEqual(node4.j.a, d_node4.j.a) self.assertEqual(node4.j.b, d_node4.j.b) self.assertEqual(node4.k[0].a, d_node4.k[0].a) self.assertEqual(node4.k[0].b, d_node4.k[0].b) self.assertIsNone(d_node4.k[1]) self.assertIsInstance(d_node4.l, Node7) self.assertEqual(node4.l.b, d_node4.l.b) self.assertIsInstance(d_node4.m, Node7) self.assertEqual(node4.m.b, d_node4.m.b) self.assertIsInstance(d_node4.n[0], Node5) self.assertEqual(node4.n[0].a, d_node4.n[0].a) self.assertEqual(node4.n[0].b, d_node4.n[0].b) self.assertIsNone(d_node4.n[1]) if pd: pd.testing.assert_index_equal(node4.w, d_node4.w) pd.testing.assert_index_equal(node4.ww, d_node4.ww) pd.testing.assert_series_equal(node4.x, d_node4.x) pd.testing.assert_frame_equal(node4.y, d_node4.y) pd.testing.assert_index_equal(node4.z[0], d_node4.z[0]) pd.testing.assert_index_equal(node4.z[1], d_node4.z[1]) pd.testing.assert_series_equal(node4.z[2], d_node4.z[2]) pd.testing.assert_frame_equal(node4.z[3], d_node4.z[3]) with self.assertRaises(TypeError): node42 = Node4(j=Node6()) node42.serialize(pbs) with self.assertRaises(TypeError): node6 = Node6(nid=0) node7 = Node7(nid=1, r=node6) node7.serialize(pbs) with self.assertRaises(TypeError): node6 = Node6(nid=0) node7 = Node7(nid=1, rl=[node6]) node7.serialize(pbs) node61 = Node6(nid=0) node62 = Node6(nid=0, r=node61) serial = node62.serialize(pbs) d_node62 = Node6.deserialize(pbs, serial) self.assertIsInstance(d_node62.r, Node6) node61 = Node6(nid=0) node62 = Node6(nid=0, rl=[node61]) serial = node62.serialize(pbs) d_node62 = Node6.deserialize(pbs, serial) self.assertIsInstance(d_node62.rl[0], Node6) jss = JsonSerializeProvider() serial = node4.serialize(jss) serial = json.loads(json.dumps(serial), object_hook=OrderedDict) d_node4 = Node4.deserialize(jss, serial) self.assertEqual(node4.a, d_node4.a) np.testing.assert_array_equal(node4.b, d_node4.b) self.assertEqual(node4.c, d_node4.c) self.assertEqual(node4.d, d_node4.d) self.assertEqual(node4.e, d_node4.e) self.assertEqual(node4.f, d_node4.f) self.assertFalse(hasattr(d_node4, 'g')) self.assertEqual(node4.h, d_node4.h) self.assertEqual(node4.i, d_node4.i) self.assertEqual(node4.j.a, d_node4.j.a) self.assertEqual(node4.k[0].a, d_node4.k[0].a) self.assertIsNone(d_node4.k[1]) self.assertIsInstance(d_node4.l, Node7) self.assertEqual(node4.l.b, d_node4.l.b) self.assertIsInstance(d_node4.m, Node7) self.assertEqual(node4.m.b, d_node4.m.b) self.assertIsInstance(d_node4.n[0], Node5) self.assertEqual(node4.n[0].a, d_node4.n[0].a) self.assertEqual(node4.n[0].b, d_node4.n[0].b) self.assertIsNone(d_node4.n[1]) if pd: pd.testing.assert_index_equal(node4.w, d_node4.w) pd.testing.assert_index_equal(node4.ww, d_node4.ww) pd.testing.assert_series_equal(node4.x, d_node4.x) pd.testing.assert_frame_equal(node4.y, d_node4.y) pd.testing.assert_index_equal(node4.z[0], d_node4.z[0]) pd.testing.assert_index_equal(node4.z[1], d_node4.z[1]) pd.testing.assert_series_equal(node4.z[2], d_node4.z[2]) pd.testing.assert_frame_equal(node4.z[3], d_node4.z[3]) with self.assertRaises(TypeError): node42 = Node4(j=Node6()) node42.serialize(jss) with self.assertRaises(TypeError): node6 = Node6() node7 = Node7(r=node6) node7.serialize(jss) with self.assertRaises(TypeError): node6 = Node6(nid=0) node7 = Node7(nid=1, rl=[node6]) node7.serialize(jss) node61 = Node6() node62 = Node6(r=node61) serial = node62.serialize(jss) d_node62 = Node6.deserialize(jss, serial) self.assertIsInstance(d_node62.r, Node6) node61 = Node6(nid=0) node62 = Node6(nid=0, rl=[node61]) serial = node62.serialize(jss) d_node62 = Node6.deserialize(jss, serial) self.assertIsInstance(d_node62.rl[0], Node6)
def testPBSerialize(self): provider = ProtobufSerializeProvider() node2 = Node2(a=[['ss'], ['dd']], data=[3, 7, 212]) node1 = Node1( a='test1', b1=-2, b2=2000, b3=-5000, b4=500000, c1=2, c2=2000, c3=5000, c4=500000, d1=2.5, d2=7.37, d3=5.976321, cl1=1 + 2j, cl2=2.5 + 3.1j, e=False, f=node2, g=Node2(a=[['1', '2'], ['3', '4']]), h=[[2, 3], node2, True, { 1: node2 }, np.datetime64('1066-10-13'), np.timedelta64(1, 'D'), np.complex64(1 + 2j), np.complex128(2 + 3j), lambda x: x + 2, pytz.timezone('Asia/Shanghai'), pd.arrays.IntervalArray([pd.Interval(0, 1), pd.Interval(1, 5)])], i=[Node8(b1=111), Node8(b1=222)], j=Node2(a=[['u'], ['v']]), k=[Node5(a='uvw'), Node8(b1=222, j=Node5(a='xyz')), None], l=lambda x: x + 1, m=pytz.timezone('Asia/Shanghai'), n=pd.arrays.IntervalArray([pd.Interval(0, 1), pd.Interval(1, 5)])) node3 = Node3(value=node1) serials = serializes(provider, [node2, node3]) d_node2, d_node3 = deserializes(provider, [Node2, Node3], serials) self.assertIsNot(node2, d_node2) self.assertEqual(node2.a, d_node2.a) self.assertEqual(node2.data, d_node2.data) self.assertIsNot(node3, d_node3) self.assertIsInstance(d_node3.value, Node8) self.assertIsNot(node3.value, d_node3.value) self.assertEqual(node3.value.a, d_node3.value.a) self.assertEqual(node3.value.b1, d_node3.value.b1) self.assertEqual(node3.value.b2, d_node3.value.b2) self.assertEqual(node3.value.b3, d_node3.value.b3) self.assertEqual(node3.value.b4, d_node3.value.b4) self.assertEqual(node3.value.c1, d_node3.value.c1) self.assertEqual(node3.value.c2, d_node3.value.c2) self.assertEqual(node3.value.c3, d_node3.value.c3) self.assertEqual(node3.value.c4, d_node3.value.c4) self.assertAlmostEqual(node3.value.d1, d_node3.value.d1, places=2) self.assertAlmostEqual(node3.value.d2, d_node3.value.d2, places=4) self.assertAlmostEqual(node3.value.d3, d_node3.value.d3) self.assertAlmostEqual(node3.value.cl1, d_node3.value.cl1) self.assertAlmostEqual(node3.value.cl2, d_node3.value.cl2) self.assertEqual(node3.value.e, d_node3.value.e) self.assertIsNot(node3.value.f, d_node3.value.f) self.assertEqual(node3.value.f.a, d_node3.value.f.a) self.assertIsNot(node3.value.g, d_node3.value.g) self.assertEqual(node3.value.g.a, d_node3.value.g.a) self.assertEqual(node3.value.h[0], d_node3.value.h[0]) self.assertNotIsInstance(d_node3.value.h[1], str) self.assertIs(d_node3.value.h[1], d_node3.value.f) self.assertEqual(node3.value.h[2], True) self.assertAlmostEqual(node3.value.h[6], d_node3.value.h[6]) self.assertAlmostEqual(node3.value.h[7], d_node3.value.h[7]) self.assertEqual(node3.value.h[8](2), 4) self.assertEqual(node3.value.h[9], d_node3.value.h[9]) np.testing.assert_array_equal(node3.value.h[10], d_node3.value.h[10]) self.assertEqual([n.b1 for n in node3.value.i], [n.b1 for n in d_node3.value.i]) self.assertIsInstance(d_node3.value.i[0], Node8) self.assertIsInstance(d_node3.value.j, Node2) self.assertEqual(node3.value.j.a, d_node3.value.j.a) self.assertIsInstance(d_node3.value.k[0], Node5) self.assertEqual(node3.value.k[0].a, d_node3.value.k[0].a) self.assertIsInstance(d_node3.value.k[1], Node8) self.assertEqual(node3.value.k[1].b1, d_node3.value.k[1].b1) self.assertIsInstance(d_node3.value.k[1].j, Node5) self.assertEqual(node3.value.k[1].j.a, d_node3.value.k[1].j.a) self.assertIsNone(node3.value.k[2]) self.assertEqual(d_node3.value.l(1), 2) self.assertEqual(d_node3.value.m, node3.value.m) np.testing.assert_array_equal(d_node3.value.n, node3.value.n) with self.assertRaises(ValueError): serializes(provider, [Node3(value='sth else')])
def testPBSerialize(self, *_): for serial_type in self._get_serial_types(): provider = ProtobufSerializeProvider( data_serial_type=serial_type, pickle_protocol=TEST_PICKLE_PROTOCOL) node2 = Node2(a=[['ss'], ['dd']], data=[3, 7, 212]) node1 = Node1( a='test1', b1=-2, b2=2000, b3=-5000, b4=500000, c1=2, c2=2000, c3=5000, c4=500000, d1=2.5, d2=7.37, d3=5.976321, cl1=1 + 2j, cl2=2.5 + 3.1j, e=False, f1=Node2Entity(node2), f2=Node2Entity(node2), g=Node2(a=[['1', '2'], ['3', '4']]), h=[[2, 3], node2, True, { 1: node2 }, np.datetime64('1066-10-13'), np.timedelta64(1, 'D'), np.complex64(1 + 2j), np.complex128(2 + 3j), lambda x: x + 2, pytz.timezone('Asia/Shanghai'), pd.arrays.IntervalArray( [pd.Interval(0, 1), pd.Interval(1, 5)])], i=[Node8(b1=111), Node8(b1=222)], j=Node2(a=[['u'], ['v']]), k=[Node5(a='uvw'), Node8(b1=222, j=Node5(a='xyz')), None], l=lambda x: x + 1, m=pytz.timezone('Asia/Shanghai'), n=pd.arrays.IntervalArray( [pd.Interval(0, 1), pd.Interval(1, 5)])) node3 = Node3(value=node1) serials = serializes(provider, [node2, node3]) loads_fun = _loads_with_check if serial_type == dataserializer.SerialType.PICKLE \ else original_pickle_loads with unittest.mock.patch('pickle.loads', new=loads_fun): d_node2, d_node3 = deserializes(provider, [Node2, Node3], serials) self.assertIsNot(node2, d_node2) self.assertEqual(node2.a, d_node2.a) self.assertEqual(node2.data, d_node2.data) self.assertIsNot(node3, d_node3) self.assertIsInstance(d_node3.value, Node8) self.assertIsNot(node3.value, d_node3.value) self.assertEqual(node3.value.a, d_node3.value.a) self.assertEqual(node3.value.b1, d_node3.value.b1) self.assertEqual(node3.value.b2, d_node3.value.b2) self.assertEqual(node3.value.b3, d_node3.value.b3) self.assertEqual(node3.value.b4, d_node3.value.b4) self.assertEqual(node3.value.c1, d_node3.value.c1) self.assertEqual(node3.value.c2, d_node3.value.c2) self.assertEqual(node3.value.c3, d_node3.value.c3) self.assertEqual(node3.value.c4, d_node3.value.c4) self.assertAlmostEqual(node3.value.d1, d_node3.value.d1, places=2) self.assertAlmostEqual(node3.value.d2, d_node3.value.d2, places=4) self.assertAlmostEqual(node3.value.d3, d_node3.value.d3) self.assertAlmostEqual(node3.value.cl1, d_node3.value.cl1) self.assertAlmostEqual(node3.value.cl2, d_node3.value.cl2) self.assertEqual(node3.value.e, d_node3.value.e) self.assertIsNot(node3.value.f1, d_node3.value.f1) self.assertEqual(node3.value.f1.a, d_node3.value.f1.a) self.assertIsNot(node3.value.f2, d_node3.value.f2) self.assertEqual(node3.value.f2.a, d_node3.value.f2.a) self.assertIsNot(node3.value.g, d_node3.value.g) self.assertEqual(node3.value.g.a, d_node3.value.g.a) self.assertEqual(node3.value.h[0], d_node3.value.h[0]) self.assertNotIsInstance(d_node3.value.h[1], str) self.assertIs(d_node3.value.h[1], d_node3.value.f1) self.assertEqual(node3.value.h[2], True) self.assertAlmostEqual(node3.value.h[6], d_node3.value.h[6]) self.assertAlmostEqual(node3.value.h[7], d_node3.value.h[7]) self.assertEqual(node3.value.h[8](2), 4) self.assertEqual(node3.value.h[9], d_node3.value.h[9]) np.testing.assert_array_equal(node3.value.h[10], d_node3.value.h[10]) self.assertEqual([n.b1 for n in node3.value.i], [n.b1 for n in d_node3.value.i]) self.assertIsInstance(d_node3.value.i[0], Node8) self.assertIsInstance(d_node3.value.j, Node2) self.assertEqual(node3.value.j.a, d_node3.value.j.a) self.assertIsInstance(d_node3.value.k[0], Node5) self.assertEqual(node3.value.k[0].a, d_node3.value.k[0].a) self.assertIsInstance(d_node3.value.k[1], Node8) self.assertEqual(node3.value.k[1].b1, d_node3.value.k[1].b1) self.assertIsInstance(d_node3.value.k[1].j, Node5) self.assertEqual(node3.value.k[1].j.a, d_node3.value.k[1].j.a) self.assertIsNone(node3.value.k[2]) self.assertEqual(d_node3.value.l(1), 2) self.assertEqual(d_node3.value.m, node3.value.m) np.testing.assert_array_equal(d_node3.value.n, node3.value.n) with self.assertRaises(ValueError): serializes(provider, [Node3(value='sth else')])