§
    fŠtj÷/  ã                   óÂ  — d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
mZ ddlZddlZ	 ddlZddlmZ ddlmZ dZ ej        e¦  «         ej        e¦  «        k     rdZn# e$ r dZY nw xY wg d¢ZdZ ej        d	¦  «        pd
Zdev rdZdej        d         v Z G d„ de¦  «        Z  G d„ d¦  «        Z! G d„ d¦  «        Z"d„ Z#d„ Z$d„ Z%d„ Z&d„ Z'd„ Z(dS )z
Generic test utilities.

é    N)Úmodule_from_specÚspec_from_file_location)Úversion)Ú_pep440z3.0.8)ÚPytestTesterÚcheck_free_memoryÚ_TestPythranFuncÚIS_MUSLFÚHOST_GNU_TYPEÚ ÚmuslTÚeditablec                   ó   — e Zd ZdZdS )ÚFPUModeChangeWarningzWarning about FPU mode changeN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úS/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/scipy/_lib/_testutils.pyr   r   3   s   € € € € € Ø'Ð'Ø€Dr   r   c                   ó$   — e Zd ZdZd„ Z	 	 dd„ZdS )	r   a"  
    Run tests for this namespace

    ``scipy.test()`` runs tests for all of SciPy, with the default settings.
    When used from a submodule (e.g., ``scipy.cluster.test()``, only the tests
    for that namespace are run.

    Parameters
    ----------
    label : {'fast', 'full'}, optional
        Whether to run only the fast tests, or also those marked as slow.
        Default is 'fast'.
    verbose : int, optional
        Test output verbosity. Default is 1.
    extra_argv : list, optional
        Arguments to pass through to Pytest.
    doctests : bool, optional
        Whether to run doctests or not. Default is False.
    coverage : bool, optional
        Whether to run tests with code coverage measurements enabled.
        Default is False.
    tests : list of str, optional
        List of module names to run tests for. By default, uses the module
        from which the ``test`` function is called.
    parallel : int, optional
        Run tests in parallel with pytest-xdist, if number given is larger than
        1. Default is 1.

    c                 ó   — || _         d S ©N)Úmodule_name)Úselfr   s     r   Ú__init__zPytestTester.__init__V   s   € Ø&ˆÔÐÐr   Úfasté   NFc                 óæ  — dd l }t          j        | j                 }	t          j                             |	j        d         ¦  «        }
ddg}|€g }||z  }t          d„ |D ¦   «         ¦  «        rt          d¦  «        ‚|r/t          |¦  «        dk    r|ddt          |¦  «        dz
  z  z   gz  }|r	|d	|
