Ë
    üÇ:ju  ã                   óÚ   — d Z ddlZddlZddlZddlmZ ddlmZ ddlm	Z	m
Z
 ddlmZ ej                  dk(  rdZd	Znej                  d
k(  rdZdZndZdZd„ Zd„ Zdd„Zd„ Zd„ Zdd„Zd„ Zy)a  CUDA Toolkit libraries lookup utilities.

CUDA Toolkit libraries can be available via either:

- the `cuda-nvcc` and `cuda-nvrtc` conda packages for CUDA 12,
- the `cudatoolkit` conda package for CUDA 11,
- a user supplied location from CUDA_HOME,
- a system wide location,
- package-specific locations (e.g. the Debian NVIDIA packages),
- or can be discovered by the system loader.
é    N)Úfind_lib)Úget_cuda_paths)Úlocate_driver_and_loaderÚload_driver)ÚCudaSupportErrorÚwin32z%s.dllz%s.libÚdarwinzlib%s.dylibzlib%s.azlib%s.soc                  ó8   — t        «       } | d   j                  }|S )NÚ	libdevice)r   Úinfo)ÚdÚpathss     úl/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/numba/cuda/cudadrv/libs.pyÚget_libdevicer   "   s   € ÜÓ€AØˆk‰N×Ñ€EØ€Ló    c                  óv   — t        t        «       d«      5 } | j                  «       cd d d «       S # 1 sw Y   y xY w)NÚrb)Úopenr   Úread)Úbcfiles    r   Úopen_libdevicer   (   s.   € Ü	Œm‹o˜tÓ	$ð ¨Ø�{‰{‹}÷÷ ò ús   •/¯8c                 óæ   — | dk(  r"t        «       d   j                  xs	 t        dz  S |rdnd}t        «       |   j                  }t        | ||¬«      }|rt        nt        }|rt        |«      S || z  S )a  
    Find the path of a CUDA library based on a search of known locations. If
    the search fails, return a generic filename for the library (e.g.
    'libnvvm.so' for 'nvvm') so that we may attempt to load it using the system
    loader's search mechanism.
    ÚnvvmÚstatic_cudalib_dirÚcudalib_dir©Ústatic)r   r   Ú_dllnamepatternr   Ú_staticnamepatternÚmax)Úlibr   Údir_typeÚlibdirÚ
candidatesÚnamepatterns         r   Úget_cudalibr&   -   st   € ð ˆf‚}ÜÓ Ñ'×,Ñ,ÒH´À&Ñ0HÐHá+1Ñ'°}ˆÜÓ! (Ñ+×0Ñ0ˆä˜#˜v¨fÔ5€JÙ(.Õ$´O€KÙ(Œ3ˆz‹?Ð?¨k¸CÑ.?Ð?r   c                 óB   — t        | «      }t        j                  |«      S )N)r&   ÚctypesÚCDLL)r!   Úpaths     r   Úopen_cudalibr+   ?   s   € Ü�sÓ€DÜ�;‰;�tÓÐr   c                 ó^   — t         j                  j                  | «      st        | › d�«      ‚y )Nz
 not found)Úosr*   ÚisfileÚFileNotFoundError)r*   s    r   Úcheck_static_libr0   D   s)   € Ü�7‰7�>‰>˜$ÔÜ 4 &¨
Ð 3Ó4Ð4ð  r   c                 ó¬   — | dk(  rt        «       d   j                  S | dk(  rt        «       d   j                  S |rdnd}t        «       |   j                  S )Nr   r   r   r   )r   Úby)r!   r   r"   s      r   Ú_get_source_variabler3   I   sW   € Ø
ˆf‚}ÜÓ Ñ'×*Ñ*Ð*Ø	�Ò	ÜÓ Ñ,×/Ñ/Ð/á+1Ñ'°}ˆÜÓ Ñ)×,Ñ,Ð,r   c            	      ó€  — d} 	 t        «       \  }}t        d«       |D ]  }t        d|› �«       Œ t        d|› �«       t        dd¬«       t        ||«      \  }}t        d«       t        d	|› �«       t        j
                  dk(  r·| sµt        j                  «       }t        j                  j                  t        j                  j                  d|› d«      }	 t        |«      5 }	|	j                  «       }
