+
    ,iG4              
       N   ^ RI t ^ RIt^ RIt^ RIHtHtHtHtH	t	H
t
HtHtHtHt ^ RIHt ^ RIH	t ^ RIHt ]! ]4       ]! ]4       ]P,                  P/                  ]R,          '       * RR7       ! R	 R
4      4       t. ROt^.R.R..tRP7                  4       t] U u. uF  p ]P;                  ^.]! ]V 4      R7      NK   	  up tR t R t!]P,                  PE                  R]],           ],           ],           4      ]P,                  PE                  R]],           ],           ],           4      R 4       4       t#]P,                  PE                  R]],           ],           ],           4      ]P,                  PE                  R]],           ],           ],           4      R 4       4       t$R# u up i )    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                     a  ] tR t^t o R tR t]P                  P                  R4      R 4       t	]P                  P                  RRR7      R 4       tR	 tR
 tR t]P                  P                  R. RO4      ]P                  P                  RRR.4      R 4       4       t]P                  P                  RRR7      R 4       t]P                  P                  RRR7      R 4       tR tRtV tR# )TestArrayAPIc                    \         P                  ! . RO4      \         P                  ! . RO4      r!\        W4      pRVP                  9   g   Q hR\        R&   \        W4      pRVP                  9   g   Q hR\        R&   R# )r   zarray_api_compat.numpyFr   TNr         )nparrayr   __name__r   )selfxyxps   &   A/usr/lib/python3/dist-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                    \        . ROVR7      \        \        P                  ! ^4      VR7      r2VP                  . RO4      p\	        W$4       \	        W44       R# )r   r   Nr   )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                4   R p\         P                  ! \        VR7      ;_uu_ 4        \        \        P
                  P                  ^4      \        P                  ! ^4      4       RRR4       Rp\         P                  ! \        VR7      ;_uu_ 4        \        \        P                  ! ^4      \        P                  ! ^4      4       RRR4       Rp\         P                  ! \        VR7      ;_uu_ 4        \        \        4       .4       RRR4       \         P                  ! \        VR7      ;_uu_ 4        \        R4       RRR4       R#   + '       g   i     L; i  + '       g   i     L; i  + '       g   i     Lp; i  + '       g   i     R# ; i)z0of type `numpy.ma.MaskedArray` are not supportedmatchNz(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0BEEKKNBHHQK8 1 9]]9C00BHHQK16 1 @]]9C00VXJ' 1]]9C00E" 10 10 10 10000s/   >E5E 6E37FE	 E0	3F	F	TzArray-likes)np_onlyr   c                6   \        . RO4      VJ g   Q h\        R4      VJ g   Q h\        ^^^4      VJ g   Q h\        ^4      VJ g   Q h\        \        P                  ! ^4      4      VJ g   Q h\        . RO^4      VJ g   Q h\        4       VJ g   Q h\        R4      VJ g   Q h\        ^R4      VJ g   Q h\        R^4      VJ g   Q h\        \        P                  ! ^^.4      ^^.4      VJ g   Q h\        \        P                  ! ^4      ^^.4      VJ g   Q hR# )zeTest that if all parameters of array_namespace are Array-likes,
the output is array_api_compat.numpy
Nr   )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                :   VP                  ^4      p\        V4      VJ g   Q h\        V^4      VJ g   Q h\        ^V4      VJ g   Q h\        RV4      VJ g   Q h\        V4      '       g   \        P                  ! \
        RR7      ;_uu_ 4        \        V^^.4       RRR4       \        P                  ! \
        RR7      ;_uu_ 4        \        V\        P                  ! ^4      4       RRR4       R# R#   + '       g   i     La; i  + '       g   i     R# ; i)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.
NzMultiple namespacesr*   )r%   r   r   r.   r/   r0   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FAq6* Gy0EFF288A;/ GF FFFFFs   C6	!D	6D		D	c                    Rp\         P                  ! \        VR7      ;_uu_ 4        \        P                  ! R^ R7       RRR4       R#   + '       g   i     R# ; i)z^Test that the `array_namespace` function used by
array-api-extra has been overridden by scipy
r,   r*   r-   )ndimN)r.   r/   r0   xpx
atleast_ndr4   s   & r   test_array_api_extra_hook&TestArrayAPI.test_array_api_extra_hook^   s8     @]]9C00NN5q) 1000s   A

