o =?h4@@sdZdZdZdZdZdZdZdZdZddl Z ddl Z ddl Z ddl Z dd l Tgd Z d d Zd dZddZddZddZddZe jje_ddZddZddZddZdd Zd!d"Zd#d$Zdadad%d&Zd'd(Zd)d*Z d+d,d-d.Z!d/d0Z"e j#d1kZ$d6d2d3Z%d4d5Z&dS)7aCommon 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)*)'normcaseisabsjoin splitdrivesplitsplitextbasenamedirname commonprefixgetsizegetmtimegetatimegetctimeislinkexistslexistsisdirisfileismount expanduser expandvarsnormpathabspathsamefile sameopenfilesamestatcurdirpardirseppathsepdefpathaltsepextsepdevnullrealpathsupports_unicode_filenamesrelpath commonpath ALLOW_MISSINGcCst|trdSdS)N/r) isinstancebytespathr30/opt/alt/python310/lib64/python3.10/posixpath.py_get_sep)s r5cCs t|S)z6Normalize case of pathname. Has no effect under Posixosfspath)sr3r3r4r4s rcCst|}t|}||S)zTest whether a path is absolute)r7r8r5 startswith)r9r#r3r3r4r<s  rc Gst|}t|}|}z0|s|dd|ttj|D]}||r&|}q|r-||r2||7}q|||7}qW|StttfyPt j d|g|Rw)zJoin 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.Nrr ) r7r8r5mapr:endswith TypeErrorAttributeError BytesWarning genericpath_check_arg_types)apr#r2br3r3r4r Gs$    r cCs`t|}t|}||d}|d|||d}}|r,||t|kr,||}||fS)zSplit a pathname. Returns tuple "(head, tail)" where "tail" is everything after the final slash. Either part may be empty.Nr7r8r5rfindlenrstrip)rCr#iheadtailr3r3r4r ds  r cCs6t|}t|trd}d}nd}d}t||d|S)Nr..rr)r7r8r/r0r@ _splitext)rCr#r'r3r3r4r us  r cCst|}|dd|fS)zJSplit a pathname into drive and path. On Posix, drive is always empty.Nrr6)rCr3r3r4r s r cCs,t|}t|}||d}||dS)z)Returns the final component of a pathnamerEN)r7r8r5rG)rCr#rJr3r3r4r s  r cCsNt|}t|}||d}|d|}|r%||t|kr%||}|S)z-Returns the directory component of a pathnamerENrF)rCr#rJrKr3r3r4rs   rc Cs6zt|}Wn tttfyYdSwt|jS)z&Test whether a path is a symbolic linkF)r7lstatOSError ValueErrorr>statS_ISLNKst_mode)r2str3r3r4rs  rc Cs*zt|WdSttfyYdSw)zCTest whether a path exists. Returns True for broken symbolic linksFT)r7rOrPrQr1r3r3r4rs  rc Cszt|}Wn ttfyYdSwt|jrdSt|}t|t r,t |d}nt |d}t |}zt|}Wn ttfyHYdSw|j }|j }||krUdS|j }|j }||kradSdS)z$Test whether a path is a mount pointF..rT)r7rOrPrQrRrSrTr8r/r0r r)st_devst_ino)r2s1parents2dev1dev2ino1ino2r3r3r4rs4     rc CsHt|}t|tr d}nd}||s|St|}||d}|dkr(t|}|dkrQdtjvrKddl }z | t j }Wn;t yJ|YSwtjd}n*ddl }|d|}t|tret|d}z||}Wn t yw|YSw|j }|durtjdkr|St|trt|}d }nd }||}|||dp|S) zOExpand ~ and ~user constructions. If user or $HOME is unknown, do nothing.~~rErHOMENASCIIvxworksr.r)r7r8r/r0r:r5findrHenvironpwdgetpwuidgetuidpw_dirKeyErrorstrgetpwnamsysplatformfsencoderI) r2tilder#rJrguserhomenamepwentrootr3r3r4rsJ              rc CsTt|}t|tr+d|vr|Stsddl}|d|jatj}d}d}t tdd}nd|vr1|St s>ddl}|d |ja t j}d }d }tj }d} |||}|sU |S| d\}}| d } | |rq| |rq| d d} z|durttj t| } n|| } Wn ty|}Ynw||d} |d|| }t|}|| 7}qK)zZExpand shell variables of form $var and ${var}. Unknown variables are left unchanged.$rNs\$(\w+|\{[^}]*\}){}environb$z\$(\w+|\{[^}]*\}){}TrE)r7r8r/r0 _varprogbrecompilercsearchgetattr_varprogrfspangroupr:r<rpfsdecoderkrH) r2rrstartendrfrJmjrsvaluerLr3r3r4rsV       rc Cst|}t|trd}d}d}d}nd}d}d}d}||kr!|S||}|r8||d r8||d s8d }||}g}|D]%}|||fvrJqA||ksZ|sR|rZ|r`|d |kr`||qA|rf|qA|}||}|rv|||}|py|S) z0Normalize path, eliminating double slashes, etc.r.rMrVrrrr}) r7r8r/r0r:r appendpopr ) r2r#emptydotdotdotinitial_slashescomps new_compscompr3r3r4rRsJ           rcCs@t|}t|st|trt}nt}t||}t|S)zReturn an absolute path.) r7r8rr/r0getcwdbgetcwdr r)r2cwdr3r3r4rys    rF)strictcCs,t|}t|dd||i\}}t|S)zlReturn the canonical path of the specified filename, eliminating any symbolic links encountered in the path.Nr)r7r8 _joinrealpathr)filenamerr2okr3r3r4r)s r)cCs|t|tr d}d}d}n d}d}d}tj}|turt}n|r!d}nt}d} t|r1|dd}|}|r||\} } }| rA| |krBq1| |kr\|rYt |\}} | |krXt |||}n|}q1t || } zt | } Wn |ysd }Ynwt | j}|s| }q1| |vr|| }|durq1|rt | nt | |d fSd|| <t|t| ||\}}|st ||d fS||| <|s3|d fS) Nr.rMrVrrrr3rEFT)r/r0r7rr-FileNotFoundErrorrPr partitionr r rOrRrSrTrreadlink)r2restrseenr#r!r"r ignored_errormaxlinksrs_newpathrUis_linkrr3r3r4rsj         ,rdarwinc Cs|stdt|}t|trd}d}d}nd}d}d}|dur$|}nt|}z9d d t||D}d d t||D}tt||g}|gt||||d}|s^|WSt |WSt t t t fyutd ||w) z#Return a relative version of a pathzno path specifiedrMr.rVrrrNcSg|]}|r|qSr3r3.0xr3r3r4 zrelpath..cSrr3r3rr3r3r4rrr+)rQr7r8r/r0rr rHrr r=r>r?DeprecationWarningr@rA) r2rr!r#r" start_list path_listrJrel_listr3r3r4r+s2    r+c s$|stdtttj|}t|dtrddnddz`fdd|D}ztfd d |D\}Wn tyBtd d wfd d|D}t|}t |}|}t |D]\}}|||krl|d |}nqZ|rqnd d}| |WSt t fytjdg|Rw)zDGiven a sequence of path names, returns the longest common sub-path.z%commonpath() arg is an empty sequencerr.rMrrcsg|]}|qSr3)r )rr2r#r3r4rszcommonpath..c3s |] }|ddkVqdS)NrEr3)rrCrr3r4 szcommonpath..z%Can't mix absolute and relative pathsNcsg|] }fdd|DqS)csg|] }|r|kr|qSr3r3)rcr!r3r4rsz)commonpath...r3)rr9rr3r4rsr,)rQtupler;r7r8r/r0setminmax enumerater r=r>r@rA) paths split_pathsrrYr[commonrJrprefixr3)r!r#r4r,s<    r,)N)'__doc__r!r"r'r#r$r%r&r(r7rnrRr@__all__r5rrr r r rNr r rrrrrrr~rrrr)rror*r+r,r3r3r3r4sN        +55' F  )