o
    ¹i›=  ã                	   @   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   úb/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/numpy/array_api/tests/test_array_object.pyÚ<lambda>)   ó    z%test_validate_index.<locals>.<lambda>c                      r   ©Néüÿÿÿr   r   r   r   r   r    *   r!   c                      ó   ˆ d dd… S )Nr   éÿÿÿÿr   r   r   r   r   r    +   ó    c                      r$   )Néûÿÿÿr%   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.iúÿÿÿr%   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 r®tˆƒtksÆˆjtv r¹tˆƒt	ksÆˆjtv rÎtˆƒt
t	fv rÎtˆˆƒˆƒ 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ˆˆƒˆƒ qètt‡‡‡fd$d!„ƒ qèqâqÜqjqeqAd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 rŽt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!„ƒ q¨tt‡‡fd5d!„ƒ q¨ˆ ˆ¡ ˆ ˆ¡ tˆjˆjƒˆjkr–tt‡‡fd6d!„ƒ q¨ˆjd1 ˆjd0 kr­tt‡‡fd7d!„ƒ q¨ˆ ˆ¡ q¨q¢d 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 )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   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
"ÿ
