grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026a XC?hcnã@sîdZdZdZdZdZdZdZdZdZdd l Z dd l Z dd l Z dd l Z dd l Tgd ¢Z d d „Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Ze jje_dd„Zdd„Zdd„Zd d!„Zzdd"lmZWneyÜd ZYn0d#d$„Zd%d&„Zd'd(„Zd)d*„Z d+d,„Z!zdd-lm"Z"Wne�y.e!Z#Yn 0d.d/„Z#zdd0lm$Z$m%Z&Wn"e�ynd1d2œd3d4„Z'Yn(0e(fd5d6„Z)e(fd7d8„Z*d1d2œd9d4„Z'e+e d:ƒ�o°e  ,¡d;d„Z.d?d@„Z/zddAlm0Z1Wne�yèYn0d S)Cz�Common pathname manipulations, WindowsNT/95 version. Instead of importing this module directly, import os and refer to this module as os.path. Ú.ú..ú\ú;ú/z.;C:\binZnuléN)Ú*)'ÚnormcaseÚisabsÚjoinÚ splitdriveÚsplitÚsplitextÚbasenameÚdirnameÚ commonprefixÚgetsizeÚgetmtimeÚgetatimeÚgetctimeÚislinkÚexistsÚlexistsÚisdirÚisfileÚismountÚ expanduserÚ expandvarsÚnormpathÚabspathÚcurdirÚpardirÚsepÚpathsepÚdefpathÚaltsepÚextsepÚdevnullÚrealpathÚsupports_unicode_filenamesÚrelpathÚsamefileÚ sameopenfileÚsamestatÚ commonpathÚ ALLOW_MISSINGcCst|tƒrdSdSdS)Nó\/ú\/)Ú isinstanceÚbytes©Úpath©r5ú+/opt/alt/python39/lib64/python3.9/ntpath.pyÚ _get_bothseps#s r7cCs8t |¡}t|tƒr$| dd¡ ¡S| dd¡ ¡SdS)zaNormalize case of pathname. Makes all characters lowercase and all slashes into backslashes.ó/ó\rrN)ÚosÚfspathr1r2ÚreplaceÚlower©Úsr5r5r6r-s  rcCsjt |¡}t|tƒr,| dd¡ d¡rBdSn| dd¡ d¡rBdSt|ƒd}t|ƒd koh|d t|ƒvS) zTest whether a path is absoluter8r9ó\\?\Trrú\\?\ér) r:r;r1r2r<Ú startswithr Úlenr7r>r5r5r6r >s   r c GsTt |¡}t|tƒr"d}d}d}n d}d}d}zð|sD|dd…|t|ƒ\}}ttj|ƒD]~}t|ƒ\}} | r�| d|vr�|s„|sˆ|}| }q\n*|rº||krº| ¡| ¡kr¶|}| }q\|}|rÒ|d|vrÒ||}|| }q\|�r|d|v�r|�r|dd…|k�r|||WS||WSttt f�yNt j d |g|¢RŽ‚Yn0dS) Nr9r/ó:rr0ú:réÿÿÿÿr ) r:r;r1r2r Úmapr=Ú TypeErrorÚAttributeErrorÚ BytesWarningÚ genericpathÚ_check_arg_types) r4Úpathsr!ÚsepsÚcolonZ result_driveZ result_pathÚpZp_driveZp_pathr5r5r6r NsL      ÿÿ r cCst |¡}t|ƒdk�rt|tƒr0d}d}d}n d}d}d}| ||¡}|dd…|dkrä|dd …|krä| |d¡}|d kr�|d d…|fS| ||d ¡}||d kr¼|d d…|fS|d krÌt|ƒ}|d |…||d …fS|d d…|k�r|d d…|dd …fS|d d…|fS) aÚSplit a pathname into drive/UNC sharepoint and relative path specifiers. Returns a 2-tuple (drive_or_unc, path); either part may be empty. If you assign result = splitdrive(p) It is always true that: result[0] + result[1] == p If the path contained a drive letter, drive_or_unc will contain everything up to and including the colon. e.g. splitdrive("c:/dir") returns ("c:", "/dir") If the path contained a UNC path, the drive_or_unc will contain the host name and share up to but not including the fourth directory separator character. e.g. splitdrive("//host/computer/dir") returns ("//host/computer", "/dir") Paths cannot contain both a drive letter and a UNC path. ér9r8rErrrFrérGNrB)r:r;rDr1r2r<Úfind)rQr!r$rPZnormpÚindexZindex2r5r5r6r }s.   $  r cCsxt |¡}t|ƒ}t|ƒ\}}t|ƒ}|rD||d|vrD|d8}q&|d|…||d…}}| |¡pj|}|||fS)z~Split a pathname. Return tuple (head, tail) where tail is everything after the final slash. Either part may be empty.rBN)r:r;r7r rDÚrstrip)rQrOÚdÚiÚheadÚtailr5r5r6r µs   r cCs8t |¡}t|tƒr$t |ddd¡St |ddd¡SdS)Nr9r8ó.rrr)r:r;r1r2rLÚ _splitext©rQr5r5r6r Ìs  r cCs t|ƒdS)z)Returns the final component of a pathnamerB©r r]r5r5r6r×srcCs t|ƒdS)z-Returns the directory component of a pathnamerr^r]r5r5r6rÞsrc Cs6zt |¡}Wntttfy(YdS0t |j¡S)zhTest whether a path is a symbolic link. This will always return false for Windows prior to 6.0. F)r:ÚlstatÚOSErrorÚ ValueErrorrJÚstatÚS_ISLNKÚst_mode©r4Ústr5r5r6rås rc Cs,zt |¡}Wnttfy&YdS0dS)zCTest whether a path exists. Returns True for broken symbolic linksFT)r:r_r`rarer5r5r6rñs r)Ú_getvolumepathnamecCstt |¡}t|ƒ}t|ƒ}t|ƒ\}}|rD|d|vrD| pB||vS||vrPdStrl| |¡t|ƒ |¡kSdSdS)zaTest whether a path is a mount point (a drive root, the root of a share, or a mounted volume)rTFN)r:r;r7rr rgrV)r4rOÚrootÚrestr5r5r6rs  rcCsøt |¡}t|tƒrd}nd}| |¡s,|Sdt|ƒ}}||kr\||t|ƒvr\|d7}q:dtjvrrtjd}nDdtjvr€|Sztjd}Wnty¤d}Yn0t |tjdƒ}t|tƒrÊt  |¡}|dkrèt t |ƒ|d|…ƒ}|||d…S) zLExpand ~ and ~user constructs. If user or $HOME is unknown, do nothing.ó~ú~rBZ USERPROFILEZHOMEPATHZ HOMEDRIVEÚN) r:r;r1r2rCrDr7ÚenvironÚKeyErrorr Úfsencoder)r4ÚtilderXÚnÚuserhomeÚdriver5r5r6r"s.           rcCs&t |¡}t|tƒrhd|vr(d|vr(|Sddl}t|j|jddƒ}d}d}d}d }d}ttd dƒ}nFd |vr|d |vr||Sddl}|j|jd}d }d }d}d}d }tj}|dd…} d} t |ƒ} | | k�r"|| | d…} | |k�rV|| dd…}t |ƒ} z&|  | ¡} | | |d| d…7} Wn(t �yP| | |7} | d} Yn0�nÂ| |k�rD|| d| d…|k�rŒ| | 7} | d7} n´|| dd…}t |ƒ} z|  |¡} Wn(t �yÚ| ||7} | d} Ynf0|d| …} z.|du�r t  tjt  | ¡¡}n|| }Wn t�y6|| |}Yn0| |7} �nÔ| |k�r|| d| d…|k�r|| | 7} | d7} �q|| d| d…|k�rT|| dd…}t |ƒ} z|  |¡} Wn,t �yè| |||7} | d} Ynj0|d| …} z.|du�rt  tjt  | ¡¡}n|| }Wn$t�yH||| |}Yn0| |7} nº|dd…} | d7} || | d…} | �r¬| |v�r¬| | 7} | d7} || | d…} �qxz.|du�rÐt  tjt  | ¡¡}n|| }Wnt�yö|| }Yn0| |7} | �r| d8} n| | 7} | d7} qÆ| S)zfExpand shell variables of the forms $var, ${var} and %var%. Unknown variables are left unchanged.ó$ó%rNz_-Úasciió'ó{ó}Úenvironbú$ú%ú'Ú{Ú}rBrR)r:r;r1r2ÚstringZ ascii_lettersZdigitsÚgetattrrmrDrUraroÚfsdecodern)r4r€ZvarcharsZquoteZpercentZbraceZrbraceZdollarrmÚresrUZpathlenÚcÚvarÚvaluer5r5r6rRs¼                         rc CsPt |¡}t|tƒr*d}d}d}d}d}nd}d}d}d }d }| |¡rL|S| ||¡}t|ƒ\}}| |¡r€||7}| |¡}| |¡}d }|t |ƒk�r,||r°|||kr¸||=qŽ|||k�r"|d krú||d |krú||d |d …=|d 8}n&|d k�r|  |¡�r||=n|d 7}qŽ|d 7}qŽ|�sB|�sB|  |¡||  |¡S) z0Normalize path, eliminating double slashes, etc.r9r8r[ó..)s\\.\r@rrrr)z\\.\rArrB) r:r;r1r2rCr<r Úlstripr rDÚendswithÚappendr ) r4r!r$rr Zspecial_prefixesÚprefixÚcompsrXr5r5r6rÃsF             rcCs@t |¡}t|ƒs8t|tƒr&t ¡}nt ¡}t||ƒ}t|ƒS)z¤Return the absolute version of a path as a fallback function in case `nt._getfullpathname` is not available or raises OSError. See bpo-31047 for more. ) r:r;r r1r2ÚgetcwdbÚgetcwdr r)r4Úcwdr5r5r6Ú_abspath_fallbackõs    r�)Ú_getfullpathnamec Cs2ztt|ƒƒWSttfy,t|ƒYS0dS)z&Return the absolute version of a path.N)rr‘r`rar�r3r5r5r6r sr)Ú_getfinalpathnameÚreadlinkF)ÚstrictcCst|ƒS©N)r)r4r”r5r5r6r'sr'c Cs¶d}tƒ}t|ƒ|vr²| t|ƒ¡z:|}t|ƒ}t|ƒs\t|ƒsJ|}Wq²ttt|ƒ|ƒƒ}Wq |yš}z$|j |vr„WYd}~q²‚WYd}~q d}~0t y®Yq²Yq 0q |S)N) rBrRrSééé é2éCéWi&i(i)) ÚsetrÚaddÚ _nt_readlinkr rrr rÚwinerrorra)r4Ú ignored_errorÚallowed_winerrorÚseenZold_pathÚexr5r5r6Ú_readlink_deeps&     r¤c Csæd}d}|râzt|ƒ}|r$t||ƒn|WS|yÞ}zž|j|vrD‚z8t||d�}||krz|rht||ƒn|WWYd}~SWn|yŽYn0t|ƒ\}}|r¸|s¸||WYd}~S|rÆt||ƒn|}WYd}~qd}~00q|S)N) rBrRrSr–r—r˜r™ršr›é{i€i�rl©r )r’r rŸr¤r )r4r r¡rZr£Únew_pathÚnamer5r5r6Ú_getfinalpathname_nonstrictEs, ÿ$  *r©c Csˆt|ƒ}t|tƒrBd}d}d}t ¡}t|ƒtt t¡ƒkrjdSn(d}d}d}t ¡}t|ƒttƒkrjdS|  |¡}|t ur†t }d }n|r�d }nt }|sªt |ƒsªt||ƒ}zt|ƒ}d }Wn6|yð} z| j}t||d �}WYd} ~ n d} ~ 00|�s„|  |¡�r„|  |¡�r&||t|ƒd…} n|t|ƒd…} zt| ƒ|k�rJ| }Wn6t �y‚} z| j|k�rn| }WYd} ~ n d} ~ 00|S) Nr@s\\?\UNC\s\\s\\.\NULrAz\\?\UNC\z\\z\\.\NULTr5rr¦)rr1r2r:r�rror&rŽrCr.ÚFileNotFoundErrorr`r r r’rŸr©rD) r4r”r‹Z unc_prefixZnew_unc_prefixr�Z had_prefixr Zinitial_winerrorr£Zspathr5r5r6r'tsT    ÿ  ÚgetwindowsversionrSrRc Csdt |¡}t|tƒr"d}d}d}n d}d}d}|dur:|}|sFtdƒ‚t |¡}zàtt|ƒƒ}tt|ƒƒ}t|ƒ\}}t|ƒ\} } t|ƒt| ƒkr¢td | |fƒ‚d d „|  |¡Dƒ} d d „|   |¡Dƒ} d } t | | ƒD]$\}}t|ƒt|ƒkrôqþ| d7} qØ|gt | ƒ| | | d…}|�s(|WSt |ŽWSt ttttf�y^t d||¡‚Yn0dS)z#Return a relative version of a pathr9r[r‡rrrNzno path specifiedz&path is on mount %r, start on mount %rcSsg|] }|r|‘qSr5r5©Ú.0Úxr5r5r6Ú Ïózrelpath..cSsg|] }|r|‘qSr5r5r¬r5r5r6r¯Ðr°rrBr))r:r;r1r2rarrr rr ÚziprDr rIrJrKÚDeprecationWarningrLrM)r4Ústartr!rr Z start_absZpath_absZ start_driveZ start_restZ path_driveZ path_restÚ start_listÚ path_listrXZe1Ze2Úrel_listr5r5r6r)³sH       ÿ  r)c s¶|s tdƒ‚tttj|ƒƒ}t|dtƒr8d‰d‰d‰n d‰d‰d‰�z>‡‡fd d „|Dƒ}‡fd d „|Dƒ}zt‡fd d „|Dƒƒ\}Wnty¦tdƒd‚Yn0ttdd „|DƒƒƒdkrÊtdƒ‚t |d  ˆˆ¡ƒ\}}|  ˆ¡}‡fdd „|Dƒ}‡fdd „|Dƒ}t |ƒ}t |ƒ}t|ƒD]*\} } | || k�r(|d| …}�qd�q(|dt|ƒ…}|�rr|ˆn|} | ˆ |¡WSttf�y°tjdg|¢RŽ‚Yn0dS)zDGiven a sequence of path names, returns the longest common sub-path.z%commonpath() arg is an empty sequencerr9r8r[rrrcs g|]}t| ˆˆ¡ ¡ƒ‘qSr5)r r<r=)r­rQ)r$r!r5r6r¯ür°zcommonpath..csg|]\}}| ˆ¡‘qSr5r^©r­rWrQ©r!r5r6r¯ýr°c3s"|]\}}|dd…ˆkVqdS)NrBr5r·r¸r5r6Ú r°zcommonpath..z%Can't mix absolute and relative pathsNcss|]\}}|VqdSr•r5r·r5r5r6r¹r°rBzPaths don't have the same drivecsg|]}|r|ˆkr|‘qSr5r5©r­r„©rr5r6r¯ r°csg|]}‡fdd„|Dƒ‘qS)csg|]}|r|ˆkr|‘qSr5r5rºr»r5r6r¯r°z)commonpath...r5)r­r?r»r5r6r¯r°r-)raÚtuplerHr:r;r1r2rœrDr r<r ÚminÚmaxÚ enumerater rIrJrLrM) rNZ drivesplitsÚ split_pathsr rsr4ÚcommonÚs1Ús2rXr„r‹r5)r$rr!r6r-ësF    r-)Ú_isdir)N)2Ú__doc__rr r%r!r"r$r#r&r:ÚsysrbrLÚ__all__r7rr r r r r r\rrrrÚntrgÚ ImportErrorrrrrr�r‘rr’r“ržr'r`r¤r©Úhasattrr«r(r)r-rÄrr5r5r5r6Úsp   /8    0q2  * /< ÿ 84