[Scipy-svn] r5144 - trunk/scipy/stats/tests

scipy-svn@scip... scipy-svn@scip...
Tue Nov 18 00:23:09 CST 2008


Author: josef
Date: 2008-11-18 00:23:05 -0600 (Tue, 18 Nov 2008)
New Revision: 5144

Modified:
   trunk/scipy/stats/tests/test_continuous_basic.py
   trunk/scipy/stats/tests/test_continuous_extra.py
   trunk/scipy/stats/tests/test_discrete_basic.py
Log:
some test cleanup, add some test, make sure, some extra tests are renamed, so that nose doesn't run them

Modified: trunk/scipy/stats/tests/test_continuous_basic.py
===================================================================
--- trunk/scipy/stats/tests/test_continuous_basic.py	2008-11-18 06:19:37 UTC (rev 5143)
+++ trunk/scipy/stats/tests/test_continuous_basic.py	2008-11-18 06:23:05 UTC (rev 5144)
@@ -113,6 +113,12 @@
 ##    ['fatiguelife', (29,)],   #correction numargs = 1
 ##    ['loggamma', (0.41411931826052117,)]]
 
+# for testing ticket:767
+##distcont = [
+##    ['genextreme', (3.3184017469423535,)],
+##    ['genextreme', (0.01,)],
+##    ['genextreme', (0.00001,)]
+##    ]
 
 def test_cont_basic():
     for distname, arg in distcont[:]:
@@ -122,10 +128,11 @@
         sv = rvs.var()
         skurt = stats.kurtosis(rvs)
         sskew = stats.skew(rvs)
-        yield check_sample_meanvar_, distfn, arg, sm, sv, distname + \
+        m,v = distfn.stats(*arg)
+        yield check_sample_meanvar_, distfn, arg, m, v, sm, sv, distname + \
               'sample mean test'
         yield check_sample_skew_kurt, distfn, arg, skurt, sskew, distname
-        yield check_moment, distfn, arg, distname
+        yield check_moment, distfn, arg, m, v, distname
         yield check_cdf_ppf, distfn, arg, distname
         yield check_sf_isf, distfn, arg, distname
         yield check_pdf, distfn, arg, distname
@@ -133,27 +140,25 @@
 
 
 
-def check_moment(distfn, arg, msg):
-    m,v = distfn.stats(*arg)
+def check_moment(distfn, arg, m, v, msg):
     m1  = distfn.moment(1,*arg)
     m2  = distfn.moment(2,*arg)
     if not np.isinf(m):
         npt.assert_almost_equal(m1, m, decimal=10, err_msg= msg + \
                             ' - 1st moment')
-    else:
-        assert np.isinf(m1) or np.isnan(m1), \
+    else:                     # or np.isnan(m1), 
+        assert np.isinf(m1), \
                msg + ' - 1st moment -infinite, m1=%s' % str(m1)
         #np.isnan(m1) temporary special treatment for loggamma
     if not np.isinf(v):
         npt.assert_almost_equal(m2-m1*m1, v, decimal=10, err_msg= msg + \
                             ' - 2ndt moment')
-    else:
-        assert np.isinf(m2) or np.isnan(m2), \
+    else:                     #or np.isnan(m2), 
+        assert np.isinf(m2), \
                msg + ' - 2nd moment -infinite, m2=%s' % str(m2)
         #np.isnan(m2) temporary special treatment for loggamma
 
-def check_sample_meanvar_(distfn, arg, sm, sv, msg):
-    m,v = distfn.stats(*arg)
+def check_sample_meanvar_(distfn, arg, m, v, sm, sv, msg):
     check_sample_meanvar, sm, m, msg + 'sample mean test'
     check_sample_meanvar, sv, v, msg + 'sample var test'
 
@@ -167,7 +172,7 @@
         npt.assert_almost_equal(sm, m, decimal=DECIMAL, err_msg= msg + \
                                 ' - finite moment')
     else:
-        assert sm > 10000, 'infinite moment, sm = ' + str(sm)
+        assert abs(sm) > 10000, 'infinite moment, sm = ' + str(sm)
 
 def check_cdf_ppf(distfn,arg,msg):
     npt.assert_almost_equal(distfn.cdf(distfn.ppf([0.001,0.5,0.990], *arg), *arg),
@@ -184,6 +189,7 @@
                             ' - cdf-sf relationship')
 
 def check_pdf(distfn, arg, msg):
+    # compares pdf at median with numerical derivative of cdf
     median = distfn.ppf(0.5, *arg)
     eps = 1e-6
     pdfv = distfn.pdf(median, *arg)
@@ -193,7 +199,8 @@
         pdfv = distfn.pdf(median, *arg)
     cdfdiff = (distfn.cdf(median + eps, *arg) -
                distfn.cdf(median - eps, *arg))/eps/2.0
-    #replace with better diff and better test (more points)
+    #replace with better diff and better test (more points),
+    #actually, this works pretty well
     npt.assert_almost_equal(pdfv, cdfdiff,
                 decimal=DECIMAL, err_msg= msg + ' - cdf-pdf relationship')
 
@@ -204,9 +211,11 @@
     'johnsonsb', 'truncexpon', 'rice', 'invnorm', 'invgamma',
     'powerlognorm']
 
+distmiss = [[dist,args] for dist,args in distcont if dist in distmissing]
+
 def test_missing_distributions():
