o
    eB                  	   @   sT  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d Z!d	d
 Z"dd Z#dd Z$dd Z%dd Z&dd Z'dd Z(dd Z)ej*+dg dej*+dg ddd Z,dd  Z-ej*+d!e.d"e.d"d e	d#e	d d$ggd%d& Z/d'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                      sL  t d tt fdd tt fdd tt fdd tt fdd tt fdd tt fdd tt fd	d tt fd
d tt fdd tt fdd tt fdd tt fdd tt fdd tt fdd tt fdd tt fdd tt fdd tt fdd tt fdd tt fdd tt fdd tddggtt fdd tt fdd tt fdd tt fdd tt fdd tt fdd tt fd d tt fd!d tt fd"d tt fd#d d S )$N      c                          d d S Nr    r    ar    Z/var/www/html/venv/lib/python3.10/site-packages/numpy/array_api/tests/test_array_object.py<lambda>,       z%test_validate_index.<locals>.<lambda>c                      r   Nr    r    r!   r    r#   r$   -   r%   c                          d dd S )Nr   r    r    r!   r    r#   r$   .       c                      r(   )Nr)   r    r    r!   r    r#   r$   /   r*   c                          dd  S r   r    r    r!   r    r#   r$   0   r%   c                      r,   r&   r    r    r!   r    r#   r$   1   r%   c                          dd d S )Nr   r)   r    r    r!   r    r#   r$   2   r*   c                      r-   )Nr'   r)   r    r    r!   r    r#   r$   3   r*   c                          dd df S N.   r    r    r!   r    r#   r$   5       c                      r.   N.r+   r    r    r!   r    r#   r$   6   r1   c                          dd ddf S N.r0   r)   r    r    r!   r    r#   r$   7       c                      r3   )N.ir)   r    r    r!   r    r#   r$   8   r5   c                          ddd f S r/   r    r    r!   r    r#   r$   9   r1   c                      r6   r2   r    r    r!   r    r#   r$   :   r1   c                          ddd df S r4   r    r    r!   r    r#   r$   ;   r5   c                      r7   )N.r+   r)   r    r    r!   r    r#   r$   <   r5   c                      s     d d df dkdf S Nr      r    r    r!   r    r#   r$   ?       c                      s     d d df dkdf S )Nr   r9   .r    r    r!   r    r#   r$   @   r:   c                      s    d d dkf S )N.r   r9   r    r    r!   r    r#   r$   A       c                      s    g d S )NTTTr    r    r!   r    r#   r$   B   r%   c                          d S )N)r<   r    r    r!   r    r#   r$   C       r   r9   c                      s     S Nr    r    r"   idxr    r#   r$   G   r>   c                      s
    f S r?   r    r    r@   r    r#   r$   H      
 c                          ddg S r8   r    r    r!   r    r#   r$   I   r%   c                      r=   )N)r   r9   rD   r    r    r!   r    r#   r$   J   r>   c                      rC   r8   r    r    r!   r    r#   r$   K   r%   c                      s    t ddgg S r8   )nparrayr    r!   r    r#   r$   L   r;   c                      r=   )Nr    r    r    r!   r    r#   r$   O   r>   c                      r=   )Nr   r    r    r!   r    r#   r$   P   r>   c                      r=   Nr   r    r    r!   r    r#   r$   Q   r>   c                      s    d d  S r?   r    r    r!   r    r#   r$   R   r%   )r   r   
