o
    8ήc                     @   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rDe  dS 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 ]$\}}tjdtjd}| }|d ||| |||| | || qd S )Nc                 S   s4   | |k|d< | |k|d< | |u |d< | |u|d< d S )Nr             )aboutr   r   I/tmp/pip-target-vg8gfxp4/lib/python/numba/cuda/tests/cudapy/test_enums.pyf   s   z EnumTest.test_compare.<locals>.f)   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,   )r0   r   r1   r   r   r   >   s   z0EnumTest.test_return_from_device_func.<locals>.fr-   r   Tr   )r   r   r   r    r!   r"   r#   r$   r.   r   r2   r   test_return_from_device_func9   s   


z%EnumTest.test_return_from_device_funcc                 C   \   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< d S | 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&   r:   r'   r(   r   r   r   test_int_coerceI      

zEnumTest.test_int_coercec                 C   r4   )Nc                 S   s:   | t tjkr| ttj |d< d S | ttj |d< d S r5   )r   r   r6   r   r7   r   r   r8   r9   r   r   r   r   Z   s   z!EnumTest.test_int_cast.<locals>.fr;   r<   r   r   )r   r   r    r!   r   r#   assertEqualr=   r   r   r   test_int_castY   r?   zEnumTest.test_int_castz$ufuncs are unsupported on simulator.c                    sb   dd  t ddd }tjg d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 )Nr6   )r   r7   dummy)r:   r   r   r   r   k   s   
z"EnumTest.test_vectorize.<locals>.fzint64(int64)r   )target)r     i  rD   r   c                    s   g | ]} |qS r   r   ).0r:   r   r   r   
<listcomp>s   s    z+EnumTest.test_vectorize.<locals>.<listcomp>)r   r    arrayint64r$   )r%   	cuda_funcarrr(   r'   r   rF   r   test_vectorizei   s   zEnumTest.test_vectorizeN)__name__
__module____qualname__r   r*   r+   r   EARTHVENUSMARSr   r8   r   twor   r)   r/   r3   r>   rA   r
   rL   r   r   r   r   r      s    




r   __main__)__doc__numpyr    numbar   r   r   r   r   r   numba.cuda.testingr   r	   r
   numba.tests.enum_usecasesr   r   r   r   r   r   rM   mainr   r   r   r   <module>   s    	e