ddd«       t        d„ 
j                  «       D «       «      }t        d«       |D ]  }t        d|› �«       Œ 	 dj                  «       }|D ]a  }t!        |«      }t        dj#                  |t%        |«      «      «       t        d|«       	 t        dd¬«       t'        |«       t        d«       Œc d}t!        |d¬«      }t        dj#                  |t%        |d¬«      «      «       t        d|«       	 t        dd¬«       t)        |«       t        d«       t%        d«      }t        d |› �«       t-        «       }t        d|«       	 t        dd¬«       t)        |«       t        d«       |  S # t        $ r}t        d
|› �«       d} Y d}~�Œd}~ww xY w# 1 sw Y   �Œ£xY w# t        $ r t        d|› d�«       Y �Œ€w xY w# t        $ r}t        d|›d|›�«       d} Y d}~�Œ”d}~ww xY w# t*        $ r}t        d|›d|›�«       d} Y d}~Œôd}~ww xY w# t*        $ r}t        d|›d|›�«       d} Y d}~|  S d}~ww xY w)!z:Test library lookup.  Path info is printed to stdout.
    FzFinding driver from candidates:ú	zUsing loader z	Trying to load driverz...)Úendz	okz		Loaded from z	ERROR: failed to open driver: TNÚlinuxÚprocÚmapsc              3   ó*   K  — | ]  }d |v sŒ|–— Œ y­w)z
libcuda.soN© )Ú.0Úss     r   ú	<genexpr>ztest.<locals>.<genexpr>   s   è ø€ ÒI !°|ÀqÒ7HœAÑIùs   ‚	Œz	Mapped libcuda.so paths:z		z	ERROR: Could not open z) to determine absolute path to libcuda.soznvvm nvrtc cudartzFinding {} from {}z	Located atz	Trying to open libraryz	ERROR: failed to open z:
Ú	cudadevrtr   z	Checking libraryz	ERROR: failed to find r   zFinding libdevice from )r   Úprintr   r   ÚsysÚplatformr-   Úgetpidr*   ÚjoinÚsepr   r   ÚsetÚsplitÚOSErrorr&   Úformatr3   r+   r0   r/   r   )ÚfailedÚdlloaderr$   ÚlocationÚdllr*   ÚeÚpidÚmapsfileÚfr9   Ú	locationsÚlibsr!   Úwheres                  r   ÚtestrU   S   s  € ð €FðÜ7Ó9Ñˆ�*ÜÐ/Ô0Ø"ò 	#ˆHÜ�B�x�j�/Õ"ð	#ä�˜h˜ZÐ(Ô)ÜÐ'¨UÕ3Ü ¨*Ó5‰	ˆˆTÜˆfŒÜÐ   Ð'Ô(ô ‡|�|�wÒ¡vÜ�i‰i‹kˆÜ—7‘7—<‘<¤§¡§¡¨V¸°u¸vÓFˆð	)Ü�h“ð   1Ø—v‘v“x�÷ ô ÑI t§z¡z£|ÔIÓIˆIÜÐ.Ô/Ø%ò )�Ü˜˜X˜JÐ'Õ(ñ)ð ×$Ñ$Ó&€DØò ˆÜ˜3ÓˆÜÐ"×)Ñ)¨#Ô/CÀCÓ/HÓIÔJÜˆn˜dÔ#ð	ÜÐ,°%Õ8Ü˜ÔÜ�&�Mðð €CÜ�s 4Ô(€DÜ	Ð
×
%Ñ
% cÔ+?ÀØGKô,Mó Nô Oä	ˆ.˜$ÔðÜÐ"¨Õ.Ü˜ÔÜˆfŒô ! Ó-€EÜ	Ð# E 7Ð
+Ô,Ü‹?€DÜ	ˆ.˜$ÔðÜÐ"¨Õ.Ü˜ÔÜˆfŒð
 ˆ:Ðøô[ ò ÜÐ0°°Ð4Ô5ØŽûðú÷ ñ  ûô
 ò 	(ô Ð,¨X¨Jð 7'ð '÷ (ð		(ûô2 ò 	Ý²s¹AÐ>Ô?ØŽFûð	ûô ò Ý²3¹Ð:Ô;Ø�ûðûô ò Ý²3¹Ð:Ô;ØŒàˆ:Ðûð	úsŠ   „A0I/ ÃJ# Ã$JÃ5J# Æ#KÇ6#K, É	#L É/	JÉ8JÊJÊJ ÊJ# Ê#J?Ê>J?Ë	K)ËK$Ë$K)Ë,	LË5LÌLÌ	L=ÌL8Ì8L=)F)Ú__doc__r-   rA   r(   Únumba.misc.findlibr   Únumba.cuda.cuda_pathsr   Únumba.cuda.cudadrv.driverr   r   Únumba.cuda.cudadrv.errorr   rB   r   r   r   r   r&   r+   r0   r3   rU   r;   r   r   ú<module>r[      s�   ðñ
ó 
Û 
Û å 'Ý 0ß KÝ 5ð ‡<�<�7ÒØ€OØ!ÑØ‡\�\�XÒØ#€OØ"Ñà €OØ"Ðòòó
@ò$ò
5ó
-ó]r   