
    ЏkhG4              
          d dl Z d dlZd dlZd dlmZmZmZmZm	Z	m
Z
mZmZmZmZ d dlmZ d dlm	Z d dlmZ  ee        ee       ej,                  j/                  ed    d       G d	 d
             Zg dZdgdgdggZdj7                         ZeD  cg c]  }  ej:                  dg ee|               c} Zd Z d Z!ej,                  jE                  deez   ez   ez         ej,                  jE                  deez   ez   ez         d               Z#ej,                  jE                  deez   ez   ez         ej,                  jE                  deez   ez   ez         d               Z$yc c} w )    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                      e Zd Zd Zd Zej                  j                  d      d        Zej                  j                  dd      d        Z
d	 Zd
 Zd Zej                  j                  dg d      ej                  j                  dddg      d               Zej                  j                  dd      d        Zej                  j                  dd      d        Zd Zy)TestArrayAPIc                     t        j                  g d      t        j                  g d      }}t        ||      }d|j                  v sJ dt        d<   t        ||      }d|j                  v sJ dt        d<   y )Nr         zarray_api_compat.numpyFr   T)nparrayr   __name__r   )selfxyxps       [/var/www/teggl/fontify/venv/lib/python3.12/site-packages/scipy/_lib/tests/test_array_api.pytest_array_namespacez!TestArrayAPI.test_array_namespace   so    xx	"BHHY$71Q"'2;;666,1()Q"'2;;666,0()    c                     t        g d|      t        t        j                  d      |      }}|j                  g d      }t	        ||       t	        ||       y )Nr   r      )r   r   arangeasarrayr   )r   r   r   r   refs        r   test_asarrayzTestArrayAPI.test_asarray!   sC    	b)8BIIaLR+H1jj#33r    zignore: the matrix subclassc                    d}t        j                  t        |      5  t        t        j
                  j                  d      t	        j                  d             d d d        d}t        j                  t        |      5  t        t	        j                  d      t	        j                  d             d d d        d}t        j                  t        |      5  t        t               g       d d d        t        j                  t        |      5  t        d       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   QxY w# 1 sw Y   y xY w)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_raiseszTestArrayAPI.test_raises'   s    @]]9C0 	9BEEKKNBHHQK8	9 9]]9C0 	7BHHQK16	7 @]]9C0 	(VXJ'	(]]9C0 	#E"	# 	#	9 	9	7 	7	( 	(	# 	#s/   =D% 3D1D=E	%D.1D:=E	ETzArray-likes)np_onlyr   c                    t        g d      |u sJ t        d      |u sJ t        ddd      |u sJ t        d      |u sJ t        t        j                  d            |u sJ t        g dd      |u sJ t               |u sJ t        d      |u sJ t        dd      |u sJ t        dd      |u sJ t        t        j                  ddg      ddg      |u sJ t        t        j                  d      ddg      |u sJ y)zuTest 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_likesz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                    |j                  d      }t        |      |u sJ t        |d      |u sJ t        d|      |u sJ t        d|      |u sJ t        |      svt        j                  t
        d      5  t        |ddg       ddd       t        j                  t
        d      5  t        |t        j                  d             ddd       yy# 1 sw Y   NxY w# 1 sw Y   yxY w)a  Test 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   r-   r.   r/   r   r9   )r   r   r   s      r   test_array_and_array_likes_mixz+TestArrayAPI.test_array_and_array_likes_mixK   s     JJqMq!R'''q!$***q!$***tQ'2---|y0EF +Aq6*+y0EF 0288A;/0 0 + +0 0s   7C) CCC(c                     d}t        j                  t        |      5  t        j                  dd       ddd       y# 1 sw Y   yxY w)znTest that the `array_namespace` function used by
        array-api-extra has been overridden by scipy
        r+   r)   r,   r   )ndimN)r-   r.   r/   xpx
atleast_ndr3   s     r   test_array_api_extra_hookz&TestArrayAPI.test_array_api_extra_hook^   s;     @]]9C0 	*NN5q)	* 	* 	*s	   ?Ac                     |d fD ]N  }|j                  g d      }t        ||      }t        |      t        |      k7  sJ 	 d|d<   |d   |d   k7  rNJ  y # t        t        f$ r Y cw xY w)N)r   r   r#   r"   
   r   )r%   r   idr/   
