testing.doctester

Module: testing.doctester

Inheritance diagram for nipy.testing.doctester:

digraph inheritanceecdc83e39f { rankdir=LR; size="8.0, 12.0"; "doctest.OutputChecker" [fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5)",tooltip="A class used to check the whether the actual output from a doctest"]; "plugins.base.Plugin" [fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5)",tooltip="Base class for nose plugins. It's recommended but not *necessary* to"]; "plugins.doctests.Doctest" [fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5)",tooltip="Activate doctest plugin to find and run doctests in non-test modules."]; "plugins.base.Plugin" -> "plugins.doctests.Doctest" [arrowsize=0.5,style="setlinewidth(0.5)"]; "testing.doctester.NipyDoctest" [URL="#nipy.testing.doctester.NipyDoctest",fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5)",target="_top"]; "testing.noseclasses.NumpyDoctest" -> "testing.doctester.NipyDoctest" [arrowsize=0.5,style="setlinewidth(0.5)"]; "testing.doctester.NipyOutputChecker" [URL="#nipy.testing.doctester.NipyOutputChecker",fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5)",target="_top"]; "testing.noseclasses.NumpyOutputChecker" -> "testing.doctester.NipyOutputChecker" [arrowsize=0.5,style="setlinewidth(0.5)"]; "testing.noseclasses.NumpyDoctest" [fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5)"]; "plugins.doctests.Doctest" -> "testing.noseclasses.NumpyDoctest" [arrowsize=0.5,style="setlinewidth(0.5)"]; "testing.noseclasses.NumpyOutputChecker" [fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5)"]; "doctest.OutputChecker" -> "testing.noseclasses.NumpyOutputChecker" [arrowsize=0.5,style="setlinewidth(0.5)"]; }

Custom doctester based on Numpy doctester

To run doctests via nose, you’ll need nosetests nipy/testing/doctester.py --doctest-test, because this file will be identified as containing tests.

Classes

NipyDoctest

class nipy.testing.doctester.NipyDoctest[source]

Bases: nipy.fixes.numpy.testing.noseclasses.NumpyDoctest

__init__()

Initialize self. See help(type(self)) for accurate signature.

name = 'nipydoctest'
out_check_class

alias of NipyOutputChecker

set_test_context(test)[source]

Configure test object to set test context

We set the numpy / scipy standard doctest namespace

Parameters

test : test object

with globs dictionary defining namespace

Returns

None

Notes

test object modified in place

options(parser, env=<class 'nipy.utils._NoValue'>)[source]

Register commmandline options.

addOptions(parser, env=None)

Add command-line options for this plugin.

The base plugin class adds –with-$name by default, used to enable the plugin.

Warning

Don’t implement addOptions unless you want to override all default option handling behavior, including warnings for conflicting options. Implement options instead.

add_options(parser, env=None)

Non-camel-case version of func name for backwards compatibility.

Warning

DEPRECATED: Do not use this method, use options instead.

afterContext()
can_configure = False
configure(options, config)

Configure plugin.

doctest_case_class

alias of nipy.fixes.numpy.testing.noseclasses.NumpyDocTestCase

doctest_ignore = ['generate_numpy_api.py', 'setup.py']
doctest_optflags = 12
enableOpt = None
enabled = False
extension = None
help()

Return help for this plugin. This will be output as the help section of the –with-$name option that enables the plugin.

loadTestsFromFile(filename)

Load doctests from the file.

Tests are loaded only if filename’s extension matches configured doctest extension.

loadTestsFromModule(module)

Load doctests from the module.

makeTest(obj, parent)

Look for doctests in the given object, which will be a function, method or class.

matches(name)
prepareTestLoader(loader)

Capture loader’s suiteClass.

This is used to create test suites from doctest files.

score = 1000
suiteClass

alias of nose.plugins.doctests.DoctestSuite

test_finder_class

alias of nipy.fixes.numpy.testing.noseclasses.NumpyDocTestFinder

tolist(val)
wantFile(file)

Override to select all modules and any file ending with configured doctest extension.

NipyOutputChecker

class nipy.testing.doctester.NipyOutputChecker[source]

Bases: nipy.fixes.numpy.testing.noseclasses.NumpyOutputChecker

__init__($self, /, *args, **kwargs)

Initialize self. See help(type(self)) for accurate signature.

check_output(want, got, optionflags)[source]

Return True iff the actual output from an example (got) matches the expected output (want). These strings are always considered to match if they are identical; but depending on what option flags the test runner is using, several non-exact match types are also possible. See the documentation for TestRunner for more information about option flags.

output_difference(example, got, optionflags)

Return a string describing the differences between the expected output for a given example (example) and the actual output (got). optionflags is the set of option flags used to compare want and got.

Functions

nipy.testing.doctester.ignore_dtype(in_str)[source]

Removes dtype=[dtype] from string in_str

Parameters

in_str : str

String maybe containing dtype specifier

Returns

out_str : str

String from which the dtype specifier has been removed.

Examples

>>> arr = np.arange(5, dtype='i2')

Here’s the normal repr:

>>> arr
array([0, 1, 2, 3, 4], dtype=int16)

The repr with the dtype bits removed

>>> ignore_dtype(repr(arr))
'array([0, 1, 2, 3, 4])'
>>> ignore_dtype('something(again, dtype=something)')
'something(again)'

Even if there are more closed brackets after the dtype

>>> ignore_dtype('something(again, dtype=something) (1, 2)')
'something(again) (1, 2)'

We need the close brackets to match

>>> ignore_dtype('again, dtype=something')
'again, dtype=something'
nipy.testing.doctester.round_numbers(in_str, precision)[source]

Replace fp numbers in in_str with numbers rounded to precision

Parameters

in_str : str

string possibly containing floating point numbers

precision : int

number of decimal places to round to

Returns

out_str : str

in_str with any floating point numbers replaced with same numbers rounded to precision decimal places.

Examples

>>> round_numbers('A=0.234, B=12.345', 2)
'A=0.23, B=12.35'

Rounds the floating point value as it finds it in the string. This is even true for numbers with exponentials. Remember that:

>>> '%.3f' % 0.3339e-10
'0.000'

This routine will recognize an exponential as something to process, but only works on the decimal part (leaving the exponential part is it is):

>>> round_numbers('(0.3339e-10, "string")', 3)
'(0.334e-10, "string")'
nipy.testing.doctester.strip_array_repr(in_str)[source]

Removes array-specific part of repr from string in_str

This parser only works on lines that contain only an array repr (and therefore start with array, and end with a close parenthesis. To remove dtypes in array reprs that may be somewhere within the line, use the IGNORE_DTYPE doctest option.

Parameters

in_str : str

String maybe containing a repr for an array

Returns

out_str : str

String from which the array specific parts of the repr have been removed.

Examples

>>> arr = np.arange(5, dtype='i2')

Here’s the normal repr:

>>> arr
array([0, 1, 2, 3, 4], dtype=int16)

The repr with the ‘array’ bits removed:

>>> strip_array_repr(repr(arr))
'[0, 1, 2, 3, 4]'