
    DgB              
          d dl Z d dlmZmZ d dlZd dlZddlmZm	Z	m
Z
mZmZmZ ddlm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mZmZmZmZ  d Z!d Z"d	 Z#d
 Z$d Z%d Z&d Z'd Z(d Z)ej*        +                    dg d          ej*        +                    dg d          d                         Z,d Z-ej*        +                    d e.d           e.dd            e	d           e	d dg          g          d             Z/d Z0dS )    N)assert_raisessuppress_warnings   )onesasarrayreshaperesult_typeallequal)Array)_all_dtypes_boolean_dtypes_real_floating_dtypes_floating_dtypes_complex_floating_dtypes_integer_dtypes_integer_or_boolean_dtypes_real_numeric_dtypes_numeric_dtypesint8int16int32int64uint64boolc                       t          d           t          t           fd           t          t           fd           t          t           fd           t          t           fd           t          t           fd           t          t           fd           t          t           fd           t          t           fd	           t          t           fd
           t          t           fd           t          t           fd           t          t           fd           t          t           fd           t          t           fd           t          t           fd           t          t           fd           t          t           fd           t          t           fd           t          t           fd           t          t           fd           t          t           fd           t          ddgg          t          t           fd           t          t           fd           t          t           fd           t          t           fd           t          t           fd           t          t           fd           t          t           fd           t          t           fd            t          t           fd!           t          t           fd"           d S )#N      c                       d d         S Nr    as   \/var/www/sysmax/venv/lib/python3.11/site-packages/numpy/array_api/tests/test_array_object.py<lambda>z%test_validate_index.<locals>.<lambda>,   s    ae     c                       d d         S Nr"   r#   s   r%   r&   z%test_validate_index.<locals>.<lambda>-   s    af r'   c                       d dd         S )Nr   r"   r#   s   r%   r&   z%test_validate_index.<locals>.<lambda>.   s    a2h r'   c                       d dd         S )Nr,   r"   r#   s   r%   r&   z%test_validate_index.<locals>.<lambda>/   s    aBi r'   c                       dd          S r!   r"   r#   s   r%   r&   z%test_validate_index.<locals>.<lambda>0   s    ae r'   c                       dd          S r)   r"   r#   s   r%   r&   z%test_validate_index.<locals>.<lambda>1   s    af r'   c                       dd d         S )Nr   r,   r"   r#   s   r%   r&   z%test_validate_index.<locals>.<lambda>2   s    a2h r'   c                       dd d         S )Nr*   r,   r"   r#   s   r%   r&   z%test_validate_index.<locals>.<lambda>3   s    aBi r'   c                       dd df         S N.   r"   r#   s   r%   r&   z%test_validate_index.<locals>.<lambda>5   s    aBQBi r'   c                       dd df         S N.r.   r"   r#   s   r%   r&   z%test_validate_index.<locals>.<lambda>6   s    aCRCj r'   c                       dd ddf         S N.r5   r,   r"   r#   s   r%   r&   z%test_validate_index.<locals>.<lambda>7   s    aEQrE	l r'   c                       dd ddf         S )N.ir,   r"   r#   s   r%   r&   z%test_validate_index.<locals>.<lambda>8   s    aFRF
