o
     JAfr                     @   s  	 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 g d
Zdd ZzddlmZmZmZ dd ZW n eyJ   dd ZY nw dd Zdd Zdd Zdd Zdd Zejje_dd Zdd Zdd  Z d!d" Z!zdd#l"m#Z# W n ey   dZ#Y nw d$d% Z$d&d' Z%d(d) Z&d*d+ Z'd,d- Z(zdd.l"m)Z) W n ey   e(Z*Y nw d/d0 Z*z
dd1l"m+Z+m,Z- W n ey   e*Z.Y nw d2d3 Z/d4d5 Z0d6d7d8d9Z.e1e	d:oe	2 d; d<kZ3dBd=d>Z4d?d@ Z5z	ddAl"m6Z7 W dS  ey   Y dS w )C...\;/z.;C:\bin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 )N   \/\/)
isinstancebytespath r5   /usr/lib/python3.10/ntpath.py_get_bothseps#   s   
r7   )LCMapStringExLOCALE_NAME_INVARIANTLCMAP_LOWERCASEc                 C   sf   	 t | } | s
| S t| tr)t }| |ddd} tt	t
| } | |dS tt	t
| ddS )Nsurrogateescaper   r   )osfspathr1   r2   sysgetfilesystemencodingdecodereplace_LCMapStringEx_LOCALE_NAME_INVARIANT_LCMAP_LOWERCASEencode)sencodingr5   r5   r6   r	   3   s   


r	   c                 C   sB   	 t | } t| trt t | dd S | dd S )Nr   r   )r<   r=   r1   r2   fsencodefsdecoderA   lowerrF   r5   r5   r6   r	   F   s
   

c                 C   sl   	 t | } t| tr| dddrdS n| dddr"dS t| d } t| d	ko5| d	 t| v S )
N   /   \   \\?\Tr   r   \\?\   r   )	r<   r=   r1   r2   rA   
startswithr   lenr7   rK   r5   r5   r6   r
   W   s   

r
   c           
   
   G   s@  t | } t| trd}d}d}nd}d}d}zs|s"| d d |  t| \}}tt j|D ]>}t|\}}	|	rG|	d |v rG|sB|sD|}|	}q.|r\||kr\| | krZ|}|	}q.|}|rh|d |vrh|| }||	 }q.|r|d |vr|r|dd  |kr|| | W S || W S  ttt	fy   t
jd	| g|R    w )
NrM   r/      :r   r0   :r   r   )r<   r=   r1   r2   r   maprJ   	TypeErrorAttributeErrorBytesWarninggenericpath_check_arg_types)
r4   pathsr"   sepscolonresult_driveresult_pathpp_drivep_pathr5   r5   r6   r   g   sL   



r   c                 C   s  	 t | } t| dkrt| trd}d}d}nd}d}d}| ||}|dd |d krr|dd	 |krr||d}|d
krH| d d | fS |||d }||d kr^| d d | fS |d
krft| }| d | | |d  fS |dd |kr| d d | dd  fS | d d | fS )N   rM   rL   rS   r   r   rT   r      rU   rP   )r<   r=   rR   r1   r2   rA   find)ra   r"   r%   r^   normpindexindex2r5   r5   r6   r      s0   

$r   c                 C   s   	 t | } t| }t| \}} t| }|r,| |d  |vr,|d8 }|r,| |d  |vs| d | | |d  }}||p?|}|| |fS NrP   )r<   r=   r7   r   rR   rstrip)ra   r]   diheadtailr5   r5   r6   r      s   
r   c                 C   s4   t | } t| trt| dddS t| dddS )NrM   rL      .r   r   r   )r<   r=   r1   r2   rZ   	_splitextra   r5   r5   r6   r      s   

r   c                 C      	 t | d S rj   r   rr   r5   r5   r6   r         r   c                 C   rs   )Nr   rt   rr   r5   r5   r6   r      ru   r   c              
   C   s8   	 zt | }W n tttfy   Y dS w t|jS )NF)r<   lstatOSError
ValueErrorrX   statS_ISLNKst_moder4   str5   r5   r6   r      s   r   c              	   C   s,   	 zt | }W dS  ttfy   Y dS w )NFT)r<   rv   rw   rx   r|   r5   r5   r6   r   
  s   r   )_getvolumepathnamec                 C   sr   	 t | } t| }t| } t| \}}|r#|d |v r#| p"||v S ||v r)dS tr7| |t| |kS dS )Nr   TF)r<   r=   r7   r   r   r~   rk   )r4   r]   rootrestr5   r5   r6   r      s   
