test_wrightomega.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. from __future__ import division, print_function, absolute_import
  2. import numpy as np
  3. from numpy.testing import assert_, assert_equal
  4. import scipy.special as sc
  5. def test_wrightomega_nan():
  6. pts = [complex(np.nan, 0),
  7. complex(0, np.nan),
  8. complex(np.nan, np.nan),
  9. complex(np.nan, 1),
  10. complex(1, np.nan)]
  11. for p in pts:
  12. res = sc.wrightomega(p)
  13. assert_(np.isnan(res.real))
  14. assert_(np.isnan(res.imag))
  15. def test_wrightomega_inf_branch():
  16. pts = [complex(-np.inf, np.pi/4),
  17. complex(-np.inf, -np.pi/4),
  18. complex(-np.inf, 3*np.pi/4),
  19. complex(-np.inf, -3*np.pi/4)]
  20. expected_results = [complex(0.0, 0.0),
  21. complex(0.0, -0.0),
  22. complex(-0.0, 0.0),
  23. complex(-0.0, -0.0)]
  24. for p, expected in zip(pts, expected_results):
  25. res = sc.wrightomega(p)
  26. # We can't use assert_equal(res, expected) because in older versions of
  27. # numpy, assert_equal doesn't check the sign of the real and imaginary
  28. # parts when comparing complex zeros. It does check the sign when the
  29. # arguments are *real* scalars.
  30. assert_equal(res.real, expected.real)
  31. assert_equal(res.imag, expected.imag)
  32. def test_wrightomega_inf():
  33. pts = [complex(np.inf, 10),
  34. complex(-np.inf, 10),
  35. complex(10, np.inf),
  36. complex(10, -np.inf)]
  37. for p in pts:
  38. assert_equal(sc.wrightomega(p), p)
  39. def test_wrightomega_singular():
  40. pts = [complex(-1.0, np.pi),
  41. complex(-1.0, -np.pi)]
  42. for p in pts:
  43. res = sc.wrightomega(p)
  44. assert_equal(res, -1.0)
  45. assert_(np.signbit(res.imag) == False)