
    J/Ph+                         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	  edddg          Z
d Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )    N)
namedtupleIS_WIN32)find_lib	find_file_env_path_tuplebyinfoc                 &    | D ]\  }}|||fc S dS )zFind valid path from *options*, which is a list of 2-tuple of
    (name, path).  Return first pair where *path* is not None.
    If no valid path is found, return ('<unknown>', None)
    N)z	<unknown>N )optionsr	   datas      U/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/cuda/cuda_paths.py_find_valid_pathr      s7    
  ! !Dt8OOO  !     c                      dt                      fdt                      fdt          dd          fdt          dd          fdt	                      fg} t          |           \  }}||fS )NConda environment"Conda environment (NVIDIA package)	CUDA_HOMEnvvm	libdeviceSystemzDebian package)get_conda_ctkget_nvidia_libdevice_ctkget_cuda_homeget_system_ctkget_debian_pkg_libdevicer   r   r	   libdirs      r   _get_libdevice_path_decisionr       st    	moo.	-/G/I/IJ	mFK889	>&+667	3556G "'**JBv:r   c                      t           rdS dS )N)r   bin)r   lib64r   r   r   r   _nvvm_lib_dirr$   %   s     }r   c                      dt                      fdt                      fdt          t                       fdt	          t                       fg} t          |           \  }}||fS Nr   r   r   r   )r   get_nvidia_nvvm_ctkr   r$   r   r   )r   r	   paths      r   _get_nvvm_path_decisionr)   ,   sb    	moo.	-/B/D/DE	m]__56	>=??34	G  ((HBt8Or   c                      t                      \  } }d}t          t          j        |          |          }t	          |d           }t          | |          S )Nzlibdevice(\.\d+)*\.bc$)default)r    r   recompilemaxr   )r	   r   pat
candidatesouts        r   _get_libdevice_pathsr2   7   sO    -//JB
#C2:c??F33J
j$
'
'
'C2s###r   c                      t           rdS dS )Nr"   r#   r   r   r   r   _cudalib_pathr4   A   s     uwr   c                      t           rdS dS )N)libx64)r#   r   r   r   r   _cuda_home_static_cudalib_pathr8   H   s     ~zr   c                      dt                      fdt                      fdt          t                                fdt	          t                                fg} t          |           \  }}||fS r&   )r   get_nvidia_cudalib_ctkr   r4   r   r   r   s      r   _get_cudalib_dir_path_decisionr;   O   si    	moo.	-/E/G/GH	mMOO445	>-//223	G "'**JBv:r   c                      dt                      fdt                      fdt          t                       fdt	          t                                fg} t          |           \  }}||fS r&   )r   get_nvidia_static_cudalib_ctkr   r8   r   r4   r   r   s      r   %_get_static_cudalib_dir_path_decisionr>   Z   si    	moo.	-/L/N/NO	m%C%E%EFG	>-//223	G "'**JBv:r   c                  D    t                      \  } }t          | |          S N)r;   r   r	   r   s     r   _get_cudalib_dirrB   e   s!    /11JB2v&&&r   c                  D    t                      \  } }t          | |          S r@   )r>   r   rA   s     r   _get_static_cudalib_dirrD   j   s!    688JB2v&&&r   c                      t           j                            d          r8d}t          j                            |          rt          j        j        |g| R  S dS dS )zJReturn path to system-wide cudatoolkit; or, None if it doesn't exist.
    linuxz/usr/local/cudaN)sysplatform
startswithosr(   existsjoin)subdirsbases     r   r   r   o   sg     |w'' 0 !7>>$ 	07</w////0 0	0 	0r   c                     t           j                            t           j                            t          j        d                    } | sdS t          d          }|sdS t           j                            t          |                    S )MReturn path to directory containing the shared libraries of cudatoolkit.
    
