o
     JAf                     @   s4  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
 d dlmZmZmZmZmZ d dlmZ d dlmZmZmZmZmZmZmZ d dlmZ g dZdZd	Z d
Z!eeeefZ"ee e!fZ#dd Z$dd Z%G dd de&Z'G dd de'Z(G dd de'Z)e( Z*e) Z+G dd dZ,G dd de,Z-e- Z.dd Z/e0edre1 e/Z/G dd dZ2G dd dZ3G d d! d!e2Z4G d"d# d#e2Z5G d$d% d%e2Z6G d&d' d'e
Z7G d(d) d)e&Z8ej9:e8 G d*d+ d+e8Z;G d,d- d-e8Z<G d.d/ d/e8Z=G d0d1 d1e=e;Z>G d2d3 d3e=e<Z?dS )4    N)Sequence)EINVALENOENTENOTDIREBADFELOOP)
attrgetter)S_ISDIRS_ISLNKS_ISREGS_ISSOCKS_ISBLKS_ISCHRS_ISFIFO)quote_from_bytes)PurePathPurePosixPathPureWindowsPathPath	PosixPathWindowsPath   {   i  c                 C   s    t | dd tv pt | dd tv S )Nerrnowinerror)getattr_IGNORED_ERROS_IGNORED_WINERRORS)	exception r   /usr/lib/python3.10/pathlib.py_ignore_error&   s   r!   c                 C   s   d| v pd| v pd| v S )N*?[r   )patr   r   r    _is_wildcard_pattern+   s   r&   c                   @   s&   e Zd Z	 dd Zdd Zdd ZdS )_Flavourc                 C   s   | j j| _d S N)sepjoinselfr   r   r    __init__5      z_Flavour.__init__c                 C   s  g }| j }| j}d }}t|}|D ]c}|sq|r|||}| |\}}}	||	v rDt|	|D ]}
|
rB|
dkrB|t|
 q2n|	rR|	dkrR|t|	 |sV|ru|ss|D ]}|s_qZ|rg|||}| |d }|rr nqZ nq|sz|r|||  |	  |||fS )N .r   )
r)   altsepreversedreplace	splitrootsplitappendsysinternreverse)r,   partsparsedr)   r1   drvrootitpartrelxr   r   r    parse_parts8   sH   
z_Flavour.parse_partsc                 C   s|   	 |r|s|r|||| g|dd   fS n#|r2||ks&|  ||  |kr1||||dd   fS n|||| fS |||fS N   )casefold)r,   r<   r=   r:   drv2root2parts2r   r   r    join_parsed_parts^   s   
z_Flavour.join_parsed_partsN)__name__
__module____qualname__r-   rB   rI   r   r   r   r    r'   1   s
    &r'   c                   @   s   e Zd ZdZdZdZeZej	dkZ
edZdZh ddd	 d
D B dd	 d
D B ZefddZdd Zdd Zdd ZefddZdd Zdd ZdS )_WindowsFlavour\/TntZ4abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZz\\?\>   zCONOUT$CONPRNNULAUXzCONIN$c                 C      h | ]}d | qS )zCOM%sr   .0cr   r   r    	<setcomp>       z_WindowsFlavour.<setcomp>u   123456789¹²³c                 C   rU   )zLPT%sr   rV   r   r   r    rY      rZ   c                 C   sV  |dd }|dd }||kr(||kr(|  |\}}|dd }|dd }nd}|dd }||kr~||kr~||kr~||d}|dkr~|||d }||d kr~|dkr\t|}|ro||d|  |||d d  fS |d | |||d d  fS d }	}
|dkr|| jv r|d d }	|dd  }|}||kr|}
||}||	 |
|fS )Nr   rD      r/      :)_split_extended_pathfindlendrive_letterslstrip)r,   r?   r)   firstsecondprefixthirdindexindex2r<   r=   r   r   r    r4      s6   "
z_WindowsFlavour.splitrootc                 C   s   |  S r(   lowerr,   sr   r   r    rE         z_WindowsFlavour.casefoldc                 C   s   dd |D S )Nc                 S   s   g | ]}|  qS r   rj   )rW   pr   r   r    
<listcomp>   rZ   z2_WindowsFlavour.casefold_parts.<locals>.<listcomp>r   r,   r:   r   r   r    casefold_parts   r.   z_WindowsFlavour.casefold_partsc                 C   s   t t|t jjS r(   )recompilefnmatch	translate
IGNORECASE	fullmatchr,   patternr   r   r    compile_pattern   s   z_WindowsFlavour.compile_patternc                 C   sX   d}| |r(|d d }|dd  }| dr(||d d 7 }d|dd   }||fS )Nr/      zUNC\r\   rN   )
startswith)r,   rm   
ext_prefixrf   r   r   r    r_      s   

