U
    ¯Ëbš=  ã                	   @   sH  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dddg¡ej& 'dddd g¡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                      s   ˆ d d… S ©Nr   © r   ©Úar   úg/home/fireinfo/NEWAFireInfo/venv/lib/python3.8/site-packages/numpy/array_api/tests/test_array_object.pyÚ<lambda>)   ó    z%test_validate_index.<locals>.<lambda>c                      s   ˆ d d… S ©Néüÿÿÿr   r   r   r   r   r   *   r    c                      s   ˆ d dd… S )Nr   éÿÿÿÿr   r   r   r   r   r   +   r    c                      s   ˆ d dd… S )Néûÿÿÿr#   r   r   r   r   r   r   ,   r    c                      s   ˆ dd … S r   r   r   r   r   r   r   -   r    c                      s   ˆ dd … S r!   r   r   r   r   r   r   .   r    c                      s   ˆ dd d… S )Nr   r#   r   r   r   r   r   r   /   r    c                      s   ˆ dd d… S )Nr"   r#   r   r   r   r   r   r   0   r    c                      s   ˆ dd d…f S ©N.é   r   r   r   r   r   r   2   r    c                      s   ˆ dd d…f S ©N.r$   r   r   r   r   r   r   3   r    c                      s   ˆ dd dd…f S ©N.r&   r#   r   r   r   r   r   r   4   r    c                      s   ˆ dd dd…f S )N.iúÿÿÿr#   r   r   r   r   r   r   5   r    c                      s   ˆ ddd …f S r%   r   r   r   r   r   r   6   r    c                      s   ˆ ddd …f S r'   r   r   r   r   r   r   7   r    c                      s   ˆ ddd d…f S r(   r   r   r   r   r   r   8   r    c                      s   ˆ ddd d…f S )N.r$   r#   r   r   r   r   r   r   9   r    c                      s   ˆ ˆ d d …df dkdf S ©Nr   é   r   r   r   r   r   r   <   r    c                      s   ˆ ˆ d d …df dkdf S )Nr   r*   .r   r   r   r   r   r   =   r    c                      s   ˆ dˆ d dkf S )N.r   r*   r   r   r   r   r   r   >   r    c                      s   ˆ dddg S )NTr   r   r   r   r   r   ?   r    c                      s   ˆ d S )N))TTTr   r   r   r   r   r   @   r    r   r*   c                      s   ˆ ˆ S ©Nr   r   ©r   Úidxr   r   r   D   r    c                      s
   ˆ ˆf S r+   r   r   r,   r   r   r   E   r    c                      s   ˆ ddg S r)   r   r   r   r   r   r   F   r    c                      s   ˆ d S )N)©r   r*   r.   r   r   r   r   r   r   G   r    c                      s   ˆ ddg S r)   r   r   r   r   r   r   H   r    c                      s   ˆ t  ddgg¡ S r)   )ÚnpÚarrayr   r   r   r   r   I   r    c                      s   ˆ d S )Nr   r   r   r   r   r   r   L   r    c                      s   ˆ d S )N©r   r   r   r   r   r   r   M   r    c                      s   ˆ d S ©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    r4   c                     sB  dddddddddddddddddddœ} dd„ ‰ |   ¡ D ]Ä\‰}ˆg}ˆd	kr~d
