B
    18™\q¡  ã               @   s¬  d dl Z d dlZd dlZd dlZd dlZd dlZyd dlZ[dZW n ek
rZ   dZY nX yd dl	Z	[	dZ
W n ek
r†   dZ
Y nX yd dlZ[dZW n ek
r²   dZY nX yd dlmZ W n ek
rÜ   dZY nX yd dlmZ W n ek
r   dZY nX 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gZG dd„ deƒZG d d„ deƒZG d!d„ deƒZG d"d„ deƒZG d#d$„ d$eƒZG d%d&„ d&eƒZd‚d(d„Zd)d*„ Zdd+œd,d„Zdd+œd-d„Zee d.ƒrêdd+œd/d0„Znd1d0„ Zdd+œd2d	„Z dd+œd3d
„Z!dd+œd4d„Z"d5d„ Z#dde"dfd6d„Z$d7d8„ Z%d9d:„ Z&e j'e je j(e j)he j*koze j+e j,koze je j-kZ.dƒd;d„Z/e.e/_0d<d=„ Z1e"fd>d„Z2d?d@„ Z3dAdB„ Z4dCdD„ Z5d„dFdG„Z6d…dHdI„Z7dJe6dKgdLfiZ8er e6dMgdNfe8dO< e7g dPfe8dQ< e
re6dRgdSfe8dT< er,e6dUgdVfe8dW< dXd„ Z9d†dZd„Z:d[d„ Z;d‡d\d„Z<d]d„ Z=d^d_„ Z>dˆd`d„Z?dad„ Z@dbdc„ ZAddde„ ZBdfdg„ ZCdhgeCg dLfdigeBg dPfdjœZDerÂdkdlgeCg dNfeDdO< e
rÜdmdngeCg dSfeDdT< erödodpgeCg dVfeDdW< dqdr„ ZEd‰dsd„ZFee dtƒrLe Gdu¡ e Hdvdw¡ZIdxeIjJ_KdyeIjL_KdzeIjM_Kd{du„ ZNn2e jOd|kr~d dlPZPe Gdu¡ e Hdvdw¡ZId}du„ ZNdŠd~d„ZQd‹d€d„ZRe jSe jTB dfdd„ZUdS )Œé    NTF)Úgetpwnam)ÚgetgrnamÚcopyfileobjÚcopyfileÚcopymodeÚcopystatÚcopyÚcopy2ÚcopytreeÚmoveÚrmtreeÚErrorÚSpecialFileErrorÚ	ExecErrorÚmake_archiveÚget_archive_formatsÚregister_archive_formatÚunregister_archive_formatÚget_unpack_formatsÚregister_unpack_formatÚunregister_unpack_formatÚunpack_archiveÚignore_patternsÚchownÚwhichÚget_terminal_sizeÚSameFileErrorc               @   s   e Zd ZdS )r   N)Ú__name__Ú
__module__Ú__qualname__© r    r    úJ/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/shutil.pyr   7   s   c               @   s   e Zd ZdS )r   N)r   r   r   r    r    r    r!   r   :   s   c               @   s   e Zd ZdS )r   N)r   r   r   r    r    r    r!   r   =   s   c               @   s   e Zd ZdS )r   N)r   r   r   r    r    r    r!   r   A   s   c               @   s   e Zd ZdS )Ú	ReadErrorN)r   r   r   r    r    r    r!   r"   D   s   r"   c               @   s   e Zd ZdS )ÚRegistryErrorN)r   r   r   r    r    r    r!   r#   G   s   r#   é @  c             C   s$   x|   |¡}|sP | |¡ qW d S )N)ÚreadÚwrite)ÚfsrcÚfdstÚlengthZbufr    r    r!   r   L   s
    
c             C   sX   t tjdƒr0ytj | |¡S  tk
r.   dS X tj tj | ¡¡tj tj |¡¡kS )NÚsamefileF)ÚhasattrÚosÚpathr*   ÚOSErrorÚnormcaseÚabspath)ÚsrcÚdstr    r    r!   Ú	_samefileT   s    r3   )Úfollow_symlinksc         
   C   sÆ   t | |ƒrtd | |¡ƒ‚xL| |gD ]@}yt |¡}W n tk
rJ   Y q$X t |j¡r$td| ƒ‚q$W |sŒtj	 
| ¡rŒt t | ¡|¡ n6t| dƒ&}t|dƒ}t||ƒ W d Q R X W d Q R X |S )Nz{!r} and {!r} are the same filez`%s` is a named pipeÚrbÚwb)r3   r   Úformatr,   Ústatr.   ÚS_ISFIFOÚst_moder   r-   ÚislinkÚsymlinkÚreadlinkÚopenr   )r1   r2   r4   ÚfnÚstr'   r(   r    r    r!   r   `   s    
c            C   sx   |s<t j | ¡r<t j |¡r<tt dƒr6t jt j }}qZd S ntt dƒrVt jt j }}nd S || ƒ}||t |j	¡ƒ d S )NÚlchmodÚchmod)
r,   r-   r;   r+   ÚlstatrA   r8   rB   ÚS_IMODEr:   )r1   r2   r4   Z	stat_funcZ
chmod_funcr@   r    r    r!   r   }   s    