z   gz  }|d
k    r|ddgz  }n|dk    r|d|gz  }|€| j        g}|�D|dk    r>t          ¦   «         r|dt          |¦  «        gz  }ndd l}|                     dd¬¦  «         |dgt          |¦  «        z   z  }	 |                     |¦  «        }n# t"          $ r}|j        }Y d }~nd }~ww xY w|dk    S )Nr   z--showlocalsz
--tb=shortc              3   ó.   K  — | ]}|d k    p|dk    V — ŒdS )ú-mz	--markersNr   )Ú.0Úargs     r   ú	<genexpr>z(PytestTester.__call__.<locals>.<genexpr>e   s0   è è € ÐGÐG°Sˆs�dŠ{Ð0˜c [Ò0ÐGÐGÐGÐGÐGÐGr   zMust specify -m before --r   ú-Úvz--cov=r   r"   znot slowÚfullz-nzMCould not run tests in parallel because pytest-xdist plugin is not available.é   )Ú
stacklevelz--pyargs)ÚpytestÚsysÚmodulesr   ÚosÚpathÚabspathÚ__path__ÚanyÚ
ValueErrorÚintÚ_pytest_has_xdistÚstrÚwarningsÚwarnÚlistÚmainÚ
SystemExitÚcode)r   ÚlabelÚverboseÚ
extra_argvÚdoctestsÚcoverageÚtestsÚparallelr+   ÚmoduleÚmodule_pathÚpytest_argsr7   r<   Úexcs                  r   Ú__call__zPytestTester.__call__Y   sâ  € àˆˆˆå”˜TÔ-Ô.ˆÝ”g—o’o f¤o°aÔ&8Ñ9Ô9ˆà% |Ð4ˆàÐØˆJØ�zÑ!ˆÝÐGÐG¸JÐGÑGÔGÑGÔGð 	:åÐ8Ñ9Ô9Ð9àð 	8•s˜7‘|”| aÒ'Ð'Ø˜C #¥s¨7¡|¤|°A¡~Ñ"6Ñ6Ð7Ñ7ˆKàð 	4Ø˜H {Ñ2Ð3Ñ3ˆKà�FŠ?ˆ?Ø˜D *Ð-Ñ-ˆKˆKØ�fŠ_ˆ_Ø˜D %˜=Ñ(ˆKàˆ=ØÔ%Ð&ˆEàÐ H¨q¢L LÝ Ñ"Ô"ð ,Ø ¥c¨(¡m¤mÐ4Ñ4��à���Ø—’ð Fà)*ð ñ ,ô ,ð ,ð 	˜
�|¥d¨5¡k¤kÑ1Ñ1ˆð	Ø—;’;˜{Ñ+Ô+ˆDˆDøÝð 	ð 	ð 	Ø”8ˆDˆDˆDˆDˆDˆDøøøøð	øøøð ˜’	Ðs   Ä9E Å
E*ÅE%Å%E*)r   r   NFFNN)r   r   r   r   r   rH   r   r   r   r   r   8   sK   € € € € € ðð ð:'ð 'ð 'ð KPØ6:ð.ð .ð .ð .ð .ð .r   r   c                   óÀ   — e Zd ZdZej        ej        ej        ej        ej	        ej
        gZej        ej        gZej        ej        gZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd	S )
r	   aL  
    These are situations that can be tested in our pythran tests:
    - A function with multiple array arguments and then
      other positional and keyword arguments.
    - A function with array-like keywords (e.g. `def somefunc(x0, x1=None)`.
    Note: list/tuple input is not yet tested!

    `self.arguments`: A dictionary which key is the index of the argument,
                      value is tuple(array value, all supported dtypes)
    `self.partialfunc`: A function used to freeze some non-array argument
                        that of no interests in the original function
    c                 ó0   — i | _         d | _        d | _        d S r   )Ú	argumentsÚpartialfuncÚexpected)r   s    r   Úsetup_methodz_TestPythranFunc.setup_method›   s   € ØˆŒØˆÔØˆŒˆˆr   c                 ó´   — t          j        |¦  «        }i }|j                             ¦   «         D ]'\  }}|j        t           j        j        ur
|j        ||<   Œ(|S r   )ÚinspectÚ	signatureÚ
parametersÚitemsÚdefaultÚ	ParameterÚempty)r   ÚfuncrQ   Úoptional_argsÚkr'   s         r   Úget_optional_argsz"_TestPythranFunc.get_optional_args    sa   € õ Ô% dÑ+Ô+ˆ	ØˆØÔ(×.Ò.Ñ0Ô0ð 	-ð 	-‰DˆAˆqØŒy¥Ô 1Ô 7Ð7Ð7Ø#$¤9�˜aÑ øØÐr   c                 ón   — d}| j         D ]*}t          | j         |         d         ¦  «        }||k    r|}Œ+|S )Nr   r   )rK   Úlen)r   Úmax_lenÚarg_idxÚcur_lens       r   Úget_max_dtype_list_lengthz*_TestPythranFunc.get_max_dtype_list_lengthª   sG   € àˆØ”~ð 	"ð 	"ˆGÝ˜$œ.¨Ô1°!Ô4Ñ5Ô5ˆGØ˜Ò Ð Ø!�øØˆr   c                 óN   — |t          |¦  «        dz
  k    r|d         S ||         S )Nr   éÿÿÿÿ)r\   )r   Ú
