Ë
    òT•j×D  ã                   ój  — d Z dZdZdZdZdZdZdZdZddl	Z	ddl
Z
ddlZddlZdd	l­ g d
¢Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zej(                  j                   e_         d„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdZdadad„ Z 	 ddl!m"Z" d„ Z#d„ Z%dd œd!„Z&d"„ Z'e
jP                  d#k(  Z)d&d$„Z*d%„ Z+y# e$$ r d„ Z#Y Œ-w xY w)'aÙ  Common operations on Posix pathnames.

Instead of importing this module directly, import os and refer to
this module as os.path.  The "os.path" name is an alias for this
module on Posix systems; on other systems (e.g. Windows),
os.path provides the same operations in a manner specific to that
platform, and is an alias to another module (e.g. ntpath).

Some of this can actually be useful on non-Posix systems too, e.g.
for manipulation of the pathname component of URLs.
ú.ú..ú/ú:z/bin:/usr/binNz	/dev/nullé    )Ú*))ÚnormcaseÚisabsÚjoinÚ
splitdriveÚ	splitrootÚsplitÚsplitextÚbasenameÚdirnameÚcommonprefixÚgetsizeÚgetmtimeÚgetatimeÚgetctimeÚislinkÚexistsÚlexistsÚisdirÚisfileÚismountÚ
expanduserÚ
expandvarsÚnormpathÚabspathÚsamefileÚsameopenfileÚsamestatÚcurdirÚpardirÚsepÚpathsepÚdefpathÚaltsepÚextsepÚdevnullÚrealpathÚsupports_unicode_filenamesÚrelpathÚ
commonpathÚ
isjunctionÚALLOW_MISSINGc                 ó&   — t        | t        «      ryy)Nó   /r   )Ú
isinstanceÚbytes©Úpaths    ú /usr/lib/python3.12/posixpath.pyÚ_get_sepr8   )   s   € Ü�$œÔØàó    c                 ó,   — t        j                  | «      S )z6Normalize case of pathname.  Has no effect under Posix©ÚosÚfspath)Úss    r7   r   r   4   s   € ä�9‰9�Q‹<Ðr9   c                 ód   — t        j                  | «      } t        | «      }| j                  |«      S )zTest whether a path is absolute)r<   r=   r8   Ú
startswith)r>   r%   s     r7   r	   r	   <   s'   € ä
�	‰	�!‹€AÜ
�1‹+€CØ�<‰<˜ÓÐr9   c                 ój  — t        j                  | «      } t        | «      }| }	 |s|dd |z    t        t         j                  |«      D ]7  }|j	                  |«      r|}Œ|r|j                  |«      r||z  }Œ0|||z   z  }Œ9 	 |S # t        t        t        f$ r t        j                  d| g|¢­Ž  ‚ w xY w)zæJoin two or more pathname components, inserting '/' as needed.
    If any component is an absolute path, all previous path components
    will be discarded.  An empty last part will result in a path that
    ends with a separator.Nr   r
   )r<   r=   r8   Úmapr@   ÚendswithÚ	TypeErrorÚAttributeErrorÚBytesWarningÚgenericpathÚ_check_arg_types)ÚaÚpr%   r6   Úbs        r7   r
   r
   G   sº   € ô
 	�	‰	�!‹€AÜ
�1‹+€CØ€DðÙØ��!ˆH�sŠNÜ”R—Y‘Y Ó"ò 	 ˆAØ�|‰|˜CÔ Ø‘Ù˜TŸ]™]¨3Ô/Ø˜‘	‘à˜˜a™‘‘ñ	 ð €Køô ”~¤|Ð4ò Ü×$Ñ$ V¨QÐ3°Ó3Øðús   ¤AB Â-B2c                 óÎ   — t        j                  | «      } t        | «      }| j                  |«      dz   }| d| | |d }}|r"||t	        |«      z  k7  r|j                  |«      }||fS )z€Split a pathname.  Returns tuple "(head, tail)" where "tail" is
    everything after the final slash.  Either part may be empty.é   N©r<   r=   r8   ÚrfindÚlenÚrstrip)rJ   r%   ÚiÚheadÚtails        r7   r   r   d   sk   € ô 	�	‰	�!‹€AÜ
