o
    8ήc=                     @   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rve!  dS dS ) z
Tests for enum support.
    N)jit	vectorizeint8int16int32)TestCase   )ColorShapeShakePlanetRequestErrorIntEnumWithNegativesc                 C   s   | |k| |k| |u | |ufS N )abr   r   =/tmp/pip-target-vg8gfxp4/lib/python/numba/tests/test_enums.pycompare_usecase   s   r   c                 C   s
   | t ju S r   )r	   redr   r   r   r   getattr_usecase   s   
r   c                 C   s   | t d u S )z!Lookup enum member by string namer   )r	   r   r   r   r   getitem_usecase   s   r   c                 C   s   | t ju |tju |tju 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   |  u S r   r   r   constr   r   constant_usecase%      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 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 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 )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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   r0   assertIs)r3   r4   r5   pairr#   r6   r   r   r   test_returnM   s   

zBaseEnumTest.test_returnc                 C   s2   t dd|}| jD ]}| |||| q
d S r-   )r   valuesr1   r3   r4   r5   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"   r;   )r3   r   r   r   test_constant_   s   

zBaseEnumTest.test_constantN)__name__
__module____qualname__r7   r:   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
   squarer1   r2   r   r   r   test_identitys   s   zTestEnum.test_identityN)r@   rA   rB   __doc__r	   r   rE   r;   r   r   vanillar   VENUSMARSEARTHr0   rG   r   r   r   r   rC   e   s    




rC   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   4   t }tdd|}dD ]}| |||| qd S NTr.   )i,  i  i&  )r(   r   r1   r<   r   r   r   test_int_coerce   
   zTestIntEnum.test_int_coercec                 C   rN   rO   )r)   r   r1   r<   r   r   r   test_int_cast   rQ   zTestIntEnum.test_int_castc                 C   sJ   t ddt}tg d}tjdd |D |jd}| ||| d S )NTr.   )     i  rT   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arrayrY   r1   )r3   r5   r=   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   r!   z$TestIntEnum.test_hash.<locals>.pyfunTr.   r   r   r1   )r3   r_   r5   memberr   r   r   	test_hash   s
   zTestIntEnum.test_hashc                 C   s`   dd }dd }dd }|||fD ]}t dd|}tD ]}|d	kr,| |||| qqd S )
Nc                 S   s   t j| | fdddS )Nint64rX   )rZ   emptyfillr&   r   r   r   pyfun_empty   s   z4TestIntEnum.test_int_shape_cast.<locals>.pyfun_emptyc                 S      t j| | fddS Nrc   rX   )rZ   zerosr&   r   r   r   pyfun_zeros      z4TestIntEnum.test_int_shape_cast.<locals>.pyfun_zerosc                 S   rh   ri   )rZ   onesr&   r   r   r   
pyfun_ones   rl   z3TestIntEnum.test_int_shape_cast.<locals>.pyfun_onesTr.   r   r`   )r3   rg   rk   rn   r_   r5   ra   r   r   r   test_int_shape_cast   s   zTestIntEnum.test_int_shape_castN)r@   rA   rB   rH   r
   r   rF   r;   r   r%   r   r0   rP   rR   r]   rb   ro   r   r   r   r   rM   }   s    



rM   __main__)"rH   numpyrZ   unittestnumbar   r   r   r   r   numba.tests.supportr   enum_usecasesr	   r
   r   r   r   r   r   r   r   r   r"   r$   r(   r)   r+   objectr,   rC   rM   r@   mainr   r   r   r   <module>   s*     !6