U
    ,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re!  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   :/tmp/pip-unpacked-wheel-eu7e0c37/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	   Zbluegreenr
   squarer/   r0   r   r   r   test_identitys   s    zTestEnum.test_identityN)r=   r>   r?   __doc__r	   r   rA   r8   r   r   Zvanillar   ZVENUSZMARSZEARTHr.   rC   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 rF   )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arrayrN   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   rS   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int64rM   )rO   emptyfillr%   r   r   r   pyfun_empty   s    z4TestIntEnum.test_int_shape_cast.<locals>.pyfun_emptyc                 S   s   t j| | fddS NrW   rM   )rO   zerosr%   r   r   r   pyfun_zeros   s    z4TestIntEnum.test_int_shape_cast.<locals>.pyfun_zerosc                 S   s   t j| | fddS r\   )rO   Zonesr%   r   r   r   
pyfun_ones   s    z3TestIntEnum.test_int_shape_cast.<locals>.pyfun_onesTr-   r   rT   )r1   r[   r^   r_   rS   r3   rU   r   r   r   test_int_shape_cast   s    zTestIntEnum.test_int_shape_castN)r=   r>   r?   rD   r
   r   rB   r8   r   r$   r   r.   rG   rH   rQ   rV   r`   r   r   r   r   rE   }   s   



rE   __main__)"rD   ZnumpyrO   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@   rE   r=   mainr   r   r   r   <module>   s&    !6