m r'   c                       ddd f         S r4   r"   r#   s   r%   r&   z%test_validate_index.<locals>.<lambda>9   s    aABBi r'   c                       ddd f         S r7   r"   r#   s   r%   r&   z%test_validate_index.<locals>.<lambda>:   s    aBCCj r'   c                       ddd df         S r9   r"   r#   s   r%   r&   z%test_validate_index.<locals>.<lambda>;   s    aAErE	l r'   c                       ddd df         S )N.r.   r,   r"   r#   s   r%   r&   z%test_validate_index.<locals>.<lambda><   s    aBFF
m r'   c                  4      d d df         dk    df         S Nr      r"   r#   s   r%   r&   z%test_validate_index.<locals>.<lambda>?   s    a!!!A#	!n r'   c                  4      d d df         dk    df         S )Nr   rA   .r"   r#   s   r%   r&   z%test_validate_index.<locals>.<lambda>@   s     a!!!A#	#&6 r'   c                  ,     d d         dk    f         S )N.r   rA   r"   r#   s   r%   r&   z%test_validate_index.<locals>.<lambda>A   s    aQqT1Wo r'   c                       g d         S )NTTTr"   r#   s   r%   r&   z%test_validate_index.<locals>.<lambda>B   s    a(:(:(:&; r'   c                       d         S )N)rE   r"   r#   s   r%   r&   z%test_validate_index.<locals>.<lambda>C   s    a(;&< r'   r   rA   c                                S Nr"   r$   idxs   r%   r&   z%test_validate_index.<locals>.<lambda>G   s    af r'   c                       f         S rH   r"   rI   s   r%   r&   z%test_validate_index.<locals>.<lambda>H   s    ag r'   c                       ddg         S r@   r"   r#   s   r%   r&   z%test_validate_index.<locals>.<lambda>I       aAi r'   c                       d         S )N)r   rA   rO   r"   r#   s   r%   r&   z%test_validate_index.<locals>.<lambda>J   s    a&7 r'   c                       ddg         S r@   r"   r#   s   r%   r&   z%test_validate_index.<locals>.<lambda>K   rM   r'   c                  >     t          j        ddgg                   S r@   )nparrayr#   s   r%   r&   z%test_validate_index.<locals>.<lambda>L   s    a1a&(:(:&; r'   c                       d         S )Nr"   r"   r#   s   r%   r&   z%test_validate_index.<locals>.<lambda>O       ae r'   c                       d         S )Nr   r"   r#   s   r%   r&   z%test_validate_index.<locals>.<lambda>P   rU   r'   c                       d         S Nr   r"   r#   s   r%   r&   z%test_validate_index.<locals>.<lambda>Q   s    ad r'   c                       d d          S rH   r"   r#   s   r%   r&   z%test_validate_index.<locals>.<lambda>R   s    ad r'   )r   r   
IndexErrorr   rI   s   @@r%   test_validate_indexr\      s4    	VA *mmmm,,,*nnnn---*....///*////000*mmmm,,,*nnnn---*....///*////000*////000*0000111*2222333*3333444*////000*0000111*2222333*3333444 *4444555*6666777*5555666*;;;;<<<*<<<<=== Aq6(

C*nnnnn---*ooooo...*////000*7777888*////000*;;;;<<< *mmmm,,,*mmmm,,,*llll+++*llll+++++r'   c                    	
 i ddddddddd	dd
dddddddddddddddddddddddddi} d 	t          d          }|                                 D ]\  }g}dvr!ddd          z   }ddd          z   }|||gz  }dd d!|d"fD ]|D ]ۊ
 	            D ]ъ|dk    sz|dk    rj        t          v sf|dk    rj        t          v sR|dk    rj        t
          v s>|dk    rj        t          v s*|d#k    rj        t          v s|dk    rCj        t          v r4j        t          v rt                    t          k    sj        t
          v rt                    t           k    s\j        t          v rt                    t          t           fv s1j        t          v rt                    t          t          t           fv rj        t
          v r"|k    rt          t           
fd$           [t#                      5 }|                    t&          d%            t)          
                     d d d            n# 1 swxY w Y   t          t*          
fd&           |D ]
 	            D ] 	            D ]يj        t,          k    r!j        t.          t0          t2          t4          fv sىj        t,          k    r!j        t.          t0          t2          t4          fv sj        t
          v rj        t
          vsj        t
          v rj        t
          vspj        t          v rj        t          vsTj        t          v rj        t          vs8j        t          v rj        t          vsj        t          v r*j        t          vrt          t*          
fd'           )
                    d          r?t9          j        j                  j        k    rt          t*          
