
    fTw                        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 ej        d	k    r ej                            d
d          rdZdZndZdZe                    e          Ze                    e          Zg dZd Zd Zd Zd Zd Z	 ddlmZmZmZ  d Z!n# e"$ r d Z!Y nw xY wd Z#d Z$d Z%d Z&d Z'e
j(        j         e'_         d Z)d Z*d Z+d Z,	 dd l-m.Z. n# e"$ r dZ.Y nw xY wd! Z/d" Z0d# Z1	 dd$l-m2Z2 d% Z3n# e"$ r d& Z3Y nw xY wd' Z4	 dd(l-m5Z5 d) Z6n# e"$ r e4Z6Y nw xY w	 dd*l-m7Z7m8Z9 d+ Z:d, Z;d-d.d/Z<n# e"$ r e6Z<Y nw xY w e=ed0          o ej>                    d1         d2k    Z?d6d3Z@d4 ZA	 dd5l-mBZC dS # e"$ r Y dS w xY w)7zCommon pathname manipulations, WindowsNT/95 version.

Instead of importing this module directly, import os and refer to this
module as os.path.
...;z.;C:\binnul    N)*win32MSYSTEM /\)&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                 h    t          | t                    rt          t          z   S t          t
          z   S N)
isinstancebytesbsepbaltsepr&   r)   paths    ../lib/python3.11/ntpath.py_get_bothsepsr<   )   s(    $ G|6z    c                 H    t          | t                    rt          S t          S r4   )r5   r6   r7   r&   r9   s    r;   _get_sepr?   /   s    $ 
r=   c                 H    t          | t                    rt          S t          S r4   )r5   r6   r8   r)   r9   s    r;   _get_altseprA   5   s    $ r=   c                 4    t          | t                    rdS dS )N   ::r5   r6   r9   s    r;   
_get_colonrF   ;   s    $ tsr=   c                 4    t          | t                    rdS dS )N   \\?\UNC\\\?\UNC\rE   r9   s    r;   _get_unc_prefixrJ   A   s    $ ~r=   )LCMapStringExLOCALE_NAME_INVARIANTLCMAP_LOWERCASEc                    t          j        |           } | s| S t          | t                    rxt	          j                    }|                     |d                              t          t                    } t          t          t          |           } |                     |d          S t          t          t          |                     t          t                              S )nNormalize case of pathname.

        Makes all characters lowercase and all slashes into backslashes.
        surrogateescape)osfspathr5   r6   sysgetfilesystemencodingdecodereplacer)   r&   _LCMapStringEx_LOCALE_NAME_INVARIANT_LCMAP_LOWERCASEencode)sencodings     r;   r   r   Q   s    
 IaLL 	Ha 		:022H#455==fcJJA5/4 4A88H&7888!"8"2"#))FC"8"8: : :r=   c                 d   t          j        |           } t          | t                    rVt          j        t          j        |                               t          t                    	                                          S |                     t          t                    	                                S )rO   )
rQ   rR   r5   r6   fsencodefsdecoderV   r)   r&   lower)r[   s    r;   r   r   d   sx    
 IaLLa 	L;r{1~~55fcBBHHJJKKKyy%%++---r=   c                 $   t          j        |           } t          |           }t          |           }t	          |           |z   }| dd                             ||          } |                     |          s|                     |d          rdS dS )zTest whether a path is absoluteN      TF)rQ   rR   r?   rA   rF   rV   
startswith)r[   r&   r)   	colon_seps       r;   r   r   u   s    
	!A