�1‹+€CØ	�‰�‹�qÑ€AØ�2�A�˜˜!˜"˜ˆ$€DÙ�˜œC ›I™Ò%Ø�{‰{˜3ÓˆØ�ˆ:Ðr9   c                 óŽ   — t        j                  | «      } t        | t        «      rd}d}nd}d}t	        j
                  | |d |«      S )Nr2   ó   .r   r   )r<   r=   r3   r4   rG   Ú	_splitext)rJ   r%   r)   s      r7   r   r   u   sD   € Ü
�	‰	�!‹€AÜ�!”UÔØˆØ‰àˆØˆÜ× Ñ   C¨¨vÓ6Ð6r9   c                 ó:   — t        j                  | «      } | dd | fS )zJSplit a pathname into drive and path. On Posix, drive is always
    empty.Nr   r;   )rJ   s    r7   r   r   ƒ   s    € ô 	�	‰	�!‹€AØˆRˆaˆ5�!ˆ8€Or9   c                 ó¾   — t        j                  | «      } t        | t        «      rd}d}nd}d}| dd |k7  r||| fS | dd |k7  s| dd |k(  r||| dd fS || dd | dd fS )	a¥  Split a pathname into drive, root and tail. On Posix, drive is always
    empty; the root may be empty, a single slash, or two slashes. The tail
    contains anything after the root. For example:

        splitroot('foo/bar') == ('', '', 'foo/bar')
        splitroot('/foo/bar') == ('', '/', 'foo/bar')
        splitroot('//foo/bar') == ('', '//', 'foo/bar')
        splitroot('///foo/bar') == ('', '/', '//foo/bar')
    r2   r9   r   Ú NrM   é   é   )r<   r=   r3   r4   )rJ   r%   Úemptys      r7   r   r   Š   s�   € ô 	�	‰	�!‹€AÜ�!”UÔØˆØ‰àˆØˆØˆˆ!€u�‚|à�e˜QˆÐØ	
ˆ1ˆQˆ�3Š˜!˜A˜a˜& Cš-à�c˜1˜Q˜R˜5Ð Ð ð �a˜˜�e˜Q˜q˜r˜UÐ"Ð"r9   c                 ót   — t        j                  | «      } t        | «      }| j                  |«      dz   }| |d S )z)Returns the final component of a pathnamerM   N)r<   r=   r8   rO   )rJ   r%   rR   s      r7   r   r   ©   s5   € ä
�	‰	�!‹€AÜ
�1‹+€CØ	�‰�‹�qÑ€AØˆQˆRˆ5€Lr9   c                 óÀ   — t        j                  | «      } t        | «      }| j                  |«      dz   }| d| }|r"||t	        |«      z  k7  r|j                  |«      }|S )z-Returns the directory component of a pathnamerM   NrN   )rJ   r%   rR   rS   s       r7   r   r   ³   sZ   € ä
�	‰	�!‹€AÜ
�1‹+€CØ	�‰�‹�qÑ€AØˆRˆaˆ5€DÙ�˜œC ›I™Ò%Ø�{‰{˜3ÓˆØ€Kr9   c                 ó.   — t        j                  | «       y)zQTest whether a path is a junction
    Junctions are not a part of posix semanticsFr;   r5   s    r7   r/   r/   À   s   € ô ‡I�Iˆd„OØr9   c                 óZ   — 	 t        j                  | «       y# t        t        f$ r Y yw xY w)zCTest whether a path exists.  Returns True for broken symbolic linksFT)r<   ÚlstatÚOSErrorÚ
ValueErrorr5   s    r7   r   r   É   s0   € ðÜ
�‰�Œð øô ”ZÐ ò Ùðús   ‚ ˜*©*c                 óú  — 	 t        j                  | «      }t        j                  |j                  «      ryt        j                  | «      } t        | t        «      rt        | d«      }nt        | d«      }t        |«      }	 t        j                  |«      }|j                  }|j                  }||k7  ry|j                  }|j                  }||k(  ryy# t
        t        f$ r Y yw xY w# t
        t        f$ r Y yw xY w)z$Test whether a path is a mount pointFó   ..r   T)r<   rb   ÚstatÚS_ISLNKÚst_moderc   rd   r=   r3   r4   r
   r+   Úst_devÚst_ino)r6   Ús1ÚparentÚs2Údev1Údev2Úino1Úino2s           r7   r   r   Õ   sã   € ðÜ�X‰X�d‹^ˆô �<‰<˜Ÿ
