grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026B ’«¼¥âb»ã&@s4dZdZdZdZdZdZdZdZdZdd l Z dd l Z dd l Z dd l Z dd l Td d d ddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0g&Z d1d2„Zd3d „Zd4d „Zd5d „Zd6d„Zd7d„Zd8d„Ze jje_d9d„Zd:d„Zd;d„Zdd„Zd?d„Zd@d„ZdAd „Z dBdC„Z!yddDlm"Z"Wnek �r|e!Z#Yn XdEd!„Z#e#Z$e%e dFƒ�o¤e  &¡dGdHkZ'dPdId,„Z(dJd0„Z)y,e  &¡d dH…dKk�rÞddLlm*Z*ne‚Wn"e+efk �rdMdN„Z*YnXyddOlm,Z-Wnek �r.YnXd S)Qz�Common pathname manipulations, WindowsNT/95 version. Instead of importing this module directly, import os and refer to this module as os.path. Ú.z..ú\ú;ú/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Ú commonpathcCst|tƒrdSdSdS)Ns\/z\/)Ú isinstanceÚbytes)Úpath©r0ú+/opt/alt/python37/lib64/python3.7/ntpath.pyÚ _get_bothseps"s r2c Csxt |¡}y.t|tƒr&| dd¡ ¡S| dd¡ ¡SWn:ttfk rrt|ttfƒsltd|j j ƒd‚‚YnXdS)zaNormalize case of pathname. Makes all characters lowercase and all slashes into backslashes.ó/ó\rrz0normcase() argument must be str or bytes, not %rN) ÚosÚfspathr-r.ÚreplaceÚlowerÚ TypeErrorÚAttributeErrorÚstrÚ __class__Ú__name__)Úsr0r0r1r,s  cCs2t |¡}t|ƒd}t|ƒdko0|dt|ƒkS)zTest whether a path is absoluteér)r5r6r Úlenr2)r>r0r0r1rCs  c GsTt |¡}t|tƒr"d}d}d}n d}d}d}yð|sD|dd…|t|ƒ\}}xŽttj|ƒD]~}t|ƒ\}} | r’| d|kr’|s†|sŠ|}| }q^n*|r¼||kr¼| ¡| ¡kr¸|}| }q^|}|rÔ|d|krÔ||}|| }q^W|�r|d|k�r|�r|dd…|k�r|||S||Sttt fk �rNt j d |f|žŽ‚YnXdS) Nr4s\/ó:rz\/ú:réÿÿÿÿr ) r5r6r-r.r Úmapr8r9r:Ú BytesWarningÚ genericpathÚ_check_arg_types) r/Úpathsr ÚsepsÚcolonZ result_driveZ result_pathÚpZp_driveZp_pathr0r0r1r KsF       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. ér4r3rArrrBrérCNr?)r5r6r@r-r.r7Úfind)rKr r#rJZnormpÚindexZindex2r0r0r1r zs.   $  cCs|t |¡}t|ƒ}t|ƒ\}}t|ƒ}x |rF||d|krF|d8}q(W|d|…||d…}}| |¡pn|}|||fS)z~Split a pathname. Return tuple (head, tail) where tail is everything after the final slash. Either part may be empty.r?N)r5r6r2r r@Úrstrip)rKrIÚdÚiÚheadÚtailr0r0r1r ²s   cCs8t |¡}t|tƒr$t |ddd¡St |ddd¡SdS)Nr4r3ó.rrr)r5r6r-r.rFÚ _splitext)rKr0r0r1r És  cCs t|ƒdS)z)Returns the final component of a pathnamer?)r )rKr0r0r1r ÔscCs t|ƒdS)z-Returns the directory component of a pathnamer)r )rKr0r0r1rÛsc Cs4yt |¡}Wnttfk r&dSXt |j¡S)zhTest whether a path is a symbolic link. This will always return false for Windows prior to 6.0. F)r5ÚlstatÚOSErrorr:ÚstatÚS_ISLNKÚst_mode)r/Ústr0r0r1râs cCs(yt |¡}Wntk r"dSXdS)zCTest whether a path exists. Returns True for broken symbolic linksFT)r5rWrX)r/r\r0r0r1rîs )Ú_getvolumepathnamecCstt |¡}t|ƒ}t|ƒ}t|ƒ\}}|rD|d|krD| pB||kS||krPdStrl| |¡t|ƒ |¡kSdSdS)zaTest whether a path is a mount point (a drive root, the root of a share, or a mounted volume)rTFN)r5r6r2rr r]rP)r/rIÚrootÚrestr0r0r1rs  cCst |¡}t|tƒrd}nd}| |¡s,|Sdt|ƒ}}x$||kr^||t|ƒkr^|d7}q4szrelpath..cSsg|] }|r|‘qSr0r0)rŠr‹r0r0r1rŒ5srr?r()r5r6r-r.rzrrr rr Úzipr@r r9r:rEÚDeprecationWarningrFrG)r/Ústartr rrZ start_absZpath_absZ start_driveZ start_restZ path_driveZ path_restÚ start_listÚ path_listrRZe1Ze2Úrel_listr0r0r1r(sF         c s´|s tdƒ‚tttj|ƒƒ}t|dtƒr8d‰d‰d‰n d‰d‰d‰�y>‡‡fd d „|Dƒ}‡fd d „|Dƒ}yt‡fd d „|Dƒƒ\}Wntk r¨tdƒd‚YnXttdd „|DƒƒƒdkrÌtdƒ‚t |d  ˆˆ¡ƒ\}}|  ˆ¡}‡fdd „|Dƒ}‡fdd „|Dƒ}t |ƒ}t |ƒ}xBt|ƒD]&\} } | || k�r,|d| …}P�q,W|dt|ƒ…}|�rt|ˆn|} | ˆ |¡Sttfk �r®tjd|žŽ‚YnXdS)zDGiven a sequence of path names, returns the longest common sub-path.z%commonpath() arg is an empty sequencerr4r3rUrrrcs g|]}t| ˆˆ¡ ¡ƒ‘qSr0)r r7r8)rŠrK)r#r r0r1rŒaszcommonpath..csg|]\}}| ˆ¡‘qSr0)r )rŠrQrK)r r0r1rŒbsc3s"|]\}}|dd…ˆkVqdS)Nr?r0)rŠrQrK)r r0r1ú eszcommonpath..z%Can't mix absolute and relative pathsNcss|]\}}|VqdS)Nr0)rŠrQrKr0r0r1r“lsr?zPaths don't have the same drivecsg|]}|r|ˆkr|‘qSr0r0)rŠr|)rr0r1rŒqscsg|]}‡fdd„|Dƒ‘qS)csg|]}|r|ˆkr|‘qSr0r0)rŠr|)rr0r1rŒssz)commonpath...r0)rŠr>)rr0r1rŒssr,)r,)rzÚtuplerDr5r6r-r.Úsetr@r r7r ÚminÚmaxÚ enumerater r9r:rFrG) rHZ drivesplitsÚ split_pathsrrkr/ÚcommonÚs1Ús2rRr|r‚r0)r#rr r1r,PsF  )ér)Ú_getfinalpathnamecCs tt|ƒƒS)N)rr)Úfr0r0r1rž‘srž)Ú_isdir)N).Ú__doc__rrr$r r!r#r"r%r5ÚsysrYrFÚ__all__r2rrr r r r rVr rrrÚntr]Ú ImportErrorrrrrr‡rˆrr&Úhasattrr‰r'r(r,ržr:r rr0r0r0r1Úsz       /8   2q1   85