
     hK                     p    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 Z
ddZ G d d	          Z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                 x   | dd         }g }d| v sd| v rDt           j                            |           \  } }|dv rn|                    |           d| v @d| v D|sd|v rdS dS |                                 |d                             d          r|                    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p2s       ]/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/numpy/testing/_private/nosetester.pyr   r      s      {HH
X
%
%H)D)Dw}}X.."333	 X
%
%H)D)D  h77  {F## Q88H    c                    | 8t          j        d          }|j                            dd          } | t          |t           j        | gz   }n|| gz   }t                      }ddlm} |	                    | |            g           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argv
addplugins)
sys	_getframef_localsgetAssertionErrorr"   r   noseclassesr    run)file_to_runr"   fnoser    s        r   r   r   =   s    F M!jnnZ66  |x;-'{m#==D//////HH$$6$6$8$8#9H:::::r   c                   R    e Zd ZdZ	 	 ddZd Zd Zd	 Z	 	 ddZ	 	 	 ddZ	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                 *   |d}d }|vt          j        d|z             }|j                            dd           }|t          t
          j                            |          }|j                            dd           }ngt          |t          t
                              r6t
          j                            |j
                  }t          |dd           }nt          |          }|| _        |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packager9   depthr:   r8   r,   r7   s           r   __init__zNoseTester.__init__   s    !&N?a%i((A:>>*d;;L#$$7??<88L:>>*d;;LLb** 	(7??7+;<<L"7J==LLw<<L( +L99L( - -r   c                     t           | j        dg}|r9|dk    r3t          |t                    st	          d          |dk    rd}|d|gz  }|dt          |          gz  }|dgz  }|r||z  }|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   r7   r3   r6   	TypeError)r;   labelverbose
extra_argvr"   s        r   
_test_argvzNoseTester._test_argv   s    " $+T2 	"Uf__eS)) F DEEE"T5M!DG-- 		 	JDr   c                 l   t                      }dd l}t          d|j                    |                    dd          j        j        }t          d|           t          j        	                    |j
                  }t          d|            d| j        v rQdd l}t          d	|j                    t          j        	                    |j
                  }t          d
|            t          j                            dd          }t          d|            t          d|j        z             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__onesflagsf_contiguousr   r   r2   r   r8   r   r$   versionreplace__versioninfo__)r;   r-   r   relaxed_stridesnpdirr   spdir	pyversions           r   _show_system_infozNoseTester._show_system_info   s.   }}2u022333**WC*88>K6HHH//.u..///d'''LLL65#466777GOOEN33E2522333K''b11	+	++,,,%(<<=====r   c                 "    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)   r[   )r;   r[   s     r   _get_custom_doctesterz NoseTester._get_custom_doctester   s"     	.-----|~~r   rA   r   c                    t                       |                     |||          }|r|d| j         dddgz  }|r5|du r|dgz  }n*t          |t                    r|ddt          |          gz  }dd	l}dd
lm}	 ddl	m
}
m}m}  |
            g}|d |j        j        j        D             z  }| j        r| |            gz  }|dgz  }	  |	            }|                                 |d |j        D             z  }n# t"          $ r Y nw xY wd|v }|dk    r|rd}|                                 }||r|s|dgz  }n7|r|                    d           | |d          |gz  }|r|d|j        z   gz  }||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                 "    g | ]} |            S  rb   .0ps     r   
<listcomp>z0NoseTester.prepare_test_args.<locals>.<listcomp>(  s    >>>AAACC>>>r   z--with-fpumodecheckpluginc                     g | ]}|S rb   rb   rc   s     r   rf   z0NoseTester.prepare_test_args.<locals>.<listcomp>0  s    >>>a>>>r   z--with-doctestFdoctestz--with-)r   rF   r8   r3   intr6   nose.plugins.builtinnose.pluginsr^   r)   r    r_   r`   pluginsbuiltinr:   loadPluginsImportErrorr\   removename)r;   rC   rD   rE   doctestscoveragetimerr"   r-   r^   r    r_   r`   rl   entrypoint_managerdoctest_argvplugs                    r   prepare_test_argszNoseTester.prepare_test_args  sd    	ugz:: 	5;(9;;=N"O5 5D  	F}}((E3'' F#e**EE 	$###888888	6 	6 	6 	6 	6 	6 	6 	6 	6 	6%%''(>>!5!=>>>> 	2**,,--G011D	!8!8!:!:**,,,>>#5#=>>>>GG 	 	 	D	
 (4/uH))++< + +)** .,---		),,d33G 0TY.//W}s   	2C< <