ValueError)r   r   _xpr   r   s        r   	test_copyzTestArrayAPI.test_copyf   s    : 	$C

9%Ac"A a5BqE>!>$! tqt|#|	$ z* s   AA)(A)dtype)int32r9   float32float64shape )r#   c                 X   t        ||      }|j                  |j                  d|      |      }|r|n|d   }t        j                  d      d   }g d}t	        t        |g d            }t        |      rt        ||fi | nbt        j                  t        d      5  t        ||fi | d d d        t        j                  t        d      5  t        ||fi | d d d        t	        t        |g d	            }|j                  j                  t        |j                        v rt        ||fi | n1t        j                  t        d
      5  t        ||fi | d d d        t	        t        |g d            }|j                  |j                  k(  rt        ||fi | n@t        j                  t        d      5  t        ||j                  |      fi | d d d        t	        t        |g d            }t        |      r'|j                  |j                  k(  rt        ||fi | y t        |      r2t        j                  t        d      5  t        ||fi | d d d        y y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   )xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   rI   rN   )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   r-   r.   AssertionErrorrI   namestrrM   )r   r   rI   rM   r   r   kwarg_namesoptionss           r   test_strict_checkszTestArrayAPI.test_strict_checkst   sG    E"OOBJJqJ6>AAbEa $Ss;(CDEB<Aq,G,A 1  100	1
 K 1  100	1 s;(CDE77<<3qww<'Aq,G,~5KL 11001 s;(CDE77aggAq,G,~5KL =2::a=<G<= s;(CDEB<AGGqww.Aq,G,b\~5QR 11001 1 91 1
1 11 1= =1 1s<    I-I:JJJ -I7:JJJ J)zScalars only exist in NumPyc                 *   t        |j                  d      |j                  d             t        |j                  d      |j                  d             t        |j                  d      |j                  d      d       t        |j                  d      |j                  d      d       d}t        j                  t
        |      5  t        |j                  d      |j                  d             d d d        t        j                  t
        |      5  t        |j                  d      |j                  d             d d d        t        j                  t
        |      5  t        |j                  d      |j                  d             d d d        t        j                  t
        |      5  t        |j                  d      |j                  d             d d d        t        |j                  d      |j                  d      d       t        |j                  d      |j                  d      d       t        |j                  d      dd       t        d|j                  d      d       t        |j                  d      dd       t        d|j                  d      d       t        |j                  d      |j                  d      d          y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   lxY w# 1 sw Y   +xY w)	Nr           FrT   Array-ness does not match:.*r)   *   rN   )r   rL   r%   r-   r.   rY   r9   r   r   messages      r   test_check_scalarz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:'	; 	;	; 	;	: 	:	: 	:s0   
+K!+K.&+K;4+L!K+.K8;LLc                 *   t        |j                  d      |j                  d             t        |j                  d      |j                  d      d       t        |j                  d      |j                  d      d       d}t        j                  t
        |      5  t        |j                  d      |j                  d             d d d        t        j                  t
        |      5  t        |j                  d      |j                  d             d d d        t        j                  t
        |      5  t        |j                  d      |j                  d             d d d        t        |j                  d      |j                  d             t        |j                  d      |j                  d             d}t        j                  t
        |      5  t        |j                  d      |j                  d      d       d d d        t        j                  t
        |      5  t        |j                  d      |j                  d      d       d d d        t        j                  t
        |      5  t        |j                  d      |j                  d      d       d d d        t        j                  t
        |      5  t        |j                  d      |j                  d      d       d d d        t        d|j                  d             t        d|j                  d             y # 1 sw Y   sxY w# 1 sw Y   2xY w# 1 sw Y   xY w# 1 sw Y   XxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)	Nr   Tra   r`   zResult is a NumPy 0d-array.*r)   rc   rb   )xp_assert_equal_no_0drL   r%   r-   r.   rY   r9   rd   s      r   test_check_scalar_no_0dz$TestArrayAPI.test_check_scalar_no_0d   s    	bjjmRZZ];bjjmRZZ]TJbjjnbjjntL 1]]>9 	B!"**R."**R.A	B]]>9 	A!"**R."**Q-@	A]]>9 	@!"**R."((2,?	@ 	bjjmRZZ^<bhhrlBJJrN; 1]]>9 	P!"**R."**Q-$O	P]]>9 	P!"**Q-B$O	P]]>9 	N!"**R."((1+M	N]]>9 	N!"((1+rzz"~M	N 	b"**R.1b"**R.11	B 	B	A 	A	@ 	@	P 	P	P 	P	N 	N	N 	NsT    +L<.+M	<+M -M#0-M0 -M=-N	<M	MM #M-0M:=N	Nc                 V    t        |      |j                  d      j                  k(  sJ y )N      ?)r
   r%   rI   r:   s     r   test_default_dtypezTestArrayAPI.test_default_dtype   s#    #rzz"~';';;;;r    N)r   
