B
      \฿  ใ               @   s   d Z ddlZddlmZ ddlmZmZ eejG dd dZG dd deZ	G d	d
 d
eZ
G dd deZefddZdd
dddgZdS )zw
Hints to wrap Kernel arguments to indicate how to manage host-device
memory transfers before & after the kernel call.
้    N)ฺadd_metaclass)ฺtypeofฺPurposec               @   s0   e Zd Zdd Zejd	ddZedd ZdS )
ฺArgHintc             C   s
   || _ d S )N)ฺvalue)ฺselfr   ฉ r   ๚.lib/python3.7/site-packages/numba/cuda/args.pyฺ__init__   s    zArgHint.__init__r   c             C   s   dS )a#  
        :param stream: a stream to use when copying data
        :param retr:
            a list of clean-up work to do after the kernel's been run.
            Append 0-arg lambdas to it!
        :return: a value (usually an `DeviceNDArray`) to be passed to
            the kernel
        Nr   )r   ฺretrฺstreamr   r   r	   ฺ	to_device   s    
zArgHint.to_devicec             C   s   t | jtjS )N)r   r   r   Zargument)r   r   r   r	   ฺ_numba_type_   s    zArgHint._numba_type_N)r   )	ฺ__name__ฺ
__module__ฺ__qualname__r
   ฺabcฺabstractmethodr   ฺpropertyr   r   r   r   r	   r      s   r   c               @   s   e Zd ZdddZdS )ฺInr   c                s4   ddl m} || j|d\ }|  fddก  S )N้   )ฺauto_device)r   c                  s    S )Nr   r   )ฺdevaryr   r	   ฺ<lambda>*   s    zIn.to_device.<locals>.<lambda>)ฺcudadrv.devicearrayr   r   ฺappend)r   r   r   r   ฺ_r   )r   r	   r   #   s    zIn.to_deviceN)r   )r   r   r   r   r   r   r   r	   r   "   s   r   c               @   s   e Zd ZdddZdS )ฺOutr   c                s>   ddl m} |jdd\ }|r:|  fddก  S )Nr   )r   F)ฺcopyr   c                  s    j jdS )N)r   )ฺcopy_to_hostr   r   )r   r   r   r   r	   r   6   s    zOut.to_device.<locals>.<lambda>)r   r   r   r   )r   r   r   r   ฺconvr   )r   r   r   r	   r   /   s    zOut.to_deviceN)r   )r   r   r   r   r   r   r   r	   r   .   s   r   c               @   s   e Zd ZdddZdS )ฺInOutr   c                s<   ddl m} |jd\ }|r8|  fddก  S )Nr   )r   )r   c                  s    j jdS )N)r   )r   r   r   )r   r   r   r   r	   r   A   s    z!InOut.to_device.<locals>.<lambda>)r   r   r   r   )r   r   r   r   r    r   )r   r   r   r	   r   ;   s    zInOut.to_deviceN)r   )r   r   r   r   r   r   r   r	   r!   :   s   r!   c             C   s   t | tr| S || S )N)ฺ
isinstancer   )r   ฺdefaultr   r   r	   ฺwrap_argE   s    r$   )ฺ__doc__r   Z	numba.sixr   Znumba.typing.typeofr   r   ฺABCMetar   r   r   r!   r$   ฺ__all__r   r   r   r	   ฺ<module>   s   