§
    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 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dS )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                  ó<   — t          ¦   «         } | d         j        }|S )NÚ	libdevice)r   Úinfo)ÚdÚpathss     úHC:\Projects\Historical\venv\Lib\site-packages\numba/cuda/cudadrv/libs.pyÚget_libdevicer   "   s   € ÝÑÔ€AØˆkŒNÔ€EØ€Ló    c                  ó–   — t          t          ¦   «         d¦  «        5 } |                      ¦   «         cd d d ¦  «         S # 1 swxY w Y   d S )NÚrb)Úopenr   Úread)Úbcfiles    r   Úopen_libdevicer   (   s‚   € Ý	�m‰oŒo˜tÑ	$Ô	$ð ¨Ø�{Š{‰}Œ}ðð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð s   �>¾AÁAFc                 ó  — | dk    r#t          ¦   «         d         j        p	t          dz  S |rdnd}t          ¦   «         |         j        }t          | ||¬¦  «        }|rt          nt          }|rt          |¦  «        n|| 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&   -   sŒ   € ð ˆf‚}€}ÝÑÔ Ô'Ô,ÐHµÀ&Ñ0HÐHà+1ÐDÐ'Ð'°}ˆÝÑ!Ô! (Ô+Ô0ˆå˜#˜v¨fÐ5Ñ5Ô5€JØ(.ÐCÕ$Ð$µO€KØ(Ð?�3ˆz‰?Œ?ˆ?¨k¸CÑ.?Ð?r   c                 óH   — t          | ¦  «        }t          j        |¦  «        S )N)r&   ÚctypesÚCDLL)r!   Úpaths     r   Úopen_cudalibr+   ?   s   € Ý�sÑÔ€DÝŒ;�tÑÔÐr   c                 óh   — t           j                             | ¦  «        st          | › d�¦  «        ‚d S )Nz
 not found)Úosr*   ÚisfileÚFileNotFoundError)r*   s    r   Úcheck_static_libr0   D   s9   € ÝŒ7�>Š>˜$ÑÔð 5Ý 4Ð 3Ð 3Ð 3Ñ4Ô4Ð4ð5ð 5r   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   sb   € Ø
ˆf‚}€}ÝÑÔ Ô'Ô*Ð*Ø	�Ò	Ð	ÝÑÔ Ô,Ô/Ð/à+1ÐDÐ'Ð'°}ˆÝÑÔ Ô)Ô,Ð,r   c            	      óÂ  — d} 	 t          ¦   «         \  }}t          d¦  «         |D ]}t          d|› �¦  «         Œt          d|› �¦  «         t          dd¬¦  «         t          ||¦  «        \  }}t          d¦  «         t          d	|› �¦  «         n+# t          $ r}t          d
|› �¦  «         d} Y d}~nd}~ww xY wt          j        dk    rø| söt          j        ¦   «         }t          j         	                    t          j        j
        d|› d¦  «        }	 t          |¦  «        5 }	|	                     ¦   «         }
ddd¦  «         n# 1 swxY w Y   t          d„ |
                     ¦   «         D ¦   «         ¦  «        }t          d¦  «         |D ]}t          d|› �¦  «         Œn## t          $ r t          d|› d�¦  «         Y nw xY wd                     ¦   «         }|D ]¯}t!          |¦  «        }t          d                     |t%          |¦  «        ¦  «        ¦  «         t          d|¦  «         	 t          dd¬¦  «         t'          |¦  «         t          d¦  «         Œ‚# t          $ r!}t          d|›d|›�¦  «         d} Y d}~Œ¨d}~ww xY wd}t!          |d¬¦  «        }t          d                     |t%          |d¬¦  «        ¦  «        ¦  «         t          d|¦  «         	 t          dd¬¦  «         t)          |¦  «         t          d¦  «         n.# t*          $ r!}t          d|›d|›�¦  «         d} Y d}~nd}~ww xY wt%          d¦  «        }t          d |› �¦  «         t-          ¦   «         }t          d|¦  «         	 t          dd¬¦  «         t)          |¦  «         t          d¦  «         n.# t*          $ r!}t          d|›d|›�¦  «         d} Y d}~nd}~ww xY w|  S )!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 ¯|V — ŒdS )z
