U
    ,d	                     @   s   d Z ddlmZ ddlmZmZmZ ddlmZ ddl	m
Z
 ddlmZ dd	lmZmZmZ d!d
dZG dd deZdd Zdd Zdd Zdd Zdd ZG dd deZeZd"ddZedd  ZdS )#z
Contains CUDA API functions
    )contextmanager   )require_contextresetgpusFakeCUDAKernel)	Signaturewarn   )InOutInOutc                 C   s   | dkst dd S )Nr   z/Only a single device supported by the simulator)AssertionError)dev r   </tmp/pip-unpacked-wheel-eu7e0c37/numba/cuda/simulator/api.pyselect_device   s    r   c                   @   s$   e Zd ZdZedd Zdd ZdS )streamz
    The stream API is supported in the simulator - however, all execution
    occurs synchronously, so synchronization requires no operation.
    c                 c   s
   d V  d S Nr   selfr   r   r   auto_synchronize   s    zstream.auto_synchronizec                 C   s   d S r   r   r   r   r   r   synchronize   s    zstream.synchronizeN)__name__
__module____qualname____doc__r   r   r   r   r   r   r   r      s   
r   c                   C   s   d S r   r   r   r   r   r   r       s    r   c                   C   s
   dt _d S )NT)r   closedr   r   r   r   close$   s    r    c                  O   s   d S r   r   )argskwargsr   r   r   declare_device(   s    r#   c                   C   s$   t d t dd  t dd  d S )NzFound 1 CUDA deviceszid %d    %20s %40s)r   Z	SIMULATORz[SUPPORTED]z	%40s: 5.3zcompute capability)printr   r   r   r   detect,   s    r%   c                   C   s   t S r   )r   r   r   r   r   list_devices2   s    r&   c                   @   s4   e Zd ZdZdddZdddZdd Zd	d
 ZdS )Eventz
    The simulator supports the event API, but they do not record timing info,
    and all simulation is synchronous. Execution time is not recorded.
    r   c                 C   s   d S r   r   r   r   r   r   r   record=   s    zEvent.recordc                 C   s   d S r   r   r(   r   r   r   wait@   s    z
Event.waitc                 C   s   d S r   r   r   r   r   r   r   C   s    zEvent.synchronizec                 C   s   t d dS )NzSimulator timings are bogusg        r
   )r   eventr   r   r   elapsed_timeF   s    zEvent.elapsed_timeN)r   )r   )r   r   r   r   r)   r*   r   r,   r   r   r   r   r'   8   s
   

r'   NFTc                    sV   |rt d|d k	rt d| d ks4t| tttfrH fdd}|S t|  dS )Nz)bounds checking is not supported for CUDAz Cannot link PTX in the simulatorc                    s   t |  dS )N)devicefastmathdebugr   )fnr/   r-   r.   r   r   
jitwrapper[   s
    zjit.<locals>.jitwrapper)r-   r/   )NotImplementedError
isinstancestrtupler	   r   )Zfunc_or_sigr-   r/   argtypesinlinerestyper.   linkZboundscheckoptcacher2   r   r1   r   jitN   s    r=   c                   c   s
   d V  d S r   r   r   r   r   r   defer_cleanupd   s    r>   )r   )NFFNFNFNNTN)r   
contextlibr   Zcudadrv.devicesr   r   r   kernelr   Znumba.core.typingr	   warningsr   r!   r   r   r   r   objectr   r   r    r#   r%   r&   r'   r+   r=   r>   r   r   r   r   <module>   s4   
             
