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