
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¡ê,aVl  ã                &   @   s(  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T dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0g&Zd1d2„ Zd3d„ Zd4d„ Zd5d„ Zd6d„ Zd7d„ Zd8d„ Zejj e_ d9d„ Zd:d„ Zd;d„ Zd<d„ Zzdd=lmZ W n ek
�r(   d	ZY nX d>d„ Zd?d„ Zd@d„ ZdAd „ Z dBdC„ Z!zddDlm"Z" W n ek
�r|   e!Z#Y n
X dEd!„ Z#zddFlm$Z$m%Z& W n ek
�r´   e#Z'Y nX dGdH„ Z(dIdJ„ Z)dKd*„ Z'e*e
dLƒ�oèe
 +¡ dM dNkZ,dRdOd,„Z-dPd0„ Z.zddQlm/Z0 W n ek
�r"   Y nX d	S )Sz�Common pathname manipulations, WindowsNT/95 version.

Instead of importing this module directly, import os and refer to this
module as os.path.
Ú.ú..ú\ú;ú/z.;C:\binZnulé    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Ú
commonpathc                 C   s   t | tƒrdS dS d S )Nó   \/ú\/)Ú
isinstanceÚbytes©Úpath© r4   ú+/opt/alt/python38/lib64/python3.8/ntpath.pyÚ_get_bothseps"   s    
r6   c                 C   s8   t  | ¡} t| tƒr$|  dd¡ ¡ S |  dd¡ ¡ S dS )zaNormalize case of pathname.

    Makes all characters lowercase and all slashes into backslashes.ó   /ó   \r   r   N)ÚosÚfspathr0   r1   ÚreplaceÚlower©Úsr4   r4   r5   r   ,   s    

c                 C   sj   t  | ¡} t| tƒr,|  dd¡ d¡rBdS n|  dd¡ d¡rBdS t| ƒd } t| ƒd	koh| d	 t| ƒkS )
zTest whether a path is absoluter7   r8   ó   \\?\Tr   r   ú\\?\é   r   )	r9   r:   r0   r1   r;   Ú
startswithr   Úlenr6   r=   r4   r4   r5   r	   =   s    

c           
   
   G   sT  t  | ¡} t| tƒr"d}d}d}nd}d}d}zð|sD| d d… |  t| ƒ\}}tt j|ƒD ]~}t|ƒ\}}	|	r�|	d |kr�|s„|sˆ|}|	}q\n*|rº||krº| ¡ | ¡ kr¶|}|	}q\|}|rÒ|d |krÒ|| }||	 }q\|�r|d |k�r|�r|dd … |k�r|| | W S || W S  ttt	fk
�rN   t
jd	| f|žŽ  ‚ Y nX d S )
Nr8   r.   ó   :r   r/   ú:r   éÿÿÿÿr
   )r9   r:   r0   r1   r   Úmapr<   Ú	TypeErrorÚAttributeErrorÚBytesWarningÚgenericpathÚ_check_arg_types)
r3   Úpathsr!   ÚsepsÚcolonZresult_driveZresult_pathÚpZp_driveZp_pathr4   r4   r5   r
   M   sL    


ÿÿ
c                 C   s  t  | ¡} t| ƒdk�rt| tƒr0d}d}d}nd}d}d}|  ||¡}|dd… |d krä|dd	… |krä| |d¡}|d
kr�| dd… | fS | ||d ¡}||d kr¼| dd… | fS |d
krÌt| ƒ}| d|… | |d… fS |dd… |k�r| dd… | dd… fS | dd… | fS )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.

    é   r8   r7   rD   r   r   rE   r   é   rF   NrA   )r9   r:   rC   r0   r1   r;   Úfind)rP   r!   r$   rO   ZnormpÚindexZindex2r4   r4   r5   r   |   s.    

$c                 C   sx   t  | ¡} t| ƒ}t| ƒ\}} t| ƒ}|rD| |d  |krD|d8 }q&| d|… | |d…  }}| |¡pj|}|| |fS )z~Split a pathname.

    Return tuple (head, tail) where tail is everything after the final slash.
    Either part may be empty.rA   N)r9   r:   r6   r   rC   Úrstrip)rP   rN   ÚdÚiÚheadÚtailr4   r4   r5   r   ´   s    

c                 C   s8   t  | ¡} t| tƒr$t | ddd¡S t | ddd¡S d S )Nr8   r7   ó   .r   r   r   )r9   r:   r0   r1   rK   Ú	_splitext©rP   r4   r4   r5   r   Ë   s    

