U
    hâË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   úH/home/sam/Atlas/atlas_env/lib/python3.8/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   Ú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   ú