1++C^^F1#I	"1"fc""A 	||C ALLA66 t5r=   c                    t          j        |           } t          |           }t          |           }t	          |           }	 |s| d d         |z    t          |           \  }}t          t           j        |          D ]x}t          |          \  }}	|	r|	d         |v r	|s|s|}|	})|r7||k    r1|                                |                                k    r|}|	}`|}|r|d         |vr||z   }||	z   }y|r"|d         |vr|r|dd          |k    r||z   |z   S ||z   S # t          t          t          f$ r t          j        d| g|R    w xY w)Nr   r   )rQ   rR   r?   r<   rF   r   mapr`   	TypeErrorAttributeErrorBytesWarninggenericpath_check_arg_types)
r:   pathsr&   sepscolonresult_driveresult_pathpp_drivep_paths
             r;   r   r      s   9T??D
4..CDtE 	!HsNN$.t$4$4!kRY&& 	/ 	/A(mmOGV '&)t++ +, +#*L$ 'W44==??l&8&8&:&:::#*L"(K& 0{2d::)C/%.KK 	4KN$66 7)"##.%77#%33k))~|4   $VT:E::::s   CD  D   ,Ec                    t          j        |           } t          |           dk    rt          |           }t	          |           }t          |           }t          |           }|                     ||          }|dd         |dz  k    r|dd                                         |k    rdnd}|	                    ||          }|dk    r| | dd         fS |	                    ||dz             }|dk    r| | dd         fS | 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   N   rg   rc   )
rQ   rR   lenr?   rA   rF   rJ   rV   upperfind)	rs   r&   r)   rp   
unc_prefixnormpstartindexindex2s	            r;   r   r      sV   & 		!A
1vv{{qkkQ1$Q''
		&#&&1:q   rr**j88AAaEJJsE**E{{!BQB%xZZUQY//F||!BQB%xWfW:qz))1:RaR5!ABB%<RaR5!8Or=   c                 4   t          j        |           } t          |           }t          |           \  }} t	          |           }|r!| |dz
           |vr|dz  }|r| |dz
           |v| d|         | |d         }}|                    |          p|}||z   |fS )z~Split a pathname.

    Return tuple (head, tail) where tail is everything after the final slash.
    Either part may be empty.rc   N)rQ   rR   r<   r   ry   rstrip)rs   ro   diheadtails         r;   r   r      s    
 		!ADa==DAqAA
 !A#d""	Q  !A#d""2A2!""$D;;t$Dt8T>r=   c                     t          j        |           } t          | t                    r!t	          j        | t          t          d          S t	          j        | t          t          d          S )N   .r   )
rQ   rR   r5   r6   rl   	_splitextr7   r8   r&   r)   rs   s    r;   r   r      sO    
	!A!U :$Qgt<<<$QVS999r=   c                 ,    t          |           d         S )z)Returns the final component of a pathnamerc   r   r   s    r;   r   r          88A;r=   c                 ,    t          |           d         S )z-Returns the directory component of a pathnamer   r   r   s    r;   r   r     r   r=   c                     	 t          j        |           }n# t          t          t          f$ r Y dS w xY wt          j        |j                  S )zhTest whether a path is a symbolic link.
    This will always return false for Windows prior to 6.0.
    F)rQ   lstatOSError
ValueErrorrj   statS_ISLNKst_moder:   sts     r;   r   r     sQ    Xd^^Z0   uu<
###s    22c                 b    	 t          j        |           }n# t          t          f$ r Y dS w xY wdS )zCTest whether a path exists.  Returns True for broken symbolic linksFT)rQ   r   r   r   r   s     r;   r   r     sB    Xd^^Z    uu4s    ,,)_getvolumepathnamec                    t          j        |           } t          |           }t          |           } t	          |           \  }}|r|d         |v r| p||v S |r||v rdS t
          ra|                     |          }t          |                               |          }|                                |                                k    S dS )zaTest whether a path is a mount point (a drive root, the root of a
    share, or a mounted volume)r   TF)rQ   rR   r<   r#   r   r   r   casefold)r:   ro   rootrestxys         r;   r   r   0  s     9T??DD4==DD!!JD$ ,Q4+ddl+ t KKd##**400zz||qzz||++ur=   c                    t          j        |           } t          | t                    rd}nd}|                     |          s| S dt          |           }}||k     r9| |         t          |           vr"|dz  }||k     r| |         t          |           v"dt           j        v rt           j        d         }nsdt           j        vrt           j        	                    |           S 	 t           j        d         }n# t          $ r d}Y nw xY wt          |t           j        d                   }|dk    r| d|         }t          |t                    rt          j        |          }t           j                            d          }||k    r2|t          |          k    r| S t          t          |          |          }t          | t                    rt          j        |          }t           j        	                    |          | |d	         z   S )