z$_WindowsFlavour._split_extended_pathc                 C   sJ   |sdS |d  drdS |d dd dd d}| | jv S )NFr   z\\r]   r0   r^    )r}   	partitionrstripupperreserved_names)r,   r:   namer   r   r    is_reserved   s   "z_WindowsFlavour.is_reservedc                 C   s`   |j }t|dkr%|d dkr%| dd  d}d|t|df S dt| d S )Nr[   rD   r^   rO   zfile:///%s/%szutf-8zfile:)drivera   as_posixrc   urlquote_from_bytesencode)r,   pathr   restr   r   r    make_uri   s   z_WindowsFlavour.make_uriN)rJ   rK   rL   r)   r1   has_drvntpathpathmodosr   is_supportedsetrb   ext_namespace_prefixr   r4   rE   rr   r{   r_   r   r   r   r   r   r    rM   p   s*    
'
rM   c                   @   sZ   e Zd ZdZdZdZeZej	dkZ
efddZdd Zd	d
 Zdd Zdd Zdd ZdS )_PosixFlavourrO   r/   FrP   c                 C   sP   |r#|d |kr#| |}t|t| dkrd|d |fS d||fS dd|fS )Nr   r[   r/   )rc   ra   )r,   r?   r)   stripped_partr   r   r    r4      s   


