grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026o ®û|jxmã@s(dZdZdZdZdZdZdZdZdZdd l Z dd l Z dd l Z dd l Z dd l Tgd ¢Z d d „ZzddlmZmZmZdd„ZWn eyKdd„ZYnwdd„Zdd„Zdd„Zdd„Zdd„Ze jje_dd„Zdd„Zd d!„Z d"d#„Z!zdd$l"m#Z#Wn eyˆd Z#Ynwd%d&„Z$d'd(„Z%d)Z&d a'd a(d*d+„Z)d,d-„Z*d.d/„Z+zdd0l"m,Z,Wn ey¶e+Z-Ynwd1d2„Z-z dd3l"m.Z.m/Z0WneyÕd4d5œd6d7„Z1Ynwe2fd8d9„Z3e2fd:d;„Z4d4d5œdd?kZ7dEd@dA„Z8dBdC„Z9z ddDl"m:Z;Wd Se�yYd Sw)Fz�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ƒrdSdS)Nó\/ú\/)Ú isinstanceÚbytes©Úpath©r5ú-/opt/alt/python310/lib64/python3.10/ntpath.pyÚ _get_bothseps$s r7)Ú LCMapStringExÚLOCALE_NAME_INVARIANTÚLCMAP_LOWERCASEcCsdt |¡}|s |St|tƒr(t ¡}| |d¡ dd¡}tt t |ƒ}|  |d¡Stt t | dd¡ƒS)únNormalize case of pathname. Makes all characters lowercase and all slashes into backslashes. Úsurrogateescaperr) ÚosÚfspathr1r2ÚsysÚgetfilesystemencodingÚdecodeÚreplaceÚ_LCMapStringExÚ_LOCALE_NAME_INVARIANTÚ_LCMAP_LOWERCASEÚencode)ÚsÚencodingr5r5r6r4s  ÿ  þrcCs@t |¡}t|tƒrt t |¡ dd¡ ¡¡S| dd¡ ¡S)r;rr)r=r>r1r2ÚfsencodeÚfsdecoderBÚlower©rGr5r5r6rGs  cCsjt |¡}t|tƒr| dd¡ d¡rdSn | dd¡ d¡r!dSt|ƒd}t|ƒd ko4|d t|ƒvS) zTest whether a path is absoluteó/ó\ó\\?\Trrú\\?\ér) r=r>r1r2rBÚ startswithr Úlenr7rLr5r5r6r Xs  ÿ r c Gs@t |¡}t|tƒrd}d}d}nd}d}d}zs|s"|dd…|t|ƒ\}}ttj|ƒD]>}t|ƒ\}} | rG| d|vrG|sB|sD|}| }q.|r\||kr\| ¡| ¡krZ|}| }q.|}|rh|d|vrh||}|| }q.|r†|d|vr†|r†|dd…|kr†|||WS||WSttt fyŸt j d |g|¢RŽ‚w) NrNr/ó:rr0ú:réÿÿÿÿr ) r=r>r1r2r ÚmaprKÚ TypeErrorÚAttributeErrorÚ BytesWarningÚ genericpathÚ_check_arg_types) r4Úpathsr!ÚsepsÚcolonZ result_driveZ result_pathÚpZp_driveZp_pathr5r5r6r hsL      ÿ þr cCst |¡}t|ƒdkr…t|tƒrd}d}d}nd}d}d}| ||¡}|dd…|dkrq|dd …|krq| |d¡}|d krG|d d…|fS| ||d ¡}||d kr]|d d…|fS|d kret|ƒ}|d |…||d …fS|d d…|kr…|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. érNrMrTrrrUrérVNrQ)r=r>rSr1r2rBÚfind)r`r!r$r_ZnormpÚindexZindex2r5r5r6r —s.    $  r cCsŠt |¡}t|ƒ}t|ƒ\}}t|ƒ}|r+||d|vr+|d8}|r+||d|vs|d|…||d…}}| |¡p>|}|||fS)z~Split a pathname. Return tuple (head, tail) where tail is everything after the final slash. Either part may be empty.rQN)r=r>r7r rSÚrstrip)r`r^ÚdÚiÚheadÚtailr5r5r6r Ïs  ÿ r cCs4t |¡}t|tƒrt |ddd¡St |ddd¡S)NrNrMó.rrr)r=r>r1r2r[Ú _splitext©r`r5r5r6r æs  r cCó t|ƒdS)z)Returns the final component of a pathnamerQ©r rlr5r5r6rñó rcCrm)z-Returns the directory component of a pathnamerrnrlr5r5r6rørorc Cs6zt |¡}Wn tttfyYdSwt |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Ú ValueErrorrYÚstatÚS_ISLNKÚst_mode©r4Ústr5r5r6rÿs ÿ rc Cs*zt |¡}WdSttfyYdSw)zCTest whether a path exists. Returns True for broken symbolic linksFT)r=rprqrrrvr5r5r6r s  þÿr)Ú_getvolumepathnamecCspt |¡}t|ƒ}t|ƒ}t|ƒ\}}|r"|d|vr"| p!||vS||vr(dStr6| |¡t|ƒ |¡kSdS)zaTest whether a path is a mount point (a drive root, the root of a share, or a mounted volume)rTF)r=r>r7rr rxre)r4r^ÚrootÚrestr5r5r6r!s  rcCsJt |¡}t|tƒr d}nd}| |¡s|Sdt|ƒ}}||kr9||t|ƒvr9|d7}||kr9||t|ƒvs)dtjvrDtjd}n"dtjvrK|Sztjd}Wn ty]d}Ynwt |tjdƒ}|dkr“|d|…}t|tƒrzt  |¡}tj  d¡}||kr“|t |ƒkrŒ|St t |ƒ|ƒ}t|tƒr�t |¡}|||d …S) zLExpand ~ and ~user constructs. If user or $HOME is unknown, do nothing.ó~ú~rQZ USERPROFILEZHOMEPATHZ HOMEDRIVEÚZUSERNAMEN)r=r>r1r2rRrSr7ÚenvironÚKeyErrorr rJÚgetrrrI)r4ÚtildergÚnÚuserhomeÚdriveZ target_userZ current_userr5r5r6r<s@   ÿ    ÿ       rz.'[^']*'?|%(%|[^%]*%?)|\$(\$|[-\w]+|\{[^}]*\}?)csÒt |¡}t|tƒr5d|vrd|vr|Sts$ddl}| t ¡|j ¡j at}d‰d‰d‰d‰t tddƒ‰n%d|vr?d |vr?|St sMddl}| t|j ¡j a t }d ‰d ‰d ‰d‰tj ‰‡‡‡‡‡fd d „}|||ƒS)zfExpand shell variables of the forms $var, ${var} and %var%. Unknown variables are left unchanged.ó$ó%rNó{ó}Úenvironbú$ú%Ú{Ú}csÌ|j}|dur |dS||}|dkr)|ˆkr|S| ˆ¡s"|dS|dd…}n|ˆkr/|S| ˆ¡rC| ˆ¡s=|dS|dd…}zˆdurTt tjt |¡¡WSˆ|WStye|dYSw)NrrQrV)Ú lastindexÚendswithrRr=rIr~rJr)ÚmrŽÚname©ZbraceZdollarr~ZpercentZrbracer5r6Úreplœs.       ÿzexpandvars..repl)r=r>r1r2Ú_varsubbÚreÚcompileÚ _varpatternrFÚASCIIÚsubÚgetattrÚ_varsubr~)r4r•r™r“r5r’r6r}s4   rc CsNt |¡}t|tƒrd}d}d}d}d}n d}d}d}d }d }| |¡r&|S| ||¡}t|ƒ\}}| |¡r@||7}| |¡}| |¡}d }|t |ƒkr—||rW|||kr[||=n6|||kr�|d kr{||d |kr{||d |d …=|d 8}n|d krˆ|  |¡rˆ||=n |d 7}n|d 7}|t |ƒksM|s |s |  |¡||  |¡S) z0Normalize path, eliminating double slashes, etc.rNrMrjó..)s\\.\rOrrrr)z\\.\rPrrQ) r=r>r1r2rRrBr Úlstripr rSr�Úappendr ) r4r!r$rr Zspecial_prefixesÚprefixÚcompsrgr5r5r6r¾sH             ô rcCs@t |¡}t|ƒst|tƒrt ¡}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 Cs.ztt|ƒƒWSttfyt|ƒYSw)z&Return the absolute version of a path.)rr¥rqrrr¤r3r5r5r6rs  ÿr)Ú_getfinalpathnameÚreadlinkF)ÚstrictcCst|ƒS©N)r)r4r¨r5r5r6r'sr'c Cs¶d}tƒ}t|ƒ|vrY| t|ƒ¡z|}t|ƒ}t|ƒs/t|ƒs&|}W|Sttt|ƒ|ƒƒ}Wn"|yI}z |j |vrDWYd}~|S‚d}~wt yRY|Swt|ƒ|vs |S)N) rQrarbééé é2éCéWi&i(i)) ÚsetrÚaddÚ _nt_readlinkr rrr rÚwinerrorrr)r4Ú ignored_errorÚallowed_winerrorÚseenZold_pathÚexr5r5r6Ú_readlink_deeps4  ø€  ü€ ý ír¸c Csêd}d}|rszt|ƒ}|rt||ƒWS|WS|yp}zO|j|vr#‚zt||d�}||kr>|r5t||ƒn|WWYd}~SWn |yHYnwt|ƒ\}}|r]|s]||WYd}~S|rdt||ƒn|}WYd}~nd}~ww|s|S)N)rQrarbrªr«r¬r­é5éAr®r¯é{é¡i€i�r}©r´)r¦r r³r¸r )r4r´rµrir·Únew_pathr‘r5r5r6Ú_getfinalpathname_nonstrict@s6 ÿ ÿ þ €ìür¿c Cs”t|ƒ}t|tƒr!d}d}d}t ¡}t|ƒtt t¡ƒkr dSnd}d}d}t ¡}t|ƒttƒkr5dS|  |¡}|t urCt }d }n|rHd }nt }|sUt |ƒsUt||ƒ}zt|ƒ}d }Wn|yx} z| j}t||d �}WYd} ~ nd} ~ ww|sÈ|  |¡rÈ|  |¡r�||t|ƒd…} n|t|ƒd…} zt| ƒ|kr¤| }W|SW|St yÇ} z| j|kr¼| }WYd} ~ |SWYd} ~ |Sd} ~ ww|S) NrOs\\?\UNC\s\\s\\.\NULrPz\\?\UNC\z\\z\\.\NULTr5rr½)rr1r2r=r¡rrIr&r¢rRr.ÚFileNotFoundErrorrqr r r¦r³r¿rS) r4r¨rŸZ unc_prefixZnew_unc_prefixr£Z had_prefixr´Zinitial_winerrorr·Zspathr5r5r6r'rsj ÿ   ÿ€þ  ùû  þ€ûÚgetwindowsversionrbrac CsXt |¡}t|tƒrd}d}d}nd}d}d}|dur|}|s#tdƒ‚t |¡}zott|ƒƒ}tt|ƒƒ}t|ƒ\}}t|ƒ\} } t|ƒt| ƒkrQtd | |fƒ‚d d „|  |¡Dƒ} d d „|   |¡Dƒ} d } t | | ƒD]\}}t|ƒt|ƒkrzn| d7} ql|gt | ƒ| | | d…}|s“|WSt |ŽWSt ttttfy«t d||¡‚w)z#Return a relative version of a pathrNrjrœrrrNzno path specifiedz&path is on mount %r, start on mount %rcSóg|]}|r|‘qSr5r5©Ú.0Úxr5r5r6Ú Íózrelpath..cSrÂr5r5rÃr5r5r6rÆÎrÇrrQr))r=r>r1r2rrrrr rr ÚziprSr rXrYrZÚDeprecationWarningr[r\)r4Ústartr!rr Z start_absZpath_absZ start_driveZ start_restZ path_driveZ path_restÚ start_listÚ path_listrgZe1Ze2Úrel_listr5r5r6r)±sJ       ÿ  þr)c sž|stdƒ‚tttj|ƒƒ}t|dtƒrd‰d‰d‰nd‰d‰d‰z™‡‡fd d „|Dƒ}‡fd d „|Dƒ}zt‡fd d „|Dƒƒ\}Wn tyPtdƒd‚wttdd „|Dƒƒƒdkrbtdƒ‚t |d  ˆˆ¡ƒ\}}|  ˆ¡}‡fdd „|Dƒ}‡fdd „|Dƒ}t |ƒ}t |ƒ}t|ƒD]\} } | || kr£|d| …}n q‘|dt|ƒ…}|r²|ˆn|} | ˆ |¡WSttfyÎtjdg|¢RŽ‚w)zDGiven a sequence of path names, returns the longest common sub-path.z%commonpath() arg is an empty sequencerrNrMrjrrrcs g|] }t| ˆˆ¡ ¡ƒ‘qSr5)r rBrK)rÄr`)r$r!r5r6rÆús zcommonpath..csg|] \}}| ˆ¡‘qSr5rn©rÄrfr`©r!r5r6rÆûsc3s$�|] \}}|dd…ˆkVqdS)NrQr5rÎrÏr5r6Ú þs€"zcommonpath..z%Can't mix absolute and relative pathsNcss�|]\}}|VqdSr©r5rÎr5r5r6rÐs€rQzPaths don't have the same drivecóg|] }|r|ˆkr|‘qSr5r5©rÄÚc©rr5r6rÆ ócsg|] }‡fdd„|Dƒ‘qS)crÑr5r5rÒrÔr5r6rÆ rÕz)commonpath...r5)rÄrGrÔr5r6rÆ sr-)rrÚtuplerWr=r>r1r2r°rSr rBr ÚminÚmaxÚ enumerater rXrYr[r\) r]Z drivesplitsÚ split_pathsr r„r4ÚcommonÚs1Ús2rgrÓrŸr5)r$rr!r6r-ésL  ÿ   þþr-)Ú_isdirr©)<Ú__doc__rr r%r!r"r$r#r&r=r?rsr[Ú__all__r7Z_winapir8rCr9rDr:rErÚ ImportErrorr r r r r rkrrrrÚntrxrrr—r›r”rrr¤r¥rr¦r§r²r'rqr¸r¿ÚhasattrrÁr(r)r-rÞrr5r5r5r6ÚsŠ      ÿ/8   ÿ=A2 ÿ þ  *2 <ÿ 84þ