o
    ۾i^
                     @   sX   d dl Z d dlmZmZ d dlmZ eedG dd deZedkr*e   dS dS )    N)CUDATestCaseskip_on_cudasim)skip_unless_cffiz4cudasim doesn't support cuda import at non-top-levelc                   @   s   e Zd Zdd Zdd ZdS )TestFFIc           
         s   ddl m  dd l}dd l} dd|j|jt}|j	|dd} j
|gd fdd	}d
}|jd |j||j}|j||j}||}	|d |	|| |j|	||  d S )Nr   cudamul_f32_f32zfloat32(float32, float32)ffifunctions.culinkc                    s4     d}|t| k r|| || | |< d S d S )N   )gridlen)rxyir   mul Z/home/ubuntu/.local/lib/python3.10/site-packages/numba/cuda/tests/doc_examples/test_ffi.pymultiply_vectors   s   
z4TestFFI.test_ex_linking_cu.<locals>.multiply_vectors    r   )r   r   )numbar   numpyosdeclare_devicepathdirnameabspath__file__joinjitrandomseedrandastypefloat32
zeros_liketestingassert_array_equal)
selfnpr   basedirfunctions_cur   Nr   r   r   r   r   r   test_ex_linking_cu   s   
zTestFFI.test_ex_linking_cuc                    s   ddl m} dd l}|j|jt}|j|dd}d}|d|dd l	}|
  |j|gd fdd	}dd l}|d
|j}	|jd|jd}
|d |
|	 ||	}|
d }|j|| d S )Nr   r   r	   r
   z!float32(CPointer(float32), int32)
sum_reducer   c                    s      |}|t|| d< d S )Nr   )from_bufferr   )resultarray	array_ptrr	   r2   r   r   reduction_caller@   s   
z5TestFFI.test_ex_from_buffer.<locals>.reduction_caller
   r   )dtype)r   r   )r   r   r   r   r   r    r!   r"   r   cffiFFIr#   r   aranger'   r(   ndarraysumr*   assert_allclose)r,   r   r   r.   r/   	signaturer;   r8   r-   r   r   expectedactualr   r7   r   test_ex_from_buffer0   s"   
zTestFFI.test_ex_from_bufferN)__name__
__module____qualname__r1   rD   r   r   r   r   r   	   s    $r   __main__)	unittestnumba.cuda.testingr   r   numba.tests.supportr   r   rE   mainr   r   r   r   <module>   s   F