
    -ink                     l   S SK r S SKrS SKrS SKrS SKJr  S SKJr  S SKr	S SK
Jr  S SKrS SKrS SKJr  S SKJrJrJrJrJrJrJr  S SKJr  S SKJr  S SKJr   S S	KJ r   S
r! S SK#r#S
r$S r&S r'\RP                  " SS
S9S 5       r)\$(       d  \RP                  S 5       r*1 Skr+S\	0r,\-" 5       r.\-" 5       r/\(       Ga>   S SK0r0\,Rc                  S\005        \Rd                  " \0Rf                  5      \Rh                  " S5      :  a  \5" S5      e\0Rl                  " SS9   S SK7r7\,Rc                  S\705        \7Rp                  " \5        \S:w  a  \.Rs                  S5        \Rt                  " SSS9r;\;S:X  a  \7Rx                  " \7Rz                  5        O\;S:w  a  \>" S\; S 35      e  S SK?r?\,Rc                  S!\?05        \.Rs                  S!5        \R                  " S"S#\AS$9  S S%KBJCrC  CC S SKDrE\,Rc                  S&\ER                  05        \ER                  Rc                  S'S
5        \ER                  Rc                  S(\ER                  " \5      S    5        \S:w  a  \.Rs                  S&5        \/Rs                  S&5         S SKHJIrJ  \,Rc                  S)\J05        \/Rs                  S)5        \K" \\L5      (       aF  \R                  " 5       S*;  a1  \ R                  " \5      rO\OS+/:w  a   \O V s0 s H	  n U \,U    _M     sn r,\-" \,5      \+-
  (       a   e\-" \,5      S1-
  rS\RP                  " \,R                  5        VVs/ s H)  u  p\R                  X!\R                  R                  S.9PM+     snnS/9S0 5       rX\R                  R                  \S1S29rZS3 r[S4\R                  S5\S6   S7S4S8 jr]\RP                  S9 5       rG\R                  R                  \R                  R                  \R                  " 5       S:5      5        \R                  R                  S;SS
S<9  \R                  R                  S=SS
SS
\Q" \R                  5      S>9  \R                  R                  S?S=5      rh\R                  R                  \h5        \!(       a  \SNS@ j5       rj\j\ lk        \-" / SAQ5      \ ll        \	Rf                  SB:  a#  \ R                  Rc                  \-" / SCQ5      5        / SDQ\ lm        SESESFSGSHSI.\ ln        \-" SJ/5      \ lo        SK/ SLQ0\ lp        S
\ lq        \ R                  Rs                  SM5        gg! \" a    Sr! GNf = f! \% a    Sr$ GNf = f! \5 a     GN6f = f! \5 a     GNf = f! \5 a     GNf = f! \5 a     GNf = f! \5 a     GNf = fs  sn f ! \P a    S,\Q" \,5       S-\O 3rR\>" \R5      ef = fs  snnf )O    N)contextmanager)Literal)get_fpu_mode)SCIPY_ARRAY_APISCIPY_DEVICEarray_namespace
default_xpis_cupyis_daskis_jax)FPUModeChangeWarning)patch_lazy_xp_functions)_pep440)	dt_configTFc                     U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5        U R                  SS5         SS	Kn SSKJn  [
        (       d7  U R                  SS5        U R                  SS5        U R                  SS5        g	g	! [         a    U R                  SS
5         Nhf = f! [         a    U R                  SS5         Nf = f)a  
Add pytest markers to avoid PytestUnknownMarkWarning

This needs to contain all markers that are SciPy-specific, as well as
dummy fallbacks for markers defined in optional test packages.

Note that we need both the registration here *and* in `pytest.ini`.
markerszslow: Tests that are very slow.zHxslow: mark test as extremely slow (not run unless explicitly requested)z8xfail_on_32bit: mark test as failing on 32-bit platformsz;array_api_backends: test iterates on all array API backendszskip_xp_backends(backends, reason=None, np_only=False, cpu_only=False, eager_only=False, exceptions=None): mark the desired skip configuration for the `skip_xp_backends` fixturezxfail_xp_backends(backends, reason=None, np_only=False, cpu_only=False, eager_only=False, exceptions=None): mark the desired xfail configuration for the `xfail_xp_backends` fixturer   Nz.timeout: mark a test for a non-default timeout)parse_durationz8fail_slow: mark a test for a non-default timeout failurezOparallel_threads(n): run the given test function in parallel using `n` threads.z8thread_unsafe: mark the test function as single-threadedzCiterations(n): run the given test function `n` times in each thread)addinivalue_linepytest_timeout	Exceptionpytest_fail_slowr   PARALLEL_RUN_AVAILABLE)configr   r   s      A/var/www/html/venv/lib/python3.13/site-packages/scipy/conftest.pypytest_configurer   $   s1    I)+
IRT
IBD
IEG
I
.0 I
/1
IS 	4
 "!!	" 	F	
 	Q	
 "  IG	II  SQ	SSs$   .B< 3C <CCC=<C=c                    U R                  S5      nUbG   [        [        R                  R	                  SS5      5      nU(       d  [        R                  " S5        U R                  S5      nUbJ  [        R                  " S5      R                  S:  a&  [        R                  " S	UR                  S    35        [        R                  " 5        nUR                  [        R                   5         SS
KJn  SnU(       af   [        [        R                  S   5      n[        R*                  " S5      (       d.  [        R,                  " 5       S-  n[/        Xv-  S5      n W" USS9  S S S 5        g ! [
         a    Sn GN>f = f! [&         a    Sn Nf = f! [(         a     S S S 5        g f = f! [&         a     S S S 5        g f = f! , (       d  f       g = f)NxslowSCIPY_XSLOW0Fz@very slow test; set environment variable SCIPY_XSLOW=1 to run itxfail_on_32bitr      z&Fails on our 32-bit test platform(s): )threadpool_limitsTPYTEST_XDIST_WORKER_COUNTOMP_NUM_THREADS      blas)user_api)get_closest_markerintosenvironget
ValueErrorpytestskipnpintpitemsizexfailargsnptsuppress_warningsfilter PytestUnraisableExceptionWarningthreadpoolctlr"   r   KeyErrorgetenv	cpu_countmax)	itemmarkvsupr"   HAS_THREADPOOLCTLxdist_worker_countmax_openmp_threadsthreads_per_workers	            r   pytest_runtest_setuprG   Z   s   ""7+D	BJJNN=#67A KK K L""#34DBGGAJ//!3=diil^LM 
			 C

6::;	&7 $
 
%(4O)P%Q"
 99.//%'\\^q%8"%();)QST%U"%&86J5 
!	   	A	$  	& %	&  ) 
!	 $ !  = 
!	 67 
!	 s   )E.  G0F8G FAGF+.E>=E>FGFG
F(G'F((G+
G 5G?G  G
Gfunction)scopeautousec              #      #    [        5       nSv   [        5       nX:w  a$  [        R                  " SUS SUS S3[        SS9  gg7f)z1
Check FPU mode was not changed during the test.
NzFPU mode changed from z#xz to z during the testr   )category
stacklevel)r   warningswarnr   )requestold_modenew_modes      r   check_fpu_moderS      sQ     
 ~H	~H.xm4} M! !3	C s   AAc                      g)Nr&    rU       r   num_parallel_threadsrW      s    rV   >   cupynumpytorcharray_api_strict	jax.numpy
dask.arrayrY   r[   z2.3z'array-api-strict must be >= version 2.3z2024.12)api_versionrZ   cpuSCIPY_DEFAULT_DTYPEfloat64)defaultfloat32zUSCIPY_DEFAULT_DTYPE env var, if set, can only be either 'float64' or 'float32'. Got 'z
' instead.rX   ignorez#cupyx.jit.rawkernel is experimentalrL   )signalr\   jax_enable_x64jax_default_devicer]   )1trueallrk   z!'--array-api-backend' must be in z; got )idmarks)paramsc              #   "  #    [        U S5        [        U S5        U R                  n[        UR                  S5      5      n[        (       a-  [        U R                  XS9  [        U5         Uv   SSS5        gUv   g! , (       d  f       g= f7f)a  Run the test that uses this fixture on each available array API library.

You can select all and only the tests that use the `xp` fixture by
passing `-m array_api_backends` to pytest.

You can select where individual tests run through the `@skip_xp_backends`,
`@xfail_xp_backends`, and `@skip_xp_invalid_arg` pytest markers.

Please read: https://docs.scipy.org/doc/scipy/dev/api-dev/array_api.html#adding-tests
r0   r4   r   )xprP   monkeypatchN)skip_or_xfail_xp_backendsparamr   emptyr   r   r	   )rP   rq   rp   s      r   rp   rp     sq     " gv. gw/	B	!	%B}}g	
 ^H ^  ^s   A)B+A>0B>