fd(           }|dk    r9j        t          v rj        t          v sj        t          v rj        t          v s|dk    rj        t          v rj        t          v s|dk    rj        t          v rj        t          v s|dk    rj        t
          v rj        t
          v s|dk    r8j        t
          v rj        t
          v s`j        t          v rj        t          v sD|d#k    rj        t          v rj        t          v s"|dk    r7j        t          v r)j        t          v r t)          
                     t          t*          
fd)           ېݐddddd*}|                                D ]l\  } 	            D ]\|dk    rj        t          v s|dk    r'j        t          v r t)                                 Ct          t*          fd+           ]m	fd,}d-D ]
d.D ] |            D ]t                    t          t           fv rj        t          v s&t                    t           k    r)j        t
          v rt          t:          
fd/           nt          t*          
fd0            |            D ] |            D ]j        t,          k    r!j        t.          t0          t2          t4          fv sj        t,          k    r!j        t.          t0          t2          t4          fv sj        t
          v rj        t
          vspj        t
          v rj        t
          vsTj        t          v rj        t          vs8j        t          v rj        t          vsj        t          v sj        t          v rMt          t*          fd1           t          t*          fd2           t          t*          fd3           >j        d4k    s'j        d4k    sj        d         j        d5         k    rt          t:          fd6           t          t:          fd7           t9          j        j                  j        k    rt          t*          fd8           t          t:          fd9                                                                          t9          j        j                  j        k    rt          t*          fd:           cj        d5         j        d         k    rt          t:          fd;           !                               d S )<N__add__numeric__and__integer_or_boolean__eq__r
   __floordiv__zreal numeric__ge____gt____le__
__lshift__integer__lt____mod____mul____ne____or____pow__
__rshift____sub____truediv__floating__xor__c               3      K   t           D ]} t          d|           V  t          D ]} t          d|           V  t          D ]} t          d|           V  d S )NrA   dtypeF      ?)r   r   r   r   )ds    r%   _array_valsz#test_operators.<locals>._array_valsl   s        	& 	&A!1%%%%%%%  	* 	*A%q)))))))! 	( 	(A#Q'''''''	( 	(r'   gꌠ9Y>)F)rb   rl   rf   rd   ri   re   __rr   __irA   rw   y              ?Fbooleanc                  6     t                               S rH   getattr_opr$   ss   r%   r&   z test_operators.<locals>.<lambda>       CQRASAS r'   z"invalid value encountered in powerc                  6     t                               S rH   r~   r   s   r%   r&   z test_operators.<locals>.<lambda>   s    C9K9K r'   c                  6     t                               S rH   r~   r   xys   r%   r&   z test_operators.<locals>.<lambda>   r   r'   c                  6     t                               S rH   r~   r   s   r%   r&   z test_operators.<locals>.<lambda>   r   r'   c                  6     t                               S rH   r~   r   s   r%   r&   z test_operators.<locals>.<lambda>   r   r'   )__abs__
__invert____neg____pos__c                  4     t                                 S rH   r~   )r$   ops   r%   r&   z test_operators.<locals>.<lambda>   s    B1A1A r'   c               3      K                D ]} | V  t           D ];}t          d|          V  t          d|          V  t          d|          V  <d S )Nr   ru   )r   r   )r   r   )r   r   )r$   rx   ry   s     r%   _matmul_array_valsz*test_operators.<locals>._matmul_array_vals   s       	 	AGGGG 	( 	(AvQ''''''vQ''''''vQ'''''''	( 	(r'   )
__matmul____rmatmul____imatmul__)rA   rw   Fc                  6     t                               S rH   r~   r   s   r%   r&   z test_operators.<locals>.<lambda>   s    ogaooa6H6H r'   c                  6     t                               S rH   r~   r   s   r%   r&   z test_operators.<locals>.<lambda>   s    _WQ__Q5G5G r'   c                  .                                    S rH   r   r   r   s   r%   r&   z test_operators.<locals>.<lambda>   s    a r'   c                  .                                    S rH   r   r   s   r%   r&   z test_operators.<locals>.<lambda>       q1A1A r'   c                  .                                    S rH   r   r   s   r%   r&   z test_operators.<locals>.<lambda>   r   r'   r"   r   c                  .                                    S rH   r   r   s   r%   r&   z test_operators.<locals>.<lambda>   s    !,,q// r'   c                  .                                    S rH   r   r   s   r%   r&   z test_operators.<locals>.<lambda>  s    !--2B2B r'   c                  .                                    S rH   r   r   s   r%   r&   z test_operators.<locals>.<lambda>      Q]]15E5E r'   c                  .                                    S rH   r   r   s   r%   r&   z test_operators.<locals>.<lambda>      ammA6F6F r'   c                  .                                    S rH   r   r   s   r%   r&   z test_operators.<locals>.<lambda>
  r   r'   c                  .                                    S rH   r   r   s   r%   r&   z test_operators.<locals>.<lambda>  r   r'   )"intitemsrv   r   r   r   r   r   r   typer   r   floatr   complexr   OverflowErrorr   filterRuntimeWarningr   	TypeErrorr   r   r   r   r   
startswithr	   
ValueErrorshaper   r   r   )binary_op_dtypesBIG_INTdtypesopsropiopsupunary_op_dtypesr   ry   r   r$   r   r   r   r   s            @@@@@@@r%   test_operatorsr   T   s   9' 	% 		
 	. 	. 	. 	i 	. 	> 	9 	% 	& 	9 	i  	9!" 	z#$ 	'% *( ( ( $iiG&,,.. PU PU
FdQQQ"QRR&.C"QRR&.CC:CS"gu- J	U J	UA IU IU$ "M "MA  5"i//AG4N4N"n44DX9X9X"i//AG4N4N"&:::qwJd?d?d"i//AG4N4N"j00QW@P5P5P W77DGGtOO !? : :tAww#~~ !+@ @ @T!WWQVX[P\E\E\ !+C C CQT[]bdgShHhHh7o55!w,,)-9S9S9S9S9S9STTTT "3!4!4 3 #

>+O!Q !Q !Q /3 2 2 2	3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 &i1K1K1K1K1K1KLLLL  #U #UC([]] "U "U!, !U !UA !"6 1 1ag$uV[A\6\6\#$7f#4#4T5RWY^D_9_9_#$7o#=#=!'Q`B`B`#$7o#=#=!'Q`B`B`#$7o#=#=!'Q`B`B`#$7o#=#=!'Q`B`B`#$7.>#>#>17RbCbCb#$7.>#>#>17RbCbCb -i9S9S9S9S9S9S T T T T !$u 5 5U$/$A$AQW$L$L -i9S9S9S9S9S9S T T T T"(E//qw/7Q7QVWV]apVpVp9:O9S9SXYX_crXrXr$*n$<$<L`A`A`efel  qE  fE  fE$*i$7$7AG<V<V[\[bfu[u[u#)Y#6#617o;U;UZ[ZaetZtZt#)-A#A#AqwRaGaGafgfm  rA  gA  gAJK'UdJdJdijip  uD  jD  jD#)Y#6#617o;U;UZ[ZaetZtZt#)Z#7#7AGGW<W<W\]\cgw\w\w /3 2 2 2 2 -i9S9S9S9S9S9S T T T TC!U"U#UMIUJ	UZ *	 O &++-- C C
F 
	C 
	CA)##G..111G999 2    i)A)A)A)A)ABBBB
	C( ( ( ( ( < 	I 	I  	I 	IA'')) I IGGs|++;K0K0KAww#~~!'_*D*D "*.H.H.H.H.H.HIIII!)-G-G-G-G-G-GHHHHI	I  !! % %##%% 	% 	%A6!!ag$ue1L&L&L7f$$T5%4O)O)O7o--!'2P2P7o--!'2P2P7...17BR3R3R7...17BR3R3R7o--7o--i)@)@)@)@)@AAAi)A)A)A)A)ABBBi)A)A)A)A)ABBBBB!'R--171:3K3Kj*A*A*A*A*ABBBj*B*B*B*B*BCCCqw00AG;;!)-E-E-E-E-EFFFF!*.F.F.F.F.FGGGGQa   qw00AG;;!)-E-E-E-E-EFFFFWQZ171:--!*.F.F.F.F.FGGGGMM!$$$$;	%% %s   5IIIc                  n   t          d          t          d          } t          d          t          d          t                    dk    sJ t          |           dk    sJ t                    dk    sJ t	          j        |           dk    sJ t          t          d            t          t          d            t          t          d            t          t          d            t          t          d	            t                    t          |           cxu r(t                    cxu rt                    cxu rdu sn J t                    t          |           cxk    rt                    cxk    rdk    sn J t          t          fd
           t                    t          |           cxk    rt                    cxk    rdk    sn J t          t          fd           t                    t          |           cxk    r.t                    cxk    rt                    cxk    rdk    sn J t	          j        |           dk    sJ t          t          fd           t          t          fd           t          t          fd           d S )NFr                           c                  <    t          t          dg                    S )NF)r   r   r"   r'   r%   r&   z0test_python_scalar_construtors.<locals>.<lambda>  s    T'5'*:*:%;%; r'   c                  <    t          t          dg                    S rY   )r   r   r"   r'   r%   r&   z0test_python_scalar_construtors.<locals>.<lambda>  s    S!%6%6 r'   c                  <    t          t          dg                    S )Nr   )r   r   r"   r'   r%   r&   z0test_python_scalar_construtors.<locals>.<lambda>   s    U7C5>>%:%: r'   c                  <    t          t          dg                    S )Nr   )r   r   r"   r'   r%   r&   z0test_python_scalar_construtors.<locals>.<lambda>!  s    WWbT]]%;%; r'   c                  F    t          j        t          dg                    S rY   )operatorindexr   r"   r'   r%   r&   z0test_python_scalar_construtors.<locals>.<lambda>"  s    X^GQCLL%A%A r'   c                  "    t                     S rH   )r   cs   r%   r&   z0test_python_scalar_construtors.<locals>.<lambda>)  s    SVV r'   c                  "    t                     S rH   )r   r   s   r%   r&   z0test_python_scalar_construtors.<locals>.<lambda>-  s    U1XX r'   c                  ,    t          j                   S rH   r   r   )bs   r%   r&   z0test_python_scalar_construtors.<locals>.<lambda>4      X^A%6%6 r'   c                  ,    t          j                   S rH   r   )fs   r%   r&   z0test_python_scalar_construtors.<locals>.<lambda>5  r   r'   c                  ,    t          j                   S rH   r   r   s   r%   r&   z0test_python_scalar_construtors.<locals>.<lambda>6  r   r'   )	r   r   r   r   r   r   r   r   r   )ir   r   r   s    @@@r%   test_python_scalar_construtorsr     s   A

