o
    0c=                  	   @   sD  d dl Z d dl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 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( Z,dS ))    N)assert_raises   )onesasarrayreshaperesult_typeallequal)Array)_all_dtypes_boolean_dtypes_floating_dtypes_integer_dtypes_integer_or_boolean_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   ]/var/www/html/gps/gps/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    -   r!   c                      r(   r"   r   r   r   r   r   r    .   r!   c                          dd d S )Nr   r%   r   r   r   r   r   r    /   r&   c                      r)   )Nr#   r%   r   r   r   r   r   r    0   r&   c                          dd df S N.   r   r   r   r   r   r    2       c                      r*   N.r'   r   r   r   r   r   r    3   r-   c                          dd ddf S N.r,   r%   r   r   r   r   r   r    4       c                      r/   )N.ir%   r   r   r   r   r   r    5   r1   c                          ddd f S r+   r   r   r   r   r   r    6   r-   c                      r2   r.   r   r   r   r   r   r    7   r-   c                          ddd df S r0   r   r   r   r   r   r    8   r1   c                      r3   )N.r'   r%   r   r   r   r   r   r    9   r1   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   r5   .r   r   r   r   r   r    =   r6   c                      s    d d dkf S )N.r   r5   r   r   r   r   r   r    >       c                      s    g d S )NTTTr   r   r   r   r   r    ?   r!   c                          d S )N)r8   r   r   r   r   r   r    @       r   r5   c                      s     S Nr   r   r   idxr   r   r    D   r:   c                      s
    f S r;   r   r   r<   r   r   r    E      
 c                          ddg S r4   r   r   r   r   r   r    F   r!   c                      r9   )N)r   r5   r@   r   r   r   r   r   r    G   r:   c                      r?   r4   r   r   r   r   r   r    H   r!   c                      s    t ddgg S r4   )nparrayr   r   r   r   r    I   r7   c                      r9   )Nr   r   r   r   r   r   r    L   r:   c                      r9   )Nr   r   r   r   r   r   r    M   r:   c                      r9   Nr   r   r   r   r   r   r    N   r:   c                      s    d d  S r;   r   r   r   r   r   r    O   r!   )r   r   