Ú	listxattrc            C   s¾   yt j| |d}W n6 tk
rH } z|jtjtjfkr8‚ d S d }~X Y nX xn|D ]f}y&t j| ||d}t j||||d W qP tk
r´ } z|jtjtjtjfkr¤‚ W d d }~X Y qPX qPW d S )N)r4   )	r,   rE   r.   ÚerrnoÚENOTSUPZENODATAÚgetxattrÚsetxattrZEPERM)r1   r2   r4   ÚnamesÚeÚnameÚvaluer    r    r!   Ú
_copyxattr“   s    	
rN   c              O   s   d S )Nr    )ÚargsÚkwargsr    r    r!   rN   ª   s    c      	   
      s6  d d dœdd„‰ |p,t j | ¡o*t j |¡ }|r@‡ fdd„}n‡ fdd„}|dƒ| |d}t |j¡}|d	ƒ||j|jf|d y|d
ƒ|||d W n tk
r¬   Y nX t	|dƒr$y|dƒ||j
|d W nP tk
r" } z0x*dD ] }t	t|ƒrì|jtt|ƒkrìP qìW ‚ W d d }~X Y nX t| ||d d S )N)Únsr4   c             W   s   d S )Nr    )rQ   r4   rO   r    r    r!   Ú_nop¸   s    zcopystat.<locals>._nopc                s   t t| ˆ ƒS )N)Úgetattrr,   )rL   )rR   r    r!   Úlookup¿   s    zcopystat.<locals>.lookupc                s   t t| ˆ ƒ}|tjkr|S ˆ S )N)rS   r,   Úsupports_follow_symlinks)rL   r?   )rR   r    r!   rT   Ä   s    
r8   )r4   ÚutimerB   Úst_flagsZchflags)Z
EOPNOTSUPPrG   )r,   r-   r;   r8   rD   r:   Úst_atime_nsÚst_mtime_nsÚNotImplementedErrorr+   rW   r.   rF   rS   rN   )	r1   r2   r4   ZfollowrT   r@   ÚmodeÚwhyÚerrr    )rR   r!   r   ­   s,    
c            C   sB   t j |¡r"t j |t j | ¡¡}t| ||d t| ||d |S )N)r4   )r,   r-   ÚisdirÚjoinÚbasenamer   r   )r1   r2   r4   r    r    r!   r   ç   s
    c            C   sB   t j |¡r"t j |t j | ¡¡}t| ||d t| ||d |S )N)r4   )r,   r-   r^   r_   r`   r   r   )r1   r2   r4   r    r    r!   r	   ù   s
    c                 s   ‡ fdd„}|S )Nc                s,   g }xˆ D ]}|  t ||¡¡ q