AAA77eq66Q;;;;88s????>!!!!! );;<<<)66777)::;;;);;<<<)AABBB 77d1gg<<<<a<<<<DGG<<<<u<<<<<< q66SVV****s1vv**********)^^^^,,, 88uQxx22225882222s222222)----... 1::EEEEwqzzEEEEWQZZEEEE2EEEEEE >!!!!!)6666777)6666777)666677777r'   c                  `    t          d            j        dk    sJ t          t                               d                               sJ t          t           fd           t          t          t           d                               sJ t          t           fd           d S )Nr   cpuc                  .                          d          S )Ngpu)	to_devicer#   s   r%   r&   z&test_device_property.<locals>.<lambda>>  s    akk%&8&8 r'   devicec                  &    t           d          S )Nr   r   )r   r#   s   r%   r&   z&test_device_property.<locals>.<lambda>A  s    ga&>&>&> r'   )r   r   r
   r   r   r   r   r   r#   s   @r%   test_device_propertyr   9  s    VA8uuQ[[''++,,,,,*8888999uWQu---q1122222*>>>>?????r'   c                     t          d          t          d          } t          t          fd           t          | j        t
                    sJ | j        j        dk    sJ t          j        t
                    sJ j        j        dk    sJ t          | j        t
                    sJ | j        j        dk    sJ d S )N)rA   r   r   r   r   c                       j         S rH   )Tr#   s   r%   r&   z'test_array_properties.<locals>.<lambda>F  s	    ac r'   )r   r   )rA   r   r   )r   r   r   