-    #test from scipy.stats.tests
-    for dist, args in distcont:
+    # K-S test of distributions missing in test_distributions.py
+    for dist, args in distmiss:
         distfunc = getattr(stats, dist)
         alpha = 0.01
         yield check_distribution, dist, args, alpha
@@ -221,5 +230,6 @@
                "; alpha = " + str(alpha) + "\nargs = " + str(args)
 
 if __name__ == "__main__":
-    nose.run(argv=['', __file__])
+    #nose.run(argv=['', __file__])
+    nose.runmodule(argv=[__file__,'-s'], exit=False)
 

Modified: trunk/scipy/stats/tests/test_continuous_extra.py
===================================================================
--- trunk/scipy/stats/tests/test_continuous_extra.py	2008-11-18 06:19:37 UTC (rev 5143)
+++ trunk/scipy/stats/tests/test_continuous_extra.py	2008-11-18 06:23:05 UTC (rev 5144)
@@ -1,3 +1,11 @@
+# contains additional tests for continuous distributions
+#
+# NOTE: one test, _est_cont_skip, that is renamed so that nose doesn't
+#       run it,
+#       6 distributions return nan for entropy
+#       truncnorm fails by design for private method _ppf test
+
+
 import numpy.testing as npt
 import numpy as np
 import nose
@@ -11,23 +19,35 @@
 def test_cont_extra():
     for distname, arg in distcont[:]:
         distfn = getattr(stats, distname)
-##        rvs = distfn.rvs(size=1000,*arg)
-##        sm = rvs.mean()
-##        sv = rvs.var()
-##        skurt = stats.kurtosis(rvs)
-##        sskew = stats.skew(rvs)
-        
+
         yield check_ppf_limits, distfn, arg, distname + \
               ' ppf limit test'
         yield check_isf_limits, distfn, arg, distname + \
               ' isf limit test'
         yield check_loc_scale, distfn, arg, distname + \
               ' loc, scale test'
-        #entropy test checks only for isnan, currently 6 isnan
-##        yield check_entropy, distfn, arg, distname + \
-##              ' entropy nan test'
 
+def _est_cont_skip():
+    for distname, arg in distcont:
+        distfn = getattr(stats, distname)        
+        #entropy test checks only for isnan, currently 6 isnan left
+        yield check_entropy, distfn, arg, distname + \
+              ' entropy nan test'
+        # _ppf test has 1 failure be design
+        yield check_ppf_private, distfn, arg, distname + \
+              ' _ppf private test'
 
+def test_540_567():
+    # test for nan returned in tickets 540, 567
+    npt.assert_almost_equal(stats.norm.cdf(-1.7624320982),0.03899815971089126,
+                            decimal=10, err_msg = 'test_540_567')
+    npt.assert_almost_equal(stats.norm.cdf(-1.7624320983),0.038998159702449846,
+                            decimal=10, err_msg = 'test_540_567')
+    npt.assert_almost_equal(stats.norm.cdf(1.38629436112, loc=0.950273420309,
+                            scale=0.204423758009),0.98353464004309321,
+                            decimal=10, err_msg = 'test_540_567')
+
+
 def check_ppf_limits(distfn,arg,msg):
     below,low,upp,above = distfn.ppf([-1,0,1,2], *arg)
     #print distfn.name, distfn.a, low, distfn.b, upp
@@ -37,6 +57,12 @@
     assert np.isnan(below), msg + 'ppf out of bounds - below'
     assert np.isnan(above), msg + 'ppf out of bounds - above'
 
+def check_ppf_private(distfn,arg,msg):
+    #fails by design for trunk norm self.nb not defined
+    ppfs = distfn._ppf(np.array([0.1,0.5,0.9]), *arg)
+    assert not np.any(np.isnan(ppfs)), msg + 'ppf private is nan'
+
+
 def check_isf_limits(distfn,arg,msg):
     below,low,upp,above = distfn.isf([-1,0,1,2], *arg)
     #print distfn.name, distfn.a, low, distfn.b, upp
@@ -62,7 +88,7 @@
 def assert_equal_inf_nan(v1,v2,msg):
     assert not np.isnan(v1)
     if not np.isinf(v1):
-        npt.assert_almost_equal(v1, v2, decimal=DECIMAL, err_msg= msg + \
+        npt.assert_almost_equal(v1, v2, decimal=DECIMAL, err_msg = msg + \
                                    ' - finite')
     else:
         assert np.isinf(v2) or np.isnan(v2), \
@@ -71,7 +97,5 @@
 if __name__ == "__main__":
     import nose
     #nose.run(argv=['', __file__])
-    #print distcont[:5]
-    #test_cont_extra()
     nose.runmodule(argv=[__file__,'-s'], exit=False)
 

Modified: trunk/scipy/stats/tests/test_discrete_basic.py
===================================================================
--- trunk/scipy/stats/tests/test_discrete_basic.py	2008-11-18 06:19:37 UTC (rev 5143)
+++ trunk/scipy/stats/tests/test_discrete_basic.py	2008-11-18 06:23:05 UTC (rev 5144)
@@ -44,7 +44,7 @@
         yield check_entropy, distfn, arg, distname + \
               ' entropy nan test'
 
-def test_discrete_private():
+def _est_discrete_private():
     #testing private methods mostly for debugging
     #   some tests might fail by design,
     #   e.g. incorrect definition of distfn.a and distfn.b



More information about the Scipy-svn mailing list