A	c                    VR 3 FZ  pVP                  . RO4      p\        W2R7      p\        V4      \        V4      8w  g   Q h ^
V^ &   V^ ,          V^ ,          8w  g   Q hK\  	  R #   \        \        3 d     Kt  i ; i)Nr#   )r   r      )r%   r   idr0   
ValueError)r   r   _xpr   r   s   &&   r   	test_copyTestArrayAPI.test_copyf   s{    :C

9%A"A a5BqE>!>$! tqt|#|  z* s   A%%A:9A:dtypeshapec                <   \        W4      pVP                  VP                  ^VR7      V4      pV'       d   TMVR	,          p\        P                  ! ^4      R	,          p. R
Op\	        \        V. RO4      4      p\        V4      '       d   \        WE3/ VB  Mr\        P                  ! \        RR7      ;_uu_ 4        \        WE3/ VB  RRR4       \        P                  ! \        RR7      ;_uu_ 4        \        WT3/ VB  RRR4       \	        \        V. RO4      4      pVP                  P                  \        VP                  4      9   d   \        WE3/ VB  M9\        P                  ! \        RR7      ;_uu_ 4        \        WE3/ VB  RRR4       \	        \        V. RO4      4      pVP                  VP                  8X  d   \        WE3/ VB  MH\        P                  ! \        RR7      ;_uu_ 4        \        WAP                  V4      3/ VB  RRR4       \	        \        V. RO4      4      p\        V4      '       d*   VP                  VP                  8X  d   \        WE3/ VB  R# \        V4      '       d<   \        P                  ! \        RR7      ;_uu_ 4        \        WE3/ VB  RRR4       R# R#   + '       g   i     EL; i  + '       g   i     EL; i  + '       g   i     EL_; i  + '       g   i     L; i  + '       g   i     R# ; i)r   rN   z)Namespace of desired array does not matchr*   Nz3Namespace of actual and desired arrays do not matchzdtypes do not match.zShapes do not match.zArray-ness does not match. )check_namespacecheck_dtypecheck_shapecheck_0d)TFFF)FTFF)FFTF)FFFT)getattrbroadcast_tor%   r	   dictzipr   r   r.   r/   AssertionErrorrN   namestrrO   )r   r   rN   rO   r   r   kwarg_namesoptionss   &&&&    r   test_strict_checksTestArrayAPI.test_strict_checkst   sA    "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L00 M s;(CDE77aggA,G,~5KLL::a=<G< M s;(CDEB<<AGGqww.A,G,b\\~5QRR00 SR 9  
   MLL ML SRRs<   <J;5K K#8K7"L
;K	K 	#K4	7L	
L	zScalars only exist in NumPyc                   \        VP                  ^ 4      VP                  ^ 4      4       \        VP                  R4      VP                  R4      4       \        VP                  ^ 4      VP                  ^ 4      RR7       \        VP                  R4      VP                  R4      RR7       Rp\        P                  ! \
        VR7      ;_uu_ 4        \        VP                  R4      VP                  ^ 4      4       RRR4       \        P                  ! \
        VR7      ;_uu_ 4        \        VP                  ^ 4      VP                  R4      4       RRR4       \        P                  ! \
        VR7      ;_uu_ 4        \        VP                  ^*4      VP                  ^*4      4       RRR4       \        P                  ! \
        VR7      ;_uu_ 4        \        VP                  ^*4      VP                  ^*4      4       RRR4       \        VP                  R4      VP                  ^ 4      RR7       \        VP                  ^ 4      VP                  R4      RR7       \        VP                  R4      RRR7       \        RVP                  R4      RR7       \        VP                  ^*4      ^*RR7       \        ^*VP                  ^*4      RR7       \        VP                  ^ 4      VP                  R4      R,          4       R#   + '       g   i     EL; i  + '       g   i     EL; i  + '       g   i     EL; i  + '       g   i     ELL; i)r           FrV   Array-ness does not match:.*r*   NrR   )r   float64r%   r.   r/   r[   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9BJJrNBJJqM: :]]>99BJJqM2::b>: :]]>99BJJrNBHHRL9 :]]>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99999s0   +L
*+L+L2+M
L	L/	2M	M	c                   \        VP                  ^ 4      VP                  ^ 4      4       \        VP                  ^ 4      VP                  ^ 4      RR7       \        VP                  R4      VP                  R4      RR7       Rp\        P                  ! \
        VR7      ;_uu_ 4        \        VP                  R4      VP                  R4      4       RRR4       \        P                  ! \
        VR7      ;_uu_ 4        \        VP                  R4      VP                  ^ 4      4       RRR4       \        P                  ! \
        VR7      ;_uu_ 4        \        VP                  ^*4      VP                  ^*4      4       RRR4       \        VP                  ^ 4      VP                  R4      4       \        VP                  ^*4      VP                  ^*4      4       Rp\        P                  ! \
        VR7      ;_uu_ 4        \        VP                  R4      VP                  ^ 4      RR7       RRR4       \        P                  ! \
        VR7      ;_uu_ 4        \        VP                  ^ 4      VP                  R4      RR7       RRR4       \        P                  ! \
        VR7      ;_uu_ 4        \        VP                  ^*4      VP                  ^ 4      RR7       RRR4       \        P                  ! \
        VR7      ;_uu_ 4        \        VP                  ^ 4      VP                  ^*4      RR7       RRR4       \        RVP                  R4      4       \        ^*VP                  ^*4      4       R#   + '       g   i     EL; i  + '       g   i     ELn; i  + '       g   i     EL+; i  + '       g   i     EL; i  + '       g   i     ELK; i  + '       g   i     EL; i  + '       g   i     L; i)r   Trd   rc   zResult is a NumPy 0d-array.*r*   Nre   )xp_assert_equal_no_0drf   r%   r.   r/   r[   r:   rg   s   && r   test_check_scalar_no_0d$TestArrayAPI.test_check_scalar_no_0d   s_    	bjjmRZZ];bjjmRZZ]TJbjjnbjjntL 1]]>99!"**R."**R.A :]]>99!"**R."**Q-@ :]]>99!"**R."((2,? : 	bjjmRZZ^<bhhrlBJJrN; 1]]>99!"**R."**Q-$O :]]>99!"**Q-B$O :]]>99!"**R."((1+M :]]>99!"((1+rzz"~M : 	b"**R.1b"**R.11 :99999999 :9999999999sT   )+M< +N+N$-N8-O6-O -O4<N	N!	$N5	8O		O	 O1	4P	c                \    \        V4      VP                  R 4      P                  8X  g   Q hR# )      ?N)r
   r%   rN   r;   s   &&r   test_default_dtypeTestArrayAPI.test_default_dtype   s#    #rzz"~';';;;;r!   rR   N)int32r:   float32rf   )rH   )r   
__module____qualname____firstlineno__r   r'   r.   markfilterwarningsr6   skip_xp_backendsr<   r?   rE   rL   parametrizer`   ri   rm   rq   __static_attributes____classdictcell__)__classdict__s   @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   rp   zVint8 int16 int32 int64 uint8 uint16 uint32 uint64 float32 float64 complex64 complex128rQ   c                     \        V \        P                  4      '       d   VP                  V 4      # \        V \        4      '       d   \        W4      # V # )N)
isinstancer   ndarrayr%   r]   rW   )r   r   s   &&r   convert_typer      s?     !RZZ  zz!}	As		r~Hr!   c                     \         P                  ! V 4      '       g   \        V \        4      '       d   VP	                  V 4      MT p \        V R V 4      pVP                  VR4      # )rN   )zreal floatingzcomplex floating)r   isscalarr   listr%   rW   isdtype)r   r   rN   s   && r   
is_inexactr      sI    Q:a+>+>