z_PosixFlavour.splitrootc                 C      |S r(   r   rl   r   r   r    rE         z_PosixFlavour.casefoldc                 C   r   r(   r   rq   r   r   r    rr     r   z_PosixFlavour.casefold_partsc                 C   s   t t|jS r(   )rs   rt   ru   rv   rx   ry   r   r   r    r{        z_PosixFlavour.compile_patternc                 C   s   dS NFr   rq   r   r   r    r     r   z_PosixFlavour.is_reservedc                 C   s   t |}dt| S )Nzfile://)bytesr   )r,   r   bpathr   r   r    r   
  s   z_PosixFlavour.make_uriN)rJ   rK   rL   r)   r1   r   	posixpathr   r   r   r   r4   rE   rr   r{   r   r   r   r   r   r    r      s    
r   c                   @   s   e Zd ZdS )	_AccessorN)rJ   rK   rL   r   r   r   r    r     s    r   c                   @   s   e Zd ZejZejZejZejZej	Z	ej
Z
ejZeedr"ejZndd ZejZejZejZeedr8ejZndddZdd
dZeedrKejZndd Zdd Zdd ZejZeejjZeejjZdS )_NormalAccessorlinkc                 C      t d)Nz&os.link() not available on this systemNotImplementedError)r,   srcdstr   r   r    r   -  rn   z_NormalAccessor.linksymlinkFc                 C   r   )Nz)os.symlink() not available on this systemr   )r,   r   r   target_is_directoryr   r   r    r   9  rn   z_NormalAccessor.symlink  Tc                 C   s`   |rz	t |d  W d S  ty   Y nw t jt jB }|s"|t jO }t |||}t | d S r(   )r   utimeOSErrorO_CREATO_WRONLYO_EXCLopenclose)r,   r   modeexist_okflagsfdr   r   r    touch<  s   
z_NormalAccessor.touchreadlinkc                 C   r   )Nz*os.readlink() not available on this systemr   r,   r   r   r   r    r   Q  rn   z_NormalAccessor.readlinkc                 C   6   zdd l }|| |jjW S  ty   tdw )Nr   z*Path.owner() is unsupported on this system)pwdgetpwuidstatst_uidpw_nameImportErrorr   )r,   r   r   r   r   r    ownerT     z_NormalAccessor.ownerc                 C   r   )Nr   z*Path.group() is unsupported on this system)grpgetgrgidr   st_gidgr_namer   r   )r,   r   r   r   r   r    group[  r   z_NormalAccessor.groupNFr   T)rJ   rK   rL   r   r   ior   listdirscandirchmodmkdirunlinkhasattrr   rmdirrenamer3   r   r   r   r   r   getcwdstaticmethodr   
expanduserrealpathr   r   r   r    r     s4    




r   c                 C   sP   | d }| dd  }|dkrt }nd|v rtdt|r t}nt}||||S )Nr   rD   **z:Invalid pattern: '**' can only be an entire path component)_RecursiveWildcardSelector
ValueErrorr&   _WildcardSelector_PreciseSelector)pattern_partsflavourr%   child_partsclsr   r   r    _make_selectorp  s   r   	lru_cachec                   @   s   e Zd Z	 dd Zdd ZdS )	_Selectorc                 C   s2   || _ |rt||| _d| _d S t | _d| _d S NTF)r   r   	successordironly_TerminatingSelector)r,   r   r   r   r   r    r-     s   

z_Selector.__init__c                 C   s>   	 t |}|j}|j}|jj}||stg S | ||||S r(   )typeis_direxists	_accessorr   iter_select_from)r,   parent_pathpath_clsr   r   r   r   r   r    select_from  s   z_Selector.select_fromN)rJ   rK   rL   r-   r   r   r   r   r    r     s    	r   c                   @   s   e Zd Zdd ZdS )r   c                 c   s    |V  d S r(   r   )r,   r   r   r   r   r   r   r    r     s   
z!_TerminatingSelector._select_fromN)rJ   rK   rL   r   r   r   r   r    r     s    r   c                   @      e Zd Zdd Zdd ZdS )r   c                 C   s   || _ t| || d S r(   )r   r   r-   )r,   r   r   r   r   r   r    r-     s   z_PreciseSelector.__init__c                 c   s`    z$| | j}| jr|n||r | j||||D ]}|V  qW d S W d S  ty/   Y d S w r(   )_make_child_relpathr   r   r   r   PermissionError)r,   r   r   r   r   r   ro   r   r   r    r     s   z_PreciseSelector._select_fromNrJ   rK   rL   r-   r   r   r   r   r    r         r   c                   @   r   )r   c                 C   s   | || _t| || d S r(   )r{   matchr   r-   r,   r%   r   r   r   r   r    r-     s   z_WildcardSelector.__init__c                 c   s    z_||}t |}W d    n1 sw   Y  |D ]A}| jrAz| s(W qW n ty@ } zt|s6 W Y d }~qd }~ww |j}	| |	r]||	}
| j	|
|||D ]}|V  qWqW d S  t
yj   Y d S w r(   )listr   r   r   r!   r   r   r   r   r   r   )r,   r   r   r   r   
scandir_itentriesentryer   r   ro   r   r   r    r     s6   



z_WildcardSelector._select_fromNr   r   r   r   r    r     r   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )r   c                 C   s   t | || d S r(   )r   r-   r   r   r   r    r-     r   z#_RecursiveWildcardSelector.__init__c                 c   s    |V  zY||}t |}W d    n1 sw   Y  |D ];}d}z| }W n ty@ } zt|s6 W Y d }~nd }~ww |rZ| sZ||j}	| |	||D ]}
|
V  qTqW d S  tyg   Y d S w r   )	r   r   r   r!   
is_symlinkr   r   _iterate_directoriesr   )r,   r   r   r   r   r   r   entry_is_dirr   r   ro   r   r   r    r     s2   