r   c                 C   sL  	 t | } t| trd}nd}| |s| S dt| }}||k r:| | t| vr:|d7 }||k r:| | t| vs*dt jv rEt jd }n"dt jvrL| S zt jd }W n ty^   d}Y nw t	|t jd }|dkr| d| }t|tr{t 
|}t jd}||kr|t|kr| S t	t||}t| trt |}|| |d   S )	N   ~~rP   USERPROFILEHOMEPATH	HOMEDRIVE USERNAME)r<   r=   r1   r2   rQ   rR   r7   environKeyErrorr   rI   getr   r   rH   )r4   tilderm   nuserhomedrivetarget_usercurrent_userr5   r5   r6   r   ;  sB   








r   c                 C   s2  	 t | } t| tr5d| vrd| vr| S dd l}t|j|j d d}d}d}d}d}d}tt d	d }n#d
| vr?d| vr?| S dd l}|j|j d }d}d}d}d}d
}t j}| d d }	d}
t	| }|
|k r| |
|
d  }||kr| |
d d  } t	| }z| 
|}
|	|| d |
d   7 }	W ny ty   |	||  7 }	|d }
Y nfw ||kr | |
d |
d  |kr|	|7 }	|
d7 }
nJ| |
d d  } t	| }z| 
|}
W n ty   |	||  7 }	|d }
Y n#w | d |
 }z|d u rt t jt | }n|| }W n ty   || | }Y nw |	|7 }	n||kr| |
d |
d  |kr;|	|7 }	|
d7 }
n| |
d |
d  |kr| |
d d  } t	| }z| 
|}
W n tyq   |	|| |  7 }	|d }
Y nw | d |
 }z|d u rt t jt | }n|| }W n ty   || | | }Y nw |	|7 }	nh| d d }|
d7 }
| |
|
d  }|r||v r||7 }|
d7 }
| |
|
d  }|r||v sz|d u rt t jt | }n|| }W n ty   || }Y nw |	|7 }	|r
|
d8 }
n|	|7 }	|
d7 }
|
|k si|	S )N   $   %r   z_-ascii   '   {   }environb$%'{}rP   rd   )r<   r=   r1   r2   stringascii_lettersdigitsgetattrr   rR   rh   rx   rH   rI   r   )r4   r   varcharsquotepercentbracerbracedollarr   resrh   pathlencvarvaluer5   r5   r6   r   x  s   











Lr   c           	      C   sP  	 t | } t| trd}d}d}d}d}n
d}d}d}d	}d
}| |r'| S | ||} t| \}} | |rA||7 }| |} | |}d}|t	|k r|| rX|| |kr\||= n6|| |kr|dkr|||d  |kr|||d |d = |d8 }n|dkr|
|r||= n	|d7 }n|d7 }|t	|k sN|s|s|| ||| S )NrM   rL   rp      ..)s   \\.\rN   r   r   r   r   )z\\.\rO   r   rP   )r<   r=   r1   r2   rQ   rA   r   lstripr   rR   endswithappendr   )	r4   r"   r%   r    r!   special_prefixesprefixcompsrm   r5   r5   r6   r     sJ   








r   c                 C   sB   	 t | } t| st| trt  }nt  }t|| } t| S N)	r<   r=   r
   r1   r2   getcwdbgetcwdr   r   )r4   cwdr5   r5   r6   _abspath_fallback  s   



r   )_getfullpathnamec              	   C   s0   	 zt t| W S  ttfy   t|  Y S w r   )r   r   rw   rx   r   r3   r5   r5   r6   r   3  s   r   )_getfinalpathnamereadlinkc              
   C   s   d}t  }t| |vrY|t|  z| }t| } t| s/t|s&|} W | S ttt|| } W n" t	yI } z|j
|v rDW Y d }~| S  d }~w tyR   Y | S w t| |vs| S )N)rP   rd   re             2   C   W   i&  i(  i)  )setr	   add_nt_readlinkr
   r   r   r   r   rw   winerrorrx   )r4   allowed_winerrorseenZold_pathexr5   r5   r6   _readlink_deep@  s4   	