™
Ô#Øä�9‰9�T‹?€DÜ�$œÔÜ�d˜EÓ"‰ä�d˜DÓ!ˆÜ�fÓ€FðÜ�X‰X�fÓˆð �9‰9€DØ�9‰9€DØˆt‚|ØØ�9‰9€DØ�9‰9€DØˆt‚|ØØøô7 ”ZÐ ò áðûô  ”ZÐ ò Ùðús#   ‚C ÂC( ÃC%Ã$C%Ã(C:Ã9C:c                 ó`  — t        j                  | «      } t        | t        «      rd}nd}| j	                  |«      s| S t        | «      }| j                  |d«      }|dk  rt        | «      }|dk(  rZdt         j                  vr4	 ddl	}	 |j                  t        j                  «       «      j                  }nXt         j                  d   }nD	 ddl	}| d| }t        |t        «      rt        |d«      }	 |j!                  |«      }|j                  }|€t"        j$                  dk(  r| S t        | t        «      rt        j&                  |«      }d	}nd
}|j)                  |«      }|| |d z   xs |S # t        $ r | cY S w xY w# t        $ r | cY S w xY w# t        $ r | cY S w xY w# t        $ r | cY S w xY w)zOExpand ~ and ~user constructions.  If user or $HOME is unknown,
    do nothing.ó   ~ú~rM   r   ÚHOMENÚASCIIÚvxworksr2   r   )r<   r=   r3   r4   r@   r8   ÚfindrP   ÚenvironÚpwdÚImportErrorÚgetpwuidÚgetuidÚpw_dirÚKeyErrorÚstrÚgetpwnamÚsysÚplatformÚfsencoderQ   )	r6   Útilder%   rR   r{   ÚuserhomeÚnameÚpwentÚroots	            r7   r   r      s¨  € ô �9‰9�T‹?€DÜ�$œÔØ‰àˆØ�?‰?˜5Ô!ØˆÜ
�4‹.€CØ�	‰	�#�qÓ€AØˆ1‚uÜ�‹IˆØˆA‚vØœŸ™Ñ#ðÛðØŸ<™<¬¯	©	«Ó4×;Ñ;‘ô —z‘z &Ñ)‰Hð	Ûð �A�aˆyˆÜ�dœEÔ"Ü�t˜WÓ%ˆDð	Ø—L‘L Ó&ˆEð
 —<‘<ˆàÐœCŸL™L¨IÒ5ØˆÜ�$œÔÜ—;‘;˜xÓ(ˆØ‰àˆØ�‰˜tÓ$€HØ�t˜A˜B�xÑÒ( DÐ(øôI ò à’ðûô
 ò ð ’ðûô ò 	àŠKð	ûô ò 	ð ŠKð	úsH   ÂE, Â-E= ÃF Ã1F Å,E:Å9E:Å=FÆ
FÆFÆFÆF-Æ,F-z\$(\w+|\{[^}]*\}?)c                 óâ  ‡‡‡— t        j                  | «      } t        | t        «      rdd| vr| S t        s<ddl}|j                  t        j                  «       |j                  «      j                  at        }dŠdŠt        t         dd«      ŠnTd| vr| S t        s.ddl}|j                  t        |j                  «      j                  at        }dŠd	Št         j                  Šˆˆˆfd
„} ||| «      S )zZExpand shell variables of form $var and ${var}.  Unknown variables
    are left unchanged.ó   $r   Nó   {ó   }Úenvironbú$ú{ú}c                 ó  •— | d   }|j                  ‰«      r|j                  ‰«      s| d   S |dd }	 ‰€;t        j                  t        j                  t        j
                  |«         «      }|S ‰|   }	 |S # t        $ r | d   cY S w xY w)NrM   r   éÿÿÿÿ)r@   rC   r<   r…   rz   Úfsdecoder€   )Úmrˆ   ÚvalueÚendrz   Ústarts      €€€r7   Úreplzexpandvars.<locals>.repl[  s•   ø€ Ø�‰tˆØ�?‰?˜5Ô!Ø—=‘= Ô%Ø˜‘t�Ø˜˜"�:ˆDð	ØˆÜŸ™¤B§J¡J¬r¯{©{¸4Ó/@Ñ$AÓB�ð ˆLð	   ™‘ð ˆLøô ò 	Ø�Q‘4ŠKð	ús   ´;A9 Á1A9 Á9B
