a
    hÝEbëK  ã                   @   sh   d Z ddlZddlZddlZddlZddlmZmZ g d¢Z	dd„ Z
ddd	„ZG d
d„ dƒZdd„ ZdS )ze
Nose test running.

This module implements ``test()`` and ``bench()`` functions for NumPy modules.

é    Né   )Úimport_noseÚsuppress_warnings)Úget_package_nameÚrun_module_suiteÚ
NoseTesterÚ_numpy_testerr   r   r   c                 C   s„   | dd… }g }d| v s d| v rFt j | ¡\} }|dv r:qF| |¡ q|sZd|v rVdS dS | ¡  |d  d¡rz| d¡ d	 |¡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
   ÚscipyÚnumpyr   z.eggÚ.)ÚosÚpathÚsplitÚappendÚreverseÚendswithÚpopÚjoin)ÚfilepathÚfullpathÚpkg_nameÚp2© r   úa/home/ja/django-apps/lartica_env/lib/python3.9/site-packages/numpy/testing/_private/nosetester.pyr      s    
r   c                 C   st   | du r,t  d¡}|j dd¡} | du r,t‚|du rBt j| g }n
|| g }tƒ }ddlm} |j	||ƒ gd� dS )aæ  
    Run a test module.

    Equivalent to calling ``$ nosetests <argv> <file_to_run>`` 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__)ÚKnownFailurePlugin©ÚargvZ
addplugins)
ÚsysÚ	_getframeÚf_localsÚgetÚAssertionErrorr   r   Únoseclassesr   Úrun)Zfile_to_runr   ÚfÚnoser   r   r   r   r   =   s    #

r   c                   @   sP   e Zd ZdZddd„Zdd	„ Zd
d„ Zdd„ Zddd„Zddd„Z	ddd„Z
dS )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.

    NÚreleaser   Fc                 C   sº   |d u rd}d }|d u r\t  d| ¡}|j dd ¡}|d u r@t‚tj |¡}|j dd ¡}n2t|t	tƒƒr†tj |j
¡}t|dd ƒ}nt|ƒ}|| _|d u r¤t|ƒ}|| _|| _|| _d S )Nr)   r   r   Ú__name__)r    r!   r"   r#   r$   r   r   ÚdirnameÚ
isinstanceÚtyper   ÚgetattrÚstrÚpackage_pathr   Úpackage_nameÚraise_warningsÚcheck_fpu_mode)ÚselfÚpackager2   Údepthr3   r1   r'   r0   r   r   r   Ú__init__š   s(    
zNoseTester.__init__c                 C   sl   t | jdg}|rB|dkrBt|tƒs*tdƒ‚|dkr6d}|d|g7 }|dt|ƒg7 }|dg7 }|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-sÚfullz"Selection label should be a stringÚfastznot slowz-Az--verbosityz--exe)r   r0   r,   r/   Ú	TypeError)r4   ÚlabelÚverboseÚ
extra_argvr   r   r   r   Ú
_test_argvÃ   s    

zNoseTester._test_argvc                 C   sÂ   t ƒ }dd l}td|j› �ƒ |jddd�jj}td|ƒ tj 	|j
¡}td|› �ƒ d| jv r”dd l}td	|j› �ƒ tj 	|j
¡}td
|› �ƒ tj dd¡}td|› �ƒ td|j ƒ d S )Nr   zNumPy version )é
   r   ÚC)Úorderz&NumPy relaxed strides checking option:zNumPy is installed in r   zSciPy version zSciPy is installed in Ú
