
    J/Phu                         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     W/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/cuda/cudadrv/libs.pyget_libdevicer   "   s    AkN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    	moot	$	$ {{}}                 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#vf555J(.C$$OK(?3z???kC.??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| st          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!|q7H7HA7H7H7H7H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ikk7<<VXvFF	)h  1vvxx                              IItzz||IIIIII.///% ) )'X''(((()  	( 	( 	(  'X ' ' ' ( ( ( ( (		( $$&&D  3"))#/CC/H/HIIJJJnd###	,%8888&MMMM 	 	 	EsssAA>???FFFFFF	
 Cs4(((D	

%
%c+?GK,M ,M ,M N N O O O	.$"....f   333:;;;
 !--E	
+E
+
+,,,??D	.$"....f   333:;;; :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   