
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3

  \6Z  ã            '   @   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/d0d1g'Zd2d3„ Zd4d„ Zd5d„ Zd6d„ Zd7d„ Zd8d"„ Zd9d„ Zd:d„ Zejj e_ d;d„ Zd<d„ Zd=d„ Zd>d„ Zydd?lmZ W n ek
�r2   d	ZY nX d@d„ ZdAd„ ZdBd„ Z dCd „ Z!dDdE„ Z"yddFlm#Z# W n ek
�r†   e"Z$Y n
X dGd!„ Z$e$Z%e&e
dHƒ�o®e
j'ƒ dI dJkZ(dRdKd-„Z)dLd1„ Z*y,e
j'ƒ d	dJ… dSk�rèddNlm+Z+ ne‚W n" e,efk
�r   dOdP„ Z+Y nX yddQlm-Z. W n ek
�r8   Y nX d	S )Tz�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:\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ÚsplituncÚ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 )Ns   \/z\/)Ú
isinstanceÚbytes)Úpath© r1   ú/usr/lib64/python3.6/ntpath.pyÚ_get_bothseps"   s    
r3   c             C   sx   t j| ƒ} y.t| tƒr&| jddƒjƒ S | jddƒjƒ S W n: ttfk
rr   t| ttfƒsltd| j	j
 ƒd‚‚ Y nX dS )zaNormalize case of pathname.

    Makes all characters lowercase and all slashes into backslashes.ó   /ó   \r   r   z0normcase() argument must be str or bytes, not %rN)ÚosÚfspathr.   r/   ÚreplaceÚlowerÚ	TypeErrorÚAttributeErrorÚstrÚ	__class__Ú__name__)Úsr1   r1   r2   r   ,   s    

c             C   s2   t j| ƒ} t| ƒd } t| ƒdko0| d t| ƒkS )zTest whether a path is absoluteé   r   )r6   r7   r
   Úlenr3   )r?   r1   r1   r2   r   C   s    
c       
      G   sV  t j| ƒ} t| tƒr"d}d}d}nd}d}d}yò|sD| d d… |  t| ƒ\}}x�tt j|ƒD ]€}t|ƒ\}}	|	r”|	d |kr”|sˆ| rŒ|}|	}q^n*|r¾||kr¾|jƒ |jƒ krº|}|	}q^|}|rÖ|d
 |krÖ|| }||	 }q^W |�r|d |k�r|�r|dd … |k�r|| | S || S  ttt	fk
�rP   t
jd	| f|žŽ  ‚ Y nX d S )Nr5   s   \/ó   :r   z\/ú:r   r@   r	   éÿÿÿÿrD   )r6   r7   r.   r/   r
   Úmapr9   r:   r;   ÚBytesWarningÚgenericpathÚ_check_arg_types)
r0   Úpathsr!   ÚsepsÚcolonZresult_driveZresult_pathÚpZp_driveZp_pathr1   r1   r2   r	   K   sF    


c             C   s  t j| ƒ} t| ƒdk�rt| tƒr0d}d}d}nd}d}d}| j||ƒ}|dd… |d krä|dd	… |krä|j|dƒ}|dkr�| dd… | fS |j||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.

    é   r5   r4   rB   r   r   rC   r   é   r@   NrD   rD   )r6   r7   rA   r.   r/   r8   Úfind)rL   r!   r$   rK   ZnormpÚindexZindex2r1   r1   r2   r
   z   s.    

$c             C   sF   ddl }|jdtdƒ t| ƒ\}}t|ƒdkr>| dd… | fS ||fS )a¡  Deprecated since Python 3.1.  Please use splitdrive() instead;
    it now handles UNC paths.

    Split a pathname into UNC mount point and relative path specifiers.

    Return a 2-tuple (unc, rest); either part may be empty.
    If unc is not empty, it has the form '//host/mount' (or similar
    using backslashes).  unc+rest is always the input path.
    Paths containing drive letters never have a UNC part.
    r   Nz<ntpath.splitunc is deprecated, use ntpath.splitdrive insteadrM   )ÚwarningsÚwarnÚDeprecationWarningr
   rA   )rL   rQ   Údriver0   r1   r1   r2   r   ®   s    c             C   s|   t j| ƒ} t| ƒ}t| ƒ\}} t| ƒ}x |rF| |d  |krF|d8 }q(W | d|… | |d…  }}|j|ƒpn|}|| |fS )z~Split a pathname.

    Return tuple (head, tail) where tail is everything after the final slash.
    Either part may be empty.r@   N)r6   r7   r3   r
   rA   Úrstrip)rL   rJ   ÚdÚiÚheadÚtailr1   r1   r2   r   È   s    
c             C   s8   t j| ƒ} t| tƒr$tj| dddƒS tj| dddƒS d S )Nr5   r4   ó   .r   r   r   )r6   r7   r.   r/   rG   Ú	_splitext)rL   r1   r1   r2   r   ß   s    

