test_precompute_utils.py 1.3 KB

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