§
    1@Äj-  ã                   óà   — 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 )z»Find 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      úFC:\Projects\Historical\venv\Lib\site-packages\numba/cuda/cuda_paths.pyÚ_find_valid_pathr      s7   € ð
 ð !ð !‰ˆˆDØÐØ�t�8ˆOˆOˆOð ð !Ð ó    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   € à	�m™oœoÐ.Ø	-Õ/GÑ/IÔ/IÐJØ	•m F¨KÑ8Ô8Ð9Ø	•> &¨+Ñ6Ô6Ð7Ø	Õ3Ñ5Ô5Ð6ð€Gõ " 'Ñ*Ô*�J€BˆØˆ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   € à	�m™oœoÐ.Ø	-Õ/BÑ/DÔ/DÐEØ	•m¥]¡_¤_Ð5Ð6Ø	•>¥=¡?¤?Ð3Ð4ð	€Gõ   Ñ(Ô(�H€BˆØˆtˆ8€Or   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   € Ý-Ñ/Ô/�J€Bˆà
#€CÝ�2œ: c™?œ?¨FÑ3Ô3€Jå
ˆj $Ð
'Ñ
'Ô
'€CÝ˜2˜sÑ#Ô#Ð#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   € à	�m™oœoÐ.Ø	-Õ/EÑ/GÔ/GÐHØ	•m¥M¡O¤OÑ4Ô4Ð5Ø	•>¥-¡/¤/Ñ2Ô2Ð3ð	€Gõ " 'Ñ*Ô*�J€BˆØˆ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   € à	�m™oœoÐ.Ø	-Õ/LÑ/NÔ/NÐOØ	•mÕ%CÑ%EÔ%EÐFÐGØ	•>¥-¡/¤/Ñ2Ô2Ð3ð	€Gõ " 'Ñ*Ô*�J€BˆØˆvˆ:Ðr   c                  óD   — t          ¦   «         \  } }t          | |¦  «        S ©N)r;   r   ©r	   r   s     r   Ú_get_cudalib_dirrB   e   s!   € Ý/Ñ1Ô1�J€BˆÝ˜2˜vÑ&Ô&Ð&r   c                  óD   — t          ¦   «         \  } }t          | |¦  «        S r@   )r>   r   rA   s     r   Ú_get_static_cudalib_dirrD   j   s!   € Ý6Ñ8Ô8�J€BˆÝ˜2˜vÑ&Ô&Ð&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—>’>¥"¤'§,¢,­s¬z¸<Ñ"HÔ"HÑIÔI€LØð Øˆå�VÑÔ€EØð ØˆåŒ7�?Š?�3˜u™:œ:Ñ&Ô&Ð&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—>’>¥"¤'§,¢,­s¬z¸<Ñ"HÔ"HÑIÔI€LØð Øˆõ ŒW�\Š\�#œ* f­m©o¬oÑ>Ô>€FÝŒ7�>Š>˜&Ñ!Ô!ð ­¬¯ª°vÑ)>Ô)>ð å”—’�cœj¨)°V½]¹_¼_ÑMÔMˆÝŒw�~Š~˜fÑ%Ô%ð 	­R¬W¯]ª]¸6Ñ-BÔ-Bð 	ð ˆFå�V FÐ+Ñ+Ô+€EØð ØˆåŒ7�?Š?�3˜u™:œ:Ñ&Ô&Ð&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Øð ØˆÝŒg�oŠo�bœgŸošo¨hÑ7Ô7Ñ8Ô8€GÝÐ)ˆUˆU E€FÝŒ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Øð Øˆåð �Y hÐ.Ð.àˆˆð ˆåŒg�oŠo�bœgŸošo¨hÑ7Ô7Ñ8Ô8€GÝŒ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ØÐå”J—N’N ;Ñ/Ô/ˆ	ØÐÝŒ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   € Ý&Ñ(Ô(�H€BˆÝ˜& $Ñ'Ô'€JØ(Ð2�3ˆz‰?Œ?ˆ?¨d€DÝ˜2˜tÑ$Ô$Ð$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   