
    J/Ph                         d Z ddlZddlZddlZddlmZ ddlmZmZ ddl	m
Z
mZ ddlmZ ddlmZ ddlmZ  G d	 d
e          Z G d d          Z e            Zd ZdS )z
CUDA Runtime wrapper.

This provides a very minimal set of bindings, since the Runtime API is not
really used in Numba except for querying the Runtime version.
    N)config)	ERROR_MAPmake_logger)CudaSupportErrorCudaRuntimeError)open_cudalib)API_PROTOTYPES)enumsc                   (     e Zd ZdZ fdZd Z xZS )CudaRuntimeAPIErrorzP
    Raised when there is an error accessing a C API from the CUDA Runtime.
    c                 h    || _         || _        t                                          ||           d S )N)codemsgsuper__init__)selfr   r   	__class__s      Z/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/cuda/cudadrv/runtime.pyr   zCudaRuntimeAPIError.__init__   s1    	s#####    c                 &    d| j         d| j        S )N[z] )r   r   r   s    r   __str__zCudaRuntimeAPIError.__str__   s      IIItxx00r   )__name__
__module____qualname____doc__r   r   __classcell__)r   s   @r   r   r      sQ         $ $ $ $ $
1 1 1 1 1 1 1r   r   c                   X    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zed
             ZdS )RuntimezA
    Runtime object that lazily binds runtime API functions.
    c                     d| _         d S )NF)is_initializedr   s    r   r   zRuntime.__init__&   s    #r   c                     t                      at          j        rd}t	          |          t          d          | _        d| _        d S )NzzCUDA is disabled due to setting NUMBA_DISABLE_CUDA=1 in the environment, or because CUDA is unsupported on 32-bit systems.cudartT)r   _loggerr   DISABLE_CUDAr   r   libr"   )r   r   s     r   _initializezRuntime._initialize)   sL     -- 	(%C #3'''))"r   c                 L   	 t           |         }n# t          $ r t          |          w xY w|d         }|dd          }| j        s|                                  |                     |          }||_        ||_        |                     ||          }t          | ||           |S )Nr      )
r	   KeyErrorAttributeErrorr"   r(   	_find_apirestypeargtypes_wrap_api_callsetattr)r   fnameprotor.   r/   libfn	safe_calls          r   __getattr__zRuntime.__getattr__7   s    	("5)EE 	( 	( 	( '''	((9" 	 u%%!''u55	eY'''s    *c                 N     t          j                   fd            }|S )Nc                  ~    t                               dj                    |  }                    |           d S )Nzcall runtime api: %s)r%   debugr   _check_error)argsretcoder2   r4   r   s     r   safe_cuda_api_callz2Runtime._wrap_api_call.<locals>.safe_cuda_api_callM   sA    MM0%.AAAeTlGeW-----r   )	functoolswraps)r   r2   r4   r=   s   ``` r   r0   zRuntime._wrap_api_callL   sE    				. 	. 	. 	. 	. 	. 
 		. "!r   c                     |t           j        k    rGt          j        |d          }d|d|}t                              |           t          ||          d S )NcudaErrorUnknownzCall to z results in )r
   CUDA_SUCCESSr   getr%   errorr   )r   r2   r<   errnamer   s        r   r:   zRuntime._check_errorT   s^    e(((mG-?@@GG05ww?CMM#%gs333	 )(r   c                     	 t          | j                  S # t          $ r Y nw xY wfd}t          | |           |S )Nc                  ,    d}t          |z            )Nzruntime missing function: %s.)r   )r;   kwsr   r2   s      r   absent_functionz*Runtime._find_api.<locals>.absent_functionc   s    1C"3;///r   )getattrr'   r,   r1   )r   r2   rI   s    ` r   r-   zRuntime._find_api[   sm    	48U+++ 	 	 	D	
	0 	0 	0 	0 	0 	e_---s    
%%c                     t          j                    }|                     t          j        |                     |j        dz  }|j        |dz  z
  dz  }||fS )zM
        Returns the CUDA Runtime version as a tuple (major, minor).
        i  
   )ctypesc_intcudaRuntimeGetVersionbyrefvalue)r   rtvermajorminors       r   get_versionzRuntime.get_versionj   sX     ""6<#6#6777t#-"4u~r   c                 8    |                                  | j        v S )zJ
        Returns True if the CUDA Runtime is a supported version.
        )rU   supported_versionsr   s    r   is_supported_versionzRuntime.is_supported_versionu   s    
 !!T%<<<r   c                 F    t           j        dvst          j        dk    rdS dS )zzA tuple of all supported CUDA toolkit versions. Versions are given in
        the form ``(major_version, minor_version)``.)linuxwin32@    ))   r   )r^   r*   )r^      )r^      )r^      )r^      )r^      )r^      )sysplatformr   MACHINE_BITSr   s    r   rW   zRuntime.supported_versions|   s.     <111V5HB5N5N2 r   N)r   r   r   r   r   r(   r6   r0   r:   r-   rU   rX   propertyrW   r]   r   r   r    r    !   s         $ $ $# # #  *" " "4 4 4  	 	 	= = =   X  r   r    c                  4    t                                           S )zA
    Return the runtime version as a tuple of (major, minor)
    )runtimerU   r]   r   r   rU   rU      s        r   )r   rM   r>   re   
numba.corer   numba.cuda.cudadrv.driverr   r   numba.cuda.cudadrv.errorr   r   numba.cuda.cudadrv.libsr   numba.cuda.cudadrv.rtapir	   numba.cuda.cudadrvr
   r   r    rj   rU   r]   r   r   <module>rq      s)         



       < < < < < < < < G G G G G G G G 0 0 0 0 0 0 3 3 3 3 3 3 $ $ $ $ $ $
1 
1 
1 
1 
1* 
1 
1 
1c c c c c c c cL '))! ! ! ! !r   