a
    ;¹§e‹B  ã                	   @   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                      s   ˆ d d… S ©Nr   © r   ©Úar   ú[/var/www/sunrise/env/lib/python3.9/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#   0   r$   c                      s   ˆ dd … S r%   r   r   r    r   r"   r#   1   r$   c                      s   ˆ dd d… S )Nr   r'   r   r   r    r   r"   r#   2   r$   c                      s   ˆ dd d… S )Nr&   r'   r   r   r    r   r"   r#   3   r$   c                      s   ˆ dd d…f S ©N.é   r   r   r    r   r"   r#   5   r$   c                      s   ˆ dd d…f S ©N.r(   r   r   r    r   r"   r#   6   r$   c                      s   ˆ dd dd…f S ©N.r*   r'   r   r   r    r   r"   r#   7   r$   c                      s   ˆ dd dd…f S )N.iúÿÿÿr'   r   r   r    r   r"   r#   8   r$   c                      s   ˆ ddd …f S r)   r   r   r    r   r"   r#   9   r$   c                      s   ˆ ddd …f S r+   r   r   r    r   r"   r#   :   r$   c                      s   ˆ ddd d…f S r,   r   r   r    r   r"   r#   ;   r$   c                      s   ˆ ddd d…f S )N.r(   r'   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$   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#   A   r$   c                      s   ˆ g d¢ S )N©TTTr   r   r    r   r"   r#   B   r$   c                      s   ˆ d S )N)r/   r   r   r    r   r"   r#   C   r$   r   r.   c                      s   ˆ ˆ S ©Nr   r   ©r!   Úidxr   r"   r#   G   r$   c                      s
   ˆ ˆf S r0   r   r   r1   r   r"   r#   H   r$   c                      s   ˆ ddg S r-   r   r   r    r   r"   r#   I   r$   c                      s   ˆ d S )N)©r   r.   r3   r   r   r    r   r"   r#   J   r$   c                      s   ˆ ddg S r-   r   r   r    r   r"   r#   K   r$   c                      s   ˆ t  ddgg¡ S r-   )ÚnpÚarrayr   r    r   r"   r#   L   r$   c                      s   ˆ d S )Nr   r   r   r    r   r"   r#   O   r$   c                      s   ˆ d S )N©r   r   r   r    r   r"   r#   P   r$   c                      s   ˆ d S ©Nr   r   r   r    r   r"   r#   Q   r$   c                      s   ˆ d d … S r0   r   r   r    r   r"   r#   R   r$   )r   r   Ú
IndexErrorr   r   r   r1   r"   Útest_validate_index   sB    r9   c            	         s  dddddddddddddddddddœ} dd	„ ‰ t d
ƒ}|  ¡ D ]Œ\‰}ˆg}ˆdvr†dˆdd …  }dˆdd …  }|||g7 }ddd|dfD ]8‰|D ],‰ˆ ƒ D ]†‰|dks8|dkrÎˆjtv s8|dkrâˆjtv s8|dkröˆjtv s8|dkrˆjtv s8|dkr"ˆjtv s8|dkrˆjtv rˆjtv rRt	ˆƒt
ksªˆjtv rlt	ˆƒt ksªˆjtv rŠt	ˆƒtt fv sªˆjtv rt	ˆƒttt fv rˆjtv rØˆ|krØtt‡‡‡fdd„ƒ nBtƒ *}| td¡ tˆˆƒˆƒ W d   ƒ n1 s0    Y  qªtt‡‡‡fdd„ƒ qª|D ]‰ˆ ƒ D ]€‰ˆ ƒ D ]p‰ˆjtkrvˆ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 rˆjtvs&ˆjtv r@ˆjtvr@tt‡‡‡fdd„ƒ qPˆ d¡r|tˆjˆjƒˆjkr|tt‡‡‡fdd„ƒ qP|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rVˆjtv r>ˆjtv sšˆjtv rVˆjtv sš|dkrxˆjtv rxˆjtv sš|dkrªˆjtv rªˆjtv rªtˆˆƒˆƒ ntt‡‡‡fdd„ƒ qPqDq8qžq”qBdddddœ}| ¡ D ]f\‰}ˆ ƒ D ]T‰|dkrˆjtv s&|dkr4ˆjtv r4tˆˆƒƒ  ntt‡‡fdd„ƒ qöqè‡ fdd„}dD ]†‰d D ]z‰|ƒ D ]l‰t	ˆƒtt fv r”ˆjtv s®t	ˆƒt krÆˆjtv rÆtt‡‡‡fd!d„ƒ ntt‡‡‡fd"d„ƒ qrqhq`|ƒ 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 rXˆjtvs¸ˆjtv rpˆ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d ˆjd' krtt‡‡fd(d„ƒ tt‡‡fd)d„ƒ tˆjˆjƒˆjkrzt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	   zreal numericÚ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_valsl   s    z#test_operators.<locals>._array_valsgêŒ 9Y>)F)r>   rG   rB   r@   rD   rA   Z__rr   Z__ir.   rP   y              ð?FÚbooleanc                      s   t ˆˆ ƒˆƒS r0   ©Úgetattrr   ©Ú_opr!   Úsr   r"   r#   —   r$   z test_operators.<locals>.<lambda>z"invalid value encountered in powerc                      s   t ˆˆ ƒˆƒS r0   rT   r   rV   r   r"   r#       r$   c                      s   t ˆˆ ƒˆƒS r0   rT   r   ©rW   ÚxÚyr   r"   r#   ²   r$   c                      s   t ˆˆ ƒˆƒS r0   rT   r   rY   r   r"   r#   ¸   r$   c                      s   t ˆˆ ƒˆƒS r0   rT   r   rY   r   r"   r#   Æ   r$   )Ú__abs__Ú
__invert__Ú__neg__Ú__pos__c                      s   t ˆ ˆƒƒ S r0   rT   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   rN   )r   r   )r   r   )r   r   )r!   rQ   )rR   r   r"   Ú_matmul_array_valsÝ   s    
z*test_operators.<locals>._matmul_array_vals)Ú
__matmul__Ú__rmatmul__Ú__imatmul__)r.   rP   Fc                      s   t ˆˆ ƒˆƒS r0   rT   r   rV   r   r"   r#   í   r$   c                      s   t ˆˆ ƒˆƒS r0   rT   r   rV   r   r"   r#   ï   r$   c                      s
   ˆ   ˆ¡S r0   ©rb   r   ©rZ   r[   r   r"   r#   ü   r$   c                      s
   ˆ  ˆ ¡S r0   ©rc   r   rf   r   r"   r#   ý   r$   c                      s
   ˆ   ˆ¡S r0   ©rd   r   rf   r   r"   r#   þ   r$   r   r   c                      s
   ˆ   ˆ¡S r0   re   r   rf   r   r"   r#      r$   c                      s
   ˆ  ˆ ¡S r0   rg   r   rf   r   r"   r#     r$   c                      s
   ˆ   ˆ¡S r0   rh   r   rf   r   r"   r#     r$   c                      s
   ˆ   ˆ¡S r0   rh   r   rf   r   r"   r#     r$   c                      s
   ˆ   ˆ¡S r0   rh   r   rf   r   r"   r#   
  r$   c                      s
   ˆ   ˆ¡S r0   rh   r   rf   r   r"   r#     r$   )"ÚintÚitemsrO   r   r   r   r   r   r   Útyper   r   Úfloatr   Úcomplexr   ÚOverflowErrorr   ÚfilterÚRuntimeWarningrU   Ú	TypeErrorr   r   r   r   r   Ú
startswithr   Ú
ValueErrorÚshaperb   rc   rd   )	Zbinary_op_dtypesZBIG_INTZdtypesÚopsZropZiopÚsupZunary_op_dtypesra   r   )rR   rW   r!   r`   rX   rZ   r[   r"   Útest_operatorsT   sÖ   î	
	
ÿÿþþýýüüûûúú
ö

öõ
õôôóóÿ0
 ÿÿþþýýüüûûúúùù	ÿþ"ÿÿþþþýýýüüüûûûúúùùùøøø
(ü
ÿþýü	

ÿÿ" ÿÿþþýýüüûûúù	.

rw   c                     s
  t dƒ‰ t dƒ} t dƒ‰t dƒ‰tˆ ƒdks0J ‚t| ƒdks@J ‚tˆƒdksPJ ‚t | ¡dksbJ ‚ttdd„ ƒ ttdd„ ƒ ttdd„ ƒ ttd	d„ ƒ ttd
d„ ƒ tˆ ƒt| ƒ  u ràtˆƒ  u ràtˆƒ  u ràdu sæn J ‚tˆ ƒt| ƒ  krtˆƒ  krdksn J ‚tt‡fdd„ƒ tˆ ƒt| ƒ  kr^tˆƒ  kr^dksdn J ‚tt‡fdd„ƒ tˆ ƒt| ƒ  kr¶tˆƒ  kr¶tˆƒ  kr¶dks¼n J ‚t | ¡dksÐJ ‚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 r7   )ri   r   r   r   r   r"   r#     r$   c                   S   s   t tdgƒƒS )Nrx   )rl   r   r   r   r   r"   r#      r$   c                   S   s   t tdgƒƒS )Nry   )rm   r   r   r   r   r"   r#   !  r$   c                   S   s   t  tdgƒ¡S r7   )ÚoperatorÚindexr   r   r   r   r"   r#   "  r$   c                      s   t ˆ ƒS r0   )ri   r   ©Úcr   r"   r#   )  r$   c                      s   t ˆ ƒS r0   )rl   r   r|   r   r"   r#   -  r$   c                      s
   t  ˆ ¡S r0   ©rz   r{   r   ©Úbr   r"   r#   4  r$   c                      s
   t  ˆ ¡S r0   r~   r   )Úfr   r"   r#   5  r$   c                      s
   t  ˆ ¡S r0   r~   r   r|   r   r"   r#   6  r$   )	r   r   ri   rl   rz   r{   r   rq   rm   )Úir   )r€   r}   r   r"   Útest_python_scalar_construtors  s.    >66F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ˆ ƒƒsZJ ‚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#   A  r$   )r   rˆ   r	   r
   r†   r   rs   r   r   r   r    r"   Útest_device_property9  s    r‰   c                     s†   t dƒ‰ t dƒ} tt‡ fdd„ƒ t| jtƒs2J ‚| jjdksBJ ‚tˆ jtƒsRJ ‚ˆ jjdksbJ ‚t| jtƒsrJ ‚| jjdks‚J ‚d S )N)r.   r   r   ©r   r   c                      s   ˆ j S r0   )ÚTr   r    r   r"   r#   F  r$   z'test_array_properties.<locals>.<lambda>)r   r   )r.   r   r   )r   r   rs   Ú
isinstancer‹   r   rt   Z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¡¡sRJ ‚|jtjksbJ ‚d S )NrŠ   rN   )	r   r   r4   r   Z_arrayÚfloat64r	   r
   rO   )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 )Nr*   )r.   r*   )r   rt   )r!   Z	indexed_ar   r   r"   Útest_allow_newaxisW  s    r   c                  C   s>   t dƒ} t t¡ | d  W d   ƒ n1 s00    Y  d S )N©r   r   r   )Nr   r   ©r   ÚpytestÚraisesr8   r    r   r   r"   Ú(test_disallow_flat_indexing_with_newaxis\  s    r•   c                  C   sF   t dƒ} t t¡  | d tdƒf  W d   ƒ n1 s80    Y  d S )Nr‘   T)r   r“   r”   r8   r   r    r   r   r"   Útest_disallow_mask_with_newaxisa  s    r–   rt   )r   )r*   r‘   r{   )ÚstringFTc                 C   s>   t | ƒ}t t¡ ||  W d   ƒ n1 s00    Y  d S r0   r’   )rt   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‚   r*   Tr.   c                 C   sx   t dƒ}t t¡ |d| f  W d   ƒ n1 s40    Y  t t¡ || df  W d   ƒ n1 sj0    Y  d S )Nr‘   .r’   )r‚   r!   r   r   r"   Ú)test_error_on_invalid_index_with_ellipsisq  s
    *rš   c                  C   sl   t dtd} | |  jdksJ ‚t dtd} t dtd}t t¡ | |  W d  ƒ n1 s^0    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   rN   r6   N)r   Úbool_rt   r“   r”   r8   )r!   Úkeyr   r   r"   Ú!test_array_keys_use_private_array{  s    
r   )1rz   Znumpy.testingr   r   Únumpyr4   r“   Ú r   r   r   r   r	   r
   Z_array_objectr   Z_dtypesr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r›   r9   rw   rƒ   r‰   r   r   r   r•   r–   ÚmarkZparametrizer˜   r™   Úslicerš   r   r   r   r   r"   Ú<module>   s2    D8 ?'
"ÿ
