a
    
d                     @   s   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rddZd	Znejd
krxdZdZndZdZdd Zdd ZdddZdd Zdd ZdddZd 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                  C   s   t  } | d j}|S )N	libdevice)r   info)dpaths r   `/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/numba/cuda/cudadrv/libs.pyget_libdevice!   s    
r   c                  C   s8   t t d} |  W  d    S 1 s*0    Y  d S )Nrb)openr   read)Zbcfiler   r   r   open_libdevice'   s    r   Fc                 C   sd   | dkrt  d jptd S |r$dnd}t  | j}t| |||d}|rLtnt}|r\t|S ||  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
candidatesZnamepatternr   r   r   get_cudalib,   s    r    c                 C   s   t | }t|S )N)r    ctypesCDLLr   pathr   r   r   open_cudalib>   s    r%   c                 C   s*   t | dd}tj|s&t| dd S )NTr   z
 not found)r    osr$   isfileFileNotFoundErrorr#   r   r   r   check_static_libC   s    r*   c                 C   sD   | dkrt  d jS | dkr(t  d jS |r0dnd}t  | jS d S )Nr   r	   r   r   )r   Zby)r   r   r   r   r   r   _get_source_variableI   s    r+   Tc                 C   s6  d}z^t  \}}d|}td| d td|  tddd t||\}}td|  W n6 ty } ztd	|  d
}W Y d}~n
d}~0 0 d }	|	D ]}
t|
| }td|
t|
 |rtd| ntdt	j
| | dtjfv rz tddd t|
 td W q tyR } z td|
|f  d
}W Y d}~qd}~0 0 qd}
t|
| d
d}td|
t|
d
d |rtd| ntdt	j
| zt|
 W n: ty } z td|
|f  d
}W Y d}~n
d}~0 0 td}td|  td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 %s:
%sZ	cudadevrtr&   z	ERROR: failed to find %s:
%sr	   zFinding libdevice from z	ERROR: can't open libdevice)r   joinprintr   r   splitr    formatr+   r'   r$   basenamesysr   r%   OSErrorr*   r)   r   )	_platformZprint_pathsfailedZdlloaderr   	locationsdllr$   eZlibsr   wherer   r   r   testS   sb    




r:   )NF)F)NT)__doc__r'   r2   r!   Znumba.misc.findlibr   Znumba.cuda.cuda_pathsr   Znumba.cuda.cudadrv.driverr   r   Znumba.cuda.cudadrv.errorr   r   r   r   r   r   r    r%   r*   r+   r:   r   r   r   r   <module>   s,   




