U
    hâË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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)Úis_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   úQ/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/cuda/simulator/api.pyÚselect_device   s    r   c                   C   s   dS ©NTr   r   r   r   r   Úis_float16_supported   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 r   )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.0zcompute capability)Úprintr   r   r   r   Údetect1   s    r'   c                   C   s   t S r   )r   r   r   r   r   Úlist_devices7   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   ÚrecordB   s    zEvent.recordc                 C   s   d S r   r   r*   r   r   r   ÚwaitE   s    z
Event.waitc                 C   s   d S r   r   r   r   r   r   r   H   s    zEvent.synchronizec                 C   s   t dƒ dS )NzSimulator timings are bogusg        r
   )r   Úeventr   r   r   Úelapsed_timeK   s    zEvent.elapsed_timeN)r   )r   )r   r   r   r    r+   r,   r   r.   r   r   r   r   r)   =   s
   

r)   NFTc                    sX   |rt dƒ‚|d k	rt dƒ‚| d ks6t| ƒs6t| tƒrJ‡ ‡‡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©r1   r/   r0   r   r   Ú
jitwrapperb   s
    ýzjit.<locals>.jitwrapper)r/   r1   )ÚNotImplementedErrorr	   Ú
isinstanceÚlistr   )Zfunc_or_sigr/   r1   ZargtypesÚinlineÚrestyper0   ÚlinkZboundscheckÚoptÚcacher4   r   r3   r   ÚjitS   s    ÿr=   c                   c   s
   d V  d S r   r   r   r   r   r   Údefer_cleanupk   s    r>   )r   )NFFNFNFNNTN)r    Ú
contextlibr   Zcudadrv.devicesr   r   r   Zkernelr   Znumba.core.sigutilsr	   Úwarningsr   r#   r   r   r   r   r   Úobjectr   r   r"   r%   r'   r(   r)   r-   r=   r>   r   r   r   r   Ú<module>   s6   
             þ
