U
    ,d                      @   s   d dl Zd dlmZmZmZmZ d dlmZ d dl	m
Z
 d dlmZmZmZ ddlmZmZ dd	 Zd
d Zdd ZedG dd deZedkre  dS )    N)cudaint32
complex128void)types)TypingError)unittestCUDATestCaseskip_on_cudasim   )test_struct_model_type
TestStructc                 C   sT   t jjdtd}t|jd D ]}| | ||< qt|jd D ]}|| ||< q>d S )N  dtyper   r   localarrayr   rangeshapeABCi r   I/tmp/pip-unpacked-wheel-eu7e0c37/numba/cuda/tests/cudapy/test_localmem.pyculocal
   s
    r   c                 C   sT   t jjdtd}t|jd D ]}| | ||< qt|jd D ]}|| ||< q>d S )Nd   r   r   )r   r   r   r   r   r   r   r   r   r   culocalcomplex   s
    r   c                 C   sT   t jjdtd}t|jd D ]}| | ||< qt|jd D ]}|| ||< q>d S )N)   r   r   r   r   r   r   r   culocal1tuple   s
    r!   z'PTX inspection not available in cudasimc                   @   s   e Zd Zdd Zdd Zdd Zdd Zed	d
d Zed	dd Z	ed	dd Z
ed	dd Zdd Zdd Zdd Zdd ZdS )TestCudaLocalMemc                 C   sx   t d d  t d d  f}t|t}| d||k tjddd}t|}|d || | t	||k d S )Nz.localr   r   r   r   r   )
r   r   jitr   
assertTrueZinspect_asmnparange
zeros_likeall)selfsigjculocalr   r   r   r   r   test_local_array$   s    
z!TestCudaLocalMem.test_local_arrayc                 C   sL   t dt}tjddd}t|}|d || | t||k dS )zGEnsure that local arrays can be constructed with 1-tuple shape
        zvoid(int32[:], int32[:])r    r   r   r#   N)r   r$   r!   r&   r'   r(   r%   r)   )r*   r,   r   r   r   r   r   test_local_array_1_tuple-   s
    
z)TestCudaLocalMem.test_local_array_1_tuplec                 C   sX   d}t |t}tjdddd d }t|}|d || | t||k d S )Nz"void(complex128[:], complex128[:])r   r   r   r   y               @r#   )r   r$   r   r&   r'   r(   r%   r)   )r*   r+   Zjculocalcomplexr   r   r   r   r   test_local_array_complex8   s    
z)TestCudaLocalMem.test_local_array_complexc                 C   s0   t t|j j}|jd j}| || d S )Nl)nextiterZ	overloadsvaluesZ_type_annotationtypemapr   assertEqual)r*   fr   
annotationZl_dtyper   r   r   check_dtype@   s    zTestCudaLocalMem.check_dtypezCan't check typing in simulatorc                 C   s0   t ttd d d dd }| |t d S )Nr   c                 S   s,   t jjdtd}| d |d< |d | d< d S N
   r   r   )r   r   r   r   xr0   r   r   r   r6   J   s    z,TestCudaLocalMem.test_numba_dtype.<locals>.fr   r$   r   r   r8   r*   r6   r   r   r   test_numba_dtypeG   s    
z!TestCudaLocalMem.test_numba_dtypec                 C   s0   t ttd d d dd }| |t d S )Nr   c                 S   s.   t jjdtjd}| d |d< |d | d< d S r9   )r   r   r   r&   r   r;   r   r   r   r6   U   s    z,TestCudaLocalMem.test_numpy_dtype.<locals>.fr=   r>   r   r   r   test_numpy_dtypeR   s    
z!TestCudaLocalMem.test_numpy_dtypec                 C   s0   t ttd d d dd }| |t d S )Nr   c                 S   s,   t jjddd}| d |d< |d | d< d S )Nr:   r   r   r   r   r   r   r;   r   r   r   r6   `   s    z-TestCudaLocalMem.test_string_dtype.<locals>.fr=   r>   r   r   r   test_string_dtype]   s    
z"TestCudaLocalMem.test_string_dtypec              	   C   s@   d}|  t|& tttd d d dd }W 5 Q R X d S )Nz*.*Invalid NumPy dtype specified: 'int33'.*r   c                 S   s,   t jjddd}| d |d< |d | d< d S )Nr:   Zint33r   r   rA   r;   r   r   r   r6   m   s    z5TestCudaLocalMem.test_invalid_string_dtype.<locals>.f)assertRaisesRegexr   r   r$   r   r   )r*   rer6   r   r   r   test_invalid_string_dtypeh   s    z*TestCudaLocalMem.test_invalid_string_dtypec                 C   s0   t ttd d d dd }| |t d S )Nr   c                 S   s,   t jjdtd}| d |d< |d | d< d S r9   )r   r   r   r   r;   r   r   r   r6   t   s    z<TestCudaLocalMem.test_type_with_struct_data_model.<locals>.f)r   r$   r   r   r8   r>   r   r   r    test_type_with_struct_data_models   s    
z1TestCudaLocalMem.test_type_with_struct_data_modelc                 C   s   t ttd d d td d d dd }tjddd}tjddd}|d || t|D ]\}}| || q^t|D ]\}}| ||d  q|d S )	Nr   c                 S   sr   t jjdtd}tt|D ]"}tt|t|d }|||< qtt|D ] }|| j| |< || j	||< qLd S )Nr:   r      )
r   r   r   r   r   lenr   r   r<   y)ZoutxZoutyarrr   objr   r   r   r6   }   s    
z6TestCudaLocalMem.test_struct_model_type_arr.<locals>.f)r:   r   r   r#   rG   )r   r$   r   r   r&   r   	enumerater5   )r*   r6   ZarrxZarryr   r<   rI   r   r   r   test_struct_model_type_arr|   s    "
z+TestCudaLocalMem.test_struct_model_type_arrc                    sD   t j fdd}tjdtjd}|d | | |d | d S )Nc                    s   t jj d}|j| d< d S )Nr   r   )r   r   r   size)arJ   r   tyr   r   s   s    z8TestCudaLocalMem._check_local_array_size_fp16.<locals>.sr   r   r#   r   )r   r$   r&   zerosfloat16r5   )r*   r   expectedrQ   rR   resultr   rP   r   _check_local_array_size_fp16   s
    z-TestCudaLocalMem._check_local_array_size_fp16c                 C   s$   |  ddtj |  ddtj d S )NrG   )rW   r   rT   r&   )r*   r   r   r   test_issue_fp16_support   s    z(TestCudaLocalMem.test_issue_fp16_supportN)__name__
__module____qualname__r-   r.   r/   r8   r
   r?   r@   rB   rE   rF   rM   rW   rX   r   r   r   r   r"   "   s    	







	
r"   __main__)Znumpyr&   Znumbar   r   r   r   Z
numba.corer   Znumba.core.errorsr   Znumba.cuda.testingr   r	   r
   Zextensions_usecasesr   r   r   r   r!   r"   rY   mainr   r   r   r   <module>   s    