
    = j@              
       z   S SK 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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  \R8                  R:                  r\" \	5        \" \
5        \R8                  R?                  \(       + SS	9 " S
 S5      5       r / SQr!S/S/S//r"SRG                  5       r$\$ V s/ s H  n \RK                  S/\&" \U 5      S9PM     sn r'S r(S r)\R8                  RU                  S\!\"-   \$-   \'-   5      \R8                  RU                  S\!\"-   \$-   \'-   5      S 5       5       r+\R8                  RU                  S\!\"-   \$-   \'-   5      \R8                  RU                  S\!\"-   \$-   \'-   5      S 5       5       r,S/r-S r.\R8                  RU                  S\." 5       5      S 5       r/gs  sn f )    N)import_module)SCIPY_ARRAY_APIarray_namespace_asarrayxp_copyxp_assert_equalis_numpy	np_compatxp_default_dtypexp_result_typeis_torchxp_capabilities_table_xp_copy_to_numpy)is_named_function_like_object)array_api_extra)r   )lazy_xp_functionzDArray API test; set environment variable SCIPY_ARRAY_API=1 to run it)reasonc            
       n   \ 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S rS r\R                  R#                  S/ SQ5      \R                  R#                  S/ S/ SQSS/SS///5      S 5       5       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g )Nr         zarray_api_compat.numpy)nparrayr   __name__)selfxyxps       p/root/GenerationalWealth/GenerationalWealth/venv/lib/python3.13/site-packages/scipy/_lib/tests/test_array_api.pytest_array_namespace!TestArrayAPI.test_array_namespace   s7    xx	"BHHY$71Q"'2;;666    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_likes9   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                 h   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      (       a  [        USS/5      UL d   eg[        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        [        R                  " [
        SS9   [        U[        R                  " S5      5        SSS5        [        R                  " [
        SS9   [        U[        R                  " S5      5        SSS5        g! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Ns= 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   Nr   zMultiple namespacesr/   )
r*   r   r	   r3   r4   r5   r   r@   float64
complex128)r   r!   r   s      r"   test_array_and_array_likes_mix+TestArrayAPI.test_array_and_array_likes_mixM   sE    JJqMq!R'''q!$***q!$***tQ'2---B<<"1q!f-333y0EFAq6* Gy0EF288A;/ Gy0EF2::a=1 G y0EF2==#34 GF GFFFFF GFs0   E0!F!F!F#0
E>
F
F #
F1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
r1   r/   r2   r   )ndimN)r3   r4   r5   xpx
atleast_ndr9   s     r"   test_array_api_extra_hook&TestArrayAPI.test_array_api_extra_hookh   s2     @]]9C0NN5q) 100s	   ;
A	c                     [         R                  " S5      n[         R                  " S5      nUR                  UR                  UR                  SS95      " UR                  S5      5      n[        U5      UL d   eg)zTest array_namespace special case for JAX zero-gradient arrays, which are
numpy arrays but must be treated as JAX arrays.
See matching code and tests in array_api_compat.
jaxz	jax.numpyT)	allow_intr?   N)r3   importorskipvmapgradfloat32r)   r   )r   rP   r!   jax_zeros       r"   test_jax_zero_gradient_array)TestArrayAPI.test_jax_zero_gradient_arrayp   sc    
 !!%(  -88CHHRZZ4H@A"))A,Ox(B...r%   c                 P   [         R                  " S[         R                  " / 5      S9n[        R                  " [
        SS9   [        U5        SSS5        [        R                  " [
        SS9   [        X/5        SSS5        g! , (       d  f       N== f! , (       d  f       g= f)zkA void dtype that is not a jax.float0 must not be caught in the
special case for JAX zero-gradient arrays.
r   dtypez!only boolean and numerical dtypesr/   N)r   emptyr[   r3   r4   r5   r   )r   voids     r"   )test_void_but_not_jax_zero_gradient_array6TestArrayAPI.test_void_but_not_jax_zero_gradient_array{   sl     xx".]]9,OPD! Q]]9,OPTL) QP QPPPs   B0B
B
B%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   idr5   
ValueError)r   r!   _xpr   r    s        r"   	test_copyTestArrayAPI.test_copy   s{    :C

