o
    ٴiS                  	   @   s  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 d dl	m
Z
 dedB dedB fdd	Zd
ededefddZdedededB fddZdededededB fddZdededededB fddZdededB fddZe jdededB fddZdS )    N)supported_nvidia_headers)get_cuda_home_or_path)find_sub_dirs_all_sitepackages)
IS_WINDOWSpathreturnc                 C   s   | rt jt j| S d S N)osr   normpathabspath)r    r   _/home/kuhnn/.local/lib/python3.10/site-packages/cuda/pathfinder/_headers/find_nvidia_headers.py	_abs_norm   s   r   dirpathbasenamec                 C   s   t jt j| |S r   )r	   r   isfilejoin)r   r   r   r   r   _joined_isfile   s   r   sub_dir
h_basenamec                 C   s.   t t| dD ]}t||r|  S q	d S )N/)r   tuplesplitr   )r   r   hdr_dirr   r   r   _find_under_site_packages   s
   
r   libnameanchor_pointc                 C   s   |g}| dkr| |  | d tjj| }| dkrHtr:tj|dd}tj|d}t||r3|S t||r:|S tj|d}t||rH|S t||rO|S d S )Nnvvmincludecccltargetsx64)appendr	   r   r   r   r   )r   r   r   partsidir
cdir_ctk12
cdir_ctk13cdirr   r   r   _find_based_on_ctk_layout!   s&   





r(   
ctk_layoutc                 C   s   t jd}|s
d S trt j|d}t j|sd S n,|r;tt j|ddd}|s.d S t|dkr6d S |d }nt j|d}t j	|}t
| ||S )NCONDA_PREFIXLibraryr    *r      r   )r	   environgetr   r   r   isdirgloblendirnamer(   )r   r   r)   conda_prefixr   targets_include_pathinclude_pathr   r   r   _find_based_on_conda_layout7   s$   
r7   c                 C   sj   t j|  }t j|  }|D ]}t|| }r|  S qt| |d }r$|S t }|r3t| || }r3|S d S )NT)r   SUPPORTED_HEADERS_CTK&SUPPORTED_SITE_PACKAGE_HEADER_DIRS_CTKr   r7   r   r(   )r   r   candidate_dirsr'   r   	cuda_homeresultr   r   r   _find_ctk_header_directoryO   s   

r=   c                 C   s   | t jv rtt| S t j| }|du rtd| t j| g }|D ]}t|| }r4t|  S q%t	| |d }rAt|S t j
| g }|D ]}tt|ddD ]}t||rdt|    S qUqJdS )a  Locate the header directory for a supported NVIDIA library.

    Args:
        libname (str): The short name of the library whose headers are needed
            (e.g., ``"nvrtc"``, ``"cusolver"``, ``"nvshmem"``).

    Returns:
        str or None: Absolute path to the discovered header directory, or ``None``
        if the headers cannot be found.

    Raises:
        RuntimeError: If ``libname`` is not in the supported set.

    Search order:
        1. **NVIDIA Python wheels**

           - Scan installed distributions (``site-packages``) for header layouts
             shipped in NVIDIA wheels (e.g., ``cuda-toolkit[nvrtc]``).

        2. **Conda environments**

           - Check Conda-style installation prefixes, which use platform-specific
             include directory layouts.

        3. **CUDA Toolkit environment variables**

           - Use ``CUDA_HOME`` or ``CUDA_PATH`` (in that order).
    NzUNKNOWN libname=FT)reverse)r   r8   r   r=   SUPPORTED_HEADERS_NON_CTKr/   RuntimeError*SUPPORTED_SITE_PACKAGE_HEADER_DIRS_NON_CTKr   r7   SUPPORTED_INSTALL_DIRS_NON_CTKsortedr1   r   )r   r   r:   r'   r   r   r   r   find_nvidia_header_directoryb   s(   

rD   )	functoolsr1   r	   cuda.pathfinder._headersr   cuda.pathfinder._utils.env_varsr   $cuda.pathfinder._utils.find_sub_dirsr   %cuda.pathfinder._utils.platform_awarer   strr   boolr   r   r(   r7   r=   cacherD   r   r   r   r   <module>   s   	