##// END OF EJS Templates
catch NotImplementedError when using isnan in test...
MinRK -
Show More
@@ -1,168 +1,168 b''
1 """test serialization tools"""
1 """test serialization tools"""
2
2
3 #-------------------------------------------------------------------------------
3 #-------------------------------------------------------------------------------
4 # Copyright (C) 2011 The IPython Development Team
4 # Copyright (C) 2011 The IPython Development Team
5 #
5 #
6 # Distributed under the terms of the BSD License. The full license is in
6 # Distributed under the terms of the BSD License. The full license is in
7 # the file COPYING, distributed as part of this software.
7 # the file COPYING, distributed as part of this software.
8 #-------------------------------------------------------------------------------
8 #-------------------------------------------------------------------------------
9
9
10 #-------------------------------------------------------------------------------
10 #-------------------------------------------------------------------------------
11 # Imports
11 # Imports
12 #-------------------------------------------------------------------------------
12 #-------------------------------------------------------------------------------
13
13
14 import pickle
14 import pickle
15
15
16 import nose.tools as nt
16 import nose.tools as nt
17
17
18 # from unittest import TestCaes
18 # from unittest import TestCaes
19 from IPython.zmq.serialize import serialize_object, unserialize_object
19 from IPython.zmq.serialize import serialize_object, unserialize_object
20 from IPython.testing import decorators as dec
20 from IPython.testing import decorators as dec
21 from IPython.utils.pickleutil import CannedArray
21 from IPython.utils.pickleutil import CannedArray
22
22
23 #-------------------------------------------------------------------------------
23 #-------------------------------------------------------------------------------
24 # Globals and Utilities
24 # Globals and Utilities
25 #-------------------------------------------------------------------------------
25 #-------------------------------------------------------------------------------
26
26
27 def roundtrip(obj):
27 def roundtrip(obj):
28 """roundtrip an object through serialization"""
28 """roundtrip an object through serialization"""
29 bufs = serialize_object(obj)
29 bufs = serialize_object(obj)
30 obj2, remainder = unserialize_object(bufs)
30 obj2, remainder = unserialize_object(bufs)
31 nt.assert_equals(remainder, [])
31 nt.assert_equals(remainder, [])
32 return obj2
32 return obj2
33
33
34 class C(object):
34 class C(object):
35 """dummy class for """
35 """dummy class for """
36
36
37 def __init__(self, **kwargs):
37 def __init__(self, **kwargs):
38 for key,value in kwargs.iteritems():
38 for key,value in kwargs.iteritems():
39 setattr(self, key, value)
39 setattr(self, key, value)
40
40
41 SHAPES = ((100,), (1024,10), (10,8,6,5), (), (0,))
41 SHAPES = ((100,), (1024,10), (10,8,6,5), (), (0,))
42 DTYPES = ('uint8', 'float64', 'int32', [('g', 'float32')], '|S10')
42 DTYPES = ('uint8', 'float64', 'int32', [('g', 'float32')], '|S10')
43 #-------------------------------------------------------------------------------
43 #-------------------------------------------------------------------------------
44 # Tests
44 # Tests
45 #-------------------------------------------------------------------------------
45 #-------------------------------------------------------------------------------
46
46
47 @dec.parametric
47 @dec.parametric
48 def test_roundtrip_simple():
48 def test_roundtrip_simple():
49 for obj in [
49 for obj in [
50 'hello',
50 'hello',
51 dict(a='b', b=10),
51 dict(a='b', b=10),
52 [1,2,'hi'],
52 [1,2,'hi'],
53 (b'123', 'hello'),
53 (b'123', 'hello'),
54 ]:
54 ]:
55 obj2 = roundtrip(obj)
55 obj2 = roundtrip(obj)
56 yield nt.assert_equals(obj, obj2)
56 yield nt.assert_equals(obj, obj2)
57
57
58 @dec.parametric
58 @dec.parametric
59 def test_roundtrip_nested():
59 def test_roundtrip_nested():
60 for obj in [
60 for obj in [
61 dict(a=range(5), b={1:b'hello'}),
61 dict(a=range(5), b={1:b'hello'}),
62 [range(5),[range(3),(1,[b'whoda'])]],
62 [range(5),[range(3),(1,[b'whoda'])]],
63 ]:
63 ]:
64 obj2 = roundtrip(obj)
64 obj2 = roundtrip(obj)
65 yield nt.assert_equals(obj, obj2)
65 yield nt.assert_equals(obj, obj2)
66
66
67 @dec.parametric
67 @dec.parametric
68 def test_roundtrip_buffered():
68 def test_roundtrip_buffered():
69 for obj in [
69 for obj in [
70 dict(a=b"x"*1025),
70 dict(a=b"x"*1025),
71 b"hello"*500,
71 b"hello"*500,
72 [b"hello"*501, 1,2,3]
72 [b"hello"*501, 1,2,3]
73 ]:
73 ]:
74 bufs = serialize_object(obj)
74 bufs = serialize_object(obj)
75 yield nt.assert_equals(len(bufs), 2)
75 yield nt.assert_equals(len(bufs), 2)
76 obj2, remainder = unserialize_object(bufs)
76 obj2, remainder = unserialize_object(bufs)
77 yield nt.assert_equals(remainder, [])
77 yield nt.assert_equals(remainder, [])
78 yield nt.assert_equals(obj, obj2)
78 yield nt.assert_equals(obj, obj2)
79
79
80 def _scrub_nan(A):
80 def _scrub_nan(A):
81 """scrub nans out of empty arrays
81 """scrub nans out of empty arrays
82
82
83 since nan != nan
83 since nan != nan
84 """
84 """
85 import numpy
85 import numpy
86 if A.dtype.fields and A.shape:
86 if A.dtype.fields and A.shape:
87 for field in A.dtype.fields.keys():
87 for field in A.dtype.fields.keys():
88 try:
88 try:
89 A[field][numpy.isnan(A[field])] = 0
89 A[field][numpy.isnan(A[field])] = 0
90 except TypeError:
90 except (TypeError, NotImplementedError):
91 # e.g. str dtype
91 # e.g. str dtype
92 pass
92 pass
93
93
94 @dec.parametric
94 @dec.parametric
95 @dec.skip_without('numpy')
95 @dec.skip_without('numpy')
96 def test_numpy():
96 def test_numpy():
97 import numpy
97 import numpy
98 from numpy.testing.utils import assert_array_equal
98 from numpy.testing.utils import assert_array_equal
99 for shape in SHAPES:
99 for shape in SHAPES:
100 for dtype in DTYPES:
100 for dtype in DTYPES:
101 A = numpy.empty(shape, dtype=dtype)
101 A = numpy.empty(shape, dtype=dtype)
102 _scrub_nan(A)
102 _scrub_nan(A)
103 bufs = serialize_object(A)
103 bufs = serialize_object(A)
104 B, r = unserialize_object(bufs)
104 B, r = unserialize_object(bufs)
105 yield nt.assert_equals(r, [])
105 yield nt.assert_equals(r, [])
106 yield nt.assert_equals(A.shape, B.shape)
106 yield nt.assert_equals(A.shape, B.shape)
107 yield nt.assert_equals(A.dtype, B.dtype)
107 yield nt.assert_equals(A.dtype, B.dtype)
108 yield assert_array_equal(A,B)
108 yield assert_array_equal(A,B)
109
109
110 @dec.parametric
110 @dec.parametric
111 @dec.skip_without('numpy')
111 @dec.skip_without('numpy')
112 def test_recarray():
112 def test_recarray():
113 import numpy
113 import numpy
114 from numpy.testing.utils import assert_array_equal
114 from numpy.testing.utils import assert_array_equal
115 for shape in SHAPES:
115 for shape in SHAPES:
116 for dtype in [
116 for dtype in [
117 [('f', float), ('s', '|S10')],
117 [('f', float), ('s', '|S10')],
118 [('n', int), ('s', '|S1'), ('u', 'uint32')],
118 [('n', int), ('s', '|S1'), ('u', 'uint32')],
119 ]:
119 ]:
120 A = numpy.empty(shape, dtype=dtype)
120 A = numpy.empty(shape, dtype=dtype)
121 _scrub_nan(A)
121 _scrub_nan(A)
122
122
123 bufs = serialize_object(A)
123 bufs = serialize_object(A)
124 B, r = unserialize_object(bufs)
124 B, r = unserialize_object(bufs)
125 yield nt.assert_equals(r, [])
125 yield nt.assert_equals(r, [])
126 yield nt.assert_equals(A.shape, B.shape)
126 yield nt.assert_equals(A.shape, B.shape)
127 yield nt.assert_equals(A.dtype, B.dtype)
127 yield nt.assert_equals(A.dtype, B.dtype)
128 yield assert_array_equal(A,B)
128 yield assert_array_equal(A,B)
129
129
130 @dec.parametric
130 @dec.parametric
131 @dec.skip_without('numpy')
131 @dec.skip_without('numpy')
132 def test_numpy_in_seq():
132 def test_numpy_in_seq():
133 import numpy
133 import numpy
134 from numpy.testing.utils import assert_array_equal
134 from numpy.testing.utils import assert_array_equal
135 for shape in SHAPES:
135 for shape in SHAPES:
136 for dtype in DTYPES:
136 for dtype in DTYPES:
137 A = numpy.empty(shape, dtype=dtype)
137 A = numpy.empty(shape, dtype=dtype)
138 _scrub_nan(A)
138 _scrub_nan(A)
139 bufs = serialize_object((A,1,2,b'hello'))
139 bufs = serialize_object((A,1,2,b'hello'))
140 canned = pickle.loads(bufs[0])
140 canned = pickle.loads(bufs[0])
141 yield nt.assert_true(canned[0], CannedArray)
141 yield nt.assert_true(canned[0], CannedArray)
142 tup, r = unserialize_object(bufs)
142 tup, r = unserialize_object(bufs)
143 B = tup[0]
143 B = tup[0]
144 yield nt.assert_equals(r, [])
144 yield nt.assert_equals(r, [])
145 yield nt.assert_equals(A.shape, B.shape)
145 yield nt.assert_equals(A.shape, B.shape)
146 yield nt.assert_equals(A.dtype, B.dtype)
146 yield nt.assert_equals(A.dtype, B.dtype)
147 yield assert_array_equal(A,B)
147 yield assert_array_equal(A,B)
148
148
149 @dec.parametric
149 @dec.parametric
150 @dec.skip_without('numpy')
150 @dec.skip_without('numpy')
151 def test_numpy_in_dict():
151 def test_numpy_in_dict():
152 import numpy
152 import numpy
153 from numpy.testing.utils import assert_array_equal
153 from numpy.testing.utils import assert_array_equal
154 for shape in SHAPES:
154 for shape in SHAPES:
155 for dtype in DTYPES:
155 for dtype in DTYPES:
156 A = numpy.empty(shape, dtype=dtype)
156 A = numpy.empty(shape, dtype=dtype)
157 _scrub_nan(A)
157 _scrub_nan(A)
158 bufs = serialize_object(dict(a=A,b=1,c=range(20)))
158 bufs = serialize_object(dict(a=A,b=1,c=range(20)))
159 canned = pickle.loads(bufs[0])
159 canned = pickle.loads(bufs[0])
160 yield nt.assert_true(canned['a'], CannedArray)
160 yield nt.assert_true(canned['a'], CannedArray)
161 d, r = unserialize_object(bufs)
161 d, r = unserialize_object(bufs)
162 B = d['a']
162 B = d['a']
163 yield nt.assert_equals(r, [])
163 yield nt.assert_equals(r, [])
164 yield nt.assert_equals(A.shape, B.shape)
164 yield nt.assert_equals(A.shape, B.shape)
165 yield nt.assert_equals(A.dtype, B.dtype)
165 yield nt.assert_equals(A.dtype, B.dtype)
166 yield assert_array_equal(A,B)
166 yield assert_array_equal(A,B)
167
167
168
168
General Comments 0
You need to be logged in to leave comments. Login now