[SciPy-dev] Using doctest

Arnd Baecker arnd.baecker at web.de
Sun Oct 30 02:05:17 CST 2005

On Sat, 29 Oct 2005, David M. Cooke wrote:

> I've added some tests for scipy.base.polynomial and
> scipy.base.ufunclike, but I used doctests instead of writing out
> something with unittest. They're run by using a test_suite(level)
> function in the appropriate test module.
> They were much easier to write than using the unittest API: copy-and-
> paste from my terminal window, mostly :-)
> I'm not familiar with the internals of scipy.test.testing, so I don't
> know if there's something I'm missing when setting them up. It does
> require Python 2.3 or higher to make a unittest test suite from the
> doctest, though.

One problem is that the doctests screw up when
ipython is used, e.g.:

import scipy

Giving many of this type.

Failure in example: p
from line #5 of scipy.base.polynomial.test_polynomial
Expected: poly1d([ 1.,  2.,  3.])
Failure in example: q
from line #11 of scipy.base.polynomial.test_polynomial
Expected: poly1d([ 3.,  2.,  1.])

Note that I use IPython 0.6.13 and I vaguely
remember that something like this
was discussed on the IPython mailing list some time ago.

Another point:
Running the tests of newcore from "normal" python gives:


ERROR: doctest of scipy.base.polynomial.test_polynomial
Traceback (most recent call last):
  File "/usr/lib/python2.3/unittest.py", line 423, in runTest
  File "/usr/lib/python2.3/doctest.py", line 1359, in runit
    _utest(tester, name, doc, filename, lineno)
  File "/usr/lib/python2.3/doctest.py", line 1309, in _utest
    raise DocTestTestFailure('Failed doctest test for %s\n'
DocTestTestFailure: Failed doctest test for
line 1 (or above), in test_polynomial

Failure in example: p / q
from line #28 of scipy.base.polynomial.test_polynomial
Exception raised:
Traceback (most recent call last):
  File "/usr/lib/python2.3/doctest.py", line 442, in _run_examples_inner
    compileflags, 1) in globs
  File "<string>", line 1, in ?
line 489, in __div__
    return map(poly1d, polydiv(self.coeffs, other.coeffs))
line 313, in polydiv
    q, r = deconvolve(a1, a2)
line 305, in deconvolve
    quot = scipy.signal.lfilter(num, den, input)
UnboundLocalError: local variable 'scipy' referenced before assignment

The reason is the use of scipy.signal in polynomial.py,

def deconvolve(signal, divisor):
    """Deconvolves divisor out of signal.  Requires scipy.signal library
        import scipy.signal
    except ImportError:
        print "You need scipy.signal to use this function."

This routine does not work if only newcore is installed.
If I understood things correctly, newcore should
be independent from newscipy, or?

Best, Arnd

More information about the Scipy-dev mailing list