__module____qualname__r   r'   r-   markfilterwarningsr5   skip_xp_backendsr;   r=   rB   rH   parametrizer^   rf   ri   rl   rN   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   rk         ?      ?r   rk   rs   zVint8 int16 int32 int64 uint8 uint16 uint32 uint64 float32 float64 complex64 complex128rP   c                     t        | t        j                        r|j                  |       S t        | t              rt        ||       S | S )N)
isinstancer   ndarrayr%   r[   rU   )r   r   s     r   convert_typerw      s;     !RZZ zz!}	As	r1~Hr    c                     t        j                  |       st        | t              r|j	                  |       n| } t        | d|       }|j                  |d      S )NrI   )zreal floatingzcomplex floating)r   isscalarru   listr%   rU   isdtype)r   r   rI   s      r   
is_inexactr|      sD    Q:a+>

1AAAw"E::eBCCr    r   r   c                    t        | |      } t        ||      }t        | t              r|j                  |       n| }t        |t              r|j                  |      n|}	 |j	                  ||      }d }|Ht        j                  |d   t        j                  |d               5  t        | ||       d d d        y t        | ||      }|k(  sJ y # t
        $ r }t        |      t        |      f}Y d }~d }~ww xY w# 1 sw Y   y xY w)Nr   r   r)   r"   )rw   ru   rz   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0BJJqMaE'40BJJqMaE+NN5%0	 !]]>!,BIInQ>O4PQ 	(1aB'	(q!+I	!!!  +q'3q6*+	(s$    C &D 	C=C88C= D	c                    t        |      r_t        | t              sOt        |t              s?t        j                  |       r*t        j                  |      rt        j                  d       t        | |      } t        ||      }t        | t              r|j                  |       n| }t        |t              r|j                  |      n|}d }	 |j                  ||d      }|5t        j                   |d   |d         5  t#        | ||       d d d        y t#        | |d|      }	|	k(  sJ y # t        $ rb g }t        ||      r|j                  |       t        ||      r|j                  |        |j                  g ||j                  d       }Y t        $ r }t        |      t        |      f}Y d }~d }~ww xY w# 1 sw Y   y xY w)	Nz8See 3/27/2024 comment at  data-apis/array-api-compat#277rk   r   r   r)   r"   T)force_floatingr   )r   ru   r[   r   ry   r-   skiprw   rz   r%   r~   r/   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3EA2;;q>NOQAQA'40BJJqMaE'40BJJqMaEN
+NN5%5	 !]]>!,N14EF 	(1aB'	(q!DR@I	!!!!  ;eR KKeR KK"BNN:D:"**S/:	 +q'3q6*+	(s+   D- >G-A(F?F?F::F?G)%r   numpyr   r-   scipy._lib._array_apir   r   r   r   r   r   r	   r
   r   r   
scipy._libr   r@   scipy._lib._array_api_no_0drh   "scipy._lib.array_api_extra.testingr   ro   skipifr   scalarslistssplittypesr%   rU   arraysrw   r|   rr   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(