BBzsTest involves masked arrays, object arrays, or other types that are not valid input when `SCIPY_ARRAY_API` is used.reasonc           	      t   [        U R                  R                  U S35      5      n[         Vs0 s H  o3/ _M     nnU GH  n[	        UR
                  5      1 Sk-
  nU(       a  [        SU 35      e[	        UR
                  R                  S/ 5      5      nU[        -
  n[        U[        -
  5      =n(       a  [        SU S[        [        5       35      eUR
                  R                  SS5      (       aH  UR
                  R                  S	5      =(       d    S
n	[        U-
   H  nXC   R                  U	5        M     OUR
                  R                  SS5      (       aH  UR
                  R                  S	5      =(       d    Sn	[        U-
   H  nXC   R                  U	5        M     OhUR
                  R                  SS5      (       aG  UR
                  R                  S	5      =(       d    Sn	[        U-
   H  nXC   R                  U	5        M     [        UR                  5      S:X  a  UR                  S   nU[        ;  a  [        SU S[        [        5       35      eUR
                  R                  S	5      =(       d    SU 3n	XC   R                  SU	5        S H"  n
XR
                  ;   d  M  [        U
 SU 35      e   GM  [        UR                  5      S:  d  GM  [        SUR                   35      e   UR!                  5        VVs0 s H  u  p;U(       d  M  X;S   _M     snn$ s  snf s  snnf )zlA helper for {skip,xfail}_xp_backends.

Return dict of {backend to skip/xfail: top reason to skip/xfail it}
_xp_backends>   rv   np_onlycpu_only
eager_only
exceptionszInvalid kwargs: r|   zUnknown backend(s): z; must be a subset of ry   Frv   z"do not run with non-NumPy backendsrz   zTno array-agnostic implementation or delegation available for this backend and devicer{   z*eager checks not executed on lazy backendsr&   r   zUnknown backend: z; must be one of z#do not run with array API backend: )rz   ry   r{   r|   z is mutually exclusive with z,Please specify only one backend per marker: )listnodeiter_markersxp_known_backendssetkwargs	TypeErrorr-   r.   xp_skip_np_only_backendsappendxp_skip_cpu_only_backendsxp_skip_eager_only_backendslenr5   insertitems)rP   skip_or_xfailr   backendreasonsmarkerinvalid_kwargsr|   invalid_exceptionsrv   kwargbackend_reasonss               r   _backends_kwargs_from_requestr   7  s!   
 7<<,,l-KLMG*;<*;w{*;G<V]]+ /I I.~.>?@@**<<=
'*;;"&z4E'E"FFF34F3G H4489J4K3LN O O ==Y..]]&&x0X4XF3j@ ''/ A ]]z511]]&&x0 /.  5zA ''/ B ]]|U33]]&&x0 >< 6C ''/ D v{{q kk!nG// #4WI >3378I3J2K"M N N]]&&x0 A5gY?  ##Av.LMM)$w.J7)%TUU M !>v{{mL _ h -4MMO ,;( (GQ'',;   k =j s   L/L4"	L4rP   r   )r0   r4   returnc                     U S3U R                   ;  a  g[        XS9nU R                  nUR                  U;   a.  X#R                     nU(       d   e[	        [
        U5      nU" US9  gg)a  
Helper of the `xp` fixture.
Skip or xfail based on the ``skip_xp_backends`` or ``xfail_xp_backends`` markers.

See the "Support for the array API standard" docs page for usage examples.

Usage
-----
::
    skip_xp_backends = pytest.mark.skip_xp_backends
    xfail_xp_backends = pytest.mark.xfail_xp_backends
    ...

    @skip_xp_backends(backend, *, reason=None)
    @skip_xp_backends(*, cpu_only=True, exceptions=(), reason=None)
    @skip_xp_backends(*, eager_only=True, exceptions=(), reason=None)
    @skip_xp_backends(*, np_only=True, exceptions=(), reason=None)

    @xfail_xp_backends(backend, *, reason=None)
    @xfail_xp_backends(*, cpu_only=True, exceptions=(), reason=None)
    @xfail_xp_backends(*, eager_only=True, exceptions=(), reason=None)
    @xfail_xp_backends(*, np_only=True, exceptions=(), reason=None)

Parameters
----------
backend : str, optional
    Backend to skip/xfail, e.g. ``"torch"``.
    Mutually exclusive with ``cpu_only``, ``eager_only``, and ``np_only``.
cpu_only : bool, optional
    When ``True``, the test is skipped/xfailed on non-CPU devices,
    minus exceptions. Mutually exclusive with ``backend``.
eager_only : bool, optional
    When ``True``, the test is skipped/xfailed for lazy backends, e.g. those
    with major caveats when invoking ``__array__``, ``__bool__``, ``__float__``,
    or ``__complex__``, minus exceptions. Mutually exclusive with ``backend``.
np_only : bool, optional
    When ``True``, the test is skipped/xfailed for all backends other
    than the default NumPy backend and the exceptions.
    Mutually exclusive with ``backend``. Implies ``cpu_only`` and ``eager_only``.
reason : str, optional
    A reason for the skip/xfail. If omitted, a default reason is used.
exceptions : list[str], optional
    A list of exceptions for use with ``cpu_only``, ``eager_only``, or ``np_only``.
    This should be provided when delegation is implemented for some,
    but not all, non-CPU/non-NumPy backends.
rx   N)r   ru   )keywordsr   rs   __name__getattrr/   )rP   r   skip_xfail_reasonsrp   rv   s        r   rr   rr   w  so    ` %W-=-==6 
B	{{((#KK0v6V$	 )rV   c                     [        U 5      (       a  [        R                  " SS9  [        U 5      (       a  SS/$ [	        U 5      (       a  [        R                  " SS9  U R                  5       R                  5       S/-   $ )aG  Fixture that returns a list of all devices for the backend, plus None.
Used to test input->output device propagation.

Usage
-----
from scipy._lib._array_api import xp_device

def test_device(xp, devices):
    for d in devices:
        x = xp.asarray(..., device=d)
        y = f(x)
        assert xp_device(y) == xp_device(x)
zdata-apis/array-api-compat#293ru   r_   Nzjax-ml/jax#26000)r
   r/   r4   r   r   __array_namespace_info__devices)rp   s    r   r   r     sf     r{{ 	<=r{{t}bzz 	./&&(002dV;;rV   z.hypothesisnondeterministic)namedeadline
print_blobdeterministic)r   r   r   databasederandomizesuppress_health_checkSCIPY_HYPOTHESIS_PROFILEc              #     #    [        5       nSS/nU H  n[        [        SS9X'   M     / SQnU H  n[        [        S9X'   M     SSKJn  S	S
/nU H  n[        UR
                  SS9X'   M     / SQnU H  n[        [        S9X'   M     [        [        SS9[        S[        S9[        SUR
                  S9S.nUR                  U5        [        S5      n	SSK
Jn
  SSKnU
" 5          UR                  R                  S5        [        R                   " 5          U (       a7  U R"                  U;   a'  [        R$                  " S0 XR"                     D6  Sv   O;U (       a  U R"                  U	;   a  Sv   O[        R&                  " S[(        5        Sv   SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       g= f7f)z]Temporarily turn (almost) all warnings to errors.

Filter out known warnings which we allow.
zscipy.linalg.normzscipy.ndimage.center_of_masszdivide by zero)rL   message)zscipy.signal.cwtzscipy.signal.morletzscipy.signal.morlet2zscipy.signal.rickerzscipy.integrate.simpsonzscipy.interpolate.interp2dzscipy.linalg.kronre   r   )	integratezscipy.special.ellip_normalzscipy.special.ellip_harm_2zThe occurrence of roundoff)zscipy.stats.anderson_ksampzscipy.stats.kurtosistestzscipy.stats.normaltestscipy.sparse.linalg.normzExited at iterationzthe matrix subclass is not)r   rL   z"The maximum number of subdivisions)r   z
linalg.rstz	stats.rstscipy.signal.normalize)_fixed_default_rngNerror)rd   )dictRuntimeWarningDeprecationWarningscipyr   IntegrationWarningUserWarningPendingDeprecationWarningupdater   scipy._lib._utilr   rY   randomseedrN   catch_warningsr   filterwarningssimplefilterWarning)testknown_warningsdivide_by_zeror   
deprecatedr   integration_wuser_wdctlegitr   r1   s               r   warnings_errors_and_rngr     s       !?
 #D#'0@$BN  #


 D#'1C#DN   	$55
 "D#'1M1M0L$NN  "
HD#'#=N   k3HI 979 A'::<

 	c" ,- 	8!IINN4 ((*DII7++ I.<YY.GIdii50))'7; + "!** "!s7   C&G(1F5A:F$F5	G$
F2	.F55
G?G)zscipy.linalg.LinAlgErrorzscipy.fftpack.fftshiftzscipy.fftpack.ifftshiftzscipy.fftpack.fftfreqzscipy.special.sinczscipy.optimize.show_optionsr   r   z$scipy.io.matlab.MatlabObject.stridesz"scipy.io.matlab.MatlabObject.dtypez"scipy.io.matlab.MatlabOpaque.dtypez$scipy.io.matlab.MatlabOpaque.stridesz&scipy.io.matlab.MatlabFunction.stridesz$scipy.io.matlab.MatlabFunction.dtype2)zscipy.io.hb_readzscipy.io.hb_writez)scipy.sparse.csgraph.connected_componentsz&scipy.sparse.csgraph.depth_first_orderz"scipy.sparse.csgraph.shortest_pathz#scipy.sparse.csgraph.floyd_warshallzscipy.sparse.csgraph.dijkstraz!scipy.sparse.csgraph.bellman_fordzscipy.sparse.csgraph.johnsonzscipy.sparse.csgraph.yenz(scipy.sparse.csgraph.breadth_first_orderz*scipy.sparse.csgraph.reverse_cuthill_mckeez$scipy.sparse.csgraph.structural_rankz*scipy.sparse.csgraph.construct_dist_matrixz%scipy.sparse.csgraph.reconstruct_pathzscipy.ndimage.value_indiceszscipy.stats.mstats.describe)zscipy.stats.distributionszscipy.optimize.cython_optimizez
scipy.testzscipy.show_configzscipy/special/_precomputez#scipy/interpolate/_interpnd_info.pyz'scipy/interpolate/_rbfinterp_pythran.pyzscipy/_build_utils/tempita.pyzscipy/_lib/array_api_compatzscipy/_lib/highszscipy/_lib/unuranzscipy/_lib/_gcutils.pyzscipy/_lib/doccer.pyzscipy/_lib/_uarrayz+scipy/linalg/_cython_signature_generator.pyzscipy/linalg/_generate_pyx.pyzscipy/linalg/_linalg_pythran.pyz$scipy/linalg/_matfuncs_sqrtm_triu.pyz1scipy/ndimage/utils/generate_label_testvectors.pyz scipy/optimize/_group_columns.pyz$scipy/optimize/_max_len_seq_inner.pyz"scipy/signal/_max_len_seq_inner.pyz%scipy/sparse/_generate_sparsetools.pyzscipy/special/_generate_pyx.pyzscipy/stats/_stats_pythran.pyzReST parser limitationz__cinit__ unexpected argumentznan in scalar_powerzintegration warning)zND_regular_grid.rstzextrapolation_examples.rstzsampling_pinv.rstzsampling_srou.rstzprobability_distributions.rstzintegrate.nquad(func,zio.rst)zoctave_a.matzoctave_cells.matzoctave_struct.matz.text()N)sjsonr+   rN   tempfile
contextlibr   typingr   rY   r1   numpy.testingtestingr6   r/   
hypothesisscipy._lib._fpumoder   scipy._lib._array_apir   r   r   r	   r
   r   r   scipy._lib._testutilsr   "scipy._lib.array_api_extra.testingr   
scipy._libr   scipy_doctest.conftestr   
HAVE_SCPDTModuleNotFoundErrorpytest_run_parallelr   r   r   rG   fixturerS   rW   r   xp_available_backendsr   r   r   r[   r   parse__version__VersionImportErrorset_array_api_strict_flagsrZ   set_default_deviceaddr<   rb   set_default_dtypera   r.   rX   r   FutureWarningcupyx.scipyrf   	jax.numpyjaxr   r   
dask.arrayarrayda
isinstancestrlowerloadsSCIPY_ARRAY_API_r;   r}   msgr   r   rs   r@   array_api_backendsrp   skipifskip_xp_invalid_argr   FixtureRequestrr   configurationset_hypothesis_home_dirpathjoin
gettempdirsettingsregister_profileHealthCheckr,   r-   r   load_profiler   user_context_mgrskiplistpytest_extra_ignorepytest_extra_xfail
pseudocodelocal_resourcesstrict_check	stopwords)r   krA   s   000r   <module>r     sd    	   %      ,   7 F 0J#!
3
l.b j$/C 0C ^^ 
#  " E !e 	$$&8:J%KL==)5569OOGHH33!	
$$gu%56  .5 %))'2 ))19Ei##EMM2	!%%,IZ9  " 	$$fd^4!%%f- 	;m	
 	'$$k399%=>

*D1

.L0I!0LM5 %))+6 	$''4$$lB%78 	$''5 	?C((!!#+??::o6w&& $4)#3 27;;#3)% $%(99 9945	A  %++-- LL > >L?- #	#L kk((I ) K 
= @;%v'<'< ;%-4_-E;%JN;%| < <J    0 0GGLL$$&6    $ $	dt %     $ $	dTtz556 %  ::>>*D*9;  
      !9 :  O Ob "9I  I( 
~~!!# ' # 	,%I!>  8&><2)>$I   789I 
!I "I H%i y  J  #"#b  &         )  &:456f=M<NP o%&s   T, #T; >AU
 A3U U &AU$ (BU1 =*U> $V (V8V 80V0
,T87T8;UU
UUU! U!$U.-U.1U;:U;>VVV V-