U C^#P@sdZddlmZmZmZddlZddlZddlZddlm Z ddl Z ddl m Z mZddd d dd d gZd dZdddZGdd d eZdd ZdS)ze Nose test running. This module implements ``test()`` and ``bench()`` functions for NumPy modules. )divisionabsolute_importprint_functionN) basestring) import_nosesuppress_warningsget_package_namerun_module_suite NoseTester _numpy_testerrrcCs|dd}g}d|ks d|krFtj|\}}|dkr:qF||q|sZd|krVdSdS||ddrz|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 rscipynumpyrz.egg.)ospathsplitappendreverseendswithpopjoin)filepathfullpathpkg_namep2rD/tmp/pip-install-6_kvzl1k/numpy/numpy/testing/_private/nosetester.pyr s   cCst|dkr,td}|jdd}|dkr,t|dkrBtj|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__)KnownFailurePluginargvZ addplugins) sys _getframef_localsgetAssertionErrorr#r noseclassesr!run)Z file_to_runr#fnoser!rrrr @s#   c@sPeZdZdZdddZdd Zd d Zd d ZdddZdddZ dddZ dS)r a 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|dkr d}d}|dkr\td|}|jdd}|dkr@ttj|}|jdd}n2t|t trtj|j }t |dd}nt |}||_ |dkrt|}||_||_||_dS)Nr-rr __name__)r$r%r&r'r(rrdirname isinstancetyper getattrstr package_pathr package_nameraise_warningscheck_fpu_mode)selfpackager6depthr7r5r+r4rrr__init__s(  zNoseTester.__init__cCslt|jdg}|rB|dkrBt|ts*td|dkr6d}|d|g7}|dt|g7}|dg7}|rh||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)r r4r0r TypeErrorr3)r8labelverbose extra_argvr#rrr _test_argvs     zNoseTester._test_argvcCst}ddl}td|j|jdddjj}td|tj |j }td|d|j krddl }td |jtj |j }td |t jd d }td |td|jdS)NrzNumPy version %s) rC)orderz&NumPy relaxed strides checking option:zNumPy is installed in %srzSciPy version %szSciPy is installed in %s zPython version %sznose version %d.%d.%d)rrprint __version__Zonesflags f_contiguousrrr/r r5rr$versionreplaceZ__versioninfo__)r8r,rZrelaxed_stridesZnpdirrZspdirZ 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)rO)r8rOrrr_get_custom_doctesters z NoseTester._get_custom_doctesterr=rcCst||||}|r.|d|jdddg7}|rb|dkrF|dg7}nt|trb|ddt|g7}dd l}dd lm} d d l m } m } m } | g} | d d|j jj D7} |jr| | g7} |dg7}z&| }|| dd|j D7} Wntk rYnXd|k}|dkr |r d}|}|d krJ|r|s|dg7}n6|rZ|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=%sz--with-coveragez --cover-testsz --cover-eraseTz --with-timerz --timer-top-nrN)EntryPointPluginManagerr)r! UnpluggerFPUModeCheckPlugincSsg|] }|qSrr.0prrr +sz0NoseTester.prepare_test_args..z--with-fpumodecheckplugincSsg|]}|qSrrrTrrrrW3sz--with-doctestFdoctestz--with-)rrBr5r0intr3Znose.plugins.builtinZ nose.pluginsrQr)r!rRrSpluginsbuiltinr7Z loadPlugins ImportErrorrPremovename)r8r?r@rAdoctestscoveragetimerr#r,rQr!rRrSrZZentrypoint_managerZ doctest_argvZplugrrrprepare_test_args sN          zNoseTester.prepare_test_argsc Cst|d}ddlm}||_|||||||\} } |rHtd|jntd|j|ddl} d| _ |dkrz|j }t t fdd } t |tr| |}td R} ttd |D]}tjd |d q| jdd| jdd| jdd| jtjd | jdd| jddttd ddlm}W5QRX| jt|dtjjdkrtjrddl}| jt d|d| jt dd| jt dd| jt dd| jt dd| jt ddtjddt d d!dd"l!m"}|| d#| d$}W5QRX|j#S)%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 %szRunning unit tests for %srNr)developr-locationalwayserror)categoryzNot importing directory)messageznumpy.dtype size changedznumpy.ufunc size changedz.*boolean negative.*z.*boolean subtract.*)cpuinfo)rimodulez(sys\.exc_clear\(\) not supported in 3\.x)rlzin 3\.x, __setslice__zin 3\.x, __getslice__z buffer\(\) not supported in 3\.xz%CObject type is not supported in 3\.xz-comparing unequal types not supported in 3\.xignorez.*getargspec.*znose\.)rjrirl)NumpyTestProgramF)r#exitrZ)$minrGrdr@rbrHr5rNrXZmasterr6dictWarningr0rrwarnings resetwarningsfilterwarningsfilternpZModuleDeprecationWarningcatch_warnings simplefilter distutilsrk UserWarningr$ version_infomajorZ py3kwarning threadingDeprecationWarningr)roresult)r8r?r@rAr_r`r6rardr#rZrXZ _warn_optssupZ warningtyperkrrotrrrtestIsrG             zNoseTester.testcCs`td|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 %sz--matchz(?:^|[\\b_\\.%s-])[Bb]enchr)rRrXr") rHr5rNrBrseprr)rRr*)r8r?r@rAr#r,rRZ add_pluginsrrrbenchs:  zNoseTester.bench)Nr-rF)r=rNFFF)r=rNFFNF)r=rN) r. __module__ __qualname____doc__r;rBrNrPrbrrrrrrr ss() )%  @ cCs,ttdrdtjkrd}nd}t|dddS)NrIz.dev0rer-rT)r6r:r7)hasattrrxrIr )moderrrr ,s )NN)r __future__rrrrr$rtZ numpy.compatrrrxrdrr__all__r r objectr r rrrrs( ) 3<