conda-metaNr   )	rJ   r(   rK   rL   rG   prefixr   dirnamer.   )is_conda_envpathss     r   r   r   {   sj     7>>"',,sz<"H"HIIL VE 7??3u::&&&r   c                     t           j                            t           j                            t          j        d                    } | sdS t           j                            t          j        dt                                }t           j                            |          rt           j                            |          sxt           j                            t          j        ddt                                }t           j                            |          rt           j                            |          sdS t          d|          }|sdS t           j        	                    t          |                    S )zAReturn path to directory containing the NVVM shared library.
    rQ   Nr   Library)r   )rJ   r(   rK   rL   rG   rR   r4   isdirr   rS   r.   )rT   r   rU   s      r   r'   r'      s
    7>>"',,sz<"H"HIIL  W\\#*fmoo>>F7>>&!! v)>)> cj)V]__MMw~~f%% 	RW]]6-B-B 	 FVF+++E 7??3u::&&&r   c                      t                      } | sdS t          j                            |           }t          j                            |d          S )z?Return path to directory containing the libdevice library.
    Nr   )r'   rJ   r(   rS   rL   )nvvm_ctknvvm_dirs     r   r   r      sE     #$$H wx((H7<<+...r   c                      t                      } | sdS t          j                            t          j                            |                     }t          rdnd}t          j                            ||          S )rP   Nr"   r6   )r'   rJ   r(   rS   r   rL   )rZ   env_dirsubdirs      r   r:   r:      sa     #$$H goobgooh7788G)UUEF7<<(((r   c                      t                      } | sdS t          rd| vrd}nd}t          j                            t          j                            |                     }t          j        j        |g|R  S )zMReturn path to directory containing the static libraries of cudatoolkit.
    NrW   )Libr7   )r6   )r'   r   rJ   r(   rS   rL   )rZ   dirsr]   s      r   r=   r=      sw     #$$H  Yh.. goobgooh7788G7<'$''''r   c                      t           j                            d          }|t           j                            d          }|t          j        j        |g| R  S dS )zqGet paths of CUDA_HOME.
    If *subdirs* are the subdirectory name to be appended in the resulting
    path.
    r   N	CUDA_PATH)rJ   environgetr(   rL   )rM   	cuda_homes     r   r   r      sX    
 
{++IJNN;//	w|I00000 r   c                      t                      \  } }t          d|          }|rt          |          nd }t          | |          S )Nr   )r)   r   r.   r   )r	   r(   r0   s      r   _get_nvvm_pathrh      sD    &((HB&$''J(23z???dD2t$$$r   c                      t          t          d          rt          j        S t                      t	                      t                      t                      d} | t          _        | S )a@  Returns a dictionary mapping component names to a 2-tuple
    of (source_variable, info).

    The returned dictionary will have the following keys and infos:
    - "nvvm": file_path
    - "libdevice": List[Tuple[arch, file_path]]
    - "cudalib_dir": directory_path

    Note: The result of the function is cached.
    _cached_result)r   r   cudalib_dirstatic_cudalib_dir)hasattrget_cuda_pathsrj   rh   r2   rB   rD   )ds    r   rn   rn      sa     ~/00 ,, #$$-//+--"9";";	
 
 )*%r   c                  L    d} t           j                            |           sdS | S )z]
    Return the Debian NVIDIA Maintainers-packaged libdevice location, if it
    exists.
    z&/usr/lib/nvidia-cuda-toolkit/libdeviceN)rJ   r(   rK   )pkg_libdevice_locations    r   r   r      s-    
 F7>>011 t!!r   ) rG   r,   rJ   collectionsr   numba.core.configr   numba.misc.findlibr   r   r   r   r    r$   r)   r2   r4   r8   r;   r>   rB   rD   r   r   r'   r   r:   r=   r   rh   rn   r   r   r   r   <module>ru      s   



 				 				 " " " " " " & & & & & & 2 2 2 2 2 2 2 2 *.v??	! 	! 	!	 	 	    $ $ $        ' ' '
' ' '
	0 	0 	0' ' '' ' '6/ / /) ) )( ( ($
1 
1 
1% % %  6" " " " "r   