isinstancer   r   r   mT)r   r$   s    @r%   test_array_propertiesr   C  s    YAVA*kkkk***ac5!!!!!39adE"""""4:""""adE"""""4:r'   c            	      h   t          dt                    } t          j        |           | j        u sJ t          j        | t          j                  }t          j        t          j        |t          j         dt          j                                      sJ |j        t          j        k    sJ d S )Nr   ru   )	r   r   rR   r   _arrayfloat64r
   r   rv   )r$   r   s     r%   test___array__r   P  s    V5!!!A:a==AH$$$$

1BJ'''A6"(1bgfBJ???@@AAAAA7bj      r'   c                  V    t          d          } | d d d f         }|j        dk    sJ d S )Nr5   )rA   r5   )r   r   )r$   	indexed_as     r%   test_allow_newaxisr   W  s7    QA$'
I?f$$$$$$r'   c                      t          d          } t          j        t                    5  | d          d d d            d S # 1 swxY w Y   d S )Nr   r   r   )Nr   r   r   pytestraisesr[   r#   s    r%   (test_disallow_flat_indexing_with_newaxisr   \  s    YA	z	"	"  	*                    	?AAc                      t          d          } t          j        t                    5  | d t	          d          f          d d d            d S # 1 swxY w Y   d S )Nr   T)r   r   r   r[   r   r#   s    r%   test_disallow_mask_with_newaxisr   a  s    YA	z	"	"  	$
                 s   AAAr   )r"   )r5   r   r   )stringFTc                     t          |           }t          j        t                    5  ||          d d d            d S # 1 swxY w Y   d S rH   r   )r   r   r$   s      r%   test_error_on_invalid_indexr   f  s     	UA	z	"	"  	%                 r   c                  N    t          d          } | t          d                    d S )Nr"   T)r   r   r#   s    r%   !test_mask_0d_array_without_errorsr   m  s$    RAgdmmr'   r   r5   TrA   c                    t          d          }t          j        t                    5  |d| f          d d d            n# 1 swxY w Y   t          j        t                    5  || df          d d d            d S # 1 swxY w Y   d S )Nr   .r   )r   r$   s     r%   )test_error_on_invalid_index_with_ellipsisr   q  s    	YA	z	"	"  	#q&		              	z	"	"  	!S&		                 s#   A  AA$A<<B B c                  $   t          dt                    } | |          j        dk    sJ t          dt                    } t          dt                    }t          j        t
                    5  | |          ddd           dS # 1 swxY w Y   dS )aq  
    Indexing operations convert array keys before indexing the internal array

    Fails when array_api array keys are not converted into NumPy-proper arrays
    in __getitem__(). This is achieved by passing array_api arrays with 0-sized
    dimensions, which NumPy-proper treats erroneously - not sure why!

    TODO: Find and use appropriate __setitem__() case.
    )r   r   ru   rW   N)r   bool_r   r   r   r[   )r$   keys     r%   !test_array_keys_use_private_arrayr   {  s     	V5!!!AQ4:TA
vU
#
#
#C	z	"	"  	#                 s   /	BB	B	)1r   numpy.testingr   r   numpyrR   r    r   r   r   r	   r
   r   _array_objectr   _dtypesr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r\   r   r   r   r   r   r   r   r   markparametrizer   r   slicer   r   r"   r'   r%   <module>r     s    : : : : : : : :      > > > > > > > > > > > > > > > > ! ! ! ! ! !                                 &6, 6, 6,p{% {% {%|$8 $8 $8N@ @ @     ! ! !% % %
  
  
 "7"7"788"9"9"9::  ;: 98
   %%((EE!QKKA	@       r'   