o 6aK@shdZddlZddlZddlZddlZddlmZmZgdZ ddZ ddd Z Gd d d Z d d Z dS)ze Nose test running. This module implements ``test()`` and ``bench()`` functions for NumPy modules. N) import_nosesuppress_warnings)get_package_namerun_module_suite NoseTester _numpy_testerrrrcCs|dd}g}d|vsd|vr*tj|\}}|dvrn ||d|vsd|vs|s4d|vr2dSdS||ddrD|dd |S) a& Given a path where a package is installed, determine its name. Parameters ---------- filepath : str Path to a file. If the determination fails, "numpy" is returned. Examples -------- >>> np.testing.nosetester.get_package_name('nonsense') 'numpy' N site-packages dist-packages)r r scipynumpyrz.egg.)ospathsplitappendreverseendswithpopjoin)filepathfullpathpkg_namep2rC/usr/lib/python3/dist-packages/numpy/testing/_private/nosetester.pyrs    rcCst|durtd}|jdd}|durt|dur!tj|g}n||g}t}ddlm}|j ||gddS)a Run a test module. Equivalent to calling ``$ nosetests `` from the command line Parameters ---------- file_to_run : str, optional Path to test module, or None. By default, run the module from which this function is called. argv : list of strings Arguments to be passed to the nose test runner. ``argv[0]`` is ignored. All command line arguments accepted by ``nosetests`` will work. If it is the default value None, sys.argv is used. .. versionadded:: 1.9.0 Examples -------- Adding the following:: if __name__ == "__main__" : run_module_suite(argv=sys.argv) at the end of a test module will run the tests when that module is called in the python interpreter. Alternatively, calling:: >>> run_module_suite(file_to_run="numpy/tests/test_matlib.py") # doctest: +SKIP from an interpreter will run all the test routine in 'test_matlib.py'. Nr__file__)KnownFailurePluginargv addplugins) sys _getframef_localsgetAssertionErrorrr noseclassesrrun) file_to_runrfnoserrrrr=s#   rc@s^eZdZdZ  dddZdd Zd d Zd d Z  dddZ   dddZ dddZ dS)ra Nose test runner. This class is made available as numpy.testing.Tester, and a test function is typically added to a package's __init__.py like so:: from numpy.testing import Tester test = Tester().test Calling this test function finds and runs all tests associated with the package and all its sub-packages. Attributes ---------- package_path : str Full path to the package to test. package_name : str Name of the package to test. Parameters ---------- package : module, str or None, optional The package to test. If a string, this should be the full path to the package. If None (default), `package` is set to the module from which `NoseTester` is initialized. raise_warnings : None, str or sequence of warnings, optional This specifies which warnings to configure as 'raise' instead of being shown once during the test execution. Valid strings are: - "develop" : equals ``(Warning,)`` - "release" : equals ``()``, don't raise on any warnings. Default is "release". depth : int, optional If `package` is None, then this can be used to initialize from the module of the caller of (the caller of (...)) the code that initializes `NoseTester`. Default of 0 means the module of the immediate caller; higher values are useful for utility routines that want to initialize `NoseTester` objects on behalf of other code. NreleaserFcCs|durd}d}|dur.td|}|jdd}|dur ttj|}|jdd}nt|t trCtj|j }t |dd}nt |}||_ |durRt|}||_||_||_dS)Nr+rr__name__)r!r"r#r$r%rrdirname isinstancetypergetattrstr package_pathr package_nameraise_warningscheck_fpu_mode)selfpackager4depthr5r3r)r2rrr__init__s(   zNoseTester.__init__cCslt|jdg}|r!|dkr!t|tstd|dkrd}|d|g7}|dt|g7}|dg7}|r4||7}|S) a Generate argv for nosetest command Parameters ---------- label : {'fast', 'full', '', attribute identifier}, optional see ``test`` docstring verbose : int, optional Verbosity value for test outputs, in the range 1-10. Default is 1. extra_argv : list, optional List with any extra arguments to pass to nosetests. Returns ------- argv : list command line arguments that will be passed to nose z-sfullz"Selection label should be a stringfastznot slowz-Az --verbosityz--exe)rr2r.r1 TypeError)r6labelverbose extra_argvrrrr _test_argvs     zNoseTester._test_argvcCst}ddl}td|j|jdddjj}td|tj |j }td|d|j vrJddl }td |jtj |j }td |t jd d }td |td|jdS)NrzNumPy version ) rC)orderz&NumPy relaxed strides checking option:zNumPy is installed in r zSciPy version zSciPy is installed in  zPython version znose version %d.%d.%d)rr print __version__onesflags f_contiguousrrr-rr3r r!versionreplace__versioninfo__)r6r*r relaxed_stridesnpdirr spdir pyversionrrr_show_system_infos  zNoseTester._show_system_infocCsddlm}|S)z Return instantiated plugin for doctests Allows subclassing of this class to override doctester A return value of None means use the nose builtin doctest plugin r) NumpyDoctest)r&rS)r6rSrrr_get_custom_doctesters z NoseTester._get_custom_doctesterr;rcCs~t||||}|r|d|jdddg7}|r2|dur$|dg7}nt|tr2|ddt|g7}dd l}dd lm} d d l m } m } m } | g} | d d|j jj D7} |jrd| | g7} |dg7}z| }|| dd|j D7} Wn tyYnwd|v}|dkr|rd}|}|d ur|r|s|dg7}|| fS|r|d| | d|g7} |r|d|jg7}|| fS)z Run tests for module using nose. This method does the heavy lifting for the `test` method. It takes all the same arguments, for details see `test`. See Also -------- test z--cover-package=z--with-coveragez --cover-testsz --cover-eraseTz --with-timerz --timer-top-nrN)EntryPointPluginManagerr)r UnpluggerFPUModeCheckPlugincSsg|]}|qSrr.0prrr (sz0NoseTester.prepare_test_args..z--with-fpumodecheckplugincSsg|]}|qSrrrXrrrr[0sz--with-doctestFdoctestz--with-)rr@r3r.intr1nose.plugins.builtin nose.pluginsrUr&rrVrWpluginsbuiltinr5 loadPlugins ImportErrorrTremovename)r6r=r>r?doctestscoveragetimerrr*rUrrVrWr`entrypoint_manager doctest_argvplugrrrprepare_test_argssP         zNoseTester.prepare_test_argsc Cst|d}ddlm}||_|||||||\} } |r%td|jntd|j|ddl} d| _ |dur?|j }t t fdd } t |trO| |}td } ttd |D] }tjd |d q_| jdd| jdd| jdd| jtjd | jdd| jddttd ddlm}Wdn1swY| jt|dtjddtddddlm}|| d| d}Wd|jS1swY|jS)a Run tests for module using nose. Parameters ---------- label : {'fast', 'full', '', attribute identifier}, optional Identifies the tests to run. This can be a string to pass to the nosetests executable with the '-A' option, or one of several special values. Special values are: * 'fast' - the default - which corresponds to the ``nosetests -A`` option of 'not slow'. * 'full' - fast (as above) and slow tests as in the 'no -A' option to nosetests - this is the same as ''. * None or '' - run all tests. * attribute_identifier - string passed directly to nosetests as '-A'. verbose : int, optional Verbosity value for test outputs, in the range 1-10. Default is 1. extra_argv : list, optional List with any extra arguments to pass to nosetests. doctests : bool, optional If True, run doctests in module. Default is False. coverage : bool, optional If True, report coverage of NumPy code. Default is False. (This requires the `coverage module `_). raise_warnings : None, str or sequence of warnings, optional This specifies which warnings to configure as 'raise' instead of being shown once during the test execution. Valid strings are: * "develop" : equals ``(Warning,)`` * "release" : equals ``()``, do not raise on any warnings. timer : bool or int, optional Timing of individual tests with ``nose-timer`` (which needs to be installed). If True, time tests and report on all of them. If an integer (say ``N``), report timing results for ``N`` slowest tests. Returns ------- result : object Returns the result of running the tests as a ``nose.result.TextTestResult`` object. Notes ----- Each NumPy module exposes `test` in its namespace to run all tests for it. For example, to run all tests for numpy.lib: >>> np.lib.test() #doctest: +SKIP Examples -------- >>> result = np.lib.test() #doctest: +SKIP Running unit tests for numpy.lib ... Ran 976 tests in 3.933s OK >>> result.errors #doctest: +SKIP [] >>> result.knownfail #doctest: +SKIP [] r)utilsz$Running unit tests and doctests for zRunning unit tests for rNr)developr+locationalwayserror)categoryzNot importing directory)messageznumpy.dtype size changedznumpy.ufunc size changedz.*boolean negative.*z.*boolean subtract.*)cpuinfo)rsmoduleignorez.*getargspec.*znose\.)rtrsrv)NumpyTestProgramF)rexitr`)minrErnr>rlrFr3rRr\masterr4dictWarningr.r1rwarnings resetwarningsfilterwarningsfilternpModuleDeprecationWarningcatch_warnings simplefilter distutilsru UserWarningDeprecationWarningr&rxresult)r6r=r>r?rfrgr4rhrnrr`r\ _warn_optssup warningtyperurxtrrrtestFsZ G              ''zNoseTester.testcCsbtd|j|||||}|ddtjg7}t}ddlm}|dg}|j ||dS)a Run benchmarks for module using nose. Parameters ---------- label : {'fast', 'full', '', attribute identifier}, optional Identifies the benchmarks to run. This can be a string to pass to the nosetests executable with the '-A' option, or one of several special values. Special values are: * 'fast' - the default - which corresponds to the ``nosetests -A`` option of 'not slow'. * 'full' - fast (as above) and slow benchmarks as in the 'no -A' option to nosetests - this is the same as ''. * None or '' - run all tests. * attribute_identifier - string passed directly to nosetests as '-A'. verbose : int, optional Verbosity value for benchmark outputs, in the range 1-10. Default is 1. extra_argv : list, optional List with any extra arguments to pass to nosetests. Returns ------- success : bool Returns True if running the benchmarks works, False if an error occurred. Notes ----- Benchmarks are like tests, but have names starting with "bench" instead of "test", and can be found under the "benchmarks" sub-directory of the module. Each NumPy module exposes `bench` in its namespace to run all benchmarks for it. Examples -------- >>> success = np.lib.bench() #doctest: +SKIP Running benchmarks for numpy.lib ... using 562341 items: unique: 0.11 unique1d: 0.11 ratio: 1.0 nUnique: 56230 == 56230 ... OK >>> success #doctest: +SKIP True zRunning benchmarks for z--matchz(?:^|[\\b_\\.%s-])[Bb]enchr)rVr\r) rFr3rRr@rseprr&rVr')r6r=r>r?rr*rV add_pluginsrrrbenchs:  zNoseTester.bench)Nr+rF)r;rNFFF)r;rNFFNF)r;rN) r, __module__ __qualname____doc__r9r@rRrTrlrrrrrrrps") )%  @  rcCs,ttdr dtjvr d}nd}t|dddS)NrGz.dev0ror+rT)r4r8r5)hasattrrrGr)moderrrrs r)NN)rrr!r~r rrnrr__all__rrrrrrrrs )3 .