o
    ç0 iu  ã                   @   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r2dZd	Znejd
kr<d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„ 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                  C   s   t ƒ } | d j}|S )NÚ	libdevice)r   Úinfo)ÚdÚpaths© r   úc/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/numba/cuda/cudadrv/libs.pyÚget_libdevice"   s   
r   c                  C   s8   t tƒ dƒ} |  ¡ W  d   ƒ S 1 sw   Y  d S )NÚrb)Úopenr   Úread)Zbcfiler   r   r   Úopen_libdevice(   s   $ÿr   Fc                 C   sb   | dkrt ƒ d jptd S |rdnd}t ƒ | j}t| ||d}|r%t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©Ústatic)r   r
   Ú_dllnamepatternr   Ú_staticnamepatternÚmax)Úlibr   Ú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 j | ¡st| › dƒ‚d S )Nz
 not found)Úosr#   ÚisfileÚFileNotFoundError)r#   r   r   r   Úcheck_static_libD   s   ÿr(   c                 C   s@   | 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   Zby)r   r   r   r   r   r   Ú_get_source_variableI   s   r)   c                  C   s  d} z6t ƒ \}}tdƒ |D ]	}td|› ƒ qtd|› ƒ tddd t||ƒ\}}tdƒ td	|› ƒ W n tyS } ztd
|› ƒ d} W Y d}~nd}~ww tjdkr²| s²t ¡ }tj 	tjj
d|› d¡}zt|ƒ}	|	 ¡ }
W d  ƒ n1 sw   Y  W n ty–   td|› dƒ Y nw tdd„ |
 ¡ D ƒƒ}tdƒ |D ]	}td|› ƒ q¨d ¡ }|D ]A}t|ƒ}td |t|ƒ¡ƒ td|ƒ ztddd t|ƒ tdƒ W q¸ tyù } ztd||f ƒ d} W Y d}~q¸d}~ww d}t|dd}td |t|dd¡ƒ td|ƒ ztddd t|ƒ tdƒ W n ty@ } ztd||f ƒ d} W Y d}~nd}~ww tdƒ}td |› ƒ tƒ }td|ƒ ztddd t|ƒ tdƒ W |  S  ty… } ztd||f ƒ d} W Y d}~|  S d}~w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Úmapsz	ERROR: Could not open z) to determine absolute path to libcuda.soc                 s   s    | ]	}d |v r|V  qdS )z
libcuda.soNr   )Ú.0Úsr   r   r   Ú	<genexpr>   s   € ztest.<locals>.<genexpr>z	Mapped libcuda.so paths:z		znvvm nvrtc cudartzFinding {} from {}z	Located atz	Trying to open libraryz	ERROR: failed to open %s:
%sZ	cudadevrtr   z	Checking libraryz	ERROR: failed to find %s:
%sr	   zFinding libdevice from )r   Úprintr   r   ÚsysÚplatformr%   Úgetpidr#   ÚjoinÚsepr   r   ÚOSErrorÚsetÚsplitr    Úformatr)   r$   r(   r'   r   )ÚfailedZdlloaderr   ÚlocationZdllr#   ÚeÚpidZmapsfileÚfr.   Ú	locationsZlibsr   Úwherer   r   r   ÚtestS   s–   
€þ


ÿ€ü	
€þ
ÿ
€þ

ü€ürC   )F)Ú__doc__r%   r3   r!   Znumba.misc.findlibr   Znumba.cuda.cuda_pathsr   Znumba.cuda.cudadrv.driverr   r   Znumba.cuda.cudadrv.errorr   r4   r   r   r   r   r    r$   r(   r)   rC   r   r   r   r   Ú<module>   s.    




