U
    ?h^
                     @   sT   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rPe   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   cudaZmul_f32_f32zfloat32(float32, float32)ffifunctions.culinkc                    s0     d}|t| k r,|| || | |< d S )N   )gridlen)rxyir   mul X/var/www/html/venv/lib/python3.8/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seedZrandastypefloat32Z
zeros_liketestingZ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   )Zfrom_bufferr   )resultarrayZ	array_ptrr   r.   r   r   reduction_caller@   s    
z5TestFFI.test_ex_from_buffer.<locals>.reduction_caller
   r   )Zdtype)r   r   )r   r   r   r   r   r   r    r!   r   cffiZFFIr"   r   Zaranger%   r&   Zndarraysumr'   Zassert_allclose)r(   r   r   r*   r+   	signaturer4   r2   r)   r   r   expectedactualr   r1   r   test_ex_from_buffer0   s"    
zTestFFI.test_ex_from_bufferN)__name__
__module____qualname__r-   r9   r   r   r   r   r   	   s   $r   __main__)	ZunittestZnumba.cuda.testingr   r   Znumba.tests.supportr   r   r:   mainr   r   r   r   <module>   s   F