Ë
    üÇ:jŸ  ã                   ó®   — 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y)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                 óB   •— || _         || _        t        ‰| �  ||«       y )N)ÚcodeÚmsgÚsuperÚ__init__)Úselfr   r   Ú	__class__s      €úo/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/numba/cuda/cudadrv/runtime.pyr   zCudaRuntimeAPIError.__init__   s    ø€ ØˆŒ	ØˆŒÜ‰Ñ˜˜sÕ#ó    c                 ó:   — d| j                   ›d| j                  ›�S )Nú[z] )r   r   ©r   s    r   Ú__str__zCudaRuntimeAPIError.__str__   s   � Ø ŸI›I t§x¢xÐ0Ð0r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Ú__classcell__)r   s   @r   r   r      s   ø„ ñô$ö
1r   r   c                   óP   — 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y)ÚRuntimezA
    Runtime object that lazily binds runtime API functions.
    c                 ó   — d| _         y )NF)Úis_initializedr   s    r   r   zRuntime.__init__&   s
   € Ø#ˆÕr   c                 ó€   — t        «       at        j                  rd}t	        |«      ‚t        d«      | _        d| _        y )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)   s<   € ô “-ˆä×Òð%ˆCô # 3Ó'Ð'Ü Ó)ˆŒà"ˆÕr   c                 ó  — 	 t         |   }|d   }|dd  }| j                  s| j	                  «        | j                  |«      }||_        ||_        | j                  ||«      }t        | ||«       |S # t        $ r t        |«      ‚w xY w)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Ñ)ˆEð ˜‘(ˆØ˜˜�9ˆà×"Ò"Ø×ÑÔð —‘˜uÓ%ˆØˆŒØ!ˆŒà×'Ñ'¨¨uÓ5ˆ	Ü��e˜YÔ'ØÐøô ò 	(Ü  Ó'Ð'ð	(ús   ‚	A1 Á1Bc                 óJ   ‡ ‡‡— t        j                  ‰«      ˆˆˆ fd„«       }|S )Nc                  ót   •— t         j                  d‰j                  «        ‰| Ž }‰j                  ‰|«       y )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   s/   ø€ ä�M‰MÐ0°%·.±.ÔAÙ˜T�lˆGØ×Ñ˜e WÕ-r   )Ú	functoolsÚwraps)r   r2   r4   r=   s   ``` r   r0   zRuntime._wrap_api_callL   s&   ú€ Ü	�‰˜Ó	õ	.ó 
 ð	.ð "Ð!r   c                 ó¨   — |t         j                  k7  r?t        j                  |d«      }d|›d|›�}t        j                  |«       t        ||«      ‚y )NÚcudaErrorUnknownzCall to z results in )r
   ÚCUDA_SUCCESSr   Úgetr%   Úerrorr   )r   r2   r<   Úerrnamer   s        r   r:   zRuntime._check_errorT   sI   € Ø”e×(Ñ(Ò(Ü—m‘m GÐ-?Ó@‰GÚ05±wÐ?ˆCÜ�M‰M˜#ÔÜ% g¨sÓ3Ð3ð	 )r   c                 óx   ‡— 	 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   ø€ Ø1ˆCÜ" 3¨¡;Ó/Ð/r   )Úgetattrr'   r,   r1   )r   r2   rI   s    ` r   r-   zRuntime._find_api[   sD   ø€ ð	Ü˜4Ÿ8™8 UÓ+Ð+øÜò 	Ùð	úô
	0ô 	��e˜_Ô-ØÐs   ƒ ™	%¤%c                 óÂ   — t        j                  «       }| 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   sU   € ô —‘“ˆØ×"Ñ"¤6§<¡<°Ó#6Ô7à—‘˜tÑ#ˆØ—‘ ¨¡Ñ-°"Ñ4ˆØ�uˆ~Ðr   c                 ó:   — | j                  «       | 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                 óP   — t         j                  dvst        j                  dk7  ryy)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´V×5HÑ5HÈBÒ5Nàðr   N)r   r   r   r   r   r(   r6   r0   r:   r-   rU   rX   ÚpropertyrW   r]   r   r   r    r    !   sC   „ ñò$ò#òò*"ò4òò	ò=ð ñó ñr   r    c                  ó*   — t         j                  «       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      sO   ðñó Û Û 
å ß <ß GÝ 0Ý 3Ý $ô
1Ð*ô 
1÷cñ cñL ‹)€ó!r   