dtype_listÚ	dtype_idxs      r   Ú	get_dtypez_TestPythranFunc.get_dtype³   s/   € ð •s˜:‘” qÑ(Ò(Ð(Ø˜b”>Ð!à˜iÔ(Ð(r   c                 ó:  — t          |                      ¦   «         ¦  «        D ]x}g }| j        D ]b}|                      | j        |         d         |¦  «        }|                     | j        |         d                              |¦  «        ¦  «         Œc | j        |Ž  Œyd S )Nr   r   )Úranger`   rK   re   ÚappendÚastypeÚpythranfunc)r   Útype_idxÚ
args_arrayr^   Ú	new_dtypes        r   Útest_all_dtypesz _TestPythranFunc.test_all_dtypes»   s¯   € Ý˜d×<Ò<Ñ>Ô>Ñ?Ô?ð 	*ð 	*ˆHØˆJØœ>ð Pð P�Ø ŸNšN¨4¬>¸'Ô+BÀ1Ô+EØ+3ñ5ô 5�	à×!Ò! $¤.°Ô"9¸!Ô"<×"CÒ"CÀIÑ"NÔ"NÑOÔOÐOÐOØˆDÔ˜jÐ)Ð)Ð)ð	*ð 	*r   c                 ó¢   — g }| j         D ]:}|                     | j         |         d         d d d…         d d d…         ¦  «         Œ; | j        |Ž  d S )Nr   rb   )rK   rh   rj   ©r   rl   r^   s      r   Ú
test_viewsz_TestPythranFunc.test_viewsÄ   si   € Øˆ
Ø”~ð 	Fð 	FˆGØ×Ò˜dœn¨WÔ5°aÔ8¸¸¸2¸Ô>¸t¸tÀ¸tÔDÑEÔEÐEÐEØˆÔ˜*Ð%Ð%Ð%Ð%r   c                 óº   — g }| j         D ]F}|                     t          j        | j         |         d         dd¬¦  «        d d d…         ¦  «         ŒG | j        |Ž  d S )Nr   r)   )Úaxis)rK   rh   ÚnpÚrepeatrj   rp   s      r   Útest_stridedz_TestPythranFunc.test_stridedÊ   s   € Øˆ
Ø”~ð 	9ð 	9ˆGØ×Ò�bœi¨¬°wÔ(?ÀÔ(BØ()°ð3ñ 3ô 3Ø36°3°Q°3ô8ñ 9ô 9ð 9ð 9àˆÔ˜*Ð%Ð%Ð%Ð%r   N)r   r   r   r   rt   Úint8Úint16Úint32Úint64ÚintcÚintpÚALL_INTEGERÚfloat32Úfloat64Ú	ALL_FLOATÚ	complex64Ú
complex128ÚALL_COMPLEXrN   rZ   r`   re   rn   rq   rv   r   r   r   r	   r	   Š   sÃ   € € € € € ðð ð ”7˜BœH b¤h°´¸"¼'À2Ä7ÐK€KØ”˜RœZÐ(€IØ”< ¤Ð/€Kðð ð ð
ð ð ðð ð ð)ð )ð )ð*ð *ð *ð&ð &ð &ð&ð &ð &ð &ð &r   r	   c                  ó(   — ddl m}   | d¦  «        duS )zQ
    Check if the pytest-xdist plugin is installed, providing parallel tests
    r   ©Ú	find_specÚxdistN)Úimportlib.utilr†   r…   s    r   r5   r5   Ò   s+   € ð
 )Ð(Ð(Ð(Ð(Ð(Øˆ9�WÑÔ TÐ)Ð)r   c                 ó\  — ddl }	 t          t          j        d         ¦  «        }d                     | t          j        d         ¦  «        }n@# t
          $ r3 t          ¦   «         }|€|                     d¦  «         | › d|dz  › d�}Y nw xY w|| dz  k     r|                     |¦  «         dS dS )	zJ
    Check *free_mb* of memory is available, otherwise do pytest.skip
    r   NÚSCIPY_AVAILABLE_MEMz={} MB memory required, but environment SCIPY_AVAILABLE_MEM={}zlCould not determine available memory; set SCIPY_AVAILABLE_MEM variable to free memory in MB to run the test.z MB memory required, but ç    €„.Az MB available)r+   Ú_parse_sizer.   ÚenvironÚformatÚKeyErrorÚ_get_mem_availableÚskip)Úfree_mbr+   Úmem_freeÚmsgs       r   r   r   Û   sê   € ð €M€M€Mð	OÝ�rœzÐ*?Ô@ÑAÔAˆØM×TÒTØ•R”ZÐ 5Ô6ñ8ô 8ˆˆøåð Oð Oð OÝ%Ñ'Ô'ˆØÐØ�KŠKð Iñ Jô Jð JàÐNÐN°8¸C±<ÐNÐNÐNˆˆˆðOøøøð �'˜C‘-ÒÐØ�Š�CÑÔÐÐÐð  Ðs   †AA Á:B	ÂB	c                 ó   — dddddddddddddd	d
