U
    ¸mœdv  ã                   @   s²   d dl Z d dlZd dlZd dlmZmZmZ G dd„ dejj	j
ƒZdd„ Zddd„Zejejejejejejejejejejejejeeejejejejej gZ!G d	d
„ d
ƒZ"dS )é    N)Úassert_Úassert_equalÚassert_raisesc                   @   s0   e Zd Zdd„ ZejejfZdd„ Z	dd„ Z
dS )Ú	ArrayLikec                 C   s   t  |¡| _d S ©N)ÚnpZasarrayÚvalue)Úselfr   © r
   úT/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numpy/lib/tests/test_mixins.pyÚ__init__   s    zArrayLike.__init__c                    s®   |  dd¡}|| D ]}t|ˆ jtf ƒst  S qtdd„ |D ƒƒ}|r`tdd„ |D ƒƒ|d< t||ƒ||Ž}t|ƒtkr’t‡ fdd„|D ƒƒS |dkržd S tˆ ƒ|ƒS d S )NÚoutr
   c                 s   s"   | ]}t |tƒr|jn|V  qd S r   ©Ú
isinstancer   r   ©Ú.0Úxr
   r
   r   Ú	<genexpr>   s   ÿz,ArrayLike.__array_ufunc__.<locals>.<genexpr>c                 s   s"   | ]}t |tƒr|jn|V  qd S r   r   r   r
   r
   r   r   !   s   ÿc                 3   s   | ]}t ˆ ƒ|ƒV  qd S r   )Útyper   ©r	   r
   r   r   (   s     Úat)Úgetr   Ú_HANDLED_TYPESr   ÚNotImplementedÚtupleÚgetattrr   )r	   ZufuncÚmethodÚinputsÚkwargsr   r   Úresultr
   r   r   Ú__array_ufunc__   s"    
ÿþzArrayLike.__array_ufunc__c                 C   s   dt | ƒj| jf S )Nz%s(%r))r   Ú__name__r   r   r
   r
   r   Ú__repr__0   s    zArrayLike.__repr__N)r!   Ú
__module__Ú__qualname__r   r   ZndarrayÚnumbersÚNumberr   r    r"   r
   r
   r
   r   r      s   r   c                 C   s*   t | ƒtkrtdd„ | D ƒƒS t| ƒS d S )Nc                 s   s   | ]}t |ƒV  qd S r   )r   )r   Úrr
   r
   r   r   6   s     z"wrap_array_like.<locals>.<genexpr>)r   r   r   ©r   r
   r
   r   Úwrap_array_like4   s    r)   c                 C   s�   t t| ƒt|ƒ|d� t| tƒrXt t| ƒt|ƒ|d� t| |ƒD ]\}}t|||ƒ q@n4t | j|j|d� t t| jdd ƒt|jdd ƒ|d� d S )N©Úerr_msgÚdtype)	r   r   r   r   ÚlenÚzipÚ_assert_equal_type_and_valuer   r   )r   Úexpectedr+   Zresult_itemZexpected_itemr
   r
   r   r/   ;   s    
 ÿr/   c                   @   sd   e Z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
dd„ Zdd„ Zdd„ ZdS )ÚTestNDArrayOperatorsMixinc                 C   s¼   dd„ }|t dƒd ƒ |dt dƒ ƒ |t dƒt d¡ ƒ |t d¡t dƒ ƒ |t t d¡ƒd ƒ |dt t d¡ƒ ƒ |t t d¡ƒt d¡ ƒ |t d¡t t d¡ƒ ƒ d S )Nc                 S   s   t | tdƒƒ d S ©Nr   )r/   r   r(   r
   r
   r   Úcheckb   s    z<TestNDArrayOperatorsMixin.test_array_like_add.<locals>.checkr   )r   r   Úarray)r	   r3   r
   r
   r   Útest_array_like_add`   s    z-TestNDArrayOperatorsMixin.test_array_like_addc                 C   s`   t t dg¡ƒ}|d7 }t|t t dg¡ƒƒ t dg¡}|t dƒ7 }t|t t dg¡ƒƒ d S )Nr   é   )r   r   r4   r/   )r	   Ú
array_liker4   r
   r
   r   Útest_inplaceq   s    z&TestNDArrayOperatorsMixin.test_inplacec              	   C   s”   G dd„ dƒ}t dƒ}|ƒ }t|| |kƒ t|| |kƒ ttƒ� ||7 }W 5 Q R X ttƒ� ||  W 5 Q R X ttƒ� ||  W 5 Q R X d S )Nc                   @   s$   e Zd ZdZdZdd„ Zdd„ ZdS )z6TestNDArrayOperatorsMixin.test_opt_out.<locals>.OptOutz(Object that opts out of __array_ufunc__.Nc                 S   s   | S r   r
   ©r	   Úotherr
   r
   r   Ú__add__€   s    z>TestNDArrayOperatorsMixin.test_opt_out.<locals>.OptOut.__add__c                 S   s   | S r   r
   r9   r
   r
   r   Ú__radd__ƒ   s    z?TestNDArrayOperatorsMixin.test_opt_out.<locals>.OptOut.__radd__)r!   r#   r$   Ú__doc__r    r;   r<   r
   r
   r
   r   ÚOptOut|   s   r>   r6   )r   r   r   Ú	TypeError)r	   r>   r7   Zopt_outr
   r
   r   Útest_opt_outz   s    



z&TestNDArrayOperatorsMixin.test_opt_outc                 C   s@   G dd„ dt ƒ}t dƒ}|dƒ}t|| |ƒ t|| |ƒ d S )Nc                   @   s   e Zd ZdZdS )z=TestNDArrayOperatorsMixin.test_subclass.<locals>.SubArrayLikez&Should take precedence over ArrayLike.N)r!   r#   r$   r=   r
   r
   r
   r   ÚSubArrayLike˜   s   rA   r   r6   )r   r/   )r	   rA   r   Úyr
   r
   r   Útest_subclass–   s
    z'TestNDArrayOperatorsMixin.test_subclassc              	   C   sf   t dƒ}tƒ }ttƒ� ||  W 5 Q R X ttƒ� ||  W 5 Q R X ttƒ� ||7 }W 5 Q R X d S r2   )r   Úobjectr   r?   )r	   r   Úobjr
   r
   r   Útest_object    s    


z%TestNDArrayOperatorsMixin.test_objectc                 C   sL   t  ddddg¡}t|ƒ}tjtjttjfD ]}t||ƒt||ƒƒƒ q,d S )Néÿÿÿÿr   r6   é   )	r   r4   r   ÚoperatorÚnegÚposÚabsÚinvertr/   )r	   r4   r7   Úopr
   r
   r   Útest_unary_methodsª   s    ýz,TestNDArrayOperatorsMixin.test_unary_methodsc                 C   sX   t  ddddg¡}t|ƒ}tD ]4}t||dƒƒ}||dƒ}d |¡}t|||d� qd S )NrG   r   r6   rH   úfailed for operator {}r*   )r   r4   r   Ú_ALL_BINARY_OPERATORSr)   Úformatr/   )r	   r4   r7   rN   r0   Úactualr+   r
   r
   r   Útest_forward_binary_methods³   s    

z5TestNDArrayOperatorsMixin.test_forward_binary_methodsc                 C   sB   t D ]8}t|ddƒƒ}|dtdƒƒ}d |¡}t|||d� qd S )NrH   r6   rP   r*   )rQ   r)   r   rR   r/   )r	   rN   r0   rS   r+   r
   r
   r   Útest_reflected_binary_methods¼   s
    
z7TestNDArrayOperatorsMixin.test_reflected_binary_methodsc                 C   sd   t jddgt jd�}t|ƒ}tt  d¡ƒ}t|t  ||¡ƒ t|t ||¡ƒ t|t ||¡ƒ d S )Nr6   rH   )r,   é   )r   r4   Zfloat64r   r/   ÚmatmulrI   )r	   r4   r7   r0   r
   r
   r   Útest_matmulÃ   s     
ÿ 
ÿz%TestNDArrayOperatorsMixin.test_matmulc                 C   sP   t t ddddg¡ƒ}ttj |t ddg¡¡d kƒ t|t ddddgƒƒ d S )Nr6   rH   é   é   r   rG   éþÿÿÿ)r   r   r4   r   Únegativer   r/   )r	   r4   r
   r
   r   Útest_ufunc_atÍ   s     z'TestNDArrayOperatorsMixin.test_ufunc_atc                 C   sP   t  d¡\}}t|ƒt|ƒf}tt  tdƒ¡|ƒ tt  tt  d¡ƒ¡|ƒ d S )Ng      À?)r   Úfrexpr   r/   r4   )r	   ZmantissaÚexponentr0   r
   r
   r   Útest_ufunc_two_outputsÒ   s     ÿ ÿz0TestNDArrayOperatorsMixin.test_ufunc_two_outputsN)r!   r#   r$   r5   r8   r@   rC   rF   rO   rT   rU   rX   r]   r`   r
   r
   r
   r   r1   ^   s   	

		
r1   )N)#r%   rI   Únumpyr   Znumpy.testingr   r   r   ÚlibZmixinsZNDArrayOperatorsMixinr   r)   r/   ÚltÚleÚeqÚneÚgtÚgeÚaddÚsubÚmulÚtruedivÚfloordivÚmodÚdivmodÚpowÚlshiftÚrshiftÚand_ÚxorÚor_rQ   r1   r
   r
   r
   r   Ú<module>   s6   )
í