c             C   s   t | ƒd S )z)Returns the final component of a pathnamer@   )r   )rL   r1   r1   r2   r   ê   s    c             C   s   t | ƒd S )z-Returns the directory component of a pathnamer   )r   )rL   r1   r1   r2   r   ñ   s    c             C   s4   yt j| ƒ}W n ttfk
r&   dS X tj|jƒS )zhTest whether a path is a symbolic link.
    This will always return false for Windows prior to 6.0.
    F)r6   ÚlstatÚOSErrorr;   ÚstatÚS_ISLNKÚst_mode)r0   Ústr1   r1   r2   r   ø   s
    c             C   s(   yt j| ƒ}W n tk
r"   dS X dS )zCTest whether a path exists.  Returns True for broken symbolic linksFT)r6   r\   r]   )r0   ra   r1   r1   r2   r     s
    )Ú_getvolumepathnamec             C   st   t j| ƒ} t| ƒ}t| ƒ} t| ƒ\}}|rD|d |krD| pB||kS ||krPdS trl| j|ƒt| ƒj|ƒ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)r6   r7   r3   r   r
   rb   rU   )r0   rJ   ÚrootÚrestr1   r1   r2   r     s    
c             C   s  t j| ƒ} t| tƒrd}nd}| j|ƒs,| S dt| ƒ }}x$||k r^| | t| ƒkr^|d7 }q<W dt jkrvt jd }n\dt jkrŒt jd }nFdt jkrš| S yt jd }W n tk
rÀ   d}Y nX t	|t jd ƒ}t| tƒræt j
|ƒ}|dk�rt	t|ƒ| d|… ƒ}|| |d	…  S )
zLExpand ~ and ~user constructs.

    If user or $HOME is unknown, do nothing.ó   ~ú~r@   ÚHOMEZUSERPROFILEZHOMEPATHZ	HOMEDRIVEÚ N)r6   r7   r.   r/   Ú
startswithrA   r3   ÚenvironÚKeyErrorr	   Úfsencoder   )r0   ÚtilderW   ÚnÚuserhomerT   r1   r1   r2   r   5  s2    









c             C   s<  t j| ƒ} 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	| ƒ}�xn|
|k �r6| |
|
d … }||k�r\| |
d d… } t	| ƒ}y&| j
|ƒ}
|	|| d|
d …  7 }	W n* tk
�rV   |	||  7 }	|d }
Y nX �nÐ||k�rN| |
d |
d … |k�r’|	|7 }	|
d7 }
n¸| |
d d… } t	| ƒ}y| j
|ƒ}
W n* tk
�râ   |	||  7 }	|d }
Y nhX | d|
… }y.|dk�rt jt jt j|ƒ ƒ}n|| }W n" tk
�r@   || | }Y nX |	|7 }	�nÞ||k�r$| |
d |
d … |k�r†|	|7 }	|
d7 }
�q,| |
d |
d … |k�rb| |
d d… } t	| ƒ}y| j
|ƒ}
W n. tk
�rô   |	|| |  7 }	|d }
Y nlX | d|
… }y.|dk�r&t jt jt j|ƒ ƒ}n|| }W n& tk
�rV   || | | }Y nX |	|7 }	nÀ| dd… }|
d7 }
| |
|
d … }x6|�r¼||k�r¼||7 }|
d7 }
| |
|
d … }�qˆW y.|dk�rât jt jt j|ƒ ƒ}n|| }W n tk
�r
   || }Y nX |	|7 }	|�r,|
d8 }
n|	|7 }	|
d7 }
qÊW |	S )zfExpand shell variables of the forms $var, ${var} and %var%.

    Unknown variables are left unchanged.ó   $ó   %r   Nz_-Úasciió   'ó   {ó   }Úenvironbú$ú%ú'ú{ú}r@   rM   )r6   r7   r.   r/   ÚstringZascii_lettersZdigitsÚgetattrrj   rA   rP   Ú
ValueErrorrl   Úfsdecoderk   )r0   r|   ZvarcharsZquoteZpercentZbraceZrbraceZdollarrj   ÚresrP   ZpathlenÚcÚvarÚvaluer1   r1   r2   r   g  s¼    











c       	      C   s\  t j| ƒ} t| tƒr*d}d}d}d}d}nd}d}d	}d
}d}| j|ƒrL| S | j||ƒ} t| ƒ\}} | j|ƒr€||7 }| j|ƒ} | j|ƒ}d}x¤|t	|ƒk �r2||  s´|| |kr¼||= q�|| |k�r(|dkoà||d  |k�r ||d |d …= |d8 }n&|dk�r|j
|ƒ�r||= n|d7 }q�|d7 }q�W | �rN| �rN|j|ƒ ||j|ƒ S )z0Normalize path, eliminating double slashes, etc.r5   r4   rZ   s   ..ó   \\.\ó   \\?\r   r   r   z..ú\\.\ú\\?\r   r@   )r„   r…   )r†   r‡   )r6   r7   r.   r/   ri   r8   r
   Úlstripr   rA   ÚendswithÚappendr	   )	r0   r!   r$   r   r    Zspecial_prefixesÚprefixÚcompsrW   r1   r1   r2   r   Ø  sF    








