o
    i                      @   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rPe  dS dS )    N)cudaint32
complex128void)types)TypingError)unittestCUDATestCaseskip_on_cudasim   )test_struct_model_type
TestStructc                 C   T   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   b/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/numba/cuda/tests/cudapy/test_localmem.pyculocal
      r   c                 C   r   )Nd   r   r   )r   r   r   r   r   r   r   r   r   r   culocalcomplex   r   r!   c                 C   r   )N)   r   r   r   r   r   r   r   culocal1tuple   r   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||v  tjddd}t|}|d || | t	||k d S )Nz.localr   r   r   r   r   )
r   r   jitr   
assertTrue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.   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iter	overloadsvalues_type_annotationtypemapr   assertEqual)r-   fr   
annotationl_dtyper   r   r   check_dtype@   s   zTestCudaLocalMem.check_dtypezCan't check typing in simulatorc                 C   0   t ttd d d dd }| |t d S )Nr   c                 S   ,   t jjdtd}| d |d< |d | d< d S N
   r   r   )r   r   r   r   xr4   r   r   r   r<   J      z,TestCudaLocalMem.test_numba_dtype.<locals>.fr   r&   r   r   r?   r-   r<   r   r   r   test_numba_dtypeG      
z!TestCudaLocalMem.test_numba_dtypec                 C   r@   )Nr   c                 S   s.   t jjdtjd}| d |d< |d | d< d S rB   )r   r   r   r)   r   rD   r   r   r   r<   U   s   z,TestCudaLocalMem.test_numpy_dtype.<locals>.frG   rH   r   r   r   test_numpy_dtypeR   rJ   z!TestCudaLocalMem.test_numpy_dtypec                 C   r@   )Nr   c                 S   ,   t jjddd}| d |d< |d | d< d S )NrC   r   r   r   r   r   r   rD   r   r   r   r<   `   rF   z-TestCudaLocalMem.test_string_dtype.<locals>.frG   rH   r   r   r   test_string_dtype]   rJ   z"TestCudaLocalMem.test_string_dtypec                 C   sV   d}|  t| tttd d d dd }W d    d S 1 s$w   Y  d S )Nz*.*Invalid NumPy dtype specified: 'int33'.*r   c                 S   rL   )NrC   int33r   r   rM   rD   r   r   r   r<   m   rF   z5TestCudaLocalMem.test_invalid_string_dtype.<locals>.f)assertRaisesRegexr   r   r&   r   r   )r-   rer<   r   r   r   test_invalid_string_dtypeh   s
   "z*TestCudaLocalMem.test_invalid_string_dtypec                 C   r@   )Nr   c                 S   rA   rB   )r   r   r   r   rD   r   r   r   r<   t   rF   z<TestCudaLocalMem.test_type_with_struct_data_model.<locals>.f)r   r&   r   r   r?   rH   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	||< q&d S )NrC   r      )
r   r   r   r   r   lenr   r   rE   y)outxoutyarrr   objr   r   r   r<   }   s   
z6TestCudaLocalMem.test_struct_model_type_arr.<locals>.f)rC   r   r   r%   rT   )r   r&   r   r   r)   r   	enumerater;   )r-   r<   arrxarryr   rE   rV   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)arY   r   tyr   r   s   s   z8TestCudaLocalMem._check_local_array_size_fp16.<locals>.sr   r   r%   r   )r   r&   r)   zerosfloat16r;   )r-   r   expectedrb   rc   resultr   ra   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 )NrT   )rh   r   re   r)   )r-   r   r   r   test_issue_fp16_support   s   z(TestCudaLocalMem.test_issue_fp16_supportN)__name__
__module____qualname__r0   r1   r3   r?   r
   rI   rK   rN   rR   rS   r^   rh   ri   r   r   r   r   r$   "   s"    	







	
r$   __main__)numpyr)   numbar   r   r   r   
numba.corer   numba.core.errorsr   numba.cuda.testingr   r	   r
   extensions_usecasesr   r   r   r!   r#   r$   rj   mainr   r   r   r   <module>   s     