
    xKgu                         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     [/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/cuda/cudadrv/libs.pyget_libdevicer   "   s    AkN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%    	mot	${{} 
%	$	$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#vf5J(.$OK(3z??kC.??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)    77>>$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| st        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|!|q7HA|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Bxj/" #hZ()'U3*5	Tf '( ||wviik77<<VuvF	)h1vvx   Itzz|III./%XJ'( & $$&D3"))#/CC/HIJnd#	,%8&M  Cs4(D	

%
%c+?GK,M N O	.$".f !-E	#E7
+,?D	.$".f
 :[  045  
  	( ,XJ 7' ' (		(2  	sA>?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   