œ}t          j        d                     d                     |                     ¦   «         ¦  «        ¦  «        | t           j        ¦  «        }|r|                     d¦  «        |vrt          d¦  «        ‚t          |                     d¦  «        ¦  «        ||                     d¦  «                 z  S )Nr‹   g      ð?ç     @�@g    eÍÍAg   ¢”mBg      �@g      0Ag      ÐAg      pB)r   ÚbrY   ÚMÚGÚTÚkbÚMbÚGbÚTbÚkibÚMibÚGibÚTibz^\s*(\d+)\s*({})\s*$ú|r)   zInvalid size stringr   )	ÚreÚmatchrŽ   ÚjoinÚkeysÚIÚgroupr3   Úfloat)Úsize_strÚsuffixesÚms      r   rŒ   rŒ   ð   sÊ   € ØØØ˜s¨°4Ø ¨C°tØ i¸	È)ð	Uð U€Hõ
 	ŒÐ(×/Ò/°·²¸¿º¹¼Ñ0IÔ0IÑJÔJØÝ”ñ	ô 	€Að ð 0�—’˜‘
”
 (Ð*Ð*ÝÐ.Ñ/Ô/Ð/å�—’˜‘”ÑÔ˜x¨¯ª°©
¬
Ô3Ñ3Ð3r   c                  óú  — 	 ddl } |                      ¦   «         j        S # t          t          f$ r Y nw xY wt
          j                             d¦  «        r¦i }t          d¦  «        5 }|D ]\}| 	                    ¦   «         }t          |d         ¦  «        dz  ||d                              d¦  «                             ¦   «         <   Œ]	 ddd¦  «         n# 1 swxY w Y   d|v r|d         S |d	         |d
         z   S dS )zD
    Get information about memory available, not counting swap.
    r   NÚlinuxz/proc/meminfor   r–   ú:ÚmemavailableÚmemfreeÚcached)ÚpsutilÚvirtual_memoryÚ	availableÚImportErrorÚAttributeErrorr,   ÚplatformÚ
startswithÚopenÚsplitrª   ÚstripÚlower)r´   ÚinfoÚfÚlineÚps        r   r�   r�   ÿ   sc  € ðØˆˆˆØ×$Ò$Ñ&Ô&Ô0Ð0øÝ�Ð(ð ð ð Øˆðøøøõ „|×Ò˜wÑ'Ô'ð 4ØˆÝ�/Ñ"Ô"ð 	B aØð Bð B�Ø—J’J‘L”L�Ý05°a¸´d±´¸cÑ0A��Q�q”T—Z’Z ‘_”_×*Ò*Ñ,Ô,Ñ-Ð-ðBð	Bð 	Bð 	Bñ 	Bô 	Bð 	Bð 	Bð 	Bð 	Bð 	Bð 	Bøøøð 	Bð 	Bð 	Bð 	Bð
 ˜TÐ!Ð!à˜Ô'Ð'à˜	”? T¨(¤^Ñ3Ð3àˆ4s   ‚ Ÿ3²3Á&A CÃCÃCc                 óÎ  ‡‡	— ddl }	 t          j        ddg¦  «         n%# t          $ r |                     d¦  «         Y nw xY w| t          t          j        ¦   «         ¦  «        z  } t          j	         
                    |¦  «        d         }t          j        || |z  ¦  «         | |z  dz  dz  }|d	z  Š	t          j        ‰	d