c                 C   s   t | ƒd S )z)Returns the final component of a pathnamerA   ©r   r\   r4   r4   r5   r   Ö   s    c                 C   s   t | ƒd S )z-Returns the directory component of a pathnamer   r]   r\   r4   r4   r5   r   Ý   s    c              
   C   s8   zt  | ¡}W n tttfk
r*   Y dS X t |j¡S )zhTest whether a path is a symbolic link.
    This will always return false for Windows prior to 6.0.
    F)r9   ÚlstatÚOSErrorÚ
ValueErrorrI   ÚstatÚS_ISLNKÚst_mode©r3   Ústr4   r4   r5   r   ä   s
    c              	   C   s.   zt  | ¡}W n ttfk
r(   Y dS X dS )zCTest whether a path exists.  Returns True for broken symbolic linksFT)r9   r^   r_   r`   rd   r4   r4   r5   r   ð   s
    )Ú_getvolumepathnamec                 C   st   t  | ¡} t| ƒ}t| ƒ} t| ƒ\}}|rD|d |krD| pB||kS ||krPdS trl|  |¡t| ƒ |¡kS dS dS )zaTest whether a path is a mount point (a drive root, the root of a
    share, or a mounted volume)r   TFN)r9   r:   r6   r   r   rf   rU   )r3   rN   ÚrootÚrestr4   r4   r5   r     s    
c                 C   sú   t  | ¡} t| tƒrd}nd}|  |¡s,| S dt| ƒ }}||k r\| | t| ƒkr\|d7 }q:dt jkrrt jd }nFdt jkr€| S zt jd }W n tk
r¦   d}Y nX t	|t jd ƒ}t| tƒrÌt  
|¡}|dkrêt	t|ƒ| d|… ƒ}|| |d…  S )	zLExpand ~ and ~user constructs.

    If user or $HOME is unknown, do nothing.ó   ~ú~rA   ZUSERPROFILEZHOMEPATHZ	HOMEDRIVEÚ N)r9   r:   r0   r1   rB   rC   r6   ÚenvironÚKeyErrorr
   Úfsencoder   )r3   ÚtilderW   ÚnÚuserhomeÚdriver4   r4   r5   r   !  s.    








c                 C   s2  t  | ¡} t| tƒrhd| kr(d| kr(| S ddl}t|j|j d dƒ}d}d}d}d	}d}tt d
dƒ}nFd| kr|d| kr|| S ddl}|j|j d }d}d}d}d}d}t j}| dd… }	d}
t	| ƒ}|
|k �r.| |
|
d … }||k�rX| |
d d… } t	| ƒ}z&|  
|¡}
|	|| d|
d …  7 }	W n* tk
�rR   |	||  7 }	|d }
Y nX �nÌ||k�rJ| |
d |
d … |k�rŽ|	|7 }	|
d7 }
n¸| |
d d… } t	| ƒ}z|  
|¡}
W n* tk
�rÞ   |	||  7 }	|d }
Y nhX | d|
… }z.|dk�rt  t jt  |¡ ¡}n|| }W n" tk
�r<   || | }Y nX |	|7 }	�nÚ||k�r| |
d |
d … |k�r‚|	|7 }	|
d7 }
�q$| |
d |
d … |k�r^| |
d d… } t	| ƒ}z|  
|¡}
W n. tk
�rð   |	|| |  7 }	|d }
Y nlX | d|
… }z.|dk�r"t  t jt  |¡ ¡}n|| }W n& tk
�rR   || | | }Y nX |	|7 }	n¼| dd… }|
d7 }
| |
|
d … }|�r¶||k�r¶||7 }|
d7 }
| |
|
d … }�q‚z.|dk�rÚt  t jt  |¡ ¡}n|| }W n tk
�r   || }Y nX |	|7 }	|�r$|
d8 }
n|	|7 }	|
d7 }
qÆ|	S )zfExpand shell variables of the forms $var, ${var} and %var%.

    Unknown variables are left unchanged.ó   $ó   %r   Nz_-Úasciió   'ó   {ó   }Úenvironbú$ú%ú'Ú{Ú}rA   rQ   )r9   r:   r0   r1   ÚstringZascii_lettersZdigitsÚgetattrrl   rC   rT   r`   rn   Úfsdecoderm   )r3   r   ZvarcharsZquoteZpercentZbraceZrbraceZdollarrl   ÚresrT   ZpathlenÚcÚvarÚvaluer4   r4   r5   r   Q  s¼    













