
    si?                       S r SSKJr  SSKrSSKrSSKJr  SSKJr  SSK	J
r
JrJrJrJr  SSKJr  SSKJr  S	S
KJr  S	SKJr  SSKJr  SSKJrJrJrJr  SSKJrJ r J!r!J"r"J#r#J$r$J%r%  SSK&J'r'J(r(J)r)J*r*J+r+  \(       a  SSK,J-r-  \.\R^                  \.   -  r0\-\0   r1/ SQr2\" \35      r4Sr5Sr6\Rn                  " SSSSS/\6Q7SS9  S r8S r9S r:\S  5       r;\(       a  S!OS"r<S*S# jr=S$ r>S% r?S+S& jr@\" SSS'S9S( 5       rAS,S) jrBg)-zCommon path utilities.    )annotationsN)cache)	getLogger)abspath
expanduser
expandvarsnormcasesplit)TYPE_CHECKING)urlsplit   )
CondaError)
deprecated   )on_win   )explode_directoriesget_all_directoriesget_leaf_directoriestokenized_startswith)get_major_minor_versionget_python_noarch_target_pathget_python_short_path#get_python_site_packages_short_pathmissing_pyc_filesparse_entry_point_defpyc_path)unix_path_to_winwin_path_backoutwin_path_double_escapewin_path_okwin_path_to_unix)Iterable)r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   z#\./|\.\.|~|/|[a-zA-Z]:[/\\]|\\\\|//)z.jsonz.jlapz	.json.zstz26.9z27.3KNOWN_EXTENSIONS.conda.tar.bz2z4Use `conda.common.path.strip_pkg_extension` instead.)addendumc                F    SU ;   a  g[         R                  " [        U 5      $ )Nz://F)rematchPATH_MATCH_REGEX)values    :lib/python3.13/site-packages/conda/common/path/__init__.pyis_pathr.   d   s    ~88$e,,    c                <    [        [        [        U 5      5      5      $ N)r   r   r   paths    r-   expandr4   j   s    :j./00r/   c                    [         (       a)  [        [        U 5      5      [        [        U5      5      :H  $ [        U 5      [        U5      :H  $ )zB
Examples:
    >>> paths_equal('/a/b/c', '/a/b/c/d/..')
    True

)r   r	   r   )path1path2s     r-   paths_equalr8   n   s9     v'8GEN+CCCu~//r/   c                t   [        U 5      (       a  U $ U R                  S5      (       d  [        SU  S35      e[        U 5      u  pn  nSSKJn  U" U5      nUS;  a  UR                  S5      (       d  SU-   nX#-   $ S	n[        R                  " S
U[        R                  5      (       a  US   S-   USS -   nX#-   $ )zdConvert a file:// URL to a path.

Relative file URLs (i.e. `file:relative/path`) are not supported.
zfile://z6You can only turn absolute file: urls into paths (not )r   )percent_decode) 	localhostz	127.0.0.1z::1z\\z//r<   z^/([a-z])[:|]r   :r   N)	r.   
startswithr   r   urlr;   r)   r*   I)r@   _netlocr3   r;   s        r-   url_to_pathrD   {   s     s||
>>)$$DSEK
 	
 %SMAtQ$$D::  ((F]F =	 88OT244007S=48+D=r/   Scriptsbinc                T    U (       a  U S   U S   s=:X  a  U:X  a   U $   OU $ U U  U 3$ )z

Examples:
    >>> ensure_pad('conda')
    '_conda_'
    >>> ensure_pad('_conda')
    '__conda_'
    >>> ensure_pad('')
    ''

r    )namepads     r-   
ensure_padrL      s=     47d2h-#- .tfSE""r/   c                t    U R                  [        R                  5      (       a  U $ U [        R                  -   $ r1   )endswithossepr2   s    r-   right_pad_os_seprQ      s'    ==((4;dRVVm;r/   c                J    [        U 5      u  pSU;   a  U=(       d    S U4$ U S 4$ )N.)r
   )path_or_urldnfns      r-   split_filenamerW      s-    ;FB"byBJ$A{D.AAr/   c                    SSK Jn  UR                  R                  U 5      =n(       a  U S[	        U5      *  U4$ [
         H,  nU R                  U5      (       d  M  U S[	        U5      *  U4s  $    U S4$ )a  
Split path into (base, extension) for known extensions.

Package extensions are determined dynamically from registered plugins.
Repodata extensions (.json, .jlap, .json.zst) are also recognized.

:param path: Path to split.
:return: Tuple of (base_path, extension) where extension is None if not found.

Examples:
    >>> strip_pkg_extension("/path/_license-1.1-py27_1.tar.bz2")
    ('/path/_license-1.1-py27_1', '.tar.bz2')
    >>> strip_pkg_extension("/path/_license-1.1-py27_1.conda")
    ('/path/_license-1.1-py27_1', '.conda')
    >>> strip_pkg_extension("/path/repodata.json")
    ('/path/repodata', '.json')
    >>> strip_pkg_extension("/path/_license-1.1-py27_1")
    ('/path/_license-1.1-py27_1', None)
r   )contextN)base.contextrY   plugin_managerhas_package_extensionlenKNOWN_REPODATA_EXTENSIONSrN   )r3   rY   exts      r-   strip_pkg_extensionr`      sz    ( ( $$::4@@s@Ks3xi #%%(==3s8)$c)) ) :r/   zNUse `conda.base.context.context.plugin_manager.has_package_extension` instead.c                0    U SS S:H  =(       d    U SS S:H  $ )z
Examples:
    >>> is_package_file("/path/_license-1.1-py27_1.tar.bz2")
    True
    >>> is_package_file("/path/_license-1.1-py27_1.conda")
    True
    >>> is_package_file("/path/_license-1.1-py27_1")
    False
iNr%   ir&   rI   r2   s    r-   is_package_filerb      s%    " 9 ;DI$;;r/   c                    U c  g [        U [        [        R                  45      (       a  [        R                  R                  U 5      $ [        S U  5       5      $ )Nc              3  `   #    U  H$  n[         R                  R                  U5      v   M&     g 7fr1   )rO   r3   normpath).0r3   s     r-   	<genexpr> path_identity.<locals>.<genexpr>   s"     >RWW%%d++s   ,.)
isinstancestrrO   PathLiker3   re   tuple)pathss    r-   path_identityrn      sF    }	EC-	.	.ww&&>>>>r/   )rB   )r3   rj   returnztuple[str, str | None])rm   zPathType | PathsType | Nonero   zstr | tuple[str, ...] | None)C__doc__
__future__r   rO   r)   	functoolsr   loggingr   os.pathr   r   r   r	   r
   typingr   urllib.parser   r<   r   deprecationsr   compatr   directoriesr   r   r   r   pythonr   r   r   r   r   r   r   windowsr   r   r    r!   r"   collections.abcr#   rj   rk   PathType	PathsType__all____name__logr+   r^   constantr.   r4   r8   rD   BIN_DIRECTORYrL   rQ   rW   r`   rb   rn   rI   r/   r-   <module>r      s6    " 	 	    ! !  &      (R[[%%H"I&      

z656C-1
0  6 $	#$<B
@ 

]
<
<?r/   