D	D	c                    t          |d          }ddlm} ||_        |                     ||||||          \  }	}
|rt          d| j                    nt          d| j                    |                                  ddl}d|_	        || j
        }t          t          fd	          }t          |t                    r||         }t          d
          5 }t!          j                     t!          j        d           |D ]}t!          j        d|           |                    d           |                    d           |                    d           |                    t(          j                   |                    d           |                    d           t!          j                    5  t!          j        d           ddlm} ddd           n# 1 swxY w Y   |                    t4          |           t!          j        ddt6          d           ddlm}  ||	d|
          }ddd           n# 1 swxY w 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   Nrb   )developr/   locationalwayserror)categoryzNot importing directory)messageznumpy.dtype size changedznumpy.ufunc size changedz.*boolean negative.*z.*boolean subtract.*)cpuinfo)r   moduleignorez.*getargspec.*znose\.)r   r   r   )NumpyTestProgramF)r"   exitrl   )minrL   r{   rD   rx   rM   r8   rY   rh   masterr9   dictWarningr3   r6   r   warningsresetwarningsfilterwarningsfilternpModuleDeprecationWarningcatch_warningssimplefilter	distutilsr   UserWarningDeprecationWarningr)   r   result)r;   rC   rD   rE   rr   rs   r9   rt   r{   r"   rl   rh   
_warn_optssupwarningtyper   r   ts                     r   testzNoseTester.testF  s<   N gq//..w
HhG Gg  	AL9JLLMMMM?D,=??@@@    	!!0N7*"$& & &
nc** 	8'7Nz** %	Ic "$$$ #H---- G G'+FFFFFJJ8J999JJ9J:::JJ9J:::JJ ;J<<< JJ5J666JJ5J666 (** 1 1%h///0000001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 JJGJ<<< #H6F-?+46 6 6 6 655555  dHHHAK%	I %	I %	I %	I %	I %	I %	I %	I %	I %	I %	I %	I %	I %	I %	IN xs8   C$I;G"I"G&	&I)G&	*AII
I
c                    t          d| j                    |                                  |                     |||          }|ddt          j        z  gz  }t                      }ddlm}  |d          g}|	                    ||          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   )r_   rh   r!   )
rM   r8   rY   rF   r   sepr   r)   r_   r*   )r;   rC   rD   rE   r"   r-   r_   add_pluginss           r   benchzNoseTester.bench  s    t 	;(9;;<<<   ugz::9BFBCC }} 	+***** y++,xxTkx:::r   )Nr/   r   F)rA   r   NFFF)rA   r   NFFNF)rA   r   N)r1   
__module____qualname____doc__r>   rF   rY   r\   rx   r   r   rb   r   r   r   r   p   s        ( (R FG %'- '- '- '-R# # #J> > >(   EI@E> > > >@ 8<<@I I I IVG; G; G; G; G; G;r   r   c                  v    t          t          d          rdt          j        v rd} nd} t          | dd          S )NrN   z.dev0r|   r/   r   T)r9   r=   r:   )hasattrr   rN   r   )modes    r   r	   r	     sJ    r=!! g&?&?T%)+ + + +r   )NN)r   r   r$   r   r   r   r{   r   r   __all__r   r   r   r	   rb   r   r   <module>r      s     
			 



      1 1 1 1 1 1 1 1     
& & &R0; 0; 0; 0;fh; h; h; h; h; h; h; h;V+ + + + +r   