z/_RecursiveWildcardSelector._iterate_directoriesc           	      c   s    z5t  }z,| jj}| |||D ]}|||||D ]}||vr(|V  || qqW |  W d S |  w  ty@   Y d S w r(   )r   r   r   r   addclearr   )	r,   r   r   r   r   yieldedsuccessor_selectstarting_pointro   r   r   r    r     s"   
z'_RecursiveWildcardSelector._select_fromN)rJ   rK   rL   r-   r   r   r   r   r   r    r     s    r   c                   @   s2   e Zd Z	 dZdd Zdd Zdd Zdd	 Zd
S )_PathParents)_pathcls_drv_root_partsc                 C   s&   t || _|j| _|j| _|j| _d S r(   )r   r  r  r  r  r   r   r   r    r-      s   
z_PathParents.__init__c                 C   s$   | j s| jrt| jd S t| jS rC   )r  r  ra   r  r+   r   r   r    __len__  s   
z_PathParents.__len__c                    s   t |trt fddt|t  D S |t ks$|t  k r(t||dk r2|t 7 } j j	 j
 jd | d  S )Nc                 3   s    | ]} | V  qd S r(   r   )rW   ir+   r   r    	<genexpr>  s    z+_PathParents.__getitem__.<locals>.<genexpr>r   rD   )
isinstanceslicetuplerangeindicesra   
IndexErrorr  _from_parsed_partsr  r  r  )r,   idxr   r+   r    __getitem__  s   
$z_PathParents.__getitem__c                 C   s   d | jjS )Nz<{}.parents>)formatr  rJ   r+   r   r   r    __repr__  r.   z_PathParents.__repr__N)rJ   rK   rL   	__slots__r-   r  r  r  r   r   r   r    r     s    r   c                   @   s  e Zd Z	 dZdd Zdd Zedd Zedd	 Zed
d Z	edd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zedd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zeed,d-d.Zeed/d0d.Zed1d2 Zed3d4 Zed5d6 Z ed7d8 Z!ed9d: Z"d;d< Z#d=d> Z$d?d@ Z%dAdB Z&dCdD Z'edEdF Z(dGdH Z)dIdJ Z*dKdL Z+edMdN Z,edOdP Z-dQdR Z.dSdT Z/dUdV Z0dWS )Xr   )r  r  r  _str_hash_pparts_cached_cpartsc                 G   s&   	 | t u rtjdkrtnt} | |S )NrP   )r   r   r   r   r   _from_parts)r   argsr   r   r    __new__*  s   
zPurePath.__new__c                 C   s   | j t| jfS r(   )	__class__r
  r  r+   r   r   r    
__reduce__4  s   zPurePath.__reduce__c                 C   sb   g }|D ]&}t |tr||j7 }qt|}t |tr#|t| qtdt| | j	
|S )NzNargument should be a str object or an os.PathLike object returning str, not %r)r  r   r  r   fspathstrr6   	TypeErrorr   _flavourrB   )r   r  r:   ar   r   r    _parse_args9  s   


zPurePath._parse_argsc                 C   s0   t | }||\}}}||_||_||_|S r(   )objectr  r"  r  r  r  )r   r  r,   r<   r=   r:   r   r   r    r  M  s   
zPurePath._from_partsc                 C   s    t | }||_||_||_|S r(   )r#  r  r  r  r  )r   r<   r=   r:   r,   r   r   r    r  X  s
   
