§
    1@Ä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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      €úKC:\Projects\Historical\venv\Lib\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   € € Ø œI˜I˜I t¤x xÐ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Ô)ˆEˆEøÝð 	(ð 	(ð 	(Ý  Ñ'Ô'Ð'ð	(øøøà˜”(ˆØ˜˜˜”9ˆàÔ"ð 	Ø×ÒÑÔÐð —’˜uÑ%Ô%ˆØˆŒØ!ˆŒà×'Ò'¨¨uÑ5Ô5ˆ	Ý��e˜YÑ'Ô'Ð'ØÐ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   ø€ å�MŠMÐ0°%´.ÑAÔAÐAØ�e˜T�lˆGØ×Ò˜e WÑ-Ô-Ð-Ð-Ð-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Ô(Ò(Ð(Ý”m GÐ-?Ñ@Ô@ˆGˆGØ05°°°w°wÐ?ˆCÝ�MŠM˜#ÑÔÐÝ% g¨sÑ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   ø€ Ø1ˆCÝ" 3¨¡;Ñ/Ô/Ð/r   )Úgetattrr'   r,   r1   )r   r2   rI   s    ` r   r-   zRuntime._find_api[   sm   ø€ ð	Ý˜4œ8 UÑ+Ô+Ð+øÝð 	ð 	ð 	Øˆ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Ð1µVÔ5HÈBÒ5NÐ5Nà�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   