zLExpand ~ and ~user constructs.

    If user or $HOME is unknown, do nothing.   ~~rc   USERPROFILEHOMEPATH	HOMEDRIVEr
   USERNAMEN)rQ   rR   r5   r6   rd   ry   r<   environr:   r"   KeyErrorr   r_   getr   r   r^   )r:   tilder   nuserhomedrivetarget_usercurrent_users           r;   r    r    M  s    9T??D$ ??5!! c$iiqA
a%%DG=#6#666	Q a%%DG=#6#666 
"":m,2:%%w%%%	J{+EE 	 	 	EEE	rz*566Avv1Q3ik5)) 	3+k22Kz~~j11,&& x1111GH--{;;H$ );x((7H%%QRR00s   %C8 8DDc                    t          j        |           } t          | t                    rOd| vrd| vr| S ddl}t          |j        |j        z   dz   d          }d}d}d}d	}d}t          t           d
d          }n6d| vrd| vr| S ddl}|j        |j        z   dz   }d}d}d}d}d}t           j        }| dd         }	d}
t          |           }|
|k     r
| |
|
dz            }||k    re| |
dz   d         } t          |           }	 | 
                    |          }
|	|| d|
dz            z   z  }	n# t          $ r |	|| z   z  }	|dz
  }
Y nw xY w||k    r| |
dz   |
dz            |k    r|	|z  }	|
dz  }
n`| |
dz   d         } t          |           }	 | 
                    |          }
| d|
         }	 |7t          j        t           j        t          j        |                             }n||         }n# t          $ r ||z   |z   }Y nw xY w|	|z  }	n# t          $ r |	|| z   z  }	|dz
  }
Y nw xY w||k    r| |
dz   |
dz            |k    r|	|z  }	|
dz  }
n}| |
dz   |
dz            |k    r| |
dz   d         } t          |           }	 | 
                    |          }
| d|
         }	 |7t          j        t           j        t          j        |                             }n||         }n# t          $ r ||z   |z   |z   }Y nw xY w|	|z  }	n# t          $ r |	||z   | z   z  }	|dz
  }
Y nw xY w| dd         }|
dz  }
| |
|
dz            }|r!||v r||z  }|
dz  }
| |
|
dz            }|r||v 	 |7t          j        t           j        t          j        |                             }n||         }n# t          $ r ||z   }Y nw xY w|	|z  }	|r|
dz  }
n|	|z  }	|
dz  }
|
|k     
|	S )zfExpand shell variables of the forms $var, ${var} and %var%.

    Unknown variables are left unchanged.   $   %r   Nz_-ascii   '   {   }environb$%'{}rc   rw   )rQ   rR   r5   r6   stringascii_lettersdigitsgetattrr   ry   r   r   r^   r_   r   )r:   r   varcharsquotepercentbracerbracedollarr   resr   pathlencvarvalues                  r;   r!   r!     s$    9T??D$ tD 0 0K-=DgNN"j$//d??s$K'&-7$>*
rr(CE$iiG
'//uQw::	

#D$iiG$

1q4

+++ $ $ $q4x!$ '\\EAIeai'(G33q
E!GHH~d))! JJw//E
 vv,C8"?$&K
2;s;K;K0L$M$MEE$+CLE# 8 8 8 '# 785LCC " ( ( (7T>)C#aKEEE( &[[EAIeai'(F22q
eai	)*e33E!GHH~d))! JJv..E
 vv,C>"?$&K
2;s;K;K0L$M$MEE$+CLE# > > > & 4v =>5LCC " ( ( (6E>D00C#aKEEE( 2A2h
uqy) .AMM1HCQJEU519_-A  .AMM) "BJr{37G7G,H I I ' ) ) )"SLEEE)u QJE1HC
W '//X Jso   (D+ +EEH ,AG. .HHH('H(L #AK% %K=<K=L#"L#&AN( (N:9N:)_path_normpathc                     t          j        |           } t          | t                    r5t          j        t          t          j        |                               pdS t          |           pdS )0Normalize path, eliminating double slashes, etc.r   r   )rQ   rR   r5   r6   r^   r   r_   r9   s    r;   r"   r"   &  s\    ydE"" 	J;~bk$.?.?@@AAITId##*s*r=   c                    t          j        |           } t          |           }t          |           }t	          | t
                    rd}d}nd}d}|                     ||          } t          |           \  }} |                     |          r||z  }| 	                    |          } | 
                    |          }d}|t          |          k     r||         r||         |k    r||= n\||         |k    rK|dk    r ||dz
           |k    r||dz
  |dz   = |dz  }n*|dk    r|                    |          r||= n|dz  }n|dz  }|t          |          k     |s|s|                    |           ||                    |          z   S )r   r      ..r   r   r   rc   )rQ   rR   r?   rA   r5   r6   rV   r   rd   lstripr   ry   endswithappendr   )r:   r&   r)   r$   r%   prefixcompsr   s           r;   r"   r"     s   ytnnT""dE"" 	FFFFF||FC((!$'' ??3 	$cMF;;s##D

3#e**nn8 uQx611!HHqV##q55U1Q3Z611ac!A#gFAA!VV 4 4VaFAAQ #e**nn  	!e 	!LL   ''r=   c                     t          j        |           } t          |           sLt          | t                    rt          j                    }nt          j                    }t          ||           } t          |           S )zReturn 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.

    )	rQ   rR   r   r5   r6   getcwdbgetcwdr   r"   )r:   cwds     r;   _abspath_fallbackr   .  sb     9T??D;; dE"" 	*,,CC)++CCD>>r=   )_getfullpathnamec                     	 t          t          t          |                               S # t          t          f$ r t	          |           cY S w xY w)z&Return the absolute version of a path.)r"   r   r   r   r   r9   s    r;   r#   r#   F  sX    	+,Xd^^<<===$ 	+ 	+ 	+$T*****	+s   (+  AA)_getfinalpathnamereadlinkc                    d}t                      }t          |           |vr|                    t          |                      	 | }t          |           } t	          |           s<t          |          s|} nht          t          t          |          |                     } n,# t          $ r}|j
        |v rY d }~n% d }~wt          $ r Y nw xY wt          |           |v| S )N)rc   rw   rb             2   C   W   i&  i(  i)  )setr   add_nt_readlinkr   r   r"   r   r   r   winerrorr   )r:   allowed_winerrorseenold_pathexs        r;   _readlink_deepr   S  s    LuutnnD((HHXd^^$$$#D)) T{{ C "(++ '#D):):D$A$ABBD   ;"222EEEE   ' tnnD((, s*   1B" 7*B" "
C,	B;:B;;C
Cc                    d}| d d         }| r	 t          |           } |rt          | |          n| S # t          $ r}|j        |vr 	 t	          |           }|| k    r|rt          ||          n|cY d }~S n# t          $ r Y nw xY wt          |           \  } }| r|s
| |z   cY d }~S |rt          ||          n|}Y d }~nd }~ww xY w| |S )N)rc   rw   rb   r   r   r   r   5   A   r   r   {      i  i  r   )r   r   r   r   r   r   )r:   r   r   r   new_pathnames         r;   _getfinalpathname_nonstrictr   }  sZ   $ X BQBx 	::(..+/9tD$'''T9 : : :;&666	  .d33H4''7;ItHd333IIIIII (   D #4[[
d  ' '$;&&&&&&+/9tD$'''T':	  	:0 sJ   "3 
C
C (A70C6C 7
BC BC !C'C  CF)strictc                Z   t          |           } t          | t                    rSd}d}d}t          j                    }t          |           t          t          j        t                              k    rdS n@d}d}d}t          j                    }t          |           t          t                    k    rdS | 	                    |          }|st          |           st          ||           } 	 t          |           } d	}np# t          $ r8}|rt          t          |                    d t          |           } Y d }~n3d }~wt          $ r#}|r |j        }t#          |           } Y d }~nd }~ww xY w|s| 	                    |          r| 	                    |          r|| t%          |          d          z   }	n| t%          |          d          }		 t          |	          | k    r|	} n6# t          $ r
}Y d }~n'd }~wt          $ r}|j        |k    r|	} Y d }~nd }~ww xY wt          |           } | S )
Ns   \\?\rH   s   \\s   \\.\NULz\\?\rI   z\\z\\.\NULr   )r"   r5   r6   rQ   r   r   r^   r+   r   rd   r   r   r   r   r   strr   r   ry   )
r:   r   r   r|   new_unc_prefixr   
had_prefixinitial_winerrorr   spaths
             r;   r,   r,     ss   ~~dE"" 	$F(J$N*,,C~~"+g*>*>!?!???$} @ F'J#N)++C~~'!2!222#|__V,,
 	#%++ 	#T??D	5$T**D  	" 	" 	"
  1c"gg&&D0D>>DDDDDD 	5 	5 	5 !{.t44DDDDDD		5  	!doof55 	! z** +&c*oo.>.>)??S[[\\*!$U++t33 D     ! ! ! ;"222 D	!
 ~~sB   /D 
E..D>>E.E))E.G& &
H5HHHgetwindowsversionrb   rw   c                    t          j        |           } t          |           }t          | t                    rd}d}nd}d}||}| st          d          t          j        |          }	 t          t          |                    }t          t          |                     }t          |          \  }}t          |          \  }	}
t          |          t          |	          k    rt          d|	d|          d	 |
                    |          D             }d
 |

                    |          D             }d}t          ||          D ],\  }}t          |          t          |          k    r n|dz  }-|gt          |          |z
  z  ||d         z   }|s|S t          | S # t          t
          t          t           t"          f$ r t%          j        d| |            w xY w)z#Return a relative version of a pathr   r   r   r   Nzno path specifiedzpath is on mount z, start on mount c                     g | ]}||S  r  .0r   s     r;   
<listcomp>zrelpath.<locals>.<listcomp>  s    <<<A!<a<<<r=   c                     g | ]}||S r  r  r  s     r;   r  zrelpath.<locals>.<listcomp>  s    :::1:Q:::r=   r   rc   r.   )rQ   rR   r?   r5   r6   r   r#   r"   r   r   r   zipry   r   ri   rj   rk   DeprecationWarningrl   rm   )r:   r~   r&   r$   r%   	start_abspath_absstart_drive
start_rest
path_drive	path_rest
start_list	path_listr   e1e2rel_lists                    r;   r.   r.     s   9T??D
4..C$ } .,---IeEHUOO,,	8D>>**",Y"7"7Z *8 4 4
IK  HZ$8$888*

KK) * * * =<!1!1#!6!6<<<
::	 4 4:::	*i00 	 	FB||x||++FAA8s:q01IabbMA 	MXz><AST   $Ye<<<s   ,D2F( F( (;G#c                 D   | st          d          t          t          t          j        |                     } t          | d                   t          | d                   t          | d         t                    rdnd	 fd| D             }fd|D             }	 t          fd|D                       \  }n# t           $ r t          d          d	w xY wt          t          d
 |D                                 dk    rt          d          t          | d                                                 \  }}|                              }fd|D             }fd|D             }t          |          }t          |          }t!          |          D ]\  }	}
|
||	         k    r|d	|	         } n|d	t          |                   }|r|z   n|}|                    |          z   S # t$          t&          f$ r t)          j        dg| R    w xY w)zDGiven a sequence of path names, returns the longest common sub-path.z%commonpath() arg is an empty sequencer   r   r   c                 z    g | ]7}t          |                                                                        8S r  )r   rV   r`   )r  rs   r)   r&   s     r;   r  zcommonpath.<locals>.<listcomp>8  s;    QQQaz!))FC"8"8">">"@"@AAQQQr=   c                 @    g | ]\  }}|                               S r  r   r  r   rs   r&   s      r;   r  zcommonpath.<locals>.<listcomp>9  s'    <<<1qwws||<<<r=   c              3   :   K   | ]\  }}|d d         k    V  d S )Nrc   r  r  s      r;   	<genexpr>zcommonpath.<locals>.<genexpr><  s3      >>$!Q2A2#>>>>>>r=   z%Can't mix absolute and relative pathsNc              3       K   | ]	\  }}|V  
d S r4   r  )r  r   rs   s      r;   r  zcommonpath.<locals>.<genexpr>C  s&      --A1------r=   rc   zPaths don't have the same drivec                 $    g | ]}||k    
|S r  r  r  r   r$   s     r;   r  zcommonpath.<locals>.<listcomp>H  s#    999q9Q&[[![[[r=   c                 ,    g | ]}fd |D             S )c                 $    g | ]}||k    
|S r  r  r  s     r;   r  z)commonpath.<locals>.<listcomp>.<listcomp>J  s#    :::a:a6kkkkkr=   r  )r  r[   r$   s     r;   r  zcommonpath.<locals>.<listcomp>J  s.    PPPq::::1:::PPPr=   r2   )r   tuplerh   rQ   rR   r?   rA   r5   r6   r   ry   r   rV   r   minmax	enumerater   ri   rj   rl   rm   )rn   drivesplitssplit_pathsr   r   r:   commons1s2r   r   r   r)   r$   r&   s               @@@r;   r2   r2   )  s     B@AAA#bi''((E
58

