Chris@87
|
1 from __future__ import division, absolute_import, print_function
|
Chris@87
|
2
|
Chris@87
|
3 import warnings
|
Chris@87
|
4 import sys
|
Chris@87
|
5
|
Chris@87
|
6 import numpy as np
|
Chris@87
|
7 from numpy.testing import *
|
Chris@87
|
8 import unittest
|
Chris@87
|
9
|
Chris@87
|
10 class _GenericTest(object):
|
Chris@87
|
11 def _test_equal(self, a, b):
|
Chris@87
|
12 self._assert_func(a, b)
|
Chris@87
|
13
|
Chris@87
|
14 def _test_not_equal(self, a, b):
|
Chris@87
|
15 try:
|
Chris@87
|
16 self._assert_func(a, b)
|
Chris@87
|
17 passed = True
|
Chris@87
|
18 except AssertionError:
|
Chris@87
|
19 pass
|
Chris@87
|
20 else:
|
Chris@87
|
21 raise AssertionError("a and b are found equal but are not")
|
Chris@87
|
22
|
Chris@87
|
23 def test_array_rank1_eq(self):
|
Chris@87
|
24 """Test two equal array of rank 1 are found equal."""
|
Chris@87
|
25 a = np.array([1, 2])
|
Chris@87
|
26 b = np.array([1, 2])
|
Chris@87
|
27
|
Chris@87
|
28 self._test_equal(a, b)
|
Chris@87
|
29
|
Chris@87
|
30 def test_array_rank1_noteq(self):
|
Chris@87
|
31 """Test two different array of rank 1 are found not equal."""
|
Chris@87
|
32 a = np.array([1, 2])
|
Chris@87
|
33 b = np.array([2, 2])
|
Chris@87
|
34
|
Chris@87
|
35 self._test_not_equal(a, b)
|
Chris@87
|
36
|
Chris@87
|
37 def test_array_rank2_eq(self):
|
Chris@87
|
38 """Test two equal array of rank 2 are found equal."""
|
Chris@87
|
39 a = np.array([[1, 2], [3, 4]])
|
Chris@87
|
40 b = np.array([[1, 2], [3, 4]])
|
Chris@87
|
41
|
Chris@87
|
42 self._test_equal(a, b)
|
Chris@87
|
43
|
Chris@87
|
44 def test_array_diffshape(self):
|
Chris@87
|
45 """Test two arrays with different shapes are found not equal."""
|
Chris@87
|
46 a = np.array([1, 2])
|
Chris@87
|
47 b = np.array([[1, 2], [1, 2]])
|
Chris@87
|
48
|
Chris@87
|
49 self._test_not_equal(a, b)
|
Chris@87
|
50
|
Chris@87
|
51 def test_objarray(self):
|
Chris@87
|
52 """Test object arrays."""
|
Chris@87
|
53 a = np.array([1, 1], dtype=np.object)
|
Chris@87
|
54 self._test_equal(a, 1)
|
Chris@87
|
55
|
Chris@87
|
56 def test_array_likes(self):
|
Chris@87
|
57 self._test_equal([1, 2, 3], (1, 2, 3))
|
Chris@87
|
58
|
Chris@87
|
59 class TestArrayEqual(_GenericTest, unittest.TestCase):
|
Chris@87
|
60 def setUp(self):
|
Chris@87
|
61 self._assert_func = assert_array_equal
|
Chris@87
|
62
|
Chris@87
|
63 def test_generic_rank1(self):
|
Chris@87
|
64 """Test rank 1 array for all dtypes."""
|
Chris@87
|
65 def foo(t):
|
Chris@87
|
66 a = np.empty(2, t)
|
Chris@87
|
67 a.fill(1)
|
Chris@87
|
68 b = a.copy()
|
Chris@87
|
69 c = a.copy()
|
Chris@87
|
70 c.fill(0)
|
Chris@87
|
71 self._test_equal(a, b)
|
Chris@87
|
72 self._test_not_equal(c, b)
|
Chris@87
|
73
|
Chris@87
|
74 # Test numeric types and object
|
Chris@87
|
75 for t in '?bhilqpBHILQPfdgFDG':
|
Chris@87
|
76 foo(t)
|
Chris@87
|
77
|
Chris@87
|
78 # Test strings
|
Chris@87
|
79 for t in ['S1', 'U1']:
|
Chris@87
|
80 foo(t)
|
Chris@87
|
81
|
Chris@87
|
82 def test_generic_rank3(self):
|
Chris@87
|
83 """Test rank 3 array for all dtypes."""
|
Chris@87
|
84 def foo(t):
|
Chris@87
|
85 a = np.empty((4, 2, 3), t)
|
Chris@87
|
86 a.fill(1)
|
Chris@87
|
87 b = a.copy()
|
Chris@87
|
88 c = a.copy()
|
Chris@87
|
89 c.fill(0)
|
Chris@87
|
90 self._test_equal(a, b)
|
Chris@87
|
91 self._test_not_equal(c, b)
|
Chris@87
|
92
|
Chris@87
|
93 # Test numeric types and object
|
Chris@87
|
94 for t in '?bhilqpBHILQPfdgFDG':
|
Chris@87
|
95 foo(t)
|
Chris@87
|
96
|
Chris@87
|
97 # Test strings
|
Chris@87
|
98 for t in ['S1', 'U1']:
|
Chris@87
|
99 foo(t)
|
Chris@87
|
100
|
Chris@87
|
101 def test_nan_array(self):
|
Chris@87
|
102 """Test arrays with nan values in them."""
|
Chris@87
|
103 a = np.array([1, 2, np.nan])
|
Chris@87
|
104 b = np.array([1, 2, np.nan])
|
Chris@87
|
105
|
Chris@87
|
106 self._test_equal(a, b)
|
Chris@87
|
107
|
Chris@87
|
108 c = np.array([1, 2, 3])
|
Chris@87
|
109 self._test_not_equal(c, b)
|
Chris@87
|
110
|
Chris@87
|
111 def test_string_arrays(self):
|
Chris@87
|
112 """Test two arrays with different shapes are found not equal."""
|
Chris@87
|
113 a = np.array(['floupi', 'floupa'])
|
Chris@87
|
114 b = np.array(['floupi', 'floupa'])
|
Chris@87
|
115
|
Chris@87
|
116 self._test_equal(a, b)
|
Chris@87
|
117
|
Chris@87
|
118 c = np.array(['floupipi', 'floupa'])
|
Chris@87
|
119
|
Chris@87
|
120 self._test_not_equal(c, b)
|
Chris@87
|
121
|
Chris@87
|
122 def test_recarrays(self):
|
Chris@87
|
123 """Test record arrays."""
|
Chris@87
|
124 a = np.empty(2, [('floupi', np.float), ('floupa', np.float)])
|
Chris@87
|
125 a['floupi'] = [1, 2]
|
Chris@87
|
126 a['floupa'] = [1, 2]
|
Chris@87
|
127 b = a.copy()
|
Chris@87
|
128
|
Chris@87
|
129 self._test_equal(a, b)
|
Chris@87
|
130
|
Chris@87
|
131 c = np.empty(2, [('floupipi', np.float), ('floupa', np.float)])
|
Chris@87
|
132 c['floupipi'] = a['floupi'].copy()
|
Chris@87
|
133 c['floupa'] = a['floupa'].copy()
|
Chris@87
|
134
|
Chris@87
|
135 self._test_not_equal(c, b)
|
Chris@87
|
136
|
Chris@87
|
137 class TestBuildErrorMessage(unittest.TestCase):
|
Chris@87
|
138 def test_build_err_msg_defaults(self):
|
Chris@87
|
139 x = np.array([1.00001, 2.00002, 3.00003])
|
Chris@87
|
140 y = np.array([1.00002, 2.00003, 3.00004])
|
Chris@87
|
141 err_msg = 'There is a mismatch'
|
Chris@87
|
142
|
Chris@87
|
143 a = build_err_msg([x, y], err_msg)
|
Chris@87
|
144 b = ('\nItems are not equal: There is a mismatch\n ACTUAL: array([ '
|
Chris@87
|
145 '1.00001, 2.00002, 3.00003])\n DESIRED: array([ 1.00002, '
|
Chris@87
|
146 '2.00003, 3.00004])')
|
Chris@87
|
147 self.assertEqual(a, b)
|
Chris@87
|
148
|
Chris@87
|
149 def test_build_err_msg_no_verbose(self):
|
Chris@87
|
150 x = np.array([1.00001, 2.00002, 3.00003])
|
Chris@87
|
151 y = np.array([1.00002, 2.00003, 3.00004])
|
Chris@87
|
152 err_msg = 'There is a mismatch'
|
Chris@87
|
153
|
Chris@87
|
154 a = build_err_msg([x, y], err_msg, verbose=False)
|
Chris@87
|
155 b = '\nItems are not equal: There is a mismatch'
|
Chris@87
|
156 self.assertEqual(a, b)
|
Chris@87
|
157
|
Chris@87
|
158 def test_build_err_msg_custom_names(self):
|
Chris@87
|
159 x = np.array([1.00001, 2.00002, 3.00003])
|
Chris@87
|
160 y = np.array([1.00002, 2.00003, 3.00004])
|
Chris@87
|
161 err_msg = 'There is a mismatch'
|
Chris@87
|
162
|
Chris@87
|
163 a = build_err_msg([x, y], err_msg, names=('FOO', 'BAR'))
|
Chris@87
|
164 b = ('\nItems are not equal: There is a mismatch\n FOO: array([ '
|
Chris@87
|
165 '1.00001, 2.00002, 3.00003])\n BAR: array([ 1.00002, 2.00003, '
|
Chris@87
|
166 '3.00004])')
|
Chris@87
|
167 self.assertEqual(a, b)
|
Chris@87
|
168
|
Chris@87
|
169 def test_build_err_msg_custom_precision(self):
|
Chris@87
|
170 x = np.array([1.000000001, 2.00002, 3.00003])
|
Chris@87
|
171 y = np.array([1.000000002, 2.00003, 3.00004])
|
Chris@87
|
172 err_msg = 'There is a mismatch'
|
Chris@87
|
173
|
Chris@87
|
174 a = build_err_msg([x, y], err_msg, precision=10)
|
Chris@87
|
175 b = ('\nItems are not equal: There is a mismatch\n ACTUAL: array([ '
|
Chris@87
|
176 '1.000000001, 2.00002 , 3.00003 ])\n DESIRED: array([ '
|
Chris@87
|
177 '1.000000002, 2.00003 , 3.00004 ])')
|
Chris@87
|
178 self.assertEqual(a, b)
|
Chris@87
|
179
|
Chris@87
|
180 class TestEqual(TestArrayEqual):
|
Chris@87
|
181 def setUp(self):
|
Chris@87
|
182 self._assert_func = assert_equal
|
Chris@87
|
183
|
Chris@87
|
184 def test_nan_items(self):
|
Chris@87
|
185 self._assert_func(np.nan, np.nan)
|
Chris@87
|
186 self._assert_func([np.nan], [np.nan])
|
Chris@87
|
187 self._test_not_equal(np.nan, [np.nan])
|
Chris@87
|
188 self._test_not_equal(np.nan, 1)
|
Chris@87
|
189
|
Chris@87
|
190 def test_inf_items(self):
|
Chris@87
|
191 self._assert_func(np.inf, np.inf)
|
Chris@87
|
192 self._assert_func([np.inf], [np.inf])
|
Chris@87
|
193 self._test_not_equal(np.inf, [np.inf])
|
Chris@87
|
194
|
Chris@87
|
195 def test_non_numeric(self):
|
Chris@87
|
196 self._assert_func('ab', 'ab')
|
Chris@87
|
197 self._test_not_equal('ab', 'abb')
|
Chris@87
|
198
|
Chris@87
|
199 def test_complex_item(self):
|
Chris@87
|
200 self._assert_func(complex(1, 2), complex(1, 2))
|
Chris@87
|
201 self._assert_func(complex(1, np.nan), complex(1, np.nan))
|
Chris@87
|
202 self._test_not_equal(complex(1, np.nan), complex(1, 2))
|
Chris@87
|
203 self._test_not_equal(complex(np.nan, 1), complex(1, np.nan))
|
Chris@87
|
204 self._test_not_equal(complex(np.nan, np.inf), complex(np.nan, 2))
|
Chris@87
|
205
|
Chris@87
|
206 def test_negative_zero(self):
|
Chris@87
|
207 self._test_not_equal(np.PZERO, np.NZERO)
|
Chris@87
|
208
|
Chris@87
|
209 def test_complex(self):
|
Chris@87
|
210 x = np.array([complex(1, 2), complex(1, np.nan)])
|
Chris@87
|
211 y = np.array([complex(1, 2), complex(1, 2)])
|
Chris@87
|
212 self._assert_func(x, x)
|
Chris@87
|
213 self._test_not_equal(x, y)
|
Chris@87
|
214
|
Chris@87
|
215 class TestArrayAlmostEqual(_GenericTest, unittest.TestCase):
|
Chris@87
|
216 def setUp(self):
|
Chris@87
|
217 self._assert_func = assert_array_almost_equal
|
Chris@87
|
218
|
Chris@87
|
219 def test_simple(self):
|
Chris@87
|
220 x = np.array([1234.2222])
|
Chris@87
|
221 y = np.array([1234.2223])
|
Chris@87
|
222
|
Chris@87
|
223 self._assert_func(x, y, decimal=3)
|
Chris@87
|
224 self._assert_func(x, y, decimal=4)
|
Chris@87
|
225 self.assertRaises(AssertionError,
|
Chris@87
|
226 lambda: self._assert_func(x, y, decimal=5))
|
Chris@87
|
227
|
Chris@87
|
228 def test_nan(self):
|
Chris@87
|
229 anan = np.array([np.nan])
|
Chris@87
|
230 aone = np.array([1])
|
Chris@87
|
231 ainf = np.array([np.inf])
|
Chris@87
|
232 self._assert_func(anan, anan)
|
Chris@87
|
233 self.assertRaises(AssertionError,
|
Chris@87
|
234 lambda : self._assert_func(anan, aone))
|
Chris@87
|
235 self.assertRaises(AssertionError,
|
Chris@87
|
236 lambda : self._assert_func(anan, ainf))
|
Chris@87
|
237 self.assertRaises(AssertionError,
|
Chris@87
|
238 lambda : self._assert_func(ainf, anan))
|
Chris@87
|
239
|
Chris@87
|
240 def test_inf(self):
|
Chris@87
|
241 a = np.array([[1., 2.], [3., 4.]])
|
Chris@87
|
242 b = a.copy()
|
Chris@87
|
243 a[0, 0] = np.inf
|
Chris@87
|
244 self.assertRaises(AssertionError,
|
Chris@87
|
245 lambda : self._assert_func(a, b))
|
Chris@87
|
246
|
Chris@87
|
247 def test_subclass(self):
|
Chris@87
|
248 a = np.array([[1., 2.], [3., 4.]])
|
Chris@87
|
249 b = np.ma.masked_array([[1., 2.], [0., 4.]],
|
Chris@87
|
250 [[False, False], [True, False]])
|
Chris@87
|
251 assert_array_almost_equal(a, b)
|
Chris@87
|
252 assert_array_almost_equal(b, a)
|
Chris@87
|
253 assert_array_almost_equal(b, b)
|
Chris@87
|
254
|
Chris@87
|
255 class TestAlmostEqual(_GenericTest, unittest.TestCase):
|
Chris@87
|
256 def setUp(self):
|
Chris@87
|
257 self._assert_func = assert_almost_equal
|
Chris@87
|
258
|
Chris@87
|
259 def test_nan_item(self):
|
Chris@87
|
260 self._assert_func(np.nan, np.nan)
|
Chris@87
|
261 self.assertRaises(AssertionError,
|
Chris@87
|
262 lambda : self._assert_func(np.nan, 1))
|
Chris@87
|
263 self.assertRaises(AssertionError,
|
Chris@87
|
264 lambda : self._assert_func(np.nan, np.inf))
|
Chris@87
|
265 self.assertRaises(AssertionError,
|
Chris@87
|
266 lambda : self._assert_func(np.inf, np.nan))
|
Chris@87
|
267
|
Chris@87
|
268 def test_inf_item(self):
|
Chris@87
|
269 self._assert_func(np.inf, np.inf)
|
Chris@87
|
270 self._assert_func(-np.inf, -np.inf)
|
Chris@87
|
271 self.assertRaises(AssertionError,
|
Chris@87
|
272 lambda : self._assert_func(np.inf, 1))
|
Chris@87
|
273
|
Chris@87
|
274 def test_simple_item(self):
|
Chris@87
|
275 self._test_not_equal(1, 2)
|
Chris@87
|
276
|
Chris@87
|
277 def test_complex_item(self):
|
Chris@87
|
278 self._assert_func(complex(1, 2), complex(1, 2))
|
Chris@87
|
279 self._assert_func(complex(1, np.nan), complex(1, np.nan))
|
Chris@87
|
280 self._assert_func(complex(np.inf, np.nan), complex(np.inf, np.nan))
|
Chris@87
|
281 self._test_not_equal(complex(1, np.nan), complex(1, 2))
|
Chris@87
|
282 self._test_not_equal(complex(np.nan, 1), complex(1, np.nan))
|
Chris@87
|
283 self._test_not_equal(complex(np.nan, np.inf), complex(np.nan, 2))
|
Chris@87
|
284
|
Chris@87
|
285 def test_complex(self):
|
Chris@87
|
286 x = np.array([complex(1, 2), complex(1, np.nan)])
|
Chris@87
|
287 z = np.array([complex(1, 2), complex(np.nan, 1)])
|
Chris@87
|
288 y = np.array([complex(1, 2), complex(1, 2)])
|
Chris@87
|
289 self._assert_func(x, x)
|
Chris@87
|
290 self._test_not_equal(x, y)
|
Chris@87
|
291 self._test_not_equal(x, z)
|
Chris@87
|
292
|
Chris@87
|
293 def test_error_message(self):
|
Chris@87
|
294 """Check the message is formatted correctly for the decimal value"""
|
Chris@87
|
295 x = np.array([1.00000000001, 2.00000000002, 3.00003])
|
Chris@87
|
296 y = np.array([1.00000000002, 2.00000000003, 3.00004])
|
Chris@87
|
297
|
Chris@87
|
298 # test with a different amount of decimal digits
|
Chris@87
|
299 # note that we only check for the formatting of the arrays themselves
|
Chris@87
|
300 b = ('x: array([ 1.00000000001, 2.00000000002, 3.00003 '
|
Chris@87
|
301 ' ])\n y: array([ 1.00000000002, 2.00000000003, 3.00004 ])')
|
Chris@87
|
302 try:
|
Chris@87
|
303 self._assert_func(x, y, decimal=12)
|
Chris@87
|
304 except AssertionError as e:
|
Chris@87
|
305 # remove anything that's not the array string
|
Chris@87
|
306 self.assertEqual(str(e).split('%)\n ')[1], b)
|
Chris@87
|
307
|
Chris@87
|
308 # with the default value of decimal digits, only the 3rd element differs
|
Chris@87
|
309 # note that we only check for the formatting of the arrays themselves
|
Chris@87
|
310 b = ('x: array([ 1. , 2. , 3.00003])\n y: array([ 1. , '
|
Chris@87
|
311 '2. , 3.00004])')
|
Chris@87
|
312 try:
|
Chris@87
|
313 self._assert_func(x, y)
|
Chris@87
|
314 except AssertionError as e:
|
Chris@87
|
315 # remove anything that's not the array string
|
Chris@87
|
316 self.assertEqual(str(e).split('%)\n ')[1], b)
|
Chris@87
|
317
|
Chris@87
|
318 class TestApproxEqual(unittest.TestCase):
|
Chris@87
|
319 def setUp(self):
|
Chris@87
|
320 self._assert_func = assert_approx_equal
|
Chris@87
|
321
|
Chris@87
|
322 def test_simple_arrays(self):
|
Chris@87
|
323 x = np.array([1234.22])
|
Chris@87
|
324 y = np.array([1234.23])
|
Chris@87
|
325
|
Chris@87
|
326 self._assert_func(x, y, significant=5)
|
Chris@87
|
327 self._assert_func(x, y, significant=6)
|
Chris@87
|
328 self.assertRaises(AssertionError,
|
Chris@87
|
329 lambda: self._assert_func(x, y, significant=7))
|
Chris@87
|
330
|
Chris@87
|
331 def test_simple_items(self):
|
Chris@87
|
332 x = 1234.22
|
Chris@87
|
333 y = 1234.23
|
Chris@87
|
334
|
Chris@87
|
335 self._assert_func(x, y, significant=4)
|
Chris@87
|
336 self._assert_func(x, y, significant=5)
|
Chris@87
|
337 self._assert_func(x, y, significant=6)
|
Chris@87
|
338 self.assertRaises(AssertionError,
|
Chris@87
|
339 lambda: self._assert_func(x, y, significant=7))
|
Chris@87
|
340
|
Chris@87
|
341 def test_nan_array(self):
|
Chris@87
|
342 anan = np.array(np.nan)
|
Chris@87
|
343 aone = np.array(1)
|
Chris@87
|
344 ainf = np.array(np.inf)
|
Chris@87
|
345 self._assert_func(anan, anan)
|
Chris@87
|
346 self.assertRaises(AssertionError,
|
Chris@87
|
347 lambda : self._assert_func(anan, aone))
|
Chris@87
|
348 self.assertRaises(AssertionError,
|
Chris@87
|
349 lambda : self._assert_func(anan, ainf))
|
Chris@87
|
350 self.assertRaises(AssertionError,
|
Chris@87
|
351 lambda : self._assert_func(ainf, anan))
|
Chris@87
|
352
|
Chris@87
|
353 def test_nan_items(self):
|
Chris@87
|
354 anan = np.array(np.nan)
|
Chris@87
|
355 aone = np.array(1)
|
Chris@87
|
356 ainf = np.array(np.inf)
|
Chris@87
|
357 self._assert_func(anan, anan)
|
Chris@87
|
358 self.assertRaises(AssertionError,
|
Chris@87
|
359 lambda : self._assert_func(anan, aone))
|
Chris@87
|
360 self.assertRaises(AssertionError,
|
Chris@87
|
361 lambda : self._assert_func(anan, ainf))
|
Chris@87
|
362 self.assertRaises(AssertionError,
|
Chris@87
|
363 lambda : self._assert_func(ainf, anan))
|
Chris@87
|
364
|
Chris@87
|
365 class TestRaises(unittest.TestCase):
|
Chris@87
|
366 def setUp(self):
|
Chris@87
|
367 class MyException(Exception):
|
Chris@87
|
368 pass
|
Chris@87
|
369
|
Chris@87
|
370 self.e = MyException
|
Chris@87
|
371
|
Chris@87
|
372 def raises_exception(self, e):
|
Chris@87
|
373 raise e
|
Chris@87
|
374
|
Chris@87
|
375 def does_not_raise_exception(self):
|
Chris@87
|
376 pass
|
Chris@87
|
377
|
Chris@87
|
378 def test_correct_catch(self):
|
Chris@87
|
379 f = raises(self.e)(self.raises_exception)(self.e)
|
Chris@87
|
380
|
Chris@87
|
381 def test_wrong_exception(self):
|
Chris@87
|
382 try:
|
Chris@87
|
383 f = raises(self.e)(self.raises_exception)(RuntimeError)
|
Chris@87
|
384 except RuntimeError:
|
Chris@87
|
385 return
|
Chris@87
|
386 else:
|
Chris@87
|
387 raise AssertionError("should have caught RuntimeError")
|
Chris@87
|
388
|
Chris@87
|
389 def test_catch_no_raise(self):
|
Chris@87
|
390 try:
|
Chris@87
|
391 f = raises(self.e)(self.does_not_raise_exception)()
|
Chris@87
|
392 except AssertionError:
|
Chris@87
|
393 return
|
Chris@87
|
394 else:
|
Chris@87
|
395 raise AssertionError("should have raised an AssertionError")
|
Chris@87
|
396
|
Chris@87
|
397 class TestWarns(unittest.TestCase):
|
Chris@87
|
398 def test_warn(self):
|
Chris@87
|
399 def f():
|
Chris@87
|
400 warnings.warn("yo")
|
Chris@87
|
401 return 3
|
Chris@87
|
402
|
Chris@87
|
403 before_filters = sys.modules['warnings'].filters[:]
|
Chris@87
|
404 assert_equal(assert_warns(UserWarning, f), 3)
|
Chris@87
|
405 after_filters = sys.modules['warnings'].filters
|
Chris@87
|
406
|
Chris@87
|
407 assert_raises(AssertionError, assert_no_warnings, f)
|
Chris@87
|
408 assert_equal(assert_no_warnings(lambda x: x, 1), 1)
|
Chris@87
|
409
|
Chris@87
|
410 # Check that the warnings state is unchanged
|
Chris@87
|
411 assert_equal(before_filters, after_filters,
|
Chris@87
|
412 "assert_warns does not preserver warnings state")
|
Chris@87
|
413
|
Chris@87
|
414 def test_warn_wrong_warning(self):
|
Chris@87
|
415 def f():
|
Chris@87
|
416 warnings.warn("yo", DeprecationWarning)
|
Chris@87
|
417
|
Chris@87
|
418 failed = False
|
Chris@87
|
419 filters = sys.modules['warnings'].filters[:]
|
Chris@87
|
420 try:
|
Chris@87
|
421 try:
|
Chris@87
|
422 # Should raise an AssertionError
|
Chris@87
|
423 assert_warns(UserWarning, f)
|
Chris@87
|
424 failed = True
|
Chris@87
|
425 except AssertionError:
|
Chris@87
|
426 pass
|
Chris@87
|
427 finally:
|
Chris@87
|
428 sys.modules['warnings'].filters = filters
|
Chris@87
|
429
|
Chris@87
|
430 if failed:
|
Chris@87
|
431 raise AssertionError("wrong warning caught by assert_warn")
|
Chris@87
|
432
|
Chris@87
|
433 class TestAssertAllclose(unittest.TestCase):
|
Chris@87
|
434 def test_simple(self):
|
Chris@87
|
435 x = 1e-3
|
Chris@87
|
436 y = 1e-9
|
Chris@87
|
437
|
Chris@87
|
438 assert_allclose(x, y, atol=1)
|
Chris@87
|
439 self.assertRaises(AssertionError, assert_allclose, x, y)
|
Chris@87
|
440
|
Chris@87
|
441 a = np.array([x, y, x, y])
|
Chris@87
|
442 b = np.array([x, y, x, x])
|
Chris@87
|
443
|
Chris@87
|
444 assert_allclose(a, b, atol=1)
|
Chris@87
|
445 self.assertRaises(AssertionError, assert_allclose, a, b)
|
Chris@87
|
446
|
Chris@87
|
447 b[-1] = y * (1 + 1e-8)
|
Chris@87
|
448 assert_allclose(a, b)
|
Chris@87
|
449 self.assertRaises(AssertionError, assert_allclose, a, b,
|
Chris@87
|
450 rtol=1e-9)
|
Chris@87
|
451
|
Chris@87
|
452 assert_allclose(6, 10, rtol=0.5)
|
Chris@87
|
453 self.assertRaises(AssertionError, assert_allclose, 10, 6, rtol=0.5)
|
Chris@87
|
454
|
Chris@87
|
455 def test_min_int(self):
|
Chris@87
|
456 a = np.array([np.iinfo(np.int_).min], dtype=np.int_)
|
Chris@87
|
457 # Should not raise:
|
Chris@87
|
458 assert_allclose(a, a)
|
Chris@87
|
459
|
Chris@87
|
460
|
Chris@87
|
461 class TestArrayAlmostEqualNulp(unittest.TestCase):
|
Chris@87
|
462 @dec.knownfailureif(True, "Github issue #347")
|
Chris@87
|
463 def test_simple(self):
|
Chris@87
|
464 np.random.seed(12345)
|
Chris@87
|
465 for i in range(100):
|
Chris@87
|
466 dev = np.random.randn(10)
|
Chris@87
|
467 x = np.ones(10)
|
Chris@87
|
468 y = x + dev * np.finfo(np.float64).eps
|
Chris@87
|
469 assert_array_almost_equal_nulp(x, y, nulp=2 * np.max(dev))
|
Chris@87
|
470
|
Chris@87
|
471 def test_simple2(self):
|
Chris@87
|
472 x = np.random.randn(10)
|
Chris@87
|
473 y = 2 * x
|
Chris@87
|
474 def failure():
|
Chris@87
|
475 return assert_array_almost_equal_nulp(x, y,
|
Chris@87
|
476 nulp=1000)
|
Chris@87
|
477 self.assertRaises(AssertionError, failure)
|
Chris@87
|
478
|
Chris@87
|
479 def test_big_float32(self):
|
Chris@87
|
480 x = (1e10 * np.random.randn(10)).astype(np.float32)
|
Chris@87
|
481 y = x + 1
|
Chris@87
|
482 assert_array_almost_equal_nulp(x, y, nulp=1000)
|
Chris@87
|
483
|
Chris@87
|
484 def test_big_float64(self):
|
Chris@87
|
485 x = 1e10 * np.random.randn(10)
|
Chris@87
|
486 y = x + 1
|
Chris@87
|
487 def failure():
|
Chris@87
|
488 assert_array_almost_equal_nulp(x, y, nulp=1000)
|
Chris@87
|
489 self.assertRaises(AssertionError, failure)
|
Chris@87
|
490
|
Chris@87
|
491 def test_complex(self):
|
Chris@87
|
492 x = np.random.randn(10) + 1j * np.random.randn(10)
|
Chris@87
|
493 y = x + 1
|
Chris@87
|
494 def failure():
|
Chris@87
|
495 assert_array_almost_equal_nulp(x, y, nulp=1000)
|
Chris@87
|
496 self.assertRaises(AssertionError, failure)
|
Chris@87
|
497
|
Chris@87
|
498 def test_complex2(self):
|
Chris@87
|
499 x = np.random.randn(10)
|
Chris@87
|
500 y = np.array(x, np.complex) + 1e-16 * np.random.randn(10)
|
Chris@87
|
501
|
Chris@87
|
502 assert_array_almost_equal_nulp(x, y, nulp=1000)
|
Chris@87
|
503
|
Chris@87
|
504 class TestULP(unittest.TestCase):
|
Chris@87
|
505 def test_equal(self):
|
Chris@87
|
506 x = np.random.randn(10)
|
Chris@87
|
507 assert_array_max_ulp(x, x, maxulp=0)
|
Chris@87
|
508
|
Chris@87
|
509 def test_single(self):
|
Chris@87
|
510 # Generate 1 + small deviation, check that adding eps gives a few UNL
|
Chris@87
|
511 x = np.ones(10).astype(np.float32)
|
Chris@87
|
512 x += 0.01 * np.random.randn(10).astype(np.float32)
|
Chris@87
|
513 eps = np.finfo(np.float32).eps
|
Chris@87
|
514 assert_array_max_ulp(x, x+eps, maxulp=20)
|
Chris@87
|
515
|
Chris@87
|
516 def test_double(self):
|
Chris@87
|
517 # Generate 1 + small deviation, check that adding eps gives a few UNL
|
Chris@87
|
518 x = np.ones(10).astype(np.float64)
|
Chris@87
|
519 x += 0.01 * np.random.randn(10).astype(np.float64)
|
Chris@87
|
520 eps = np.finfo(np.float64).eps
|
Chris@87
|
521 assert_array_max_ulp(x, x+eps, maxulp=200)
|
Chris@87
|
522
|
Chris@87
|
523 def test_inf(self):
|
Chris@87
|
524 for dt in [np.float32, np.float64]:
|
Chris@87
|
525 inf = np.array([np.inf]).astype(dt)
|
Chris@87
|
526 big = np.array([np.finfo(dt).max])
|
Chris@87
|
527 assert_array_max_ulp(inf, big, maxulp=200)
|
Chris@87
|
528
|
Chris@87
|
529 def test_nan(self):
|
Chris@87
|
530 # Test that nan is 'far' from small, tiny, inf, max and min
|
Chris@87
|
531 for dt in [np.float32, np.float64]:
|
Chris@87
|
532 if dt == np.float32:
|
Chris@87
|
533 maxulp = 1e6
|
Chris@87
|
534 else:
|
Chris@87
|
535 maxulp = 1e12
|
Chris@87
|
536 inf = np.array([np.inf]).astype(dt)
|
Chris@87
|
537 nan = np.array([np.nan]).astype(dt)
|
Chris@87
|
538 big = np.array([np.finfo(dt).max])
|
Chris@87
|
539 tiny = np.array([np.finfo(dt).tiny])
|
Chris@87
|
540 zero = np.array([np.PZERO]).astype(dt)
|
Chris@87
|
541 nzero = np.array([np.NZERO]).astype(dt)
|
Chris@87
|
542 self.assertRaises(AssertionError,
|
Chris@87
|
543 lambda: assert_array_max_ulp(nan, inf,
|
Chris@87
|
544 maxulp=maxulp))
|
Chris@87
|
545 self.assertRaises(AssertionError,
|
Chris@87
|
546 lambda: assert_array_max_ulp(nan, big,
|
Chris@87
|
547 maxulp=maxulp))
|
Chris@87
|
548 self.assertRaises(AssertionError,
|
Chris@87
|
549 lambda: assert_array_max_ulp(nan, tiny,
|
Chris@87
|
550 maxulp=maxulp))
|
Chris@87
|
551 self.assertRaises(AssertionError,
|
Chris@87
|
552 lambda: assert_array_max_ulp(nan, zero,
|
Chris@87
|
553 maxulp=maxulp))
|
Chris@87
|
554 self.assertRaises(AssertionError,
|
Chris@87
|
555 lambda: assert_array_max_ulp(nan, nzero,
|
Chris@87
|
556 maxulp=maxulp))
|
Chris@87
|
557 if __name__ == '__main__':
|
Chris@87
|
558 run_module_suite()
|