test_precompute_utils.py 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import pytest
  2. from scipy.special._testutils import MissingModule, check_version
  3. from scipy.special._mptestutils import mp_assert_allclose
  4. from scipy.special._precompute.utils import lagrange_inversion
  5. try:
  6. import sympy
  7. except ImportError:
  8. sympy = MissingModule('sympy')
  9. try:
  10. import mpmath as mp
  11. except ImportError:
  12. mp = MissingModule('mpmath')
  13. @pytest.mark.slow
  14. @check_version(sympy, '0.7')
  15. @check_version(mp, '0.19')
  16. class TestInversion:
  17. @pytest.mark.xfail_on_32bit("rtol only 2e-9, see gh-6938")
  18. def test_log(self):
  19. with mp.workdps(30):
  20. logcoeffs = mp.taylor(lambda x: mp.log(1 + x), 0, 10)
  21. expcoeffs = mp.taylor(lambda x: mp.exp(x) - 1, 0, 10)
  22. invlogcoeffs = lagrange_inversion(logcoeffs)
  23. mp_assert_allclose(invlogcoeffs, expcoeffs)
  24. @pytest.mark.xfail_on_32bit("rtol only 1e-15, see gh-6938")
  25. def test_sin(self):
  26. with mp.workdps(30):
  27. sincoeffs = mp.taylor(mp.sin, 0, 10)
  28. asincoeffs = mp.taylor(mp.asin, 0, 10)
  29. invsincoeffs = lagrange_inversion(sincoeffs)
  30. mp_assert_allclose(invsincoeffs, asincoeffs, atol=1e-30)