o
    1&i                     @   sx   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
g d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   :C:\wamp64\www\opt\env\Lib\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 r   )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   )	metaclassc                   @      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>'   s    zIn.to_device.<locals>.<lambda>Zcudadrv.devicearrayr   r   append)r   r   r   r   _r   r   r	   r       s   
zIn.to_deviceNr   r   r   r   r   r   r   r   r	   r          r   c                   @   r   )Outr   c                    s>   ddl m} |jdd\ }|r| fdd  S )Nr   r   F)copyr   c                          j jdS Nr   Zcopy_to_hostr   r   r   r   r   r   r	   r   3       zOut.to_device.<locals>.<lambda>r    r   r   r   r   convr   r*   r	   r   ,   s   
zOut.to_deviceNr   r#   r   r   r   r	   r%   +   r$   r%   c                   @   r   )InOutr   c                    s<   ddl m} |jd\ }|r| fdd  S )Nr   r   r   c                      r'   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_deviceNr   r#   r   r   r   r	   r.   7   r$   r.   c                 C   s   t | tr| S || S r   )
isinstancer   )r   defaultr   r   r	   wrap_argB   s   r1   )r   r%   r.   r   r1   )__doc__r   Znumba.core.typing.typeofr   r   ABCMetar   r   r%   r.   r1   __all__r   r   r   r	   <module>   s    