
    ܙd                         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dZdS )a2  Cudatoolkit libraries lookup utilities.

Cudatoolkit libraries can be available via either:

- the `cudatoolkit` conda package,
- 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     7lib/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)platformstatic)r   r   _dllnamepatternr   _staticnamepatternmax)libr   r   dir_typelibdir
candidatesnamepatterns          r   get_cudalibr&   ,   s     f}}',H&0HH+1D''}!!(+0#vHHHJ(.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                     t          | d          }t          j                            |          st	          | d          d S )NTr   z
 not found)r&   osr+   isfileFileNotFoundErrorr*   s     r   check_static_libr2   C   sK    s4(((D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_variabler5   I   sb    
f}}'**			,//+1D''}),,r   Tc           	         d}	 t                      \  }}d                    |          }t          d| d           t          d|            t          dd           t          ||          \  }}t          d|            n+# t          $ r}t          d	|            d
}Y d}~nd}~ww xY wd                                }	|	D ]}
t          |
|           }t          d                    |
t          |
                               |rt          d|           n-t          dt          j
                            |                     | dt          j        fv r_	 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
                               |rt          d|           n-t          dt          j
                            |                     	 t!          |
           n.# t"          $ r!}t          d|
d|           d
}Y d}~nd}~ww xY wt          d          }t          d|            t          dd           t%                      }|rt          d           nt          d           d
}| S )z:Test library lookup.  Path info is printed to stdout.
    Fz, z Finding driver from candidates: z...zUsing loader z	trying to load driver)endz	ok, loaded from z	ERROR: failed to open driver: TNznvvm cudartzFinding {} from {}z	located atz	named z	trying to open libraryz	okz	ERROR: failed to open z:
	cudadevrtr.   z	ERROR: failed to find r   zFinding libdevice from z	ERROR: can't open libdevice)r   joinprintr   r   splitr&   formatr5   r/   r+   basenamesysr   r,   OSErrorr2   r1   r   )	_platformprint_pathsfaileddlloaderr$   	locationsdllr+   elibsr!   wheres               r   testrI   S   s}    F
799*IIj))	????@@@(h(()))'U3333*55	T)4))****   444555
   D  3	**"))#/CC/H/HIIJJJ 	6.$''''*bg..t44555s|,,,0e<<<<S!!!f   333BCCC - CsId333D	

%
%c+?GK,M ,M ,M N N O O O 2nd####j"'**400111   333:;;;
 !--E	
+E
+
+,,,	
$%0000??D f.///:sH   BB 
B.B))B./F


F5F00F5 I 
I;I66I;)NF)F)NT)__doc__r/   r>   r(   numba.misc.findlibr   numba.cuda.cuda_pathsr   numba.cuda.cudadrv.driverr   r   numba.cuda.cudadrv.errorr   r   r   r   r   r   r&   r,   r2   r5   rI    r   r   <module>rP      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   