a
    .;b                     @   sT   d dl mZ d dlmZ d dlmZ dZG dd dejZdZ	G dd	 d	ej
Zd
S )    )cuda)
dispatcher)deviceufuncz
def __vectorized_{name}({args}, __out__):
    __tid__ = __cuda__.grid(1)
    if __tid__ < __out__.shape[0]:
        __out__[__tid__] = __core__({argitems})
c                   @   s8   e Zd Zdd Zdd Zdd Zdd Zed	d
 ZdS )CUDAVectorizec                 C   s*   t j|ddd| j}||j|j jjfS )NT)deviceZinline)r   jitpyfuncZ	overloadsargsZ	signatureZreturn_type)selfsigZcudevfn r   5lib/python3.9/site-packages/numba/cuda/vectorizers.py_compile_core   s    zCUDAVectorize._compile_corec                 C   s    | j j }|t|d |S )NZ__cuda__Z__core__)r   __globals__copyupdater   )r
   corefnZglblr   r   r   _get_globals   s
    zCUDAVectorize._get_globalsc                 C   s
   t |S Nr   r   r
   Zfnobjr   r   r   r   _compile_kernel   s    zCUDAVectorize._compile_kernelc                 C   s   t | jS r   )r   ZCUDAUFuncDispatcher	kernelmapr
   r   r   r   build_ufunc   s    zCUDAVectorize.build_ufuncc                 C   s   t S r   )vectorizer_stager_sourcer   r   r   r   _kernel_template   s    zCUDAVectorize._kernel_templateN)	__name__
__module____qualname__r   r   r   r   propertyr   r   r   r   r   r      s   r   zy
def __gufunc_{name}({args}):
    __tid__ = __cuda__.grid(1)
    if __tid__ < {checkedarg}:
        __core__({argitems})
c                   @   s0   e Zd Zdd Zdd Zedd Zdd Zd	S )
CUDAGUFuncVectorizec                 C   s    t | j| j}tj| j|dS )N)r   engine)r   ZGUFuncEngineZinputsigZ	outputsigr   ZCUDAGenerializedUFuncr   )r
   r#   r   r   r   r   /   s    zCUDAGUFuncVectorize.build_ufuncc                 C   s   t ||S r   r   r   r   r   r   r   4   s    z#CUDAGUFuncVectorize._compile_kernelc                 C   s   t S r   )_gufunc_stager_sourcer   r   r   r   r   7   s    z$CUDAGUFuncVectorize._kernel_templatec                 C   s4   t j|dd| j}| jj }|t |d |S )NT)r   r   )r   r   r   Zpy_funcr   r   r   )r
   r   r   Zglblsr   r   r   r   ;   s    z CUDAGUFuncVectorize._get_globalsN)r   r   r    r   r   r!   r   r   r   r   r   r   r"   .   s
   
r"   N)Znumbar   Z
numba.cudar   Znumba.np.ufuncr   r   ZDeviceVectorizer   r$   ZDeviceGUFuncVectorizer"   r   r   r   r   <module>   s   