c             C   s@   t j| ƒ} t| ƒs8t| tƒr&t jƒ }nt jƒ }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.

    )	r6   r7   r   r.   r/   ÚgetcwdbÚgetcwdr	   r   )r0   Úcwdr1   r1   r2   Ú_abspath_fallback	  s    



r�   )Ú_getfullpathnamec             C   s.   yt t| ƒƒS  ttfk
r(   t| ƒS X dS )z&Return the absolute version of a path.N)r   r‘   r]   r~   r�   )r0   r1   r1   r2   r   !  s    ÚgetwindowsversionrN   rM   c             C   sd  t j| ƒ} t| tƒr"d}d}d}nd}d}d}|dkr:|}| sFtdƒ‚t j|ƒ}yÞtt|ƒƒ}tt| ƒƒ}t|ƒ\}}t|ƒ\}	}
t|ƒt|	ƒkr¢td	|	|f ƒ‚d
d„ |j	|ƒD ƒ}dd„ |
j	|ƒD ƒ}d}x0t
||ƒD ]"\}}t|ƒt|ƒkrôP |d7 }qÚW |gt|ƒ|  ||d…  }|�s(|S t|Ž S  tttttfk
�r^   tjd| |ƒ ‚ Y nX dS )z#Return a relative version of a pathr5   rZ   s   ..r   r   z..Nzno path specifiedz&path is on mount %r, start on mount %rc             S   s   g | ]}|r|‘qS r1   r1   )Ú.0Úxr1   r1   r2   ú
<listcomp>J  s    zrelpath.<locals>.<listcomp>c             S   s   g | ]}|r|‘qS r1   r1   )r“   r”   r1   r1   r2   r•   K  s    r   r@   r)   )r6   r7   r.   r/   r~   r   r   r
   r   r   ÚziprA   r	   r:   r;   rF   rS   rG   rH   )r0   Ústartr!   r   r    Z	start_absZpath_absZstart_driveZ
start_restZ
path_driveZ	path_restÚ
start_listÚ	path_listrW   Ze1Ze2Úrel_listr1   r1   r2   r)   .  sF    


c                s´  | st dƒ‚tttj| ƒƒ} t| d tƒr8d‰d‰ d‰nd‰d‰ d‰�y>‡ ‡fd	d
„| D ƒ}‡fdd
„|D ƒ}y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 j
ˆ ˆƒƒ\}}|jˆƒ}‡fdd
„|D ƒ}‡fdd
„|D ƒ}t|ƒ}t|ƒ}xBt|ƒD ]&\}	}
|
||	 k�r,|d|	… }P �q,W |dt|ƒ… }|�rt|ˆ n|}|ˆj|ƒ 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   r5   r4   rZ   r   r   r   c                s    g | ]}t |jˆ ˆƒjƒ ƒ‘qS r1   )r
   r8   r9   )r“   rL   )r$   r!   r1   r2   r•   w  s    zcommonpath.<locals>.<listcomp>c                s   g | ]\}}|j ˆ ƒ‘qS r1   )r   )r“   rV   rL   )r!   r1   r2   r•   x  s    c             3   s"   | ]\}}|d d… ˆ kV  qd S )Nr@   r1   )r“   rV   rL   )r!   r1   r2   ú	<genexpr>{  s    zcommonpath.<locals>.<genexpr>z%Can't mix absolute and relative pathsNc             s   s   | ]\}}|V  qd S )Nr1   )r“   rV   rL   r1   r1   r2   r›   ‚  s    r@   zPaths don't have the same drivec                s   g | ]}|r|ˆ kr|‘qS r1   r1   )r“   r�   )r   r1   r2   r•   ‡  s    c                s   g | ]}‡ fd d„|D ƒ‘qS )c                s   g | ]}|r|ˆ kr|‘qS r1   r1   )r“   r�   )r   r1   r2   r•   ‰  s    z)commonpath.<locals>.<listcomp>.<listcomp>r1   )r“   r?   )r   r1   r2   r•   ‰  s    r-   )r-   )r~   ÚtuplerE   r6   r7   r.   r/   ÚsetrA   r
   r8   r   ÚminÚmaxÚ	enumerater	   r:   r;   rG   rH   )rI   ZdrivesplitsÚsplit_pathsr   rT   r0   ÚcommonÚs1Ús2rW   r�   r‹   r1   )r$   r   r!   r2   r-   f  sF    
é   )Ú_getfinalpathnamec             C   s   t t| ƒƒS )N)r   r   )Úfr1   r1   r2   r¦   §  s    r¦   )Ú_isdir)N)r¥   r   )/Ú__doc__r   r    r%   r!   r"   r$   r#   r&   r6   Úsysr^   rG   Ú__all__r3   r   r   r	   r
   r   r   r   r[   r   r   r   r   Úntrb   ÚImportErrorr   r   r   r   r�   r‘   r   r'   Úhasattrr’   r(   r)   r-   r¦   r;   r¨   r   r1   r1   r1   r2   Ú<module>   s|   



/4

2q1

85