Â	B
)r<   r=   r3   r4   Ú_varsubbÚreÚcompileÚ_varpatternÚencoderw   ÚsubÚgetattrÚ_varsubrz   )r6   rœ   r    rš   r˜   rz   r™   s       @@@r7   r   r   A  sÆ   ú€ ô �9‰9�T‹?€Dä�$œÔØ�tÑØˆKÝÛØ—z‘z¤+×"4Ñ"4Ó"6¸¿¹ÓA×EÑEˆHÜˆØˆØˆÜœ"˜j¨$Ó/‰à�d‰?ØˆKÝÛØ—j‘j¤¨b¯h©hÓ7×;Ñ;ˆGÜˆØˆØˆÜ—*‘*ˆöñ  ˆt�T‹?Ðr9   )Ú_path_normpathc                 óÔ   — t        j                  | «      } t        | t        «      r5t        j                  t        t        j                  | «      «      «      xs dS t        | «      xs dS )ú0Normalize path, eliminating double slashes, etc.rV   r   )r<   r=   r3   r4   r…   r£   r•   r5   s    r7   r   r   •  sK   € ä�y‰y˜‹ˆÜ�dœEÔ"Ü—;‘;œ~¬b¯k©k¸$Ó.?Ó@ÓAÒIÀTÐIÜ˜dÓ#Ò* sÐ*r9   c                 ó„  — t        j                  | «      } t        | t        «      r	d}d}d}d}nd}d}d}d}| |k(  r|S t	        | «      \  }}} | j                  |«      }g }|D ]A  }	|	||fv rŒ
|	|k7  s|s|r
|r|d	   |k(  r|j                  |	«       Œ/|sŒ2|j                  «        ŒC |}||j                  |«      z   } | xs |S )
r¥   r2   r9   rV   rf   r   rZ   r   r   r”   )	r<   r=   r3   r4   r   r   ÚappendÚpopr
   )
r6   r%   r]   ÚdotÚdotdotÚ_Úinitial_slashesÚcompsÚ	new_compsÚcomps
             r7   r   r   v  sã   € ä�y‰y˜‹ˆÜ�dœEÔ"ØˆCØˆEØˆCØ‰FàˆCØˆEØˆCØˆFØ�5Š=ØˆJÜ#,¨T£?Ñ ˆˆ?˜DØ—
‘
˜3“ˆØˆ	Øò 	 ˆDØ˜˜s�|Ñ#ØØ˜’¡¹yÙ 	¨"¡°Ò 7Ø× Ñ  Õ&ÚØ—‘•ð	 ð ˆØ §¡¨%£Ñ0ˆØŠ{�sÐr9   c                 óâ   — t        j                  | «      } t        | «      sEt        | t        «      rt        j
                  «       }nt        j                  «       }t        || «      } t        | «      S )zReturn an absolute path.)	r<   r=   r	   r3   r4   ÚgetcwdbÚgetcwdr
   r   )r6   Úcwds     r7   r   r   �  sK   € ä�9‰9�T‹?€DÜ�Œ;Ü�dœEÔ"Ü—*‘*“,‰Cä—)‘)“+ˆCÜ�C˜‹ˆÜ�D‹>Ðr9   F)Ústrictc                ój   — t        j                  | «      } t        | dd | |i «      \  }}t        |«      S )zlReturn the canonical path of the specified filename, eliminating any