libcuda.soN© )Ú.0Úss     r   ú	<genexpr>ztest.<locals>.<genexpr>   s,   è è € ÐIÐI !°|ÀqÐ7HÐ7H˜AÐ7HÐ7HÐ7HÐ7HÐIÐIr   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Ô9Ñˆ�*ÝÐ/Ñ0Ô0Ð0Ø"ð 	#ð 	#ˆHÝ�/�x�/�/Ñ"Ô"Ð"Ð"ÝÐ(˜hÐ(Ð(Ñ)Ô)Ð)ÝÐ'¨UÐ3Ñ3Ô3Ð3Ý ¨*Ñ5Ô5‰	ˆˆTÝˆf‰ŒˆÝÐ' Ð'Ð'Ñ(Ô(Ð(Ð(øÝð ð ð ÝÐ4°Ð4Ð4Ñ5Ô5Ð5Øˆˆˆˆˆˆøøøøðøøøõ „|�wÒÐ vÐÝŒi‰kŒkˆÝ”7—<’<¥¤¤¨V¸°X¸vÑFÔFˆð	)Ý�h‘”ð   1Ø—v’v‘x”x�ð ð  ð  ñ  ô  ð  ð  ð  ð  ð  ð  øøøð  ð  ð  ð  õ ÐIÐI t§z¢z¡|¤|ÐIÑIÔIÑIÔIˆIÝÐ.Ñ/Ô/Ð/Ø%ð )ð )�ÝÐ'˜XÐ'Ð'Ñ(Ô(Ð(Ð(ð)øõ ð 	(ð 	(ð 	(õ ð '¨Xð 'ð 'ð 'ñ (ô (ð (ð (ð (ð		(øøøð ×$Ò$Ñ&Ô&€DØð ð ˆÝ˜3ÑÔˆÝÐ"×)Ò)¨#Õ/CÀCÑ/HÔ/HÑIÔIÑJÔJÐJÝˆn˜dÑ#Ô#Ð#ð	ÝÐ,°%Ð8Ñ8Ô8Ð8Ý˜ÑÔÐÝ�&‰MŒMˆMˆMøÝð 	ð 	ð 	ÝˆE°s°s°s¸A¸AÐ>Ñ?Ô?Ð?ØˆFˆFˆFˆFˆFˆFøøøøð	øøøð
 €CÝ�s 4Ð(Ñ(Ô(€DÝ	Ð
×
%Ò
% cÕ+?ÀØGKð,Mñ ,Mô ,Mñ Nô Nñ Oô Oð Oå	ˆ.˜$ÑÔÐðÝÐ"¨Ð.Ñ.Ô.Ð.Ý˜ÑÔÐÝˆf‰ŒˆˆøÝð ð ð Ýˆ°3°3°3¸¸Ð:Ñ;Ô;Ð;Øˆˆˆˆˆˆøøøøðøøøõ
 ! Ñ-Ô-€EÝ	Ð
+ EÐ
+Ð
+Ñ,Ô,Ð,Ý‰?Œ?€DÝ	ˆ.˜$ÑÔÐðÝÐ"¨Ð.Ñ.Ô.Ð.Ý˜ÑÔÐÝˆf‰ŒˆˆøÝð ð ð Ýˆ°3°3°3¸¸Ð:Ñ;Ô;Ð;Øˆˆˆˆˆˆøøøøðøøøð ˆ:Ðs–   „BB Â
B;ÂB6Â6B;ÄF# Ä%EÄ:F# ÅE
Å
F# ÅE
ÅF# Æ#GÇGÈ./IÉ
J	É(JÊJ	Ë"/L Ì
L=ÌL8Ì8L=Î /N0 Î0
OÎ:OÏO)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[      sC  ðð
ð 
ð 
€	€	€	Ø 
€
€
€
Ø €€€à 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø KÐ KÐ KÐ KÐ KÐ KÐ KÐ KØ 5Ð 5Ð 5Ð 5Ð 5Ð 5ð „<�7ÒÐØ€OØ!ÐÐØ„\�XÒÐØ#€OØ"ÐÐà €OØ"Ððð ð ðð ð ð
@ð @ð @ð @ð$ð ð ð
5ð 5ð 5ð
-ð -ð -ð -ð]ð ]ð ]ð ]ð ]r   