W t|ƒS )N)ÚextendÚfnmatchÚfilterÚset)r-   rJ   Úignored_namesÚpattern)Úpatternsr    r!   Ú_ignore_patterns  s    
z)ignore_patterns.<locals>._ignore_patternsr    )rg   rh   r    )rg   r!   r     s    c             C   sâ  t  | ¡}|d k	r|| |ƒ}ntƒ }t  |¡ g }x@|D ]6}	|	|krJq:t j | |	¡}
t j ||	¡}y t j |
¡rÜt  |
¡}|r t  ||¡ t	|
|| d n:t j 
|¡s²|r²w:t j |
¡rÐt|
||||ƒ n
||
|ƒ n(t j |
¡rút|
||||ƒ n
||
|ƒ W q: tk
r: } z| |jd ¡ W d d }~X Y q: tk
rp } z| |
|t|ƒf¡ W d d }~X Y q:X q:W yt	| |ƒ W nJ tk
rÎ } z*t|dd ƒd kr¾| | |t|ƒf¡ W d d }~X Y nX |rÞt|ƒ‚|S )N)r4   r   Zwinerror)r,   Úlistdirrd   Úmakedirsr-   r_   r;   r=   r<   r   Úexistsr^   r
   r   ra   rO   r.   ÚappendÚstrrS   )r1   r2   ÚsymlinksÚignoreÚcopy_functionZignore_dangling_symlinksrJ   re   ÚerrorsrL   ZsrcnameZdstnameÚlinktor]   r\   r    r    r!   r
     sL    $



 *&c          	   C   sP  y"t  | ¡}t|ƒ}W d Q R X W n* tk
rL   |t j| t ¡ ƒ g }Y nX xÄ|D ]¼}|j}y|jdd}W n tk
r†   d}Y nX |rØy| ¡ ržtdƒ‚W n* tk
rÊ   |t jj	|t ¡ ƒ wTY nX t
||ƒ qTyt  |¡ W qT tk
r   |t j|t ¡ ƒ Y qTX qTW yt  | ¡ W n( tk
rJ   |t j| t ¡ ƒ Y nX d S )NF)r4   z%Cannot call rmtree on a symbolic link)r,   ÚscandirÚlistr.   ÚsysÚexc_infor-   Úis_dirÚ
is_symlinkr;   Ú_rmtree_unsafeÚunlinkÚrmdir)r-   ÚonerrorÚ
scandir_itÚentriesÚentryÚfullnamerw   r    r    r!   ry   q  s8    


ry   c          
   C   sþ  y"t  | ¡}t|ƒ}W d Q R X W n: tk
r\ } z||_|t j|t ¡ ƒ d S d }~X Y nX x˜|D ]Ž}t j ||j	¡}y,|j
dd}|r¦|jdd}	t |	j¡}W n tk
rÀ   d}Y nX |r¸yt j|j	t j| d}
W n( tk
r   |t j|t ¡ ƒ Y n®X zžt j |	t  |
¡¡rnt|
||ƒ yt j|j	| d W n( tk
rj   |t j|t ¡ ƒ Y nX n8ytdƒ‚W n* tk
r¤   |t jj|t ¡ ƒ Y nX W d t  |
¡ X qfyt j|j	| d W qf tk
rô   |t j|t ¡ ƒ Y qfX qfW d S )NF)r4   )Údir_fdz%Cannot call rmtree on a symbolic link)r,   rs   rt   r.   Úfilenameru   rv   r-   r_   rL   rw   r8   ÚS_ISDIRr:   r>   ÚO_RDONLYÚsamestatÚfstatÚ_rmtree_safe_fdr{   r;   Úcloserz   )Útopfdr-   r|   r}   r~   r]   r   r€   rw   Úorig_stÚdirfdr    r    r!   r‡   ”  sJ    
r‡   c          	   C   s¤  |rdd„ }n|d krdd„ }t rPt| tƒr8t | ¡} yt | ¡}W n& tk
rl   |tj| t ¡ ƒ d S X yt 	| tj
¡}W n& tk
r¦   |tj| t ¡ ƒ d S X z˜tj |t |¡¡rt|| |ƒ yt | ¡ W n( tk
r   |tj| t ¡ ƒ Y nX n8ytdƒ‚W n* tk
r<   |tjj| t ¡ ƒ Y nX W d t |¡ X nPytj | ¡rhtdƒ‚W n* tk
r”   |tjj| t ¡ ƒ d S X t| |ƒS d S )Nc              W   s   d S )Nr    )rO   r    r    r!   r|   Ô  s    zrmtree.<locals>.onerrorc               W   s   ‚ d S )Nr    )rO   r    r    r!   r|   ×  s    z%Cannot call rmtree on a symbolic link)Ú_use_fd_functionsÚ
isinstanceÚbytesr,   ÚfsdecoderC   Ú	Exceptionru   rv   r>   r„   r-   r…   r†   r‡   r{   r.   r;   rˆ   ry   )r-   Úignore_errorsr|   rŠ   Úfdr    r    r!   r   È  sH    