symbolic links encountered in the path.Nr   )r<   r=   Ú_joinrealpathr   )Úfilenamer´   r6   Úoks       r7   r+   r+   ¬  s6   € ô �y‰y˜Ó"€HÜ˜X b q˜\¨8°V¸RÓ@�H€Dˆ"Ü�4‹=Ðr9   c                 óä  — t        | t        «      rd}d}d}nd}d}d}t        j                  }|t        u rt
        }n|rd}nt        }d }	t        |«      r|dd  }|} |�r|j                  |«      \  }
}}|
r|
|k(  rŒ |
|k(  r&| r!t        | «      \  } }
|
|k(  rt        | ||«      } n|} ŒKt        | |
«      }	 t        j                  |«      }t        j                  |j                  «      }|s|} Œ‘||v r.||   } | �Œ�|rt        j                  |«       nt        ||«      d	fS d ||<   t        | t        j                   |«      ||«      \  } }|st        | |«      d	fS | ||<   |r�Œ| d
fS # |$ r d	}Y Œ†w xY w)Nr2   rV   rf   r   r   r   © rM   FT)r3   r4   r<   r²   r0   ÚFileNotFoundErrorrc   r	   Ú	partitionr   r
   rb   rg   rh   ri   r¶   Úreadlink)r6   Úrestr´   Úseenr%   r#   r$   r²   Úignored_errorÚmaxlinksrˆ   r«   ÚnewpathÚstÚis_linkr¸   s                   r7   r¶   r¶   µ  s§  € Ü�$œÔØˆØˆØ‰àˆØˆØˆÜ—‘ˆØ”ÑÜ)‰Ù	Ø‰äˆà€HäˆT„{Ø�A�BˆxˆØˆâ
ØŸ™ sÓ+‰ˆˆa�Ù�t˜v’~àØ�6Š>áÜ" 4›[‘
��dØ˜6’>Ü  f¨fÓ5‘Dà�ØÜ�t˜TÓ"ˆð	/Ü—‘˜'Ó"ˆBô —l‘l 2§:¡:Ó.ˆGÙØˆDØà�d‰?à˜‘=ˆDØÐàáä—‘˜Õ ô ˜G TÓ*¨EÐ1Ð1ØˆˆW‰Ü  ¤r§{¡{°7Ó';¸VÀTÓJ‰ˆˆbÙÜ˜˜dÓ# UÐ*Ð*ØˆˆW‰óU ðX �ˆ:Ðøð7 ò 	ØŠGð	ús   Â4E% Å%E/Å.E/Údarwinc                 óP  — | st        d«      ‚t        j                  | «      } t        | t        «      rd}d}d}nd}d}d}|€|}nt        j                  |«      }	 t        |«      j                  |«      D �cg c]  }|sŒ|‘Œ	 }}t        | «      j                  |«      D �cg c]  }|sŒ|‘Œ	 }}t        t        ||g«      «      }|gt        |«      |z
  z  ||d z   }	|	s|S t        |	Ž S c c}w c c}w # t        t        t        t        f$ r t        j                  d	| |«       ‚ w xY w)
z#Return a relative version of a pathzno path specifiedrV   r2   rf   r   r   r   Nr-   )rd   r<   r=   r3   r4   r   r   rP   r   r
   rD   rE   rF   ÚDeprecationWarningrG   rH   )
