o
    Td                     @   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   b/home/ncw/WWW/www-new/content/articles/pi-bbp/venv/lib/python3.10/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                   @      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>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   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	   r1   7   r&   r1   c                 C   s   t | tr| S || S r   )
isinstancer   )r   defaultr   r   r	   wrap_argB   s   r4   )r   r'   r1   r   r4   )__doc__r   numba.core.typing.typeofr   r   ABCMetar   r   r'   r1   r4   __all__r   r   r   r	   <module>   s    