9%A"A a5BqE>!>$! tqt|#|  z* s   AA+*A+r[   )rU   rE   	complex64rF   int32r@   datar   ra   r   r(   c                    [        X5      n[        [        U5      nUR                  X$S9n[        U5      n[	        U[        R
                  5      (       d   eUR                  U:X  d   eUR                  UR                  :X  d   e[        R                  R                  U[        R                  " X%S95        [        U5      (       a  [        U5      [        U5      :w  d   eg g )NrZ   )getattrr   r*   r   
isinstancendarrayr[   shapetestingassert_equalr	   rc   )r   r!   rj   r[   xp_dtypenp_dtyper   r    s           r"   test_copy_to_numpyTestArrayAPI.test_copy_to_numpy   s     2%2u%JJtJ,a !RZZ((((ww("""ww!''!!!


2::d#CDB<<a5BqE>!> r%   )ri   r@   rU   rE   ro    )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   rZ   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.)rl   broadcast_tor*   r
   dictzipr	   r   r3   r4   AssertionErrorr[   namestrro   )r   r!   r[   ro   r   r    kwarg_namesoptionss           r"   test_strict_checksTestArrayAPI.test_strict_checks   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   rE   r*   r3   r4   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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   Tr   r   zResult is a NumPy 0d-array.*r/   r   r   )xp_assert_equal_no_0drE   r*   r3   r4   r   r@   r   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*   r[   rA   s     r"   test_default_dtypeTestArrayAPI.test_default_dtype  s#    #rzz"~';';;;;r%   N)r   
__module____qualname____firstlineno__r#   r,   r3   markfilterwarningsr;   skip_xp_backendsrB   rG   rM   rW   r^   rf   parametrizert   r   r   r   r   __static_attributes__rv   r%   r"   r   r      sn   7
  [[ =># ?# [[!!$}!E: F:&56*	/*$ [[K [[Q	QFQF#34"	" [[W&NO[[Wr4j1*1 2 P*1X [[!!$7T!U; V;< [[!!$7T!U 2 V 2D<r%   r   )r   r         ?      ?r   r   r   zVint8 int16 int32 int64 uint8 uint16 uint32 uint64 float32 float64 complex64 complex128rZ   c                     [        U [        R                  5      (       a  UR                  U 5      $ [        U [        5      (       a  [        X5      $ U $ N)rm   r   rn   r*   r   rl   )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      $ )Nr[   )zreal floatingzcomplex floating)r   isscalarrm   listr*   rl   isdtype)r   r!   r[   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   rm   r   r*   result_type	Exceptiontyper   r3   r4   reescaper   )	r   r    r!   x_refy_ref	dtype_refexpected_errore	dtype_ress	            r"   test_xp_result_type_no_forcer   6  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#277r   r   r   r/   r'   T)force_floatingr!   )r   rm   r   r   r   r3   skipr   r   r*   r   r5   r   appendr   r   r4   r   )
r   r    r!   r   r   r   r   argsr   r   s
             r"   "test_xp_result_type_force_floatingr   P  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zscipy.statsc            
          / n [          Hf  n[        U5      nUR                   HH  n[        X#5      n[	        U5      (       d  M   U R                  [        R                  " XA SU 3S95        MJ     Mh     U $ )N.)rc   )tested_modulesr   __all__rl   r   r   r3   param)	functionsmodule_namemoduler   objs        r"   collect_public_functionsr     sk    I%{+NND&'C055V\\#M4&2IJK	 # & r%   funcc                     U [         ;   d   eg r   )r   )r   s    r"   test_xp_capabilities_coverager     s    ((((r%   )0r   numpyr   r3   	importlibr   scipy._lib._array_apir   r   r   r   r   r	   r
   r   r   r   r   r   !scipy._lib._array_api_docs_tablesr   
scipy._libr   rK   scipy._lib._array_api_no_0dr   "scipy._lib.array_api_extra.testingr   r   array_api_backends
pytestmarkskipifr   scalarslistssplittypesr*   rl   arraysr   r   r   r   r   r   r   r   )ts   0r"   <module>r      s   	   #   
 L - P ? [[++
     'U  W}< }<W}<@ 
rdWI
016  :?	?A"**aSA*
/	?D go5>?go5>?" @ @"0 go5>?go5>?$" @ @$"Z  	 !9!;<) =)] 
@s   9"F8