IndexErrorr   r   r   r<   r   test_validate_index   sB   rF   c                     sp  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  |   D ]\}g}dvrcddd   }ddd   }|||g7 }dD ]|D ]  D ]i|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 rΈjtv rttksƈjtv rtt	ksƈjtv rtt
t	fv rt qpttfd d! qp|D ]1  D ]*  D ]#jtkrjttttfv sRjtkr
jttttfv sRjtv rjtvsRjtv r"jtvsRjtv r.jtvsRjtv r:jtvsRjtv rFjtvsRjtv r^jtvr^ttfd"d! qdr{tjjjkr{t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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 rt qttfd$d! qqqqjqeqAddddd%}|  D ]4\}  D ]+|dkr1jtv s<|dkrDjtv rDt  q$ttfd&d! q$q fd'd(}d)D ]DdD ]>| D ]7tt
t	fv rtjtv stt	krjtv rttfd*d! qcttfd+d! qcq^qZ| D ]| D ]
jtkrjttttfv sjtkrˈjttttf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sjtv sjtv r'ttfd,d! ttfd-d! ttfd.d! qjd/ks>jd/ks>jd0 jd1 kruttfd2d! ttfd3d! tjjjkrittfd4d! qttfd5d! q  tjjjkrttfd6d! qjd1 jd0 krttfd7d! q qqd S )8N__add__numeric__and__integer_or_boolean__eq__r   __floordiv____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 )Nr5   dtypeF      ?)r   r   r   r   )dr   r   r   _array_valsj   s   z#test_operators.<locals>._array_vals)rK   rU   rO   rM   rR   rN   __rr   __i)r5   r_   Fbooleanc                         t  S r;   getattrr   _opr   sr   r   r       r&   z test_operators.<locals>.<lambda>c                      re   r;   rf   r   ri   xyr   r   r       r&   c                      re   r;   rf   r   rk   r   r   r       r&   c                      re   r;   rf   r   rk   r   r   r       r&   )__abs__
__invert____neg____pos__c                      s   t   S r;   rf   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   r]   )r   r   )r   r   )r   r   )r   r`   )ra   r   r   _matmul_array_vals   s   
z*test_operators.<locals>._matmul_array_vals)
__matmul____rmatmul____imatmul__c                      re   r;   rf   r   rh   r   r   r       r&   c                      re   r;   rf   r   rh   r   r   r       r&   c                      
     S r;   rt   r   rl   rm   r   r   r       r>   c                      
     S r;   ru   r   ry   r   r   r       r>   c                      rw   r;   rv   r   ry   r   r   r       r>   r   r5   r   c                      rw   r;   rx   r   ry   r   r   r       r>   c                      rz   r;   r{   r   ry   r   r   r       r>   c                      rw   r;   r|   r   ry   r   r   r       r>   c                      rw   r;   r|   r   ry   r   r   r       r>   c                      rw   r;   r|   r   ry   r   r   r       r>   c                      rw   r;   r|   r   ry   r   r   r      r>   )itemsr^   r   r   r   r   r   typer   intfloatrg   r   	TypeErrorr   r   r   r   r   
startswithr   
ValueErrorshapert   ru   rv   )binary_op_dtypesdtypesopsropiopunary_op_dtypesrs   r   )ra   ri   r   rr   rj   rl   rm   r   test_operatorsQ   s  	



	
	



	"	E
	


 	.

r   c                      s&  t d t dt dt dksJ tdksJ tdks$J tdks-J ttdd  ttdd  ttdd  tt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 )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   rD   )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 rD   )operatorindexr   r   r   r   r   r      r-   c                         t  S r;   r   r   ir   r   r      r:   c                      r   r;   r   r   fr   r   r      r:   c                      r   r;   r   r   br   r   r      r:   c                      r   r;   r   r   r   r   r   r      r:   c                      r   r;   r   r   r   r   r   r      r:   c                      r   r;   r   r   r   r   r   r      r:   c                      
   t  S r;   r   r   r   r   r   r   r    !  r>   c                      r   r;   r   r   r   r   r   r    "  r>   )	r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   test_python_scalar_construtors  s&   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    *  r>   z&test_device_property.<locals>.<lambda>devicec                      s   t  ddS )Nr   r   )r   r   r   r   r   r    -  r!   )r   r   r   r	   r   r   r   r   r   r   r   r   test_device_property%  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)r5   r   r   r   r   c                      s    j S r;   )Tr   r   r   r   r    2  s    z'test_array_properties.<locals>.<lambda>)r   r   )r5   r   r   )r   r   r   
isinstancer   r
   r   mTr   r   r   r   test_array_properties/  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   r]   )	r   r   rA   r   _arrayfloat64r   r	   r^   )r   r   r   r   r   test___array__<  s
   "r   c                  C   s*   t d} | d d d f }|jdksJ d S )Nr,   )r5   r,   )r   r   )r   	indexed_ar   r   r   test_allow_newaxisC  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raisesrE   r   r   r   r   (test_disallow_flat_indexing_with_newaxisH  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   rE   r   r   r   r   r   test_disallow_mask_with_newaxisM  s   "r   r   )r   )r,   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_indexR  s   
"r   c                  C   s   t d} | td  d S )Nr   T)r   r   r   r   r   r   !test_mask_0d_array_without_errorsY  s   r   r   r,   Tr5   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_ellipsis]  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 )ap  
    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 appropiate __setitem__() case.
    )r   r   r]   rC   N)r   bool_r   r   r   rE   )r   keyr   r   r   !test_array_keys_use_private_arrayg  s   

"r   )-r   numpy.testingr   numpyrA   r    r   r   r   r   r   r	   _array_objectr
   _dtypesr   r   r   r   r   r   r   r   r   r   r   r   r   rF   r   r   r   r   r   r   r   r   markparametrizer   r   slicer   r   r   r   r   r   <module>   s4     88 6
"