IndexErrorr   r    r    r@   r#   test_validate_index   sB   rJ   c            	         sF  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d  t d}|  D ]6\}g}dvrgddd   }ddd   }|||g7 }d d!d"|d#fD ]|D ]  D ]|dks|dkrjtv s|dkrjtv s|dkrjtv s|dkrjtv s|d$krjtv s|dkr!jtv r!jtv rt	t
ksjtv rt	t ksjtv rt	tt fv sjtv r!t	ttt fv r!jtv r|krttfd%d& qyt }|td' t W d    n	1 sw   Y  qyttfd(d& qy|D ]I  D ]A  D ]9jtkrNjttttfv sjtkr^jttttfv sjtv rjjtvsjtv rvjtvsjtv rjtvsjtv rjtvsjtv rjtvsjtv rjtvrttfd)d& q;drtjjjkrttfd*d& q;|dkr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r>jtv r2jtv s`jtv r>jtv s`|d$krOjtv rOjtv s`|dkrijtv rijtv rit q;ttfd+d& q;q5q/qsqnqEddddd,}| D ]4\}  D ]+|dkrjtv s|dkrjtv rt  qttfd-d& qq fd.d/}d0D ]Dd1D ]>| D ]7t	tt fv r߈jtv st	t krjtv rttfd2d& qttfd3d& qΐqɐq| D ]| D ]
jtkr&jttttfv srjtkr6jttttfv srjtv rBjtvsrjtv rNjtvsrjtv rZjtvsrjtv rfjtvsrjtv srjtv rttfd4d& ttfd5d& ttfd6d& qjd7ksjd7ksjd  jd8 krttfd9d& ttfd:d& tjjjkrttfd;d& qttfd<d& q   tjjjkrttfd=d& qjd8 jd  krttfd>d& q! qq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                  s   sN    t D ]	} td| dV  qtD ]	} td| dV  qtD ]	} td| dV  qd S )Nr9   dtypeF      ?)r   r   r   r   )dr    r    r#   _array_valsl   s   z#test_operators.<locals>._array_valsgꌠ9Y>)F)rO   rY   rS   rQ   rV   rR   __rr   __ir9   rc   y              ?Fbooleanc                         t  S r?   getattrr    _opr"   sr    r#   r$      r*   z test_operators.<locals>.<lambda>z"invalid value encountered in powerc                      ri   r?   rj   r    rl   r    r#   r$      r*   c                      ri   r?   rj   r    rm   xyr    r#   r$      r*   c                      ri   r?   rj   r    ro   r    r#   r$      r*   c                      ri   r?   rj   r    ro   r    r#   r$      r*   )__abs__
__invert____neg____pos__c                      s   t   S r?   rj   r    )r"   opr    r#   r$      r%   c                  3   sL      D ]} | V  qt D ]}td|dV  td|dV  td|dV  qd S )Nr   ra   )r   r   )r   r   )r   r   )r"   rd   )re   r    r#   _matmul_array_vals   s   
z*test_operators.<locals>._matmul_array_vals)
__matmul____rmatmul____imatmul__)r9   rc   Fc                      ri   r?   rj   r    rl   r    r#   r$      r*   c                      ri   r?   rj   r    rl   r    r#   r$      r*   c                      
     S r?   rx   r    rp   rq   r    r#   r$      rB   c                      
     S r?   ry   r    r}   r    r#   r$      rB   c                      r{   r?   rz   r    r}   r    r#   r$      rB   r    r   c                      r{   r?   r|   r    r}   r    r#   r$      rB   c                      r~   r?   r   r    r}   r    r#   r$     rB   c                      r{   r?   r   r    r}   r    r#   r$     rB   c                      r{   r?   r   r    r}   r    r#   r$     rB   c                      r{   r?   r   r    r}   r    r#   r$   
  rB   c                      r{   r?   r   r    r}   r    r#   r$     rB   )"intitemsrb   r   r   r   r   r   r   typer   r   floatr   complexr   OverflowErrorr   filterRuntimeWarningrk   	TypeErrorr   r   r   r   r   
startswithr   
ValueErrorshaperx   ry   rz   )	binary_op_dtypesBIG_INTdtypesopsropiopsupunary_op_dtypesrw   r    )re   rm   r"   rv   rn   rp   rq   r#   test_operatorsT   s2  	
	

	 
  """""""M


	

  .

