U
    hâËdí  ã                   @   sˆ   d Z ddlZddlmZmZmZ ddlmZmZm	Z	 ddl
mZmZmZ ddlmZmZmZmZmZ G dd„ deƒZed	kr„e ¡  dS )
z3
Test cases adapted from numba/tests/test_enums.py
é    N)Úint8Úint16Úint32)ÚcudaÚ	vectorizeÚnjit)ÚunittestÚCUDATestCaseÚskip_on_cudasim)ÚColorÚShapeÚPlanetÚRequestErrorÚIntEnumWithNegativesc                   @   sz   e Zd 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d„ Zdd„ Zdd„ Zd	d
„ Zedƒdd„ ƒZdS )ÚEnumTestc                 C   sf   dd„ }t  |¡}| jD ]H\}}tjdtjd�}| ¡ }|d |||ƒ ||||ƒ |  ||¡ qd S )Nc                 S   s4   | |k|d< | |k|d< | |k|d< | |k	|d< d S )Nr   é   é   é   © )ÚaÚbÚoutr   r   ú[/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/cuda/tests/cudapy/test_enums.pyÚf   s    z EnumTest.test_compare.<locals>.f)é   ©Zdtype©r   r   )r   ÚjitÚpairsÚnpÚzerosÚbool_ÚcopyÚassertPreciseEqual)Úselfr   Úcuda_fr   r   ÚgotÚexpectedr   r   r   Útest_compare   s    
zEnumTest.test_comparec                 C   sN   dd„ }t  |¡}tjdtjd�}| ¡ }|d |ƒ ||ƒ |  ||¡ d S )Nc                 S   s(   t jt jk| d< t d t d k| d< d S )Nr   ÚredÚgreenr   ©r   r)   r*   )r   r   r   r   r   -   s    z(EnumTest.test_getattr_getitem.<locals>.f©r   r   r   )r   r   r   r    r!   r"   r#   ©r$   r   r%   r&   r'   r   r   r   Útest_getattr_getitem,   s    
zEnumTest.test_getattr_getitemc                    sb   t dd„ ƒ‰ ‡ fdd„}t |¡}tjdtjd�}| ¡ }|d|ƒ |d d|ƒ |  ||¡ d S )	Nc                 S   s   | r
t jS t jS )Nr+   )Úpredr   r   r   Úinner:   s    z4EnumTest.test_return_from_device_func.<locals>.innerc                    s*   ˆ | ƒt jk|d< ˆ |  ƒt jk|d< d S )Nr   r   r+   )r/   r   ©r0   r   r   r   >   s    z0EnumTest.test_return_from_device_func.<locals>.fr,   r   Tr   )r   r   r   r   r    r!   r"   r#   r-   r   r1   r   Útest_return_from_device_func9   s    


z%EnumTest.test_return_from_device_funcc                 C   s\   dd„ }t  |¡}dD ]@}tjdtjd�}| ¡ }|d ||ƒ |||ƒ |  ||¡ qd S )Nc                 S   s,   | t jkr| t j |d< n| tj |d< d S ©Nr   )r   Úinternal_errorÚ	not_foundr   Úcircle©Úxr   r   r   r   r   J   s    
z#EnumTest.test_int_coerce.<locals>.f©i,  iÂ  i&  ©r   r   r   )r   r   r   r    r   r"   r#   ©r$   r   r%   r8   r&   r'   r   r   r   Útest_int_coerceI   s    

zEnumTest.test_int_coercec                 C   s\   dd„ }t  |¡}dD ]@}tjdtjd�}| ¡ }|d ||ƒ |||ƒ |  ||¡ qd S )Nc                 S   s8   | t tjƒkr"| ttjƒ |d< n| ttjƒ |d< d S r3   )r   r   r4   r   r5   r   r   r6   r7   r   r   r   r   Z   s    z!EnumTest.test_int_cast.<locals>.fr9   r:   r   r   )r   r   r   r    r   r"   ÚassertEqualr;   r   r   r   Útest_int_castY   s    

zEnumTest.test_int_castz$ufuncs are unsupported on simulator.c                    sf   dd„ ‰ t ddd�ˆ ƒ}tjddddgtjd	�}tj‡ fd
d„|D ƒtjd	�}||ƒ}|  ||¡ d S )Nc                 S   s   | t jkrt d S t jS d S )Nr4   )r   r5   Údummy)r8   r   r   r   r   k   s    
z"EnumTest.test_vectorize.<locals>.fzint64(int64)r   )Útargetr   i”  iô  r   c                    s   g | ]}ˆ |ƒ‘qS r   r   )Ú.0r8   ©r   r   r   Ú
<listcomp>s   s     z+EnumTest.test_vectorize.<locals>.<listcomp>)r   r   ÚarrayZint64r#   )r$   Z	cuda_funcZarrr'   r&   r   rB   r   Útest_vectorizei   s    zEnumTest.test_vectorizeN)Ú__name__Ú
__module__Ú__qualname__r   r)   r*   r   ZEARTHZVENUSZMARSr   r6   r   Útwor   r(   r.   r2   r<   r>   r
   rE   r   r   r   r   r      s   




ûr   Ú__main__)Ú__doc__Únumpyr   Znumbar   r   r   r   r   r   Znumba.cuda.testingr   r	   r
   Znumba.tests.enum_usecasesr   r   r   r   r   r   rF   Úmainr   r   r   r   Ú<module>   s   	e