annotate DEPENDENCIES/mingw32/Python27/Lib/site-packages/numpy/testing/tests/test_utils.py @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents 2a2c65a20a8b
children
rev   line source
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()