U
    iâËd=  ã                   @   sì   d Z ddlZddlZddl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 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G dd„ deƒZG dd„ deeƒZG dd„ deeƒZe dkrèe !¡  dS ) z
Tests for enum support.
é    N)ÚjitÚ	vectorizeÚint8Úint16Úint32)ÚTestCaseé   )ÚColorÚShapeÚShakeÚPlanetÚRequestErrorÚIntEnumWithNegativesc                 C   s   | |k| |k| |k| |k	fS ©N© )ÚaÚbr   r   úO/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/tests/test_enums.pyÚcompare_usecase   s    r   c                 C   s
   | t jkS r   )r	   Úred©r   r   r   r   Úgetattr_usecase   s    r   c                 C   s   | t d kS )z!Lookup enum member by string namer   )r	   r   r   r   r   Úgetitem_usecase   s    r   c                 C   s   | t jk|tjk|tjkfS r   )r   Úmintr
   Úcircler   Úinternal_error)r   r   Úcr   r   r   Úidentity_usecase   s    þr   c                    s   ‡ fdd„}|S )Nc                    s   | ˆ kS r   r   r   ©Úconstr   r   Úconstant_usecase%   s    z/make_constant_usecase.<locals>.constant_usecaser   )r   r    r   r   r   Úmake_constant_usecase$   s    r!   c                 C   s   |r| S |S r   r   )r   r   Úpredr   r   r   Úreturn_usecase*   s    r#   c                 C   s"   | t jkr| t j S | tj S d S r   )r   r   Ú	not_foundr
   r   ©Úxr   r   r   Úint_coerce_usecase.   s    

r'   c                 C   s.   | t tjƒkr| ttjƒ S | ttjƒ S d S r   )r   r   r   r   r$   r   r
   r   r%   r   r   r   Úint_cast_usecase5   s    r(   c                 C   s   | t jkrt d S t jS d S )Nr   )r   r$   Údummyr%   r   r   r   Úvectorize_usecase=   s    
r*   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚBaseEnumTestc                 C   s6   t }tdd�|ƒ}| jD ]}|  ||Ž ||Ž ¡ qd S ©NT©Znopython)r   r   ÚpairsÚassertPreciseEqual©ÚselfÚpyfuncÚcfuncÚargsr   r   r   Útest_compareF   s    
zBaseEnumTest.test_comparec                 C   sJ   t }tdd�|ƒ}| jD ],}dD ]"}||f }|  ||Ž ||Ž ¡ q qdS )z5
        Passing and returning enum members.
        Tr-   )TFN)r#   r   r.   ZassertIs)r1   r2   r3   Úpairr"   r4   r   r   r   Útest_returnM   s    

zBaseEnumTest.test_returnc                 C   s2   t dd�|ƒ}| jD ]}|  ||ƒ||ƒ¡ qd S r,   )r   Úvaluesr/   ©r1   r2   r3   Úargr   r   r   Úcheck_constant_usecaseY   s    
z#BaseEnumTest.check_constant_usecasec                 C   s,   |   t¡ |   t¡ |   t| jd ƒ¡ d S )Nr   )r;   r   r   r!   r8   )r1   r   r   r   Útest_constant_   s    

zBaseEnumTest.test_constantN)Ú__name__Ú
__module__Ú__qualname__r5   r7   r;   r<   r   r   r   r   r+   D   s   r+   c                   @   sZ   e Zd ZdZejejgZejejfejejfej	ej
fejejfejejfgZdd„ ZdS )ÚTestEnumz-
    Tests for Enum classes and members.
    c                 C   s:   t }tdd�|ƒ}tjtjtjf}|  ||Ž ||Ž ¡ dS )zE
        Enum with equal values should not compare identical
        Tr-   N)r   r   r	   ÚblueÚgreenr
   Úsquarer/   r0   r   r   r   Útest_identitys   s    zTestEnum.test_identityN)r=   r>   r?   Ú__doc__r	   r   rB   r8   r   r   Zvanillar   ZVENUSZMARSZEARTHr.   rD   r   r   r   r   r@   e   s   




ûr@   c                   @   sp   e Zd ZdZejejgZejejfejejfej	ej	fej
ej	fgZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚTestIntEnumz0
    Tests for IntEnum classes and members.
    c                 C   s4   t }tdd�|ƒ}dD ]}|  ||ƒ||ƒ¡ qd S ©NTr-   )i,  iÂ  i&  )r'   r   r/   r9   r   r   r   Útest_int_coerceŠ   s    zTestIntEnum.test_int_coercec                 C   s4   t }tdd�|ƒ}dD ]}|  ||ƒ||ƒ¡ qd S rG   )r(   r   r/   r9   r   r   r   Útest_int_cast‘   s    zTestIntEnum.test_int_castc                 C   sN   t dd�tƒ}t ddddg¡}tjdd„ |D ƒ|jd�}|  |||ƒ¡ d S )	NTr-   é   i”  iô  c                 S   s   g | ]}t |ƒ‘qS r   )r*   )Ú.0Úir   r   r   Ú
<listcomp>›   s     z.TestIntEnum.test_vectorize.<locals>.<listcomp>©Údtype)r   r*   ÚnpÚarrayrO   r/   )r1   r3   r:   Zsolr   r   r   Útest_vectorize˜   s    zTestIntEnum.test_vectorizec                 C   s8   dd„ }t dd�|ƒ}tD ]}|  ||ƒ||ƒ¡ qd S )Nc                 S   s   t | ƒS r   )Úhashr%   r   r   r   ÚpyfunŸ   s    z$TestIntEnum.test_hash.<locals>.pyfunTr-   ©r   r   r/   )r1   rT   r3   Úmemberr   r   r   Ú	test_hashž   s    zTestIntEnum.test_hashc                 C   s`   dd„ }dd„ }dd„ }|||fD ]8}t dd�|ƒ}tD ] }|d	kr8|  ||ƒ||ƒ¡ q8q"d S )
Nc                 S   s   t j| | fdd� d¡S )NÚint64rN   éÿÿÿÿ)rP   ÚemptyÚfillr%   r   r   r   Úpyfun_empty¦   s    z4TestIntEnum.test_int_shape_cast.<locals>.pyfun_emptyc                 S   s   t j| | fdd�S ©NrX   rN   )rP   Zzerosr%   r   r   r   Úpyfun_zeros¨   s    z4TestIntEnum.test_int_shape_cast.<locals>.pyfun_zerosc                 S   s   t j| | fdd�S r]   )rP   Zonesr%   r   r   r   Ú
pyfun_onesª   s    z3TestIntEnum.test_int_shape_cast.<locals>.pyfun_onesTr-   r   rU   )r1   r\   r^   r_   rT   r3   rV   r   r   r   Útest_int_shape_cast¥   s    zTestIntEnum.test_int_shape_castN)r=   r>   r?   rE   r
   r   rC   r8   r   r$   r   r.   rH   rI   rR   rW   r`   r   r   r   r   rF   }   s   



ürF   Ú__main__)"rE   ÚnumpyrP   ZunittestZnumbar   r   r   r   r   Znumba.tests.supportr   Zenum_usecasesr	   r
   r   r   r   r   r   r   r   r   r!   r#   r'   r(   r*   Úobjectr+   r@   rF   r=   Úmainr   r   r   r   Ú<module>   s&    !6