c           	      C   sP  t  | ¡} t| tƒr*d}d}d}d}d}nd}d}d}d	}d
}|  |¡rL| S |  ||¡} t| ƒ\}} |  |¡r€||7 }|  |¡} |  |¡}d}|t	|ƒk �r,|| r°|| |kr¸||= qŽ|| |k�r"|dkrú||d  |krú||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.r8   r7   rZ   ó   ..)s   \\.\r?   r   r   r   r   )z\\.\r@   r   rA   )r9   r:   r0   r1   rB   r;   r   Úlstripr   rC   ÚendswithÚappendr
   )	r3   r!   r$   r   r    Zspecial_prefixesÚprefixÚcompsrW   r4   r4   r5   r   Â  sF    









c                 C   s@   t  | ¡} t| ƒs8t| tƒr&t  ¡ }nt  ¡ }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.

    )	r9   r:   r	   r0   r1   ÚgetcwdbÚgetcwdr
   r   )r3   Úcwdr4   r4   r5   Ú_abspath_fallbackô  s    



r�   )Ú_getfullpathnamec              	   C   s4   zt t| ƒƒW S  ttfk
r.   t| ƒ Y S X dS )z&Return the absolute version of a path.N)r   r�   r_   r`   r�   r2   r4   r4   r5   r     s    )Ú_getfinalpathnameÚreadlinkc              
   C   s²   d}t ƒ }t| ƒ|kr®| t| ƒ¡ z:| }t| ƒ} t| ƒs\t|ƒsJ|} W q®ttt|ƒ| ƒƒ} W q
 t	k
r” } z|j
|kr‚W Y ¢q®‚ W 5 d }~X Y q
 tk
rª   Y q®Y q
X q
| S )N)rA   rQ   rR   é   é   é    é2   éC   éW   i&  i(  i)  )Úsetr   ÚaddÚ_nt_readlinkr	   r   r   r
   r   r_   Úwinerrorr`   )r3   Úallowed_winerrorÚseenZold_pathÚexr4   r4   r5   Ú_readlink_deep  s&    
r    c                 C   sÚ   d}d}| rÖzt | ƒ} |r$t| |ƒn| W S  tk
rÒ } zŒ|j|krF‚ z0t| ƒ}|| krt|rft||ƒn|W  W Y ¢TS W n tk
rŠ   Y nX t| ƒ\} }| r°|s°| |  W Y ¢S |r¾t||ƒn|}W 5 d }~X Y qX q|S )N)rA   rQ   rR   r“   r”   r•   r–   r—   r˜   é{   i€  i�  rk   )r‘   r
   r_   rœ   r    r   )r3   r�   rY   rŸ   Únew_pathÚnamer4   r4   r5   Ú_getfinalpathname_nonstrictC  s(    
 &r¤   c           	   
   C   s^  t | ƒ} t| tƒrBd}d}d}t ¡ }t| ƒtt t¡ƒkrjdS n(d}d}d}t ¡ }t| ƒttƒkrjdS |  	|¡}|sŠt
| ƒsŠt|| ƒ} zt| ƒ} d	}W n0 tk
rÊ } z|j}t| ƒ} W 5 d }~X Y nX |�sZ|  	|¡�rZ|  	|¡rþ|| t|ƒd …  }n| t|ƒd … }zt|ƒ| k�r"|} W n4 tk
�rX } z|j|k�rH|} W 5 d }~X Y nX | S )
Nr?   s   \\?\UNC\s   \\s   \\.\NULr@   z\\?\UNC\z\\z\\.\NULr   )r   r0   r1   r9   rŒ   r   rn   r&   r�   rB   r	   r
   r‘   r_   rœ   r¤   rC   )	r3   rŠ   Z
unc_prefixZnew_unc_prefixrŽ   Z
had_prefixZinitial_winerrorrŸ   Zspathr4   r4   r5   r'   q  sD    



ÚgetwindowsversionrR   rQ   c                 C   sf  t  | ¡} t| tƒr"d}d}d}nd}d}d}|dkr:|}| sFtdƒ‚t  |¡}zàtt|ƒƒ}tt| ƒƒ}t|ƒ\}}t|ƒ\}	}
t|ƒt|	ƒkr¢td	|	|f ƒ‚d
d„ | 	|¡D ƒ}dd„ |
 	|¡D ƒ}d}t