Cq""F%(E"" !QQQQQ5QQQ<<<<<<<	P>>>>+>>>>>FEE 	P 	P 	PDEE4O	P s-------..!33>??? q!1!1&#!>!>??tC9999V999PPPPKPPPbMM 	& 	&DAqBqEzz  HSWWH%F %05((((~&   $\:E::::s%   G: %C G: CDG: :%H)_isdirr4   )D__doc__r$   r%   r*   r'   r(   r+   rQ   rS   r   rl   platformr   r   r&   r)   r   rZ   r7   r8   __all__r<   r?   rA   rF   rJ   _winapirK   rW   rL   rX   rM   rY   r   ImportErrorr   r   r   r   r   r   r   r   r   r   ntr   r   r    r!   r   r"   r   r   r#   r   r   r   r   r   r,   hasattrr   r-   r.   r2   r'  r   r  r=   r;   <module>r/     s    
		


 				 



         <7rz~~i<<
CFF
CF
zz#
**V

A A A          !.- - - - - - - - - -
: : : :$  	. 	. 	.. . . . .	.$  $ $ $T( ( (`  .: : : (0 
    $ $ $  $%%%%%%%     :-1 -1 -1zj j j`1+!!!!!!V+ + + +S  &( &( &(%( %( %( %( %(&(b  "+######+ + + +	       GGG ^>>>>>>>>
( ( (T/ / /b "' = = = = = =    HHH@ &gc+>?? >3c355a8A= * * * *n/ / /d	
 #""""""" 	 	 	DD	sl   B B)(B)C   C*)C*7D DDD D'&D'+E   E
	E
:F F
F