ˆdd …  }dˆdd …  }|||g7 }dD ]z‰|D ]n‰ˆ ƒ D ]ì‰|dks|dkrºˆjtks|dkrÎˆjtks|dkrâˆjtks|dkröˆjtks|dkrnˆjtkrnˆjtkr&tˆƒtks^ˆjtkr@tˆƒt	ks^ˆjtkrntˆƒt
t	fkrntˆˆƒˆƒ q˜tt‡‡‡fdd„ƒ q˜|D ]n‰ˆ ƒ D ]^‰ˆ ƒ D ]N‰ˆjtkrÈˆjttttfksxˆjtkrèˆjttttfksxˆjtkr ˆjtksxˆjtkrˆjtksxˆjtkr0ˆjtksxˆjtkrHˆjtksxˆjtkr`ˆjtksxˆjtkr’ˆjtk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krðˆjtksÊˆjtkrˆjtksÊ|dkr*ˆjtkr*ˆjtksÊ|dkrLˆjtkrLˆjtksÊ|dkr†ˆjtkrnˆjtksÊˆjtkr†ˆjtksÊ|dkr¨ˆjtkr¨ˆjtksÊ|dkrÚˆjtkrÚˆjtkrÚtˆˆƒˆƒ ntt‡‡‡fdd„ƒ q¢q–qŠqŒq‚q:dddddœ}|  ¡ D ]f\‰}ˆ ƒ D ]T‰|dkr@ˆjtksV|dkrdˆjtkrdtˆˆƒƒ  ntt‡‡fdd„ƒ q&q‡ fdd„}dD ]†‰dD ]z‰|ƒ D ]l‰tˆƒt
t	fkrÄˆjtksÞtˆƒt	kröˆjtkrött‡‡‡fdd„ƒ ntt‡‡‡fdd„ƒ q¢q˜q|ƒ D ]‰|ƒ D ]‰ˆjtkrPˆjttttfksèˆjtkrpˆjttttfksèˆjtkrˆˆjtksèˆjtkr ˆjtksèˆjtkr¸ˆjtksèˆjtkrÐˆjtksèˆjtksèˆjtkr(tt‡‡fdd„ƒ tt‡‡fdd„ƒ tt‡‡fdd„ƒ q*ˆjdksVˆjdksVˆjd ˆjd  krÀtt‡‡fd!d„ƒ tt‡‡fd"d„ƒ tˆjˆjƒˆjkrªtt‡‡fd#d„ƒ ntt‡‡fd$d„ƒ nvˆ ˆ¡ ˆ ˆ¡ tˆjˆjƒˆjkr tt‡‡fd%d„ƒ n6ˆjd  ˆjd kr,tt‡‡fd&d„ƒ n
ˆ ˆ¡ q*qd S )'NÚnumericZinteger_or_booleanr   ÚintegerZfloating)Ú__add__Ú__and__Ú__eq__Ú__floordiv__Ú__ge__Ú__gt__Ú__le__Ú
__lshift__Ú__lt__Ú__mod__Ú__mul__Ú__ne__Ú__or__Ú__pow__Ú
__rshift__Ú__sub__Ú__truediv__Ú__xor__c                  s   sL   t D ]} td| dV  qtD ]} td| dV  qtD ]} td| dV  q4d S )Nr*   ©ÚdtypeFç      ð?)r   r   r   r   )Údr   r   r   Ú_array_valsj   s    z#test_operators.<locals>._array_vals)r9   rB   r=   r;   r?   r<   Z__rr   Z__i)r*   rK   FÚbooleanc                      s   t ˆˆ ƒˆƒS r+   ©Úgetattrr   ©Ú_opr   Úsr   r   r   •   r    z test_operators.<locals>.<lambda>c                      s   t ˆˆ ƒˆƒS r+   rO   r   ©rR   ÚxÚyr   r   r   §   r    c                      s   t ˆˆ ƒˆƒS r+   rO   r   rT   r   r   r   ­   r    c                      s   t ˆˆ ƒˆƒS r+   rO   r   rT   r   r   r   º   r    )Ú__abs__Ú
__invert__Ú__neg__Ú__pos__c                      s   t ˆ ˆƒƒ S r+   rO   r   )r   Úopr   r   r   Í   r    c                  3   sJ   ˆ ƒ D ]
} | V  qt D ].}td|dV  td|dV  td|dV  qd S )Nr   rI   )r   r   )r   r   )r   r   )r   rL   )rM   r   r   Ú_matmul_array_valsÑ   s    
z*test_operators.<locals>._matmul_array_vals)Ú
__matmul__Ú__rmatmul__Ú__imatmul__c                      s   t ˆˆ ƒˆƒS r+   rO   r   rQ   r   r   r   á   r    c                      s   t ˆˆ ƒˆƒS r+   rO   r   rQ   r   r   r   ã   r    c                      s
   ˆ   ˆ¡S r+   ©r]   r   ©rU   rV   r   r   r   ð   r    c                      s
   ˆ  ˆ ¡S r+   ©r^   r   ra   r   r   r   ñ   r    c                      s
   ˆ   ˆ¡S r+   ©r_   r   ra   r   r   r   ò   r    r   r*   r   c                      s
   ˆ   ˆ¡S r+   r`   r   ra   r   r   r   ô   r    c                      s
   ˆ  ˆ ¡S r+   rb   r   ra   r   r   r   õ   r    c                      s
   ˆ   ˆ¡S r+   rc   r   ra   r   r   r   ÷   r    c                      s
   ˆ   ˆ¡S r+   rc   r   ra   r   r   r   ù   r    c                      s
   ˆ   ˆ¡S r+   rc   r   ra   r   r   r   þ   r    c                      s
   ˆ   ˆ¡S r+   rc   r   ra   r   r   r     r    )ÚitemsrJ   r   r   r   r   r   Útyper   ÚintÚfloatrP   r   Ú	TypeErrorr   r   r   r   r   Ú