r   c                 C   s   d}d}| rqzt | } |rt| |W S | W S  tyn } zM|j|vr# zt| }|| kr<|r3t||n|W W  Y d }~S W n	 tyF   Y nw t| \} }| r[|s[| | W  Y d }~S |rbt||n|}W Y d }~nd }~ww | s|S )N)rP   rd   re   r   r   r   r   r   r   {   i  i  r   )r   r   rw   r   r   r   )r4   r   ro   r   new_pathnamer5   r5   r6   _getfinalpathname_nonstrictj  s2   
 r   F)strictc          
   
   C   sv  t | } t| tr!d}d}d}t }t| tttkr dS nd}d}d}t }t| ttkr5dS | 	|}|sEt
| sEt|| } zt| } d	}W n tyi } z|rX |j}t| } W Y d }~nd }~ww |s| 	|r| 	|r|| t|d   }	n| t|d  }	zt|	| kr|	} W | S W | S  ty } z|j|kr|	} W Y d }~| S W Y d }~| S d }~ww | S )
NrN   s   \\?\UNC\s   \\s   \\.\NULrO   z\\?\UNC\z\\z\\.\NULr   )r   r1   r2   r<   r   r	   rH   r'   r   rQ   r
   r   r   rw   r   r   rR   )
r4   r   r   Z
unc_prefixZnew_unc_prefixr   Z
had_prefixZinitial_winerrorr   Zspathr5   r5   r6   r(     s^   





r(   getwindowsversionre   rd   c                 C   sZ  	 t | } t| trd}d}d}nd}d}d}|d u r|}| s$tdt |}zott|}tt| }t|\}}t|\}	}
t|t|	krRtd|	|f d	d
 |	|D }dd
 |
	|D }d}t
||D ]\}}t|t|kr{ n|d7 }qm|gt||  ||d   }|s|W S t| W S  tttttfy   td| |  w )NrM   rp   r   r   r   r   zno path specifiedz&path is on mount %r, start on mount %rc                 S      g | ]}|r|qS r5   r5   .0xr5   r5   r6   
<listcomp>      zrelpath.<locals>.<listcomp>c                 S   r   r5   r5   r   r5   r5   r6   r     r   r   rP   r*   )r<   r=   r1   r2   rx   r   r   r   r	   r   ziprR   r   rW   rX   rY   DeprecationWarningrZ   r[   )r4   startr"   r    r!   	start_abspath_absstart_drive
start_rest
path_drive	path_rest
start_list	path_listrm   e1e2rel_listr5   r5   r6   r*     sL   




r*   c              	      s  	 | st dtttj| } t| d trdd dndd dz fd	d
| D }fdd
|D }ztfdd|D \}W n t yQ   t dd w ttdd |D dkrct dt	| d 
 \}}|}fdd
|D }fdd
|D }t|}t|}t|D ]\}	}
|
||	 kr|d |	 } n	q|d t| }|r| n|}|| W S  ttfy   tjdg| R    w )Nz%commonpath() arg is an empty sequencer   rM   rL   rp   r   r   r   c                    s    g | ]}t |  qS r5   )r   rA   rJ   )r   ra   )r%   r"   r5   r6   r     s     zcommonpath.<locals>.<listcomp>c                    s   g | ]	\}}|  qS r5   rt   r   rl   ra   r"   r5   r6   r     s    c                 3   s$    | ]\}}|d d  kV  qd S rj   r5   r   r   r5   r6   	<genexpr>  s   " zcommonpath.<locals>.<genexpr>z%Can't mix absolute and relative pathsc                 s   s    | ]\}}|V  qd S r   r5   r   r5   r5   r6   r   #  s    rP   zPaths don't have the same drivec                       g | ]
}|r| kr|qS r5   r5   r   r   r    r5   r6   r   (      c                    s   g | ]} fd d|D qS )c                    r   r5   r5   r   r   r5   r6   r   *  r   z)commonpath.<locals>.<listcomp>.<listcomp>r5   )r   rF   r   r5   r6   r   *  s    r.   )rx   tuplerV   r<   r=   r1   r2   r   rR   r   rA   r   minmax	enumerater   rW   rX   rZ   r[   )r\   drivesplitssplit_pathsr
   r   r4   commons1s2rm   r   r   r5   )r%   r    r"   r6   r.     sN   

r.   )_isdirr   )8r    r!   r&   r"   r#   r%   r$   r'   r<   r>   ry   rZ   __all__r7   _winapir8   rB   r9   rC   r:   rD   r	   ImportErrorr
   r   r   r   r   rq   __doc__r   r   r   r   ntr~   r   r   r   r   r   r   r   r   r   r   r(   r   r   hasattrr   r)   r*   r.   r   r   r5   r5   r5   r6   <module>   s   	
/8
=q2*.
4
84