B
    ¦�2[YZ  ã            &   @   s0  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y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 yddBlm!Z! W n ek
�rx   dCd!„ Z"Y n
X dDd!„ Z"e"Z#e$e
dEƒ�o e
 %¡ dF dGkZ&dOdHd,„Z'dId0„ Z(y,e
 %¡ d	dG… dJk�rÚddKlm)Z) ne‚W n" e*efk
�r   dLdM„ Z)Y nX yddNlm+Z, W n ek
�r*   Y nX d	S )Pz�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ÚdirnameZcommonprefixZgetsizeZgetmtimeZgetatimeZgetctimeÚislinkÚexistsÚlexistsÚisdirZisfileÚismountÚ
expanduserÚ
expandvarsÚnormpathÚabspathÚcurdirÚpardirÚsepÚpathsepÚdefpathÚaltsepÚextsepÚdevnullÚrealpathÚsupports_unicode_filenamesÚrelpathZsamefileZsameopenfileÚsamestatÚ
commonpathc             C   s   t | tƒrdS dS d S )Ns   \/z\/)Ú
isinstanceÚbytes)Úpath© r(   ú%C:\python_env\checklist\lib\ntpath.pyÚ_get_bothseps"   s    
r*   c          	   C   sx   t  | ¡} y.t| tƒr&|  dd¡ ¡ S |  dd¡ ¡ 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__)Úsr(   r(   r)   r   ,   s    

c             C   s2   t  | ¡} t| ƒd } t| ƒdko0| d t| ƒkS )zTest whether a path is absoluteé   r   )r-   r.   r
   Úlenr*   )r6   r(   r(   r)   r   C   s    
c       
   
   G   sT  t  | ¡} 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†|sŠ|}|	}q^n*|r¼||kr¼| ¡ | ¡ 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
�rN   t
jd	| f|žŽ  ‚ Y nX d S )
Nr,   s   \/ó   :r   z\/ú:r   éÿÿÿÿr	   )r-   r.   r%   r&   r
   Úmapr0   r1   r2   ÚBytesWarningÚgenericpathÚ_check_arg_types)
r'   Úpathsr   ÚsepsÚcolonZresult_driveZresult_pathÚpZp_driveZp_pathr(   r(   r)   r	   K   sF    

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.

    é   r,   r+   r9   r   r   r:   r   é   r;   Nr7   )r-   r.   r8   r%   r&   r/   Úfind)rC   r   r   rB   ZnormpÚindexZindex2r(   r(   r)   r
   z   s.    

$c             C   s|   t  | ¡} t| ƒ}t| ƒ\}} t| ƒ}x |rF| |d  |krF|d8 }q(W | d|… | |d…  }}| |¡pn|}|| |fS )z~Split a pathname.

    Return tuple (head, tail) where tail is everything after the final slash.
    Either part may be empty.r7   N)r-   r.   r*   r
   r8   Úrstrip)rC   rA   ÚdÚiÚheadÚtailr(   r(   r)   r   ²   s    
c             C   s8   t  | ¡} t| tƒr$t | ddd¡S t | ddd¡S d S )Nr,   r+   ó   .r   r   r   )r-   r.   r%   r&   r>   Ú	_splitext)rC   r(   r(   r)   r   É   s    

c             C   s   t | ƒd S )z)Returns the final component of a pathnamer7   )r   )rC   r(   r(   r)   r   Ô   s    c             C   s   t | ƒd S )z-Returns the directory component of a pathnamer   )r   )rC   r(   r(   r)   r   Û   s    c          	   C   s4   yt  | ¡}W n ttfk
r&   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)r-   ÚlstatÚOSErrorr2   ÚstatÚS_ISLNKÚst_mode)r'   Ústr(   r(   r)   r   â   s
    c             C   s(   yt  | ¡}W n tk
r"   dS X dS )zCTest whether a path exists.  Returns True for broken symbolic linksFT)r-   rO   rP   )r'   rT   r(   r(   r)   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)r-   r.   r*   r   r
   rU   rH   )r'   rA   ZrootÚrestr(   r(   r)   r     s    
c             C   s  t  | ¡} t| tƒrd}nd}|  |¡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  
|¡}|dk�rt	t|ƒ| d|… ƒ}|| |d	…  S )
zLExpand ~ and ~user constructs.

    If user or $HOME is unknown, do nothing.ó   ~ú~r7   ÚHOMEZUSERPROFILEZHOMEPATHZ	HOMEDRIVEÚ N)r-   r.   r%   r&   Ú
startswithr8   r*   ÚenvironÚKeyErrorr	   Úfsencoder   )r'   ZtilderJ   ÚnZuserhomeÚdriver(   r(   r)   r     s2    









c             C   s<  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	| ƒ}�xn|
|k �r6| |
|
d … }||k�r\| |
d d… } t	| ƒ}y&|  
|¡}
|	|| 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|  
|¡}
W n* tk
�râ   |	||  7 }	|d }
Y nhX | d|
… }y.|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�rb| |
d d… } t	| ƒ}y|  
|¡}
W n. tk
�rô   |	|| |  7 }	|d }
Y nlX | d|
… }y.|dk�r&t  t jt  |¡ ¡}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  t jt  |¡ ¡}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ú$ú%ú'ú{ú}r7   rD   )r-   r.   r%   r&   ÚstringZascii_lettersZdigitsÚgetattrr\   r8   rG   Ú
ValueErrorr^   Úfsdecoder]   )r'   rm   ZvarcharsZquoteZpercentZbraceZrbraceZdollarr\   ZresrG   ZpathlenÚcÚvarÚvaluer(   r(   r)   r   Q  s¼    