zPurePath._from_parsed_partsc                 C   s0   |s|r|| | j |dd   S | j |S rC   )r   r*   )r   r<   r=   r:   r   r   r    _format_parsed_parts`  s   zPurePath._format_parsed_partsc                 C   s@   |  |\}}}| j| j| j| j|||\}}}| |||S r(   )r"  r   rI   r  r  r  r  )r,   r  r<   r=   r:   r   r   r    _make_childg  s
   
zPurePath._make_childc                 C   s>   	 z| j W S  ty   | | j| j| jpd| _ | j  Y S w )Nr0   )r  AttributeErrorr$  r  r  r  r+   r   r   r    __str__m  s   
zPurePath.__str__c                 C   s   t | S r(   )r  r+   r   r   r    
__fspath__w  rn   zPurePath.__fspath__c                 C   s   	 | j }t| |jdS )NrO   )r   r  r3   r)   r,   fr   r   r    r   z  s   zPurePath.as_posixc                 C   s   	 t | S r(   )r   fsencoder+   r   r   r    	__bytes__  s   
zPurePath.__bytes__c                 C   s   d | jj|  S )Nz{}({!r}))r  r  rJ   r   r+   r   r   r    r    s   zPurePath.__repr__c                 C   s   	 |   s	td| j| S )Nz.relative path can't be expressed as a file URI)is_absoluter   r   r   r+   r   r   r    as_uri  s   zPurePath.as_uric                 C   s2   z| j W S  ty   | j| j| _ | j  Y S w r(   )r  r&  r   rr   r  r+   r   r   r    _cparts  s   
zPurePath._cpartsc                 C   s&   t |tstS | j|jko| j|ju S r(   )r  r   NotImplementedr/  r   r,   otherr   r   r    __eq__  s   
zPurePath.__eq__c                 C   s2   z| j W S  ty   tt| j| _ | j  Y S w r(   )r  r&  hashr
  r/  r+   r   r   r    __hash__  s   
zPurePath.__hash__c                 C   s&   t |tr| j|jurtS | j|jk S r(   r  r   r   r0  r/  r1  r   r   r    __lt__     zPurePath.__lt__c                 C   s&   t |tr| j|jurtS | j|jkS r(   r6  r1  r   r   r    __le__  r8  zPurePath.__le__c                 C   s&   t |tr| j|jurtS | j|jkS r(   r6  r1  r   r   r    __gt__  r8  zPurePath.__gt__c                 C   s&   t |tr| j|jurtS | j|jkS r(   r6  r1  r   r   r    __ge__  r8  zPurePath.__ge__c                 C      | S r(   r   )r   r   r   r   r    __class_getitem__  r   zPurePath.__class_getitem__r  z.The drive prefix (letter or UNC path), if any.)docr  zThe root of the path, if any.c                 C   s   	 | j | j }|S r(   )r  r  )r,   anchorr   r   r    r?    s   zPurePath.anchorc                 C   s0   	 | j }t|| js| jrdndkrdS |d S )NrD   r   r/   r]   )r  ra   r  r  rq   r   r   r    r     s
   zPurePath.namec                 C   sD   	 | j }|d}d|  k rt|d k r n dS ||d  S dS )Nr0   r   rD   r/   r   rfindra   r,   r   r  r   r   r    suffix  s   
zPurePath.suffixc                 C   s<   	 | j }|drg S |d}dd |ddd  D S )Nr0   c                 S   s   g | ]}d | qS )r0   r   )rW   rC  r   r   r    rp     rZ   z%PurePath.suffixes.<locals>.<listcomp>rD   )r   endswithrc   r5   r,   r   r   r   r    suffixes  s   

zPurePath.suffixesc                 C   sD   	 | j }|d}d|  k rt|d k r n |S |d | S |S )Nr0   r   rD   r@  rB  r   r   r    stem  s   
zPurePath.stemc                 C   s   	 | j std| f | j|f\}}}|r-|d | jj| jjfv s-|s-|s-t|dkr3td| | | j| j	| j
d d |g S )N%r has an empty namer]   rD   zInvalid name %r)r   r   r   rB   r)   r1   ra   r  r  r  r  )r,   r   r<   r=   r:   r   r   r    	with_name  s   zPurePath.with_namec                 C   s   	 |  || j S r(   )rI  rC  )r,   rG  r   r   r    	with_stem  s   zPurePath.with_stemc                 C   s   	 | j }|j|v s|jr|j|v rtd|f |r|dr#|dkr)td| | j}|s5td| f | j}|s?|| }n|d t|  | }| | j	| j
| jd d |g S )NzInvalid suffix %rr0   rH  r]   )r   r)   r1   r   r}   r   rC  ra   r  r  r  r  )r,   rC  r*  r   
old_suffixr   r   r    with_suffix  s    
zPurePath.with_suffixc                 G   s   	 |st d| j}| j}| j}|r||g|dd   }n|}| |\}}}|r4||g|dd   }	n|}	t|	}
| jj}|
dkrG|sF|rfn||d |
 ||	krf| |||}t	d
t| t|| d|
dkro|nd||
d  S )Nzneed at least one argumentrD   r   zU{!r} is not in the subpath of {!r} OR one path is relative and the other is absolute.r/   )r  r  r  r  r"  ra   r   rr   r$  r   r  r  r  )r,   r2  r:   r<   r=   	abs_partsto_drvto_rootto_partsto_abs_partsncf	formattedr   r   r    relative_to  s2    
zPurePath.relative_toc                 G   s(   	 z| j |  W dS  ty   Y dS w r   )rU  r   r1  r   r   r    is_relative_to8  s   
zPurePath.is_relative_toc                 C   s0   	 z| j W S  ty   t| j| _ | j  Y S w r(   )r  r&  r
  r  r+   r   r   r    r:   A  s   
zPurePath.partsc                 G   s   	 |  |S r(   )r%  )r,   r  r   r   r    joinpathM  s   
zPurePath.joinpathc                 C   s&   z|  |fW S  ty   t Y S w r(   )r%  r  r0  r,   keyr   r   r    __truediv__U  s
   zPurePath.__truediv__c                 C   s,   z
|  |g| j W S  ty   t Y S w r(   )r  r  r  r0  rX  r   r   r    __rtruediv__[  s
   zPurePath.__rtruediv__c                 C   sB   	 | j }| j}| j}t|dkr|s|r| S | |||d d S )NrD   r]   )r  r  r  ra   r  )r,   r<   r=   r:   r   r   r    parenta  s   zPurePath.parentc                 C   s
   	 t | S r(   )r   r+   r   r   r    parentsk  s   zPurePath.parentsc                 C   s    	 | j sdS | jj pt| jS r   )r  r   r   boolr  r+   r   r   r    r-  p  s   zPurePath.is_absolutec                 C   s   	 | j | jS r(   )r   r   r  r+   r   r   r    r   w  s   zPurePath.is_reservedc           	      C   s   	 | j j}||}| j |f\}}}|std|r$||| jkr$dS |r/||| jkr/dS | j}|s6|rGt|t|kr@dS |dd  }n
t|t|krQdS tt	|t	|D ]\}}t
||sg dS qZdS )Nzempty patternFrD   T)r   rE   rB   r   r  r  r/  ra   zipr2   ru   fnmatchcase)	r,   path_patternrS  r<   r=   	pat_partsr:   r?   r%   r   r   r    r   |  s,   zPurePath.matchN)1rJ   rK   rL   r  r  r  classmethodr"  r  r  r$  r%  r'  r(  r   r,  r  r.  propertyr/  r3  r5  r7  r9  r:  r;  r=  r   r   r=   r?  r   rC  rF  rG  rI  rJ  rL  rU  rV  r:   rW  rZ  r[  r\  r]  r-  r   r   r   r   r   r    r     s|    












	!	

	
r   c                   @      e Zd Z	 eZdZdS )r   r   N)rJ   rK   rL   _posix_flavourr   r  r   r   r   r    r         r   c                   @   re  )r   r   N)rJ   rK   rL   _windows_flavourr   r  r   r   r   r    r     rg  r   c                   @   s  e Zd Z	 eZdZdd Zdd Zdd Zdd	 Z	e
d
d Ze
dd Zdd Zdd Zdd Zdd Zdd Zd`ddZddddZdd  Zd!d" Z	%	%dad&d'Zd(d) Zdbd*d+Zd,d- Zdcd.d/Zd0d1 Zddd3d4Zded6d7Zddd8d9Zd:d; Zd`d<d=Z d>d? Z!d@dA Z"dBdC Z#dDdE Z$d`dFdGZ%dHdI Z&dJdK Z'dLdM Z(dNdO Z)dPdQ Z*dRdS Z+dTdU Z,dVdW Z-dXdY Z.dZd[ Z/d\d] Z0d^d_ Z1d%S )fr   r   c                 O   s@   | t u rtjdkrtnt} | |}|jjstd| j	f |S )NrP   z$cannot instantiate %r on your system)
r   r   r   r   r   r  r   r   r   rJ   )r   r  kwargsr,   r   r   r    r    s   
zPath.__new__c                 C   s   | j |g }| | j| j|S r(   )r  r  r  r  )r,   r?   r:   r   r   r    r     s   zPath._make_child_relpathc                 C   r<  r(   r   r+   r   r   r    	__enter__  r   zPath.__enter__c                 C   s   d S r(   r   )r,   tvtbr   r   r    __exit__  s   	zPath.__exit__c                 C   s   	 | | j  S r(   )r   r   r   r   r   r    cwd  s   zPath.cwdc                 C   s   	 | d  S )N~)r   ro  r   r   r    home  s   z	Path.homec                 C   sD   	 |   }z|  }W n ty   | j |}Y nw tj||S r(   )r   r&  r   r   r   samestat)r,   
other_pathstother_str   r   r    samefile  s   zPath.samefilec                 c   s0    	 | j | D ]}|dv rq| |V  qd S )N>   r0   z..)r   r   r   rE  r   r   r    iterdir  s   zPath.iterdirc                 c   sr    	 t d| | |std|| j|f\}}}|s |r$tdtt|| j}|	| D ]}|V  q1d S )Nzpathlib.Path.globzUnacceptable pattern: {!r}%Non-relative patterns are unsupported)
r7   auditr   r  r   rB   r   r   r
  r   r,   rz   r<   r=   r   selectorro   r   r   r    glob  s   z	Path.globc                 c   sd    	 t d| | | j|f\}}}|s|rtdtdt| | j}|| D ]}|V  q*d S )Nzpathlib.Path.rglobry  )r   )r7   rz  r   rB   r   r   r
  r   r{  r   r   r    rglob  s   z
Path.rglobc                 C   s&   	 |   r| S | | j g| j S r(   )r-  r  r   r   r  r+   r   r   r    absolute  s   zPath.absoluteFc              
   C   s   	 dd }z
