[Numpy-discussion] running numpy tests

Robert Kern robert.kern at gmail.com
Mon Aug 4 22:19:52 EDT 2008


On Mon, Aug 4, 2008 at 20:41, Andrew Dalke <dalke at dalkescientific.com> wrote:
> On Aug 5, 2008, at 2:00 AM, Robert Kern wrote:
>> You have old stuff in your checkout/installation. Make sure you have
>> deleted all of the *.pycs and directories which have been deleted in
>> SVN.
>
> Now that I've fixed that, I can tell that I made a
> mistake related to the self-test code.  I can't figure
> it out.
>
> Many of the modules have code which look like
>
>     from testing import Tester
>     test = Tester().test
>     bench = Tester().bench
>
> As I understand it, this code is migrating to use nosetests.
> Because people expect 'import numpy; numpy.test()' to work,
> there will be a compatibility period where this API is
> unchanged.
>
> I found that importing 'testing' costs 0.013 seconds, which
> is 10% of my current import time.  I would like to defer
> the import until needed, so I rewrote the 'test' code as:
>
>     def test(label='fast', verbose=1, extra_argv=None, doctests=False,
>              coverage=False, **kwargs):
>         from testing import Tester
>         import numpy
>         Tester(numpy).test(label, verbose, extra_argv, doctests,
>                            coverage, **kwargs)
>
>
> In my view there's no difference between them, but Tester().test does
> introspection to figure out the module location.  (In fact, if I
> don't pass it the module explicitly then it expects that locals()
> ["__file__"] for sys._getframe(-1) will exist, which is not the case
> with my function.  The underling code should instead check for that
> variable in globals().)

Probably. Or take a level= argument to tell _getframe() to go up an
extra level. Or both.

> I ended up with recursion errors, and I don't know why.  Any idea of
> what to do?

Ah. My guess is that the test collector sees numpy.test() as a
function that matches its regex for a unit test. It used to be a bound
method, so I think nose ignored it, then. You should be able to tell
nose not to collect it like so:

def test(...):
    ...
test.__test__ = False

-- 
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless
enigma that is made terrible by our own mad attempt to interpret it as
though it had an underlying truth."
 -- Umberto Eco



More information about the NumPy-Discussion mailing list