¬¦  «         t          |dz  ¦  «        }t          |d¦  «        5 }|                     d¦  «         |                     dt           j        › d�¦  «         ddd¦  «         n# 1 swxY w Y   t           j        dk    r+t          j        dddd|dt          |¦  «        g‰	¬¦  «         n(t          j        ddd|t          |¦  «        g‰	¬¦  «         t          j        g d¢‰	¬¦  «         t'          j        d¦  «        Šˆˆ	fd„} |d¦  «         |d¦  «        fS )z•
    Helper function to test building and importing Cython modules that
    make use of the Cython APIs for BLAS, LAPACK, optimize, and special.
    r   NÚmesonz	--versionzNo usable 'meson' foundr   rB   Ú_cython_examplesÚbuildT)Úexist_okzinterpreter-native-file.iniÚwz[binaries]
z
python = 'ú'Úwin32Úsetupz--buildtype=releasez--native-filez--vsenv)Úcwd)rÄ   Úcompilez-vvÚ
EXT_SUFFIXc                 óª   •— ‰| z                        ‰¦  «        }t          | |¦  «        }t          |¦  «        }|j                             |¦  «         |S r   )Úwith_suffixr   r   ÚloaderÚexec_module)ÚmodnameÚsoÚspecÚmodÚsuffixÚ
target_dirs       €€r   Úloadz$_test_cython_extension.<locals>.loadE  sR   ø€ Ø˜7Ñ"×/Ò/°Ñ7Ô7ˆÝ& w°Ñ3Ô3ˆÝ˜tÑ$Ô$ˆØŒ×Ò Ñ$Ô$Ð$Øˆ
r   Ú	extendingÚextending_cpp)r+   Ú
subprocessÚ
check_callÚFileNotFoundErrorr‘   r6   Ú	threadingÚ	get_identr.   r/   r¼   ÚshutilÚcopytreeÚmakedirsr»   Úwriter,   Ú
executabler¹   Ú	sysconfigÚget_config_var)
Útmp_pathÚsrcdirr+   Úmod_nameÚ	build_dirÚnative_filerÀ   rÙ   r×   rØ   s
           @@r   Ú_test_cython_extensionrí     s�  øø€ ð
 €M€M€Mð/ÝÔ˜w¨Ð4Ñ5Ô5Ð5Ð5øÝð /ð /ð /Ø�ŠÐ-Ñ.Ô.Ð.Ð.Ð.ð/øøøð �#�iÔ1Ñ3Ô3Ñ4Ô4Ñ4€Hõ Œw�}Š}˜VÑ$Ô$ QÔ'€HÝ