| j j| |d}W n ty  } z||  d }~ww | |f}|sHz|  W |S  tyG } z|| W Y d }~|S d }~ww |S )Nc                 S   s0   t | dd}| jtks|tkrtd| j d S )Nr   r   zSymlink loop from %r)r   r   r   _WINERROR_CANT_RESOLVE_FILENAMERuntimeErrorfilename)r   r   r   r   r    check_eloop/  s   z!Path.resolve.<locals>.check_eloop)strict)r   r   r   r  r   )r,   r  r  rm   r   ro   r   r   r    resolve(  s(   
zPath.resolveTfollow_symlinksc                C   s   	 | j j| |dS Nr  )r   r   )r,   r  r   r   r    r   D  s   z	Path.statc                 C      	 | j | S r(   )r   r   r+   r   r   r    r   K     z
Path.ownerc                 C   r  r(   )r   r   r+   r   r   r    r   Q  r  z
Path.grouprr]   Nc                 C   s*   	 d|vr
t |}| j| |||||S )Nb)r   text_encodingr   r   )r,   r   	bufferingencodingerrorsnewliner   r   r    r   W  s   
z	Path.openc                 C   s:   	 | j dd}| W  d    S 1 sw   Y  d S )Nrbr   )r   readr)  r   r   r    
read_bytesb  s   $zPath.read_bytesc                 C   sH   	 t |}| jd||d}| W  d    S 1 sw   Y  d S )Nr  )r   r  r  )r   r  r   r  )r,   r  r  r*  r   r   r    	read_texti  s
   
