B
     \                 @   sd   d dl mZmZ 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 )    )print_functionabsolute_import)cuda)deviceufunc   )
dispatcherz
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fS )NT)deviceZinline)r   jitpyfuncZcresZ	signatureZreturn_type)selfsigZcudevfn r   5lib/python3.7/site-packages/numba/cuda/vectorizers.py_compile_core   s    zCUDAVectorize._compile_corec             C   s    | j j }|t|d |S )N)__cuda____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   fnobjr   r   r   r   _compile_kernel   s    zCUDAVectorize._compile_kernelc             C   s   t | jS )N)r   ZCUDAUFuncDispatcher	kernelmap)r   r   r   r   build_ufunc   s    zCUDAVectorize.build_ufuncc             C   s   t S )N)vectorizer_stager_source)r   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   1   s    zCUDAGUFuncVectorize.build_ufuncc             C   s   t ||S )N)r   r
   )r   r   r   r   r   r   r   6   s    z#CUDAGUFuncVectorize._compile_kernelc             C   s   t S )N)_gufunc_stager_source)r   r   r   r   r   9   s    z$CUDAGUFuncVectorize._kernel_templatec             C   s4   t j|dd| j}| jj }|t |d |S )NT)r	   )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"   0   s   r"   N)Z
__future__r   r   Znumbar   Znumba.npyufuncr    r   r   ZDeviceVectorizer   r$   ZDeviceGUFuncVectorizer"   r   r   r   r   <module>   s   