||ƒD ]$\}}t|ƒt|ƒkrô qþ|d7 }qØ|gt|ƒ|  ||d…  }|�s(|W S t|Ž W S  tttttfk
�r`   t d| |¡ ‚ Y nX dS )z#Return a relative version of a pathr8   rZ   r†   r   r   r   Nzno path specifiedz&path is on mount %r, start on mount %rc                 S   s   g | ]}|r|‘qS r4   r4   ©Ú.0Úxr4   r4   r5   Ú
<listcomp>Â  s      zrelpath.<locals>.<listcomp>c                 S   s   g | ]}|r|‘qS r4   r4   r¦   r4   r4   r5   r©   Ã  s      r   rA   r)   )r9   r:   r0   r1   r`   r   r   r   r   r   ÚziprC   r
   rH   rI   rJ   ÚDeprecationWarningrK   rL   )r3   Ústartr!   r   r    Z	start_absZpath_absZstart_driveZ
start_restZ
path_driveZ	path_restÚ
start_listÚ	path_listrW   Ze1Ze2Úrel_listr4   r4   r5   r)   ¦  sJ    


 ÿ

c              	      s¶  | st dƒ‚tttj| ƒƒ} t| d tƒr8d‰d‰ d‰nd‰d‰ d‰�z@‡ ‡fd	d
„| D ƒ}‡fdd
„|D ƒ}zt‡fdd„|D ƒƒ\}W n t k
r¨   t dƒd‚Y nX ttdd„ |D ƒƒƒdkrÌt dƒ‚t	| d  
ˆ ˆ¡ƒ\}}| ˆ¡}‡fdd
„|D ƒ}‡fdd
„|D ƒ}t|ƒ}t|ƒ}t|ƒD ]*\}	}
|
||	 k�r*|d|	… } �qf�q*|dt|ƒ… }|�rt|ˆ n|}|ˆ |¡ W S  ttfk
�r°   tjd| žŽ  ‚ Y nX dS )zDGiven a sequence of path names, returns the longest common sub-path.z%commonpath() arg is an empty sequencer   r8   r7   rZ   r   r   r   c                    s    g | ]}t | ˆ ˆ¡ ¡ ƒ‘qS r4   )r   r;   r<   )r§   rP   )r$   r!   r4   r5   r©   ï  s     zcommonpath.<locals>.<listcomp>c                    s   g | ]\}}|  ˆ ¡‘qS r4   r]   ©r§   rV   rP   ©r!   r4   r5   r©   ð  s     c                 3   s"   | ]\}}|d d… ˆ kV  qd S )NrA   r4   r°   r±   r4   r5   Ú	<genexpr>ó  s     zcommonpath.<locals>.<genexpr>z%Can't mix absolute and relative pathsNc                 s   s   | ]\}}|V  qd S )Nr4   r°   r4   r4   r5   r²   ú  s     rA   zPaths don't have the same drivec                    s   g | ]}|r|ˆ kr|‘qS r4   r4   ©r§   rƒ   ©r   r4   r5   r©   ÿ  s       c                    s   g | ]}‡ fd d„|D ƒ‘qS )c                    s   g | ]}|r|ˆ kr|‘qS r4   r4   r³   r´   r4   r5   r©     s       z)commonpath.<locals>.<listcomp>.<listcomp>r4   )r§   r>   r´   r4   r5   r©     s     r-   )r-   )r`   ÚtuplerG   r9   r:   r0   r1   r™   rC   r   r;   r   ÚminÚmaxÚ	enumerater
   rH   rI   rK   rL   )rM   ZdrivesplitsÚsplit_pathsr	   rr   r3   ÚcommonÚs1Ús2rW   rƒ   rŠ   r4   )r$   r   r!   r5   r-   Þ  sF    

)Ú_isdir)N)1Ú__doc__r   r    r%   r!   r"   r$   r#   r&   r9   Úsysra   rK   Ú__all__r6   r   r	   r
   r   r   r   r[   r   r   r   r   Úntrf   ÚImportErrorr   r   r   r   r�   r�   r   r‘   r’   r›   r'   r    r¤   Úhasattrr¥   r(   r)   r-   r½   r   r4   r4   r4   r5   Ú<module>   s²   	                          ú
/8

0q2

*.2ÿ
84