$zPath.read_textc                 C   sD   	 t |}| jdd}||W  d    S 1 sw   Y  d S )Nwbr  )
memoryviewr   write)r,   dataviewr*  r   r   r    write_bytesq  s
   $zPath.write_bytesc                 C   sf   	 t |tstd|jj t|}| jd|||d}||W  d    S 1 s,w   Y  d S )Nzdata must be str, not %sw)r   r  r  r  )	r  r  r  r  rJ   r   r  r   r  )r,   r  r  r  r  r*  r   r   r    
write_textz  s   

$zPath.write_textc                 C   s   	 | j | }| |fS r(   )r   r   r  r   r   r   r    r     s   zPath.readlinkr   c                 C   s   	 | j | || d S r(   )r   r   )r,   r   r   r   r   r    r     s   z
Path.touch  c                 C   s|   	 z
| j | | W d S  ty-   |r| j| kr | jjddd | j|d|d Y d S  ty=   |r9|  s: Y d S w )NT)r]  r   F)r   r   FileNotFoundErrorr\  r   r   )r,   r   r]  r   r   r   r    r     s   z
Path.mkdirc                C   s   	 | j j| ||d d S r  )r   r   )r,   r   r  r   r   r    r     s   z
Path.chmodc                 C   s   	 | j |dd d S NFr  )r   )r,   r   r   r   r    lchmod  s   zPath.lchmodc                 C   s0   	 z	| j |  W d S  ty   |s Y d S w r(   )r   r   r  )r,   
missing_okr   r   r    r     s   zPath.unlinkc                 C   s   	 | j |  d S r(   )r   r   r+   r   r   r    r     s   z
Path.rmdirc                 C   s   	 | j ddS r  )r   r+   r   r   r    lstat  s   z
Path.lstatc                 C      	 | j | | | |S r(   )r   r   r  r,   targetr   r   r    r        	
zPath.renamec                 C   r  r(   )r   r3   r  r  r   r   r    r3     r  zPath.replacec                 C   s   	 | j || | d S r(   )r   r   )r,   r  r   r   r   r    
symlink_to  s   zPath.symlink_toc                 C   s   	 | j ||  d S r(   )r   r   r  r   r   r    hardlink_to  s   zPath.hardlink_toc                 C   s$   	 t jdtdd | j| | d S )Nzypathlib.Path.link_to() is deprecated and is scheduled for removal in Python 3.12. Use pathlib.Path.hardlink_to() instead.r[   )
stacklevel)warningswarnDeprecationWarningr   r   r  r   r   r    link_to  s
   zPath.link_toc              
   C   sT   	 z|    W dS  ty  } zt|s W Y d }~dS d }~w ty)   Y dS w NFT)r   r   r!   r   r,   r   r   r   r    r     s   
