o
    8ήc	                     @   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J dd S )Nr   z/Only a single device supported by the simulator )devr   r   ?/tmp/pip-target-vg8gfxp4/lib/python/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       d V  d S Nr   selfr   r   r   auto_synchronize   s   
zstream.auto_synchronizec                 C      d S r   r   r   r   r   r   synchronize      zstream.synchronizeN)__name__
__module____qualname____doc__r   r   r   r   r   r   r   r      s
    
r   c                   C   r   r   r   r   r   r   r   r       r   r   c                   C   s
   dt _d S )NT)r   closedr   r   r   r   close$   s   
r"   c                  O   r   r   r   )argskwargsr   r   r   declare_device(   r   r%   c                   C   s$   t d t dd  t dd  d S )NzFound 1 CUDA deviceszid %d    %20s %40s)r   	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   r   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   r   r   r   r   r   r   r   r   record=   r   zEvent.recordc                 C   r   r   r   r+   r   r   r   wait@   r   z
Event.waitc                 C   r   r   r   r   r   r   r   r   C   r   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*   8   s    

r*   NFTc                    sV   |rt d|d urt d| d u st| tttfr$ 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r3   r1   r2   r   r   
jitwrapper[   s
   zjit.<locals>.jitwrapper)r1   r3   )NotImplementedError
isinstancestrtupler	   r   )func_or_sigr1   r3   argtypesinlinerestyper2   linkboundscheckoptcacher6   r   r5   r   jitN   s   rC   c                   c   r   r   r   r   r   r   r   defer_cleanupd   s   
rD   r0   )NFFNFNFNNTN)r    
contextlibr   cudadrv.devicesr   r   r   kernelr   numba.core.typingr	   warningsr   r#   r   r   r   r   objectr   r   r"   r%   r(   r)   r*   r.   rC   rD   r   r   r   r   <module>   s,    