startswithr   Ú
ValueErrorÚshaper]   r^   r_   )Zbinary_op_dtypesZdtypesÚopsZropZiopZunary_op_dtypesr\   r   )rM   rR   r   r[   rS   rU   rV   r   Útest_operatorsQ   s¬   î



ÿÿþþýýüüûû	÷	
÷
ö

öõõ
 ÿÿþþýýüüûûúúùù	ÿþ"ÿÿþþþýýýüüüûûúúúùùù	(ü
ÿþýü	

ÿÿ" ÿÿþþýýüüûûúù	.

rm   c                      s&  t dƒ‰ t dƒ‰t dƒ‰tˆ ƒdks(t‚tˆƒdks8t‚tˆƒdksHt‚t ˆ¡dksZt‚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   s   t tdgƒƒS )NF)r   r   r   r   r   r   r     r    z0test_python_scalar_construtors.<locals>.<lambda>c                   S   s   t tdgƒƒS r2   )rf   r   r   r   r   r   r     r    c                   S   s   t tdgƒƒS )Nrn   )rg   r   r   r   r   r   r     r    c                   S   s   t  tdgƒ¡S r2   )ÚoperatorÚindexr   r   r   r   r   r     r    c                      s   t ˆ ƒS r+   ©r   r   ©Úir   r   r     r    c                      s   t ˆ ƒS r+   rq   r   ©Úfr   r   r     r    c                      s   t ˆ ƒS r+   ©rf   r   ©Úbr   r   r     r    c                      s   t ˆ ƒS r+   rv   r   rt   r   r   r     r    c                      s   t ˆ ƒS r+   ©rg   r   rw   r   r   r     r    c                      s   t ˆ ƒS r+   ry   r   rr   r   r   r     r    c                      s
   t  ˆ ¡S r+   ©ro   rp   r   rw   r   r   r   !  r    c                      s
   t  ˆ ¡S r+   rz   r   rt   r   r   r   "  r    )
r   r   ÚAssertionErrorrf   rg   ro   rp   r   rh   rj   r   r   )rx   ru   rs   r   Útest_python_scalar_construtors  s&    r|   c                      sp   t dƒ‰ ˆ jdkst‚ttˆ  d¡ˆ ƒƒs.t‚tt‡ fdd„ƒ tttˆ ddˆ ƒƒsZt‚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   rj   r   r   r   r   r   Útest_device_property%  s    r‚   c                     s†   t dƒ‰ t dƒ} tt‡ fdd„ƒ t| jtƒs2t‚| jjdksBt‚tˆ jtƒsRt‚ˆ jjdksbt‚t| jtƒsrt‚| jjdks‚t‚d S )N)r*   r   r   ©r   r   c                      s   ˆ j S r+   )ÚTr   r   r   r   r   2  r    z'test_array_properties.<locals>.<lambda>)r   r   )r*   r   r   )	r   r   rj   Ú
isinstancer„   r
   r{   rk   ZmTrw   r   r   r   Útest_array_properties/  s    r†   c               	   C   sf   t dtd} t | ¡| jks t‚tj| tjd}t t |tj dtjd¡¡sRt‚|j	tjksbt‚d S )Nrƒ   rI   )
r   r   r/   r   Z_arrayr{   Zfloat64r   r	   rJ   )r   rx   r   r   r   Útest___array__<  s
    "r‡   c                  C   s*   t dƒ} | d d d …f }|jdks&t‚d S )Nr&   )r*   r&   )r   rk   r{   )r   Z	indexed_ar   r   r   Útest_allow_newaxisC  s    rˆ   c               	   C   s*   t dƒ} t t¡ | d  W 5 Q R X d S )N©r   r   r   )Nr   r   ©r   ÚpytestÚraisesr3   r   r   r   r   Ú(test_disallow_flat_indexing_with_newaxisH  s    r   c               	   C   s2   t dƒ} t t¡ | d tdƒf  W 5 Q R X d S )Nr‰   T)r   r‹   rŒ   r3   r   r   r   r   r   Útest_disallow_mask_with_newaxisM  s    rŽ   rk   r   )r&   r‰   rp   ÚstringFTc              	   C   s*   t | ƒ}t t¡ ||  W 5 Q R X d S r+   rŠ   )rk   rp   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‘   rs   r&   r*   c              	   C   sP   t dƒ}t t¡ |d| f  W 5 Q R X t t¡ || df  W 5 Q R X d S )Nr‰   .rŠ   )rs   r   r   r   r   Ú)test_error_on_invalid_index_with_ellipsis]  s
    r’   c               	   C   sX   t dtd} | |  jdkst‚t dtd} t dtd}t t¡ | |  W 5 Q R X 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   rI   r1   N)r   Úbool_rk   r{   r‹   rŒ   r3   )r   Úkeyr   r   r   Ú!test_array_keys_use_private_arrayg  s    
r•   )-ro   Znumpy.testingr   Znumpyr/   r‹   Ú r   r   r   r   r   r	   Z_array_objectr
   Z_dtypesr   r   r   r   r   r   r   r   r   r   r   r   r“   r4   rm   r|   r‚   r†   r‡   rˆ   r   rŽ   ÚmarkZparametrizer   r‘   Úslicer’   r•   r   r   r   r   Ú<module>   s4    88 6
  ÿ
