
    bi]              	       <   S SK r 0 SS_SS_SS_SS	_S
S_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_S S!_S"S#_0 S$S%_S&S'_S(S)_S*S+_S,S-_S.S/_S0S1_S2S3_S4S5_S6S7_S8S9_S:S;_S<S=_S>S?_S@SA_SBSC_SDSE_ESFSGSHSISJSKSLSM.ErSN\SO\4SP jr\ R
                  " SQ5      rSR\SO\4SS jrg)T    Nz1.0)   r   z1.1)r   r   z1.2)   r   z1.3)r   r   z1.4)r   r   z2.0)   r   z2.1)r   r   z2.2)r   r   z2.3)   r   z3.0)r   r   z3.1)   r   z3.2)r   r   z4.0)   r   z4.1)r   r   z4.2)   r   z4.3)r	   r   z5.0)   r   z6.0)	   r   z6.1)r   r   z6.2)r   r   z6.3)
   r   z6.4)r   r   z6.5)r   r   z7.0)   r   z7.1)r   r   z7.2)r   r   z7.3)r   r   z7.4)r   r   z7.5)r   r   z7.6)r   r   z7.7)r   r	   z7.8)r   r
   z8.0)   r   z8.1)r   r   )r   r   )r   r   )r   r   )r   r   )r   r	   )r   r
   )r   r   )z8.2z8.3z8.4z8.5z8.6z8.7z8.8ptx_versionreturnc                 j     [         U    u  pSU-  SU-  -   $ ! [         a    [        SU  35      Sef = f)ac  
Maps the PTX ISA version to the minimal CUDA driver, nvPTXCompiler, or nvJitLink version
that is needed to load a PTX of the given ISA version.

Parameters
----------
ptx_version : str
    PTX ISA version as a string, e.g. "8.8" for PTX ISA 8.8. This is the ``.version``
    directive in the PTX header.

Returns
-------
int
    Minimal CUDA version as 1000 * major + 10 * minor, e.g. 12090 for CUDA 12.9.

Raises
------
ValueError
    If the PTX version is unknown.

Examples
--------
>>> get_minimal_required_driver_ver_from_ptx_ver("8.8")
12090
>>> get_minimal_required_driver_ver_from_ptx_ver("7.0")
11000
i  r   z(Unknown or unsupported PTX ISA version: N)_ptx_to_cudaKeyError
ValueError)r   majorminors      X/home/james-whalen/.local/lib/python3.13/site-packages/cuda/bindings/utils/_ptx_utils.py*get_minimal_required_cuda_ver_from_ptx_verr   5   sN    8]#K0e|b5j(( ]CK=QRX\\]s    2z\.version\s+([0-9]+\.[0-9]+)ptxc                 r    [         R                  U 5      nU(       a  UR                  S5      $ [        S5      e)a  
Extract the PTX ISA version string from PTX source code.

Parameters
----------
ptx : str
    The PTX assembly source code as a string.

Returns
-------
str
    The PTX ISA version string, e.g., "8.8".

Raises
------
ValueError
    If the .version directive is not found in the PTX source.

Examples
--------
>>> ptx = r'''
... .version 8.8
... .target sm_86
... .address_size 64
...
... .visible .entry test_kernel()
... {
...     ret;
... }
... '''
>>> get_ptx_ver(ptx)
'8.8'
r   z=No .version directive found in PTX source. Is it a valid PTX?)_ptx_ver_patternsearchgroupr   )r   ms     r   get_ptx_verr   ]   s2    D 	$AwwqzXYY    )rer   strintr   compiler   r    r    r   <module>r&      s	   
*	6*	6* 
6* 
6	*
 
6* 
6* 
6* 
6* 
6* 
6* 
6* 
6* 
6* 
6* 
6*  
6!*" 
6#*$ 
6%*& 
6'*( 
6)** 
7+*, 
7-*. 
7/*0 
71*2 
73*4 
75*6 
77*8 
79*: 
7;*< 
7=*> 
7?*@ 
7A*B 
7C*D 
7E*F S*Z ]C  ]C  ]J ::=> &ZS &ZS &Zr    