Ú zPython version znose version %d.%d.%d)r   r   ÚprintÚ__version__ZonesÚflagsÚf_contiguousr   r   r+   r   r1   r   r    ÚversionÚreplaceZ__versioninfo__)r4   r(   r   Zrelaxed_stridesZnpdirr   ZspdirZ	pyversionr   r   r   Ú_show_system_infoè   s    

zNoseTester._show_system_infoc                 C   s   ddl m} |ƒ 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%   rK   )r4   rK   r   r   r   Ú_get_custom_doctesterü   s    z NoseTester._get_custom_doctesterr9   r   c                 C   sˆ  t ƒ  |  |||¡}|r0|d| j› �dddg7 }|rd|du rH|dg7 }nt|tƒrd|ddt|ƒg7 }dd	l}dd
lm}	 ddl	m
}
m}m} |
ƒ g}|dd„ |jjjD ƒ7 }| jrÈ||ƒ g7 }|dg7 }z&|	ƒ }| ¡  |dd„ |jD ƒ7 }W n t�y   Y n0 d|v }|dk�r |�r d}|  ¡ }|d	u �rJ|�r€|�s€|dg7 }n6|�rZ| d¡ ||dƒ|g7 }|�r€|d|j g7 }||fS )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-nr   N)ÚEntryPointPluginManagerr   )r   Ú	UnpluggerÚFPUModeCheckPluginc                 S   s   g | ]
}|ƒ ‘qS r   r   ©Ú.0Úpr   r   r   Ú
<listcomp>(  ó    z0NoseTester.prepare_test_args.<locals>.<listcomp>z--with-fpumodecheckpluginc                 S   s   g | ]}|‘qS r   r   rP   r   r   r   rS   0  rT   z--with-doctestFÚdoctestz--with-)r   r>   r1   r,   Úintr/   Znose.plugins.builtinZnose.pluginsrM   r%   r   rN   rO   ÚpluginsÚbuiltinr3   ZloadPluginsÚImportErrorrL   ÚremoveÚname)r4   r;   r<   r=   ÚdoctestsÚcoverageÚtimerr   r(   rM   r   rN   rO   rW   Zentrypoint_managerZdoctest_argvZplugr   r   r   Úprepare_test_args  sL    ÿ



zNoseTester.prepare_test_argsc              	   C   s¼  t |dƒ}ddlm} ||_|  ||||||¡\}	}
|rJtd| j› �ƒ ntd| j› �ƒ |  ¡  ddl}d|_	|du r~| j
}ttfdd	�}t|tƒrž|| }td
ƒ�þ}t ¡  t d¡ |D ]}tjd|d� q¾|jdd� |jdd� |jdd� |jtjd� |jdd� |jdd� t ¡ �& t d¡ ddlm} W d  ƒ n1 �sR0    Y  |jt|d� tjddtdd� ddlm} ||	d|
d�}W d  ƒ n1 �s¬0    Y  |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 <https://pypi.org/project/coverage/>`_).
        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 zRunning unit tests for r   Nr   )Údevelopr)   ÚlocationÚalwaysÚerror)ÚcategoryzNot importing directory)Úmessageznumpy.dtype size changedznumpy.ufunc size changedz.*boolean negative.*z.*boolean subtract.*)Úcpuinfo)rf   ÚmoduleÚignorez.*getargspec.*znose\.)rg   rf   ri   )ÚNumpyTestProgramF)r   ÚexitrW   )ÚminrC   ra   r<   r_   rD   r1   rJ   rU   Zmasterr2   ÚdictÚWarningr,   r/   r   ÚwarningsÚresetwarningsÚfilterwarningsÚfilterÚnpZModuleDeprecationWarningÚcatch_warningsÚsimplefilterÚ	distutilsrh   ÚUserWarningÚDeprecationWarningr%   rk   Úresult)r4   r;   r<   r=   r\   r]   r2   r^   ra   r   rW   rU   Z
_warn_optsÚsupZwarningtyperh   rk   Útr   r   r   ÚtestF  sR    G
ÿÿ




,þ.zNoseTester.testc                 C   sb   t d| j› �ƒ |  ¡  |  |||¡}|ddtj g7 }tƒ }ddlm} |dƒg}|j	||d�S )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

        zRunning benchmarks for z--matchz(?:^|[\\b_\\.%s-])[Bb]enchr   )rN   rU   r   )
rD   r1   rJ   r>   r   Úsepr   r%   rN   r&   )r4   r;   r<   r=   r   r(   rN   Zadd_pluginsr   r   r   ÚbenchÑ  s    :
zNoseTester.bench)Nr)   r   F)r9   r   NFFF)r9   r   NFFNF)r9   r   N)r*   Ú
__module__Ú__qualname__Ú__doc__r7   r>   rJ   rL   r_   r}   r   r   r   r   r   r   p   s    )  ÿ
)%
  ÿ
@   þ
 r   c                  C   s,   t tdƒrdtjv rd} nd} t| ddd�S )NrE   z.dev0rb   r)   r   T)r2   r6   r3   )Úhasattrrt   rE   r   )Úmoder   r   r   r     s    ÿr   )NN)r‚   r   r    rp   r   rt   ra   r   r   Ú__all__r   r   r   r   r   r   r   r   Ú<module>   s   )
3   .