„O�F˜H xÑ/Ñ0Ô0Ð0Ø˜8Ñ# gÑ-Ð0BÑB€IØ˜WÑ$€JÝ„K�
 TÐ*Ñ*Ô*Ð*õ �iÐ"?Ñ?Ñ@Ô@€KÝ	ˆk˜3Ñ	Ô	ð 0 1Ø	�Š�ÑÔÐØ	�ŠÐ.�Sœ^Ð.Ð.Ð.Ñ/Ô/Ð/ð0ð 0ð 0ñ 0ô 0ð 0ð 0ð 0ð 0ð 0ð 0øøøð 0ð 0ð 0ð 0õ „|�wÒÐÝÔ˜w¨Ø4Ø.°Ø(­#¨i©.¬.ð:ð #-ð		 ñ 	 ô 	 ð 	 ð 	 õ 	Ô˜w¨Ø.°½SÀ¹^¼^ðMà",ð	 ñ 	 ô 	 ð 	 õ ÔÐ5Ð5Ð5¸:ÐFÑFÔFÐFõ Ô% lÑ3Ô3€Fðð ð ð ð ð ð ˆ4�ÑÔ˜d˜d ?Ñ3Ô3Ð3Ð3s!   ˆ ŸAÁ AÃ,9D1Ä1D5Ä8D5c                 ó(  ‡‡— t          j        | ¦  «        Šˆˆfd„}g }t          d| ¦  «        D ]0}|                     t          j        ||f|z   |¬¦  «        ¦  «         Œ1|D ]}|                     ¦   «          Œ|D ]}|                     ¦   «          ŒdS )aÍ  
    Run a given function concurrently across a given number of threads.

    This is equivalent to using a ThreadPoolExecutor, but using the threading
    primitives instead. This function ensures that the closure passed by
    parameter gets called concurrently by setting up a barrier before it gets
    called before any of the threads.

    Arguments
    ---------
    n_workers: int
        Number of concurrent threads to spawn.
    fn: callable
        Function closure to execute concurrently. Its first argument will
        be the thread id.
    *args: tuple
        Variable number of positional arguments to pass to the function.
    **kwargs: dict
        Keyword arguments to pass to the function.
    c                 óH   •— ‰                      ¦   «           ‰| g|¢R i |¤Ž d S r   )Úwait)ÚiÚargsÚkwargsÚbarrierÚfns      €€r   Úclosurez(_run_concurrent_barrier.<locals>.closureg  s6   ø€ Ø�Š‰ŒˆØ
ˆˆ1ÐˆtÐÐÐ�vÐÐÐÐÐr   r   )Útargetrò   ró   N)rß   ÚBarrierrg   rh   ÚThreadÚstartr¦   )	Ú	n_workersrõ   rò   ró   rö   Úworkersrñ   Úworkerrô   s	    `      @r   Ú_run_concurrent_barrierrþ   P  sÙ   øø€ õ* Ô 	Ñ*Ô*€Gðð ð ð ð ð ð €GÝ�1�iÑ Ô ð .ð .ˆØ�Š•yÔ'ØØ�˜‘ Vð-ñ -ô -ñ 	.ô 	.ð 	.ð 	.ð ð ð ˆØ�Š‰Œˆˆàð ð ˆØ�Š‰Œˆˆðð r   ))r   rP   r.   r¤   rá   rÜ   r,   ræ   rß   rˆ   r   r   Únumpyrt   ÚscipyÚcythonÚCython.Compiler.Versionr   Úcython_versionÚ
scipy._libr   Úrequired_versionÚparseÚVersionr·   Ú__all__r
   rç   Ú_vr1   ÚIS_EDITABLEÚRuntimeWarningr   r   r	   r5   r   rŒ   r�   rí   rþ   r   r   r   ú<module>r     se  ððð ð
 €€€Ø 	€	€	€	Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ø 
€
€
€
Ø Ð Ð Ð Ø Ð Ð Ð Ø DÐ DÐ DÐ DÐ DÐ DÐ DÐ Dà Ð Ð Ð Ø €€€ðà€M€M€Mðð ð ð ð ð ð #Ð"Ð"Ð"Ð"Ð"ØÐØ€w„}�^Ñ$Ô$  w¤Ð7GÑ'HÔ'HÒHÐHàˆøøð ð ð ð Ø€F€F€Fðøøøð OÐ
NÐ
N€ð €ð
 €YÔ˜oÑ.Ô.Ð4°"€Ø	ˆR€<€<Ø€Gð ˜EœN¨1Ô-Ð-€ð	ð 	ð 	ð 	ð 	˜>ñ 	ô 	ð 	ð
Oð Oð Oð Oð Oñ Oô Oð OðdE&ð E&ð E&ð E&ð E&ñ E&ô E&ð E&ðP*ð *ð *ðð ð ð*4ð 4ð 4ðð ð ð254ð 54ð 54ðp%ð %ð %ð %ð %s   ´
A+ Á+A5Á4A5