zPath.existsc              
   C   V   	 zt |  jW S  ty! } zt|s W Y d }~dS d }~w ty*   Y dS w r   )r	   r   st_moder   r!   r   r  r   r   r    r        zPath.is_dirc              
   C   r  r   )r   r   r  r   r!   r   r  r   r   r    is_file$  s   zPath.is_filec                 C   sp   	 |   r	|  sdS z| j j}W n
 ty   Y dS w |  j}||kr)dS |  j}| j j}||kS r  )r   r   r\  r   st_devr   st_ino)r,   
parent_devdevino
parent_inor   r   r    is_mount5  s   

zPath.is_mountc              
   C   r  r   )r
   r  r  r   r!   r   r  r   r   r    r   I  s   zPath.is_symlinkc              
   C   r  r   )r   r   r  r   r!   r   r  r   r   r    is_block_deviceX  r  zPath.is_block_devicec              
   C   r  r   )r   r   r  r   r!   r   r  r   r   r    is_char_deviceh  r  zPath.is_char_devicec              
   C   r  r   )r   r   r  r   r!   r   r  r   r   r    is_fifox  r  zPath.is_fifoc              
   C   r  r   )r   r   r  r   r!   r   r  r   r   r    	is_socket  r  zPath.is_socketc                 C   sr   	 | j s7| js7| jr7| jd d d dkr7| j| jd }|d d dkr*td| |g| jdd   S | S )Nr   rD   rq  z#Could not determine home directory.)r  r  r  r   r   r  r  )r,   homedirr   r   r    r     s   zPath.expanduserr   )r  r]   NNN)NN)NNNr   )r  FF)2rJ   rK   rL   _normal_accessorr   r  r  r   rj  rn  rc  rp  rr  rw  rx  r}  r~  r  r  r   r   r   r   r  r  r  r  r   r   r   r   r  r   r   r  r   r3   r  r  r  r   r   r  r  r   r  r  r  r  r   r   r   r   r    r     sf    	






	



r   c                   @   s   e Zd Z	 dZdS )r   r   N)rJ   rK   rL   r  r   r   r   r    r     s    r   c                   @   s   e Zd Z	 dZdd ZdS )r   r   c                 C   r   )Nz-Path.is_mount() is unsupported on this systemr   r+   r   r   r    r    rn   zWindowsPath.is_mountN)rJ   rK   rL   r  r  r   r   r   r    r     s    r   )@ru   	functoolsr   r   r   r   rs   r7   r  _collections_abcr   r   r   r   r   r   r   operatorr   r   r	   r
   r   r   r   r   r   urllib.parser   r   __all___WINERROR_NOT_READY_WINERROR_INVALID_NAMEr  r   r   r!   r&   r#  r'   rM   r   rh  rf  r   r   r  r   r   r   r   r   r   r   r   r   r   PathLikeregisterr   r   r   r   r   r   r   r   r    <module>   sl    $	?w*O
,!  }
   x