
    -iG4              
          S SK r S SKrS SKrS SKJrJrJr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  \" \5        \" \5        \R,                  R/                  \S   (       + SS9 " S	 S
5      5       r/ SQrS/S/S//rSR7                  5       r\ V s/ s H  n \R;                  S/\" \U 5      S9PM     sn rS r S r!\R,                  RE                  S\\-   \-   \-   5      \R,                  RE                  S\\-   \-   \-   5      S 5       5       r#\R,                  RE                  S\\-   \-   \-   5      \R,                  RE                  S\\-   \-   \-   5      S 5       5       r$gs  sn f )    N)
_GLOBAL_CONFIGarray_namespace_asarrayxp_copyxp_assert_equalis_numpy	np_compatxp_default_dtypexp_result_typeis_torch)array_api_extra)r   )lazy_xp_functionSCIPY_ARRAY_APIzDArray API test; set environment variable SCIPY_ARRAY_API=1 to run it)reasonc                      \ rS rSrS rS r\R                  R                  S5      S 5       r	\R                  R                  SSS9S	 5       rS
 rS rS r\R                  R                  S/ SQ5      \R                  R                  SSS/5      S 5       5       r\R                  R                  SSS9S 5       r\R                  R                  SSS9S 5       rS rSrg)TestArrayAPI   c                     [         R                  " / SQ5      [         R                  " / SQ5      p![        X5      nSUR                  ;   d   eS[        S'   [        X5      nSUR                  ;   d   eS[        S'   g )Nr         zarray_api_compat.numpyFr   T)nparrayr   __name__r   )selfxyxps       R/var/www/html/venv/lib/python3.13/site-packages/scipy/_lib/tests/test_array_api.pytest_array_namespace!TestArrayAPI.test_array_namespace   si    xx	"BHHY$71Q"'2;;666,1()Q"'2;;666,0()    c                     [        / SQUS9[        [        R                  " S5      US9p2UR                  / SQ5      n[	        X$5        [	        X45        g )Nr   r      )r   r   arangeasarrayr   )r   r   r   r   refs        r   test_asarrayTestArrayAPI.test_asarray!   s=    	b)8BIIaLR+H1jj#r"   zignore: the matrix subclassc                    Sn[         R                  " [        US9   [        [        R
                  R                  S5      [        R                  " S5      5        S S S 5        Sn[         R                  " [        US9   [        [        R                  " S5      [        R                  " S5      5        S S S 5        Sn[         R                  " [        US9   [        [        5       /5        S S S 5        [         R                  " [        US9   [        S5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N^= f! , (       d  f       g = f)Nz0of type `numpy.ma.MaskedArray` are not supportedmatchr   z(of type `numpy.matrix` are not supported/only boolean and numerical dtypes are supportedabc)	pytestraises	TypeErrorr   r   mar   matrixobjectr   msgs     r   test_raisesTestArrayAPI.test_raises'   s    @]]9C0BEEKKNBHHQK8 1 9]]9C0BHHQK16 1 @]]9C0VXJ' 1]]9C0E" 10 10 10 1000s/   >D =5D1EE 
D.1
D?
E
E!TzArray-likes)np_onlyr   c                    [        / SQ5      UL d   e[        S5      UL d   e[        SSS5      UL d   e[        S5      UL d   e[        [        R                  " S5      5      UL d   e[        / SQS5      UL d   e[        5       UL d   e[        S5      UL d   e[        SS5      UL d   e[        SS5      UL d   e[        [        R                  " SS/5      SS/5      UL d   e[        [        R                  " S5      SS/5      UL d   eg)zeTest that if all parameters of array_namespace are Array-likes,
the output is array_api_compat.numpy
r   r   r   r%   N   )r   r   int64r'   r   r   s     r   test_array_likesTestArrayAPI.test_array_likes7   s   
 y)R///y)R///q!Q'2---q!R'''rxx{+r111y!,222 B&&&t$***q$'2---tQ'2--- rzz1a&1Aq6:b@@@rxx{QF3r999r"   c                    UR                  S5      n[        U5      UL d   e[        US5      UL d   e[        SU5      UL d   e[        SU5      UL d   e[        U5      (       ds  [        R                  " [
        SS9   [        USS/5        SSS5        [        R                  " [
        SS9   [        U[        R                  " S5      5        SSS5        gg! , (       d  f       NR= f! , (       d  f       g= f)zTest that if there is at least one Array API object among
the parameters of array_namespace, and all other parameters
are scalars, the output is its namespace.

If there are non-scalar Array-Likes, raise as in array-api-compat.
r   NzMultiple namespacesr,   r   )r'   r   r   r0   r1   r2   r   r=   )r   r   r   s      r   test_array_and_array_likes_mix+TestArrayAPI.test_array_and_array_likes_mixK   s     JJqMq!R'''q!$***q!$***tQ'2---||y0EFAq6* Gy0EF288A;/ GF FFFFs   >C.!C*
C'*
C8c                     Sn[         R                  " [        US9   [        R                  " SSS9  SSS5        g! , (       d  f       g= f)z^Test that the `array_namespace` function used by
array-api-extra has been overridden by scipy
r.   r,   r/   r   )ndimN)r0   r1   r2   xpx
atleast_ndr6   s     r   test_array_api_extra_hook&TestArrayAPI.test_array_api_extra_hook^   s2     @]]9C0NN5q) 100s	   ;
A	c                     US 4 HM  nUR                  / SQ5      n[        X2S9n[        U5      [        U5      :w  d   e SUS'   US   US   :w  d   eMO     g ! [        [        4 a     Me  f = f)N)r   r   r%   r$   
   r   )r'   r   idr2   
ValueError)r   r   _xpr   r   s        r   	test_copyTestArrayAPI.test_copyf   s{    :C

9%A"A a5BqE>!>$! tqt|#|  z* s   AA+*A+dtype)int32r=   float32float64shape )r%   c                    [        X5      nUR                  UR                  SUS9U5      nU(       a  UOUS   n[        R                  " S5      S   n/ SQn[	        [        U/ SQ5      5      n[        U5      (       a  [        XE40 UD6  O\[        R                  " [        SS9   [        XE40 UD6  S S S 5        [        R                  " [        SS9   [        XT40 UD6  S S S 5        [	        [        U/ S	Q5      5      nUR                  R                  [        UR                  5      ;   a  [        XE40 UD6  O.[        R                  " [        S
S9   [        XE40 UD6  S S S 5        [	        [        U/ SQ5      5      nUR                  UR                  :X  a  [        XE40 UD6  O=[        R                  " [        SS9   [        XAR                  U5      40 UD6  S S S 5        [	        [        U/ SQ5      5      n[        U5      (       a'  UR                  UR                  :X  a  [        XE40 UD6  g [        U5      (       a/  [        R                  " [        SS9   [        XE40 UD6  S S S 5        g g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN<= f! , (       d  f       N= f! , (       d  f       g = f)Nr   rQ   rV   )check_namespacecheck_dtypecheck_shapecheck_0d)TFFFz)Namespace of desired array does not matchr,   z3Namespace of actual and desired arrays do not match)FTFFzdtypes do not match.)FFTFzShapes do not match.)FFFTzArray-ness does not match.)getattrbroadcast_tor'   r	   dictzipr   r   r0   r1   AssertionErrorrQ   namestrrU   )r   r   rQ   rU   r   r   kwarg_namesoptionss           r   test_strict_checksTestArrayAPI.test_strict_checkst   s    "OOBJJqJ6>AAbEa $Ss;(CDEB<<A,G,A  00	
 K  00	 s;(CDE77<<3qww<'A,G,~5KL00 M s;(CDE77aggA,G,~5KL::a=<G< M s;(CDEB<<AGGqww.A,G,b\\~5QR00 SR 9 
  ML ML SRs<   $I/JJ=J%J6/
I>
J
J"%
J36
KzScalars only exist in NumPyc                    [        UR                  S5      UR                  S5      5        [        UR                  S5      UR                  S5      5        [        UR                  S5      UR                  S5      SS9  [        UR                  S5      UR                  S5      SS9  Sn[        R                  " [
        US9   [        UR                  S5      UR                  S5      5        S S S 5        [        R                  " [
        US9   [        UR                  S5      UR                  S5      5        S S S 5        [        R                  " [
        US9   [        UR                  S5      UR                  S5      5        S S S 5        [        R                  " [
        US9   [        UR                  S5      UR                  S5      5        S S S 5        [        UR                  S5      UR                  S5      SS9  [        UR                  S5      UR                  S5      SS9  [        UR                  S5      SSS9  [        SUR                  S5      SS9  [        UR                  S5      SSS9  [        SUR                  S5      SS9  [        UR                  S5      UR                  S5      S   5        g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNg= f! , (       d  f       GN-= f)	Nr           Fr\   Array-ness does not match:.*r,   *   rV   )r   rT   r'   r0   r1   ra   r=   r   r   messages      r   test_check_scalarTestArrayAPI.test_check_scalar   s    	

1rzz!}5

2

27

1rzz!}uE

2

2G 1]]>9BJJrNBJJqM: :]]>9BJJqM2::b>: :]]>9BJJrNBHHRL9 :]]>9BHHRL"**R.9 : 	

2

1F

1rzz"~F

2U;BJJrNU;

2U;BJJrNU; 	

1rzz"~b'9:' :9999999s0   +K+K+K%&+K7
K
K"%
K47
Lc                 0   [        UR                  S5      UR                  S5      5        [        UR                  S5      UR                  S5      SS9  [        UR                  S5      UR                  S5      SS9  Sn[        R                  " [
        US9   [        UR                  S5      UR                  S5      5        S S S 5        [        R                  " [
        US9   [        UR                  S5      UR                  S5      5        S S S 5        [        R                  " [
        US9   [        UR                  S5      UR                  S5      5        S S S 5        [        UR                  S5      UR                  S5      5        [        UR                  S5      UR                  S5      5        Sn[        R                  " [
        US9   [        UR                  S5      UR                  S5      SS9  S S S 5        [        R                  " [
        US9   [        UR                  S5      UR                  S5      SS9  S S S 5        [        R                  " [
        US9   [        UR                  S5      UR                  S5      SS9  S S S 5        [        R                  " [
        US9   [        UR                  S5      UR                  S5      SS9  S S S 5        [        SUR                  S5      5        [        SUR                  S5      5        g ! , (       d  f       GN`= f! , (       d  f       GN&= f! , (       d  f       GN= f! , (       d  f       GN]= f! , (       d  f       GN$= f! , (       d  f       N= f! , (       d  f       N= f)	Nr   Trj   ri   zResult is a NumPy 0d-array.*r,   rl   rk   )xp_assert_equal_no_0drT   r'   r0   r1   ra   r=   rm   s      r   test_check_scalar_no_0d$TestArrayAPI.test_check_scalar_no_0d   s8    	bjjmRZZ];bjjmRZZ]TJbjjnbjjntL 1]]>9!"**R."**R.A :]]>9!"**R."**Q-@ :]]>9!"**R."((2,? : 	bjjmRZZ^<bhhrlBJJrN; 1]]>9!"**R."**Q-$O :]]>9!"**Q-B$O :]]>9!"**R."((1+M :]]>9!"((1+rzz"~M : 	b"**R.1b"**R.11 :99999 :9999999sT   +L$+L.0+M *M*M$(*M63*N
L+.
L= 
M
M!$
M36
N
Nc                 X    [        U5      UR                  S5      R                  :X  d   eg )N      ?)r
   r'   rQ   r>   s     r   test_default_dtypeTestArrayAPI.test_default_dtype   s#    #rzz"~';';;;;r"   N)r   
__module____qualname____firstlineno__r    r)   r0   markfilterwarningsr8   skip_xp_backendsr?   rB   rH   rO   parametrizerf   ro   rs   rw   __static_attributes__rV   r"   r   r   r      s   1  [[ =># ?# [[!!$}!E: F:&0&*$ [[W&NO[[Wr4j1*1 2 P*1X [[!!$7T!U; V;< [[!!$7T!U 2 V 2D<r"   r   )r   rv         ?      ?r   rv   r   zVint8 int16 int32 int64 uint8 uint16 uint32 uint64 float32 float64 complex64 complex128rX   c                     [        U [        R                  5      (       a  UR                  U 5      $ [        U [        5      (       a  [        X5      $ U $ )N)
isinstancer   ndarrayr'   rc   r]   )r   r   s     r   convert_typer      s?     !RZZ  zz!}	As		r~Hr"   c                     [         R                  " U 5      (       d  [        U [        5      (       a  UR	                  U 5      OU n [        U SU 5      nUR                  US5      $ )NrQ   )zreal floatingzcomplex floating)r   isscalarr   listr'   r]   isdtype)r   r   rQ   s      r   
is_inexactr      sI    Q:a+>+>

1AAAw"E::eBCCr"   r   r   c                 $   [        X5      n [        X5      n[        U [        5      (       a  UR                  U 5      OU n[        U[        5      (       a  UR                  U5      OUn UR	                  X45      nS nUbC  [        R                  " US   [        R                  " US   5      S9   [        XUS9  S S S 5        g [        XUS9nUW:X  d   eg ! [
         a   n[        U5      [        U5      4n S nAN~S nAff = f! , (       d  f       g = f)Nr   r   r,   r$   )r   r   r   r'   result_type	Exceptiontyperc   r0   r1   reescaper   )	r   r   r   x_refy_ref	dtype_refexpected_errore	dtype_ress	            r   test_xp_result_type_no_forcer     s     	QAQA'400BJJqMaE'400BJJqMaE+NN50	 !]]>!,BIInQ>O4PQ1B' Rq+I	!!!  +q'3q6*+ RQs$   (C -D
C>C99C>
Dc                    [        U5      (       av  [        U [        5      (       da  [        U[        5      (       dL  [        R                  " U 5      (       a1  [        R                  " U5      (       a  [
        R                  " S5        [        X5      n [        X5      n[        U [        5      (       a  UR                  U 5      OU n[        U[        5      (       a  UR                  U5      OUnS n UR                  X4S5      nUb/  [
        R                   " US   US   S9   [#        XUS9  S S S 5        g [#        XSUS9n	U	W:X  d   eg ! [         aj    / n[        X25      (       a  UR                  U5        [        XB5      (       a  UR                  U5        UR                  " / UQUR                  S5      P76 n N[         a   n[        U5      [        U5      4n S nANS nAff = f! , (       d  f       g = f)	Nz8See 3/27/2024 comment at  data-apis/array-api-compat#277rv   r   r   r,   r$   T)force_floatingr   )r   r   rc   r   r   r0   skipr   r   r'   r   r2   r   appendr   r   r1   r   )
r   r   r   r   r   r   r   argsr   r   s
             r   "test_xp_result_type_force_floatingr     s    	Z3//:a3E3EA2;;q>>NOQAQA'400BJJqMaE'400BJJqMaEN
+NN55	 !]]>!,N14EF1B' GqDR@I	!!!!  ;e  KKe  KKNN:D:"**S/:	 +q'3q6*+ GFs+   0E  G'A1G$;	G$GG$'
G5)%r   numpyr   r0   scipy._lib._array_apir   r   r   r   r   r   r	   r
   r   r   
scipy._libr   rF   scipy._lib._array_api_no_0drr   "scipy._lib.array_api_extra.testingr   r|   skipifr   scalarslistssplittypesr'   r]   arraysr   r   r   r   r   )ts   0r   <module>r      s   	     . P ?     '899U  WP< P<WP<f 
rdWI
016  :?	?A"**aSA*
/	?D go5>?go5>?" @ @"0 go5>?go5>?$" @ @$"c 
@s   "E(