r6   r™   r#   r%   r$   ÚxÚ
start_listÚ	path_listrR   Úrel_lists
             r7   r-   r-   ý  s,  € ñ ÜÐ,Ó-Ð-ä�9‰9�T‹?€DÜ�$œÔØˆØˆØ‰àˆØˆØˆà€}Ø‰ä—	‘	˜%Ó ˆðÜ!(¨£×!5Ñ!5°cÓ!:Ö@˜Aºa’aÐ@ˆ
Ð@Ü '¨£× 3Ñ 3°CÓ 8Ö>˜1ºA’QÐ>ˆ	Ð>ä”˜j¨)Ð4Ó5Ó6ˆà�8œs :›¨qÑ0Ñ1°I¸a¸b°MÑAˆÙØˆMÜ�XˆÐùò AùÚ>øô ”~¤|Ô5GÐHò Ü×$Ñ$ Y°°eÔ<Øðús<   ÁC3 Á7C)Á?C)ÂC3 Â!C.Â)C.Â-3C3 Ã!C3 Ã)
C3 Ã32D%c           	      ó¬  ‡— | st        d«      ‚t        t        t        j                  | «      «      } t        | d   t        «      rdŠd}ndŠd}	 | D �cg c]  }|j                  ‰«      ‘Œ }}	 t        ˆfd„| D «       «      \  }|D ��cg c]  }|D �cg c]  }|sŒ||k7  sŒ|‘Œ c}‘Œ }}}t        |«      }t        |«      }|}	t        |«      D ]  \  }
}|||
   k7  sŒ|d	|
 }	 n |r‰n‰d	d }|‰j                  |	«      z   S c c}w # t         $ r t        d«      d	‚w xY wc c}w c c}}w # t        t        f$ r t        j                   d
g| ¢­Ž  ‚ w xY w)zDGiven a sequence of path names, returns the longest common sub-path.z%commonpath() arg is an empty sequencer   r2   rV   r   r   c              3   ó.   •K  — | ]  }|d d ‰k(  –— Œ y ­w)NrM   rº   )Ú.0rJ   r%   s     €r7   ú	<genexpr>zcommonpath.<locals>.<genexpr>8  s   øè ø€ Ò5¨!˜˜2˜A˜ #�Ñ5ùs   ƒz%Can't mix absolute and relative pathsNr.   )rd   ÚtuplerB   r<   r=   r3   r4   r   ÚsetÚminÚmaxÚ	enumerater
   rD   rE   rG   rH   )Úpathsr#   r6   Úsplit_pathsr	   r>   Úcrl   rn   ÚcommonrR   Úprefixr%   s               @r7   r.   r.   &  st  ø€ ñ ÜÐ@ÓAÐAä”#”b—i‘i Ó'Ó(€EÜ�%˜‘(œEÔ"ØˆØ‰àˆØˆðØ38Ö9¨4�t—z‘z #•Ð9ˆÐ9ð	PÜÓ5¨uÔ5Ó5‰FˆEð EP×P¸q 1Ö:˜aª¨a°6«kšÔ:ÐPˆÑPÜ�ÓˆÜ�ÓˆØˆÜ˜b“Mò 	‰DˆAˆqØ�B�q‘E‹zØ˜B˜Q˜�Ùð	ñ
 ‘ 3 r¨ 7ˆØ˜Ÿ™ Ó(Ñ(Ð(ùò# :øô ò 	PÜÐDÓEÈ4ÐOð	Püò ;ùÓPøô ”~Ð&ò Ü×$Ñ$ \Ð:°EÓ:Øðúsl   ÁD, ÁDÁ+D, Á.D ÂD, Â		D&ÂD!ÂD!Â D!Â$D&Â)4D, Ã$D, ÄD, ÄDÄD, Ä!D&Ä&D, Ä,'E)N),Ú__doc__r#   r$   r)   r%   r&   r'   r(   r*   r<   rƒ   rg   rG   Ú__all__r8   r   r	   r
   r   r   rW   r   r   r   r   r/   r   r   r   rž   r¢   r›   r   Úposixr£   r   r|   r   r+   r¶   r„   r,   r-   r.   rº   r9   r7   ú<module>rÝ      s  ðñ
ð 
€Ø	€Ø	€Ø	€Ø
€Ø
€Ø	€Ø
€ã 	Û 
Û Û Ü ò8€òòòòò:	ò"7ð ×(Ñ(×0Ñ0€Ô ò
ò#ò>òòòòòV6)ðz $€Ø
€Ø€ò*ðb(+Ý$òD+ò	ð "'ô òCðL "Ÿl™l¨hÑ6Ð ó!óR#øðc ò ôðús   Á;B' Â'B2Â1B2