
    >qjc=              
          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mZ d dlmZ d dlm	Z d dlmZ ej.                  j0                  Z ee        ee       ej.                  j5                  dd      ej.                  j7                  e d	       G d
 d                    Zg dZdgdgdggZdj?                         Z e D  cg c]  }  ejB                  dg e"e|               c} Z#d Z$d Z%ej.                  jM                  deez   e z   e#z         ej.                  jM                  deez   e z   e#z         ej.                  j5                  dd      d                      Z'ej.                  jM                  deez   e z   e#z         ej.                  jM                  deez   e z   e#z         ej.                  j5                  dd      d                      Z(yc c} w )    N)SCIPY_ARRAY_APIarray_namespace_asarrayxp_copyxp_assert_equalis_numpy	np_compatxp_default_dtypexp_result_typeis_torch_xp_copy_to_numpy)array_api_extra)r   )lazy_xp_functionFznot applicable)reasonzDArray API test; set environment variable SCIPY_ARRAY_API=1 to run itc            
       x   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d Zd Zej                  j!                  dg d      ej                  j!                  dg dg dddgddggg      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 y )Nr         zarray_api_compat.numpy)nparrayr   __name__)selfxyxps       ^/opt/rentech/trading_bot/.venv/lib/python3.12/site-packages/scipy/_lib/tests/test_array_api.pytest_array_namespacez!TestArrayAPI.test_array_namespace   s;    xx	"BHHY$71Q"'2;;666    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_likes6   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                 6   |j                  d      }t        |      |u sJ t        |d      |u sJ t        d|      |u sJ t        d|      |u sJ t        |      rt        |ddg      |u sJ yt        j                  t
        d      5  t        |ddg       ddd       t        j                  t
        d      5  t        |t        j                  d             ddd       t        j                  t
        d      5  t        |t        j                  d             ddd       t        j                  t
        d      5  t        |t        j                  d             ddd       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ex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   Nr   zMultiple namespacesr)   )
r%   r   r   r-   r.   r/   r   r9   float64
complex128)r   r   r   s      r   test_array_and_array_likes_mixz+TestArrayAPI.test_array_and_array_likes_mixJ   s_    JJqMq!R'''q!$***q!$***tQ'2---B<"1q!f-333y0EF +Aq6*+y0EF 0288A;/0y0EF 22::a=12 y0EF 52==#345 5+ +0 02 25 5s0   
E+< E7? F F+E47F FF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_hooke   s;     @]]9C0 	*NN5q)	* 	* 	*s	   ?Ac                     t        j                  d      }t        j                  d      } |j                  |j                  |j                  d            |j                  d            }t        |      |u sJ y)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_intr8   N)r-   importorskipvmapgradfloat32r$   r   )r   rF   r   jax_zeros       r   test_jax_zero_gradient_arrayz)TestArrayAPI.test_jax_zero_gradient_arraym   se    
 !!%(  -A388CHHRZZ4H@A"))A,Ox(B...r    c                 H   t        j                  dt        j                  g             }t        j                  t
        d      5  t        |       ddd       t        j                  t
        d      5  t        ||g       ddd       y# 1 sw Y   ;xY w# 1 sw Y   yxY w)z{A 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   emptyrP   r-   r.   r/   r   )r   voids     r   )test_void_but_not_jax_zero_gradient_arrayz6TestArrayAPI.test_void_but_not_jax_zero_gradient_arrayx   s}     xx".]]9,OP 	"D!	"]]9,OP 	*T4L)	* 	*	" 	"	* 	*s   B5BBB!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_copy   s    : 	$C

9%Ac"A a5BqE>!>$! tqt|#|	$ z* s   AA)(A)rP   )rK   r=   	complex64r>   int32r9   datar   rU   r   r#   c                    t        ||      }t        t        |      }|j                  ||      }t        |      }t	        |t        j
                        sJ |j                  |k(  sJ |j                  |j                  k(  sJ t        j                  j                  |t        j                  ||             t        |      rt        |      t        |      k7  sJ y y )NrO   )getattrr   r%   r   
isinstancendarrayrP   shapetestingassert_equalr   rW   )r   r   r]   rP   xp_dtypenp_dtyper   r   s           r   test_copy_to_numpyzTestArrayAPI.test_copy_to_numpy   s     2u%2u%JJt8J,a !RZZ(((ww("""ww!''!!!


2::d(#CDB<a5BqE>!> r    )r\   r9   rK   r=   rb    )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   rO   rh   )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.)r_   broadcast_tor%   r	   dictzipr   r   r-   r.   AssertionErrorrP   namestrrb   )r   r   rP   rb   r   r   kwarg_namesoptionss           r   test_strict_checkszTestArrayAPI.test_strict_checks   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rm   Array-ness does not match:.*r)   *   rh   )r   r=   r%   r-   r.   rq   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   Try   rx   zResult is a NumPy 0d-array.*r)   r{   rz   )xp_assert_equal_no_0dr=   r%   r-   r.   rq   r9   r|   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%   rP   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?   rD   rM   rS   rZ   parametrizerg   rv   r~   r   r   rh   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 complex128rO   c                     t        | t        j                        r|j                  |       S t        | t              rt        ||       S | S )N)r`   r   ra   r%   rs   r_   )r   r   s     r   convert_typer   !  s;     !RZZ zz!}	As	r1~Hr    c                     t        j                  |       st        | t              r|j	                  |       n| } t        | d|       }|j                  |d      S )NrP   )zreal floatingzcomplex floating)r   isscalarr`   listr%   r_   isdtype)r   r   rP   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"   )r   r`   r   r%   result_type	Exceptiontypers   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   3  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#277r   r   r   r)   r"   T)force_floatingr   )r   r`   rs   r   r   r-   skipr   r   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   N  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   r   scipy._externalr   rB   scipy._lib._array_api_no_0dr   'scipy._external.array_api_extra.testingr   r   array_api_backends
pytestmarkuses_xp_capabilitiesskipifr   scalarslistssplittypesr%   r_   arraysr   r   r   r   r   )ts   0r   <module>r      s   	      3 P D [[++
     !!%0@!A'U  W}< }<W B}<@ 
rdWI
016  :?	?A*"**aSA
/	?D go5>?go5>?!!%0@!A" B @ @"0 go5>?go5>?!!%0@!A$" B @ @$"g 
@s   
#G