
    WiS              	          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z  dedz  fdZd	ed
edefdZdedededz  fdZdededededz  fdZdededededz  fdZdededz  fdZe j&                  dededz  fd       Zy)    N)supported_nvidia_headers)get_cuda_home_or_path)find_sub_dirs_all_sitepackages)
IS_WINDOWSpathreturnc                     | r<t         j                  j                  t         j                  j                  |             S y N)osr   normpathabspath)r   s    x/home/sietch6/trending-topics-pipeline/venv/lib/python3.12/site-packages/cuda/pathfinder/_headers/find_nvidia_headers.py	_abs_normr      s*    ww 566    dirpathbasenamec                 |    t         j                  j                  t         j                  j                  | |            S r
   )r   r   isfilejoin)r   r   s     r   _joined_isfiler      s$    77>>"'',,w9::r   sub_dir
h_basenamec                 t    t        t        | j                  d                  D ]  }t        ||      s|c S  y )N/)r   tuplesplitr   )r   r   hdr_dirs      r   _find_under_site_packagesr      s:     2%c8J2KL ':.N r   libnameanchor_pointc                    |g}| dk(  r|j                  |        |j                  d       t        j                  j                  | }| dk(  rt        r]t        j                  j                  |dd      }t        j                  j                  |d      }t        ||      r|S t        ||      r|S t        j                  j                  |d      }t        ||      r|S t        ||      r|S y )Nnvvmincludecccltargetsx64)appendr   r   r   r   r   )r   r   r    partsidir
cdir_ctk12
cdir_ctk13cdirs           r   _find_based_on_ctk_layoutr-   !   s    NE&W	LL77<<D&dIu=Jj&9Jj*5!!j*5!!ww||D&)$
+KdJ'r   
ctk_layoutc                    t         j                  j                  d      }|sy t        r@t         j                  j                  |d      }t         j                  j                  |      sy |rMt        j                  t         j                  j                  |ddd            }|sy t        |      dk7  ry |d   }n t         j                  j                  |d      }t         j                  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_paths          r   _find_based_on_conda_layoutr=   7   s    ::>>.1Lww||L)<ww}}\*#'99RWW\\,	SVXa-b#c ''(A- /2L77<<i@Lww|4$Wj,GGr   c                     t         j                  |    }t         j                  |    }|D ]  }t        ||      x}s|c S  t	        | |d      x}r|S t               }|rt        | ||      x}r|S y )NT)r   SUPPORTED_HEADERS_CTK&SUPPORTED_SITE_PACKAGE_HEADER_DIRS_CTKr   r=   r   r-   )r   r   candidate_dirsr,   r   	cuda_homeresults          r   _find_ctk_header_directoryrD   O   s    )??HJ-TTU\]N /jAA7AN .gz4HHwH%'I.w
INN6NMr   c                 4   | t         j                  v rt        t        |             S t         j                  j                  |       }|t        d|       t         j                  j                  | g       }|D ]  }t        ||      x}st        |      c S  t        | |d      x}rt        |      S t         j                  j                  | g       }|D ]B  }t        t        j                  |      d      D ]  }t        ||      st        |      c c S  D y)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   r?   r   rD   SUPPORTED_HEADERS_NON_CTKr5   RuntimeError*SUPPORTED_SITE_PACKAGE_HEADER_DIRS_NON_CTKr   r=   SUPPORTED_INSTALL_DIRS_NON_CTKsortedr7   r   )r   r   rA   r,   r   s        r   find_nvidia_header_directoryrL   b   s   > *@@@3G<==)CCGGPJ.gZ011-XX\\]dfhiN &/jAA7AW%%& .gz5IIwI!!-LLPPQXZ\]N *diiot< 	*Ggz2 ))	**
 r   )	functoolsr7   r   cuda.pathfinder._headersr   cuda.pathfinder._utils.env_varsr   $cuda.pathfinder._utils.find_sub_dirsr   %cuda.pathfinder._utils.platform_awarer   strr   boolr   r   r-   r=   rD   cacherL    r   r   <module>rV      s     	 = A O <C$J 3: ;C ;3 ;4 ;s  d
 s  3 SVY]S] ,H H# H4 HTWZ^T^ H0 d
 & 4# 4#* 4 4r   