[SciPy-Dev] scipy.special test failures for 0.8.0b1

Pauli Virtanen pav@iki...
Thu Jun 17 11:37:47 CDT 2010


Thu, 17 Jun 2010 22:05:43 +0800, Ralf Gommers wrote:
> These scipy.special test failures were reported by Derek Homeier for
> 0.8.0b1. Are these all just cases of the test precision being a little
> too high, or is there an actual problem? What should be done with them
> for the 0.8.0 release?
[clip]

I can try to take a closer look today evening.

[clip]
> FAIL: test_iv_cephes_vs_amos (test_basic.TestBessel)
[clip]
> Not equal to tolerance rtol=1e-12, atol=1e-305 (-120,
> 700.60000000000002) (mismatch 100.0%)
>  x: array(9.7596849076267918e+297)
>  y: array((9.7596849444884899e+297+0j))

The AMOS result 9.7596849444884899e+297 is correct.

For some reason, on that platform the Boost code computes gives a result 
that is off by 4e-9. Not disastrous, so the test tolerance could simply 
be bumped to 5e-9.

> while the following also fails on darwin-i386:
> 
> FAIL: test_iv_cephes_vs_amos_mass_test (test_basic.TestBessel)
> ----------------------------------------------------------------------
> Traceback (most recent call last):
>  File
>  "/sw/lib/python2.6/site-packages/scipy/special/tests/test_basic.py",
> line 1712, in test_iv_cephes_vs_amos_mass_test
>    assert dc[k] < 1e-9, (iv(v[k], x[k]), iv(v[k], x[k]+0j))
> AssertionError: (1.8320048963545875e+306, (inf+0j))

The test is probably buggy -- it probably shouldn't assume that much 
about when AMOS decides a result is inf. That also seems to be platform-
dependent.

[clip]
> FAIL: test_data.test_boost(<Data for gamma:
> test_gamma_data_ipp-near_m55>,)
[clip]
> Max |adiff|: 5.56451e-80
> Max |rdiff|: 6.01399e-12

The tolerance is just too strict. rtol should probably be around 1e-11

[clip]
> FAIL: test_data.test_boost(<Data for gammaincinv:
> gamma_inv_big_data_ipp-gamma_inv_big_data>,)
[clip]
> Max |adiff|: 39782.8
> Max |rdiff|: 1
> Bad results for the following points (in output 0):
>                   40010.84375             0.12698681652545929
> =>                            0.0 !=             39782.764004009827
> (rdiff
>                            1.0)

I get this also on x86,

>>> scipy.special.gammaincinv(40010.84375, 0.12698681652545929)
__main__:1: SpecialFunctionWarning: gammaincinv: failed to converge at 
(a, y) = (40010.84375, 0.12698681652545928955): 3

My bad -- the function tries to be too strict about tolerance. There are 
two bugs here: ~eps tolerance is probably too much asked, and certainly 0 
is not the correct value to return if tolerances cannot be satisfied...

The function should be fixed.

-- 
Pauli Virtanen



More information about the SciPy-Dev mailing list