test_owens_t.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. from __future__ import division, print_function, absolute_import
  2. import numpy as np
  3. from numpy.testing import assert_equal, assert_allclose
  4. import scipy.special as sc
  5. def test_symmetries():
  6. np.random.seed(1234)
  7. a, h = np.random.rand(100), np.random.rand(100)
  8. assert_equal(sc.owens_t(h, a), sc.owens_t(-h, a))
  9. assert_equal(sc.owens_t(h, a), -sc.owens_t(h, -a))
  10. def test_special_cases():
  11. assert_equal(sc.owens_t(5, 0), 0)
  12. assert_allclose(sc.owens_t(0, 5), 0.5*np.arctan(5)/np.pi,
  13. rtol=5e-14)
  14. # Target value is 0.5*Phi(5)*(1 - Phi(5)) for Phi the CDF of the
  15. # standard normal distribution
  16. assert_allclose(sc.owens_t(5, 1), 1.4332574485503512543e-07,
  17. rtol=5e-14)
  18. def test_nans():
  19. assert_equal(sc.owens_t(20, np.nan), np.nan)
  20. assert_equal(sc.owens_t(np.nan, 20), np.nan)
  21. assert_equal(sc.owens_t(np.nan, np.nan), np.nan)
  22. def test_infs():
  23. h = 1
  24. res = 0.5*sc.erfc(h/np.sqrt(2))
  25. assert_allclose(sc.owens_t(h, np.inf), res, rtol=5e-14)
  26. assert_allclose(sc.owens_t(h, -np.inf), -res, rtol=5e-14)
  27. assert_equal(sc.owens_t(np.inf, 1), 0)
  28. assert_equal(sc.owens_t(-np.inf, 1), 0)
  29. assert_equal(sc.owens_t(np.inf, np.inf), 0)
  30. assert_equal(sc.owens_t(-np.inf, np.inf), 0)
  31. assert_equal(sc.owens_t(np.inf, -np.inf), -0.0)
  32. assert_equal(sc.owens_t(-np.inf, -np.inf), -0.0)