c       	      C   sT  t  | ¡} t| tƒr*d}d}d}d}d}nd}d}d}d	}d
}|  |¡rL| S |  ||¡} t| ƒ\}} |  |¡r€||7 }|  |¡} |  |¡}d}x |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�W |�sF|�sF| |¡ || |¡ S )z0Normalize path, eliminating double slashes, etc.r,   r+   rM   s   ..)s   \\.\s   \\?\r   r   r   z..)z\\.\z\\?\r   r7   )r-   r.   r%   r&   r[   r/   r
   Úlstripr   r8   ÚendswithÚappendr	   )	r'   r   r   r   r   Zspecial_prefixesÚprefixZcompsrJ   r(   r(   r)   r   Â  sF    








)Ú_getfullpathnamec             C   s@   t  | ¡} t| ƒs8t| tƒr&t  ¡ }nt  ¡ }t|| ƒ} t| ƒS )z&Return the absolute version of a path.)	r-   r.   r   r%   r&   ÚgetcwdbÚgetcwdr	   r   )r'   Zcwdr(   r(   r)   r   ù  s    



c             C   sV   | r2t  | ¡} yt| ƒ} W qN tk
r.   Y qNX nt| tƒrFt  ¡ } nt  ¡ } t| ƒS )z&Return the absolute version of a path.)	r-   r.   rx   rP   r%   r&   ry   rz   r   )r'   r(   r(   r)   r     s    


ÚgetwindowsversionrE   rD   c             C   sd  t  | ¡} t| tƒr"d}d}d}nd}d}d}|dkr:|}| sFtdƒ‚t  |¡}yÞtt|ƒƒ}tt| ƒƒ}t|ƒ\}}t|ƒ\}	}
t|ƒt|	ƒkr¢td	|	|f ƒ‚d
d„ | 	|¡D ƒ}dd„ |
 	|¡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 d| |¡ ‚ Y nX dS )z#Return a relative version of a pathr,   rM   s   ..r   r   z..Nzno path specifiedz&path is on mount %r, start on mount %rc             S   s   g | ]}|r|‘qS r(   r(   )Ú.0Úxr(   r(   r)   ú
<listcomp>6  s    zrelpath.<locals>.<listcomp>c             S   s   g | ]}|r|‘qS r(   r(   )r|   r}   r(   r(   r)   r~   7  s    r   r7   r"   )r-   r.   r%   r&   ro   r   r   r
   r   r   Úzipr8   r	   r1   r2   r=   ÚDeprecationWarningr>   r?   )r'   Ústartr   r   r   Z	start_absZpath_absZstart_driveZ
start_restZ
path_driveZ	path_restZ
start_listÚ	path_listrJ   Ze1Ze2Zrel_listr(   r(   r)   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  
ˆ ˆ¡ƒ\}}| ˆ¡}‡fdd
„|D ƒ}‡fdd
„|D ƒ}t|ƒ}t|ƒ}xBt|ƒD ]&\}	}
|
||	 k�r,|d|	… }P �q,W |dt|ƒ… }|�rt|ˆ n|}|ˆ |¡ 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   r,   r+   rM   r   r   r   c                s    g | ]}t | ˆ ˆ¡ ¡ ƒ‘qS r(   )r
   r/   r0   )r|   rC   )r   r   r(   r)   r~   c  s    zcommonpath.<locals>.<listcomp>c                s   g | ]\}}|  ˆ ¡‘qS r(   )r   )r|   rI   rC   )r   r(   r)   r~   d  s    c             3   s"   | ]\}}|d d… ˆ kV  qd S )Nr7   r(   )r|   rI   rC   )r   r(   r)   ú	<genexpr>g  s    zcommonpath.<locals>.<genexpr>z%Can't mix absolute and relative pathsNc             s   s   | ]\}}|V  qd S )Nr(   )r|   rI   rC   r(   r(   r)   rƒ   n  s    r7   zPaths don't have the same drivec                s   g | ]}|r|ˆ kr|‘qS r(   r(   )r|   rq   )r   r(   r)   r~   s  s    c                s   g | ]}‡ fd d„|D ƒ‘qS )c                s   g | ]}|r|ˆ kr|‘qS r(   r(   )r|   rq   )r   r(   r)   r~   u  s    z)commonpath.<locals>.<listcomp>.<listcomp>r(   )r|   r6   )r   r(   r)   r~   u  s    r$   )r$   )ro   Útupler<   r-   r.   r%   r&   Úsetr8   r
   r/   r   ÚminÚmaxÚ	enumerater	   r1   r2   r>   r?   )r@   ZdrivesplitsZsplit_pathsr   r`   r'   ZcommonZs1Zs2rJ   rq   rw   r(   )r   r   r   r)   r$   R  sF    
)é   r   )Ú_getfinalpathnamec             C   s   t t| ƒƒS )N)r   r   )Úfr(   r(   r)   rŠ   “  s    rŠ   )Ú_isdir)N)-Ú__doc__r   r   r   r   r   r   r   r   r-   ÚsysrQ   r>   Ú__all__r*   r   r   r	   r
   r   r   rN   r   r   r   r   ÚntrU   ÚImportErrorr   r   r   r   rx   r   r    Úhasattrr{   r!   r"   r$   rŠ   r2   rŒ   r   r(   r(   r(   r)   Ú<module>   sx   



/8

2q3
85