c             C   s&   t jjt jjpd }t j |  |¡¡S )NÚ )r,   r-   ÚsepÚaltsepr`   Úrstrip)r-   r”   r    r    r!   Ú	_basename  s    r—   c          	   C   s   |}t j |¡rTt| |ƒr*t  | |¡ d S t j |t| ƒ¡}t j |¡rTtd| ƒ‚yt  | |¡ W n– t	k
rú   t j 
| ¡r¢t  | ¡}t  ||¡ t  | ¡ nTt j | ¡rât| |ƒrÈtd| |f ƒ‚t| ||dd t| ƒ n|| |ƒ t  | ¡ Y nX |S )Nz$Destination path '%s' already existsz.Cannot move a directory '%s' into itself '%s'.T)rp   rn   )r,   r-   r^   r3   Úrenamer_   r—   rk   r   r.   r;   r=   r<   rz   Ú
_destinsrcr
   r   )r1   r2   rp   Zreal_dstrr   r    r    r!   r     s2    




c             C   sV   t j | ¡} t j |¡}|  t jj¡s2| t jj7 } | t jj¡sL|t jj7 }| | ¡S )N)r,   r-   r0   Úendswithr”   Ú
startswith)r1   r2   r    r    r!   r™   E  s    r™   c             C   sN   t d ks| d krd S yt | ƒ}W n tk
r8   d }Y nX |d k	rJ|d S d S )Né   )r   ÚKeyError)rL   Úresultr    r    r!   Ú_get_gidN  s    
rŸ   c             C   sN   t d ks| d krd S yt | ƒ}W n tk
r8   d }Y nX |d k	rJ|d S d S )Nrœ   )r   r   )rL   rž   r    r    r!   Ú_get_uidZ  s    
r    Úgzipc                s   |d krd}nDt r |dkr d}n2tr2|dkr2d}n trD|dkrDd}ntd |¡ƒ‚dd l}	|rfd	| nd}
| d
 |
 }tj |¡}|r´tj 	|¡s´|d k	r¦| 
d|¡ |s´t |¡ |d k	rÆ| 
d¡ tˆƒ‰tˆƒ‰ ‡ ‡‡‡fdd„}|s|	 |d| ¡}z|j||d W d | ¡  X |S )Nr“   r¡   ZgzÚbzip2Úbz2ÚxzzCbad value for 'compress', or compression format not supported : {0}r   Ú.z.tarzcreating %szCreating tar archivec                s,   ˆ d k	rˆ | _ ˆ| _ˆd k	r(ˆ| _ˆ| _| S )N)ÚgidZgnameÚuidÚuname)Ztarinfo)r¦   ÚgroupÚownerr§   r    r!   Ú_set_uid_gid•  s    z#_make_tarball.<locals>._set_uid_gidzw|%s)rc   )Ú_ZLIB_SUPPORTEDÚ_BZ2_SUPPORTEDÚ_LZMA_SUPPORTEDÚ
ValueErrorr7   Útarfiler,   r-   Údirnamerk   Úinforj   r    rŸ   r>   Úaddrˆ   )Ú	base_nameÚbase_dirÚcompressÚverboseÚdry_runrª   r©   ÚloggerZtar_compressionr°   Zcompress_extZarchive_nameÚarchive_dirr«   Útarr    )r¦   r©   rª   r§   r!   Ú_make_tarballf  s<    

	
r¼   c          	   C   sz  dd l }| d }tj | ¡}|rNtj |¡sN|d k	r@| d|¡ |sNt |¡ |d k	rd| d||¡ |sv|j|d|jdô}tj 	|¡}	|	tj
kr´| |	|	¡ |d k	r´| d|	¡ x¶t |¡D ]¨\}
}}xFt|ƒD ]:}tj 	tj |
|¡¡}	| |	|	¡ |d k	rÔ| d|	¡ qÔW xT|D ]L}tj 	tj |
|¡¡}	tj |	¡r| |	|	¡ |d k	r| d|	¡ qW qÀW W d Q R X |S )Nr   z.zipzcreating %sz#creating '%s' and adding '%s' to itÚw)Zcompressionzadding '%s')Úzipfiler,   r-   r±   rk   r²   rj   ÚZipFileZZIP_DEFLATEDÚnormpathÚcurdirr&   ÚwalkÚsortedr_   Úisfile)r´   rµ   r·   r¸   r¹   r¾   Zzip_filenamerº   Zzfr-   ÚdirpathZdirnamesÚ	filenamesrL   r    r    r!   Ú_make_zipfile§  s@    



 rÇ   r»   )r¶   Nzuncompressed tar file)r¶   r¡   zgzip'ed tar-fileZgztarzZIP fileÚzip)r¶   r¢   zbzip2'ed tar-fileZbztar)r¶   r¤   zxz'ed tar-fileZxztarc              C   s   dd„ t  ¡ D ƒ} |  ¡  | S )Nc             S   s   g | ]\}}||d  f‘qS )rœ   r    )Ú.0rL   Úregistryr    r    r!   ú
<listcomp>é  s    z'get_archive_formats.<locals>.<listcomp>)Ú_ARCHIVE_FORMATSÚitemsÚsort)Úformatsr    r    r!   r   ä  s    r“   c             C   sx   |d krg }t |ƒs td| ƒ‚t|ttfƒs6tdƒ‚x.|D ]&}t|ttfƒrZt|ƒdkr<tdƒ‚q<W |||ft| < d S )NzThe %s object is not callablez!extra_args needs to be a sequencerœ   z+extra_args elements are : (arg_name, value))ÚcallableÚ	TypeErrorr   Útuplert   ÚlenrÌ   )rL   ÚfunctionÚ
extra_argsÚdescriptionÚelementr    r    r!   r   î  s    	
c             C   s
   t | = d S )N)rÌ   )rL   r    r    r!   r     s    c	          
   C   s  t  ¡ }	|d k	r>|d k	r$| d|¡ t j | ¡} |s>t  |¡ |d krLt j}||dœ}
yt| }W n" tk
r„   t	d| ƒd ‚Y nX |d }x|d D ]\}}||
|< q˜W |dkrÄ||
d< ||
d< z|| |f|
Ž}W d |d k	rþ|d k	rô| d	|	¡ t  |	¡ X |S )
Nzchanging into '%s')r¸   r¹   zunknown archive format '%s'r   é   rÈ   rª   r©   zchanging back to '%s')
r,   ÚgetcwdÚdebugr-   r0   ÚchdirrÁ   rÌ   r   r¯   )r´   r7   Zroot_dirrµ   r·   r¸   rª   r©   r¹   Zsave_cwdrP   Úformat_infoÚfuncÚargÚvalr‚   r    r    r!   r     s6    

c              C   s   dd„ t  ¡ D ƒ} |  ¡  | S )Nc             S   s"   g | ]\}}||d  |d f‘qS )r   é   r    )rÉ   rL   r²   r    r    r!   rË   C  s    z&get_unpack_formats.<locals>.<listcomp>)Ú_UNPACK_FORMATSrÍ   rÎ   )rÏ   r    r    r!   r   =  s    c       	      C   sv   i }x.t  ¡ D ]"\}}x|d D ]}|||< q W qW x,| D ]$}||kr:d}t|||| f ƒ‚q:W t|ƒsrtdƒ‚d S )Nr   z!%s is already registered for "%s"z*The registered function must be a callable)rá   rÍ   r#   rÐ   rÑ   )	Ú
extensionsrÔ   rÕ   Zexisting_extensionsrL   r²   ÚextÚ	extensionÚmsgr    r    r!   Ú_check_unpack_optionsH  s    
ræ   c             C   s,   |d krg }t |||ƒ ||||ft| < d S )N)ræ   rá   )rL   râ   rÔ   rÕ   rÖ   r    r    r!   r   Z  s    c             C   s
   t | = d S )N)rá   )rL   r    r    r!   r   p  s    c             C   s&   t j | ¡}t j |¡s"t  |¡ d S )N)r,   r-   r±   r^   rj   )r-   r±   r    r    r!   Ú_ensure_directoryt  s    rç   c       	   	   C   sÊ   dd l }| | ¡std|  ƒ‚| | ¡}z’xŒ| ¡ D ]€}|j}| d¡s4d|krRq4tjj	|f| 
d¡žŽ }|spq4t|ƒ | d¡s4| |j¡}t|dƒ}z| |¡ W d | ¡  ~X q4W W d | ¡  X d S )Nr   z%s is not a zip fileú/z..r6   )r¾   Z
is_zipfiler"   r¿   Zinfolistr‚   r›   r,   r-   r_   Úsplitrç   rš   r%   r>   r&   rˆ   )	r‚   Úextract_dirr¾   rÈ   r²   rL   ÚtargetÚdataÚfr    r    r!   Ú_unpack_zipfilez  s*    



rî   c             C   sX   dd l }y| | ¡}W n" |jk
r8   td|  ƒ‚Y nX z| |¡ W d | ¡  X d S )Nr   z/%s is not a compressed or uncompressed tar file)r°   r>   ZTarErrorr"   Z
extractallrˆ   )r‚   rê   r°   Ztarobjr    r    r!   Ú_unpack_tarfileœ  s    rï   z.tarz.zip)r»   rÈ   z.tar.gzz.tgzz.tar.bz2z.tbz2z.tar.xzz.txzc             C   s:   x4t  ¡ D ](\}}x|d D ]}|  |¡r|S qW q
W d S )Nr   )rá   rÍ   rš   )r‚   rL   r²   rä   r    r    r!   Ú_find_unpack_format»  s
    
rð   c             C   sÊ   |d krt  ¡ }t  |¡}t  | ¡} |d k	r~yt| }W n$ tk
r\   td |¡ƒd ‚Y nX |d }|| |ft|d ƒŽ nHt| ƒ}|d krœt	d | ¡ƒ‚t| d }tt| d ƒ}|| |f|Ž d S )NzUnknown unpack format '{0}'rØ   rœ   zUnknown archive format '{0}')
r,   rÙ   Úfspathrá   r   r¯   r7   Údictrð   r"   )r‚   rê   r7   rÜ   rÝ   rP   r    r    r!   r   Â  s"    

ÚstatvfsÚ
disk_usageZusageztotal used freezTotal space in byteszUsed space in byteszFree space in bytesc             C   s@   t  | ¡}|j|j }|j|j }|j|j |j }t|||ƒS )N)r,   ró   Úf_bavailÚf_frsizeÚf_blocksÚf_bfreeÚ_ntuple_diskusage)r-   r@   ÚfreeÚtotalÚusedr    r    r!   rô   ò  s
    
Úntc             C   s"   t  | ¡\}}|| }t|||ƒS )N)rý   Z_getdiskusagerù   )r-   rû   rú   rü   r    r    r!   rô     s    c             C   sž   |d kr|d krt dƒ‚|}|}|d kr.d}n(t|tƒrVt|ƒ}|d krVtd |¡ƒ‚|d krdd}n(t|tƒsŒt|ƒ}|d krŒtd |¡ƒ‚t 	| ||¡ d S )Nzuser and/or group must be setéÿÿÿÿzno such user: {!r}zno such group: {!r})
r¯   r   rm   r    ÚLookupErrorr7   ÚintrŸ   r,   r   )r-   Úuserr©   Z_userZ_groupr    r    r!   r     s"    

©éP   é   c          
   C   sÔ   yt tjd ƒ}W n ttfk
r.   d}Y nX yt tjd ƒ}W n ttfk
r^   d}Y nX |dksp|dkrÆyt tj ¡ ¡}W n$ t	tt
fk
r¨   t | ¡}Y nX |dkr¸|j}|dkrÆ|j}t ||f¡S )NZCOLUMNSr   ZLINES)r   r,   Úenvironr   r¯   r   ru   Ú
__stdout__ÚfilenoÚAttributeErrorr.   Úterminal_sizeÚcolumnsÚlines)Zfallbackr
  r  Úsizer    r    r!   r   .  s$    

c                s"  dd„ }t j ˆ ¡r&|ˆ |ƒr"ˆ S d S |d kr>t j dt j¡}|sFd S | t j¡}tj	dkr¼t j
|krt| dt j
¡ t j dd¡ t j¡}t‡ fdd	„|D ƒƒr¨ˆ g}qÂ‡ fd
d„|D ƒ}nˆ g}tƒ }xT|D ]L}t j |¡}||krÎ| |¡ x(|D ] }	t j ||	¡}
||
|ƒrö|
S qöW qÎW d S )Nc             S   s&   t j | ¡o$t  | |¡o$t j | ¡ S )N)r,   r-   rk   Úaccessr^   )r?   r[   r    r    r!   Ú_access_checkh  s    zwhich.<locals>._access_checkÚPATHÚwin32r   ZPATHEXTr“   c             3   s    | ]}ˆ   ¡  |  ¡ ¡V  qd S )N)Úlowerrš   )rÉ   rã   )Úcmdr    r!   ú	<genexpr>…  s    zwhich.<locals>.<genexpr>c                s   g | ]}ˆ | ‘qS r    r    )rÉ   rã   )r  r    r!   rË   ˆ  s    zwhich.<locals>.<listcomp>)r,   r-   r±   r  ÚgetÚdefpathré   Úpathsepru   ÚplatformrÁ   ÚinsertÚanyrd   r/   r³   r_   )r  r[   r-   r  ZpathextÚfilesÚseenÚdirZnormdirZthefilerL   r    )r  r!   r   [  s8    






)r$   )FN)r¡   r   r   NNN)r   r   N)Nr“   )NNr   r   NNN)Nr“   )NN)NN)r  )Vr,   ru   r8   rb   ÚcollectionsrF   Úzlibr¬   ÚImportErrorr£   r­   Úlzmar®   Úpwdr   Zgrpr   Ú__all__r.   r   r   r   r   r"   r   r#   r   r3   r   r   r+   rN   r   r   r	   r   r
   ry   r‡   r>   rz   r{   Úsupports_dir_fdrs   Úsupports_fdrU   rŒ   r   Zavoids_symlink_attacksr—   r   r™   rŸ   r    r¼   rÇ   rÌ   r   r   r   r   r   ræ   r   r   rç   rî   rï   rá   rð   r   rl   Ú
namedtuplerù   rû   Ú__doc__rü   rú   rô   rL   rý   r   r   ÚF_OKÚX_OKr   r    r    r    r!   Ú<module>   sü   






:Y#/

=8	 
@
-




 
6 
"






(




-