U
    ,d                     @   s~   d Z ddlZddlmZmZ G dd dej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)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   3/tmp/pip-unpacked-wheel-eu7e0c37/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 r   )r   r   r   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   )	metaclassc                   @   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 r   r   r   devaryr   r	   <lambda>'       zIn.to_device.<locals>.<lambda>Z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 Nr   Zcopy_to_hostr   r   r   r   r   r   r	   r   3   r   zOut.to_device.<locals>.<lambda>r    r   r   r   r   convr   r(   r	   r   ,   s    
zOut.to_deviceN)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 r&   r'   r   r(   r   r	   r   >   r   z!InOut.to_device.<locals>.<lambda>r    r)   r   r(   r	   r   8   s    
zInOut.to_deviceN)r   r#   r   r   r   r	   r+   7   s   r+   c                 C   s   t | tr| S || S r   )
isinstancer   )r   defaultr   r   r	   wrap_argB   s    r.   )__doc__r   Znumba.core.typing.typeofr   r   ABCMetar   r   r$   r+   r.   __all__r   r   r   r	   <module>   s   