r   c                     s  t d t d} t dt dt dksJ t| dks J tdks(J t| dks1J ttdd  ttdd  ttdd  ttd	d  ttd
d  t t|   u rqt  u rqt  u rqdu stJ  J t t|   krt  krdksJ  J ttfdd t t|   krt  krdksJ  J ttfdd t t|   krt  krt  krdksJ  J t| dksJ tt fdd ttfdd ttfdd d S )NFr                           c                   S      t tdgS )NF)r   r   r    r    r    r#   r$     r*   z0test_python_scalar_construtors.<locals>.<lambda>c                   S   r   rH   )r   r   r    r    r    r#   r$     r*   c                   S   r   )Nr   )r   r   r    r    r    r#   r$      r*   c                   S   r   )Nr   )r   r   r    r    r    r#   r$   !  r*   c                   S   s   t tdgS rH   )operatorindexr   r    r    r    r#   r$   "  r1   c                         t  S r?   )r   r    cr    r#   r$   )  r>   c                      r   r?   )r   r    r   r    r#   r$   -  r>   c                      
   t  S r?   r   r   r    br    r#   r$   4  rB   c                      r   r?   r   r    )fr    r#   r$   5  rB   c                      r   r?   r   r    r   r    r#   r$   6  rB   )	r   r   r   r   r   r   r   r   r   )ir    )r   r   r   r#   test_python_scalar_construtors  s.   @22@r   c                      sp   t d  jdksJ tt d sJ tt fdd ttt dd s-J tt fdd d S )Nr   cpuc                      s
     dS )Ngpu)	to_devicer    r!   r    r#   r$   >  rB   z&test_device_property.<locals>.<lambda>devicec                      s   t  ddS )Nr   r   )r   r    r!   r    r#   r$   A  r%   )r   r   r	   r
   r   r   r   r   r    r    r!   r#   test_device_property9  s   r   c                     s   t d t d} tt fdd t| jtsJ | jjdks!J t jts)J  jjdks1J t| jts9J | jjdksAJ d S )N)r9   r   r   r   r   c                      s    j S r?   )Tr    r!   r    r#   r$   F  s    z'test_array_properties.<locals>.<lambda>)r   r   )r9   r   r   )r   r   r   
isinstancer   r   r   mTr   r    r!   r#   test_array_propertiesC  s   r   c               	   C   sf   t dtd} t| | ju sJ tj| tjd}tt|tj dtjds)J |jtjks1J d S )Nr   ra   )	r   r   rE   r   _arrayfloat64r	   r
   rb   )r"   r   r    r    r#   test___array__P  s
   "r   c                  C   s*   t d} | d d d f }|jdksJ d S )Nr0   )r9   r0   )r   r   )r"   	indexed_ar    r    r#   test_allow_newaxisW  s   r   c                  C   s@   t d} tt | d  W d    d S 1 sw   Y  d S )Nr   r   r   )Nr   r   r   pytestraisesrI   r!   r    r    r#   (test_disallow_flat_indexing_with_newaxis\  s   
"r   c                  C   sH   t d} tt | d tdf  W d    d S 1 sw   Y  d S )Nr   T)r   r   r   rI   r   r!   r    r    r#   test_disallow_mask_with_newaxisa  s   "r   r   )r    )r0   r   r   )stringFTc                 C   s@   t | }tt ||  W d    d S 1 sw   Y  d S r?   r   )r   r   r"   r    r    r#   test_error_on_invalid_indexf  s   
"r   c                  C   s   t d} | td  d S )Nr    T)r   r   r!   r    r    r#   !test_mask_0d_array_without_errorsm  s   r   r   r0   Tr9   c                 C   sz   t d}tt |d| f  W d    n1 sw   Y  tt || df  W d    d S 1 s6w   Y  d S )Nr   .r   )r   r"   r    r    r#   )test_error_on_invalid_index_with_ellipsisq  s   "r   c                  C   sn   t dtd} | |  jdksJ t dtd} t dtd}tt | |  W d   dS 1 s0w   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   ra   rG   N)r   bool_r   r   r   rI   )r"   keyr    r    r#   !test_array_keys_use_private_array{  s   

"r   )1r   numpy.testingr   r   numpyrE   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   rJ   r   r   r   r   r   r   r   r   markparametrizer   r   slicer   r   r    r    r    r#   <module>   s4     D8 ?'
"