1AAAw"E::eBCCr!   r   r   c                 j   \        W4      p \        W4      p\        V \        4      '       d   VP                  V 4      MT p\        V\        4      '       d   VP                  V4      MTp VP	                  W44      pR pVe[   \        P                  ! V^ ,          \        P                  ! V^,          4      R7      ;_uu_ 4        \        WVR7       R R R 4       R # \        WVR7      pVX8X  g   Q hR #   \
         d!   p\        T4      \        T4      3p R p?LR p?ii ; i  + '       g   i     R # ; i)Nr*   r#   )r   r   r   r%   result_type	Exceptiontyper]   r.   r/   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Q1B' Rq+I	!!!  +q'3q6*+ RQs$   *C3 D!3D>DD!D2	c                 H   \        V4      '       d{   \        V \        4      '       ge   \        V\        4      '       gO   \        P                  ! V 4      '       d3   \        P                  ! V4      '       d   \
        P                  ! R 4       \        W4      p \        W4      p\        V \        4      '       d   VP                  V 4      MT p\        V\        4      '       d   VP                  V4      MTpRp VP                  W4R4      pVeG   \
        P                   ! V^ ,          V^,          R7      ;_uu_ 4        \#        WVR7       RRR4       R# \#        WRVR7      p	V	X8X  g   Q hR#   \         dn    . p\        Y24      '       d   TP                  T4       \        YB4      '       d   TP                  T4       TP                  ! . TOTP                  R4      N5!  p L\         d!   p\        T4      \        T4      3p Rp?LRp?ii ; i  + '       g   i     R# ; i)z8See 3/27/2024 comment at  data-apis/array-api-compat#277Nrp   r*   r#   T)force_floatingr   )r   r   r]   r   r   r.   skipr   r   r%   r   r0   r   appendr   r   r/   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F1B' GqDR@I	!!!!  ;e  KKe  KKNN:D:"**S/:	 +q'3q6*+ GFs1   7E, ;H,A5H#H,H-HHH!	      ?      ?)r   rp   r   )%r   numpyr   r.   scipy._lib._array_apir   r   r   r   r   r   r	   r
   r   r   
scipy._libr   rC   scipy._lib._array_api_no_0drl   "scipy._lib.array_api_extra.testingr   rx   skipifr   scalarslistssplittypesr%   rW   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   $F"