+
     h^  c                   s   ^ RI t ^ RIt^ RIt^ RIt^ RIHt ^ RIHtHtH	t	H
t
HtHtHtHtHt ^ RIHtHt ^ RIHtHt ^ RIHt ^ RIHt ^ RIHt ^ R	IHtHt ^ R
IH t H!t!H"t"H#t# ^ RI$H%t%H&t& ^ RI'H(t( ]! ])4      t*R R lt+R R lt,],R R l4       t-R R lt.R R lt/R R lt0 ! R R4      t1 ! R R4      t2 ! R R4      t3R# )    N)cache_from_source)	AnyCallableDict	GeneratorIterableListOptionalSetTuple)LegacyDistutilsInstallUninstallMissingRecord)get_bin_prefixget_bin_userBaseDistribution)WINDOWS)egg_link_path_from_location)	getLogger
indent_log)asknormalize_pathrenamesrmtree)AdjacentTempDirectoryTempDirectory)running_under_virtualenvc                sd    V ^8  d   QhR\         R\         R\        R\        \         RR3,          /# )   bin_dirscript_nameis_guireturnN)strboolr   format   "D/usr/lib/python3.14/site-packages/pip/_internal/req/req_uninstall.py__annotate__r'      s7     & &&"&,0&sD$&    c              #  s   "   \         P                  P                  W4      pVx  \        '       g   R# V R2x  V R2x  V'       d
   V R2x  R# V R2x  R# 5i)zCreate the fully qualified name of the files created by
{console,gui}_scripts for the given ``dist``.
Returns the list of file names
Nz.exez.exe.manifestz-script.pywz
-script.py)ospathjoinr   )r   r   r   Zexe_names   &&& r&   _script_namesr,      s]      ww||G1H
N7Jd
Jm
$$
+&&
*%%s   AA
Ac          	      s    V ^8  d   QhR\         R\        \        RR3,          3,          R\         R\        \        RR3,          3,          /# )r   fn.Nr    )r   r   r   r#   r%   r&   r'   r'   (   sF      iT4001c9S$_--.r(   c                 sL   a  \         P                  ! S 4      R  V 3R ll4       pV# )c          	      sX    V ^8  d   QhR\         R\         R\        \         RR3,          /# )r   argskwr    N)r   r   r#   r%   r&   r'   Z_unique.<locals>.__annotate__,   s,      c  3d?)C r(   c               ?   s|   <"   \        4       pS! V / VB  F   pW29  g   K  VP                  V4       Vx  K"  	  R # 5iN)setadd)r.   r/   ZseenZitemr-   s   *,  r&   uniqueZ_unique.<locals>.unique+   s5     OOD
 $s   <<)	functoolsZwraps)r-   r3   s   f r&   _uniquer5   (   s'     __R  Mr(   c                sL    V ^8  d   QhR\         R\        \        RR3,          /# r   distr    N)r   r   r!   r#   r%   r&   r'   r'   7   s&      / Ic4o4N r(   c              #  s  "   V P                   pV P                  4       pVf   \        V R7      hV F  p\        P                  P                  W4      pVx  VP                  R4      '       g   K?  \        P                  P                  V4      w  rVVRR p\        P                  P                  WWR,           4      pVx  \        P                  P                  WWR,           4      pVx  K  	  R# 5i)a  
Yield all the uninstallation paths for dist based on RECORD-without-.py[co]

Yield paths to all the files in RECORD. For each .py file in RECORD, add
the .pyc and .pyo in the same directory.

UninstallPathSet.add() takes care of the __pycache__ .py[co].

If RECORD is not found, raises an error,
with possible information from the INSTALLER file.

https://packaging.python.org/specifications/recording-installed-packages/
NZdistribution.py.pyc.pyoi)locationiter_declared_entriesr   r)   r*   r+   endswithsplit)r7   r<   entriesentryr*   Zdnr-   Zbases   &       r&   uninstallation_pathsrB   6   s      }}H ((*G$$77ww||H,
==WW]]4(FBcr7D77<<6M2DJ77<<6M2DJ s   A)C00B C0c                \    V ^8  d   QhR\         \        ,          R\        \        ,          /# r   pathsr    r   r!   r	   r#   r%   r&   r'   r'   X   s"      8C= SX r(   c                s0  aa \         P                  P                  o\        4       p\	        V \
        R7       FZ  o\        ;QJ d     VV3R lV 4       F  '       g   K   RM	  RM! VV3R lV 4       4      pV'       d   KI  VP                  S4       K\  	  V# )zCompact a path set to contain the minimal number of paths
necessary to contain all paths in the set. If /a/path/ and
/a/path/to/a/file.txt are both in the set, leave only the
shorter path.Zkeyc              3   s   <"   T F`  pSP                  VP                  R 4      4      ;'       d4    S\        VP                  R 4      P                  S4      4      ,          S8H  x  Kb  	  R# 5i)*N)
startswithZrstriplen).0Z	shortpathr*   seps   & r&   	<genexpr>Zcompact.<locals>.<genexpr>a   sh      
 )	 OOI,,S12 D DS))#.55c:;<CD(s
   +A+<A+TF)r)   r*   rL   r1   sortedrJ   anyr2   )rE   Zshort_pathsZshould_skipr*   rL   s   &  @@r&   compactrP   X   su     ''++CEKu#&c 
 )
ccc 
 )
 

 {OOD! ' r(   c                rC   rD   rF   r#   r%   r&   r'   r'   k   s&     A Ax} AS Ar(   c                s  a
aa V  Uu/ uF#  p\         P                  P                  V4      VbK%  	  pp\        V4      p\	        VP                  4        Uu0 uF)  p\         P                  P                  V4      ^ ,          kK+  	  up\        R7      p\        4       pR R loV F  o\        ;QJ d    V3R lV 4       F  '       g   K   RM	  RM! V3R lV 4       4      '       d   KE  \        4       p\        4       p\         P                  ! S4       F@  w  o
rVP                  V
VV3R lV 4       4       VP                  V
VV3R lV	 4       4       KB  	  Wc,
          '       d   K  VP                  V4       VP                  S\         P                  ,           4       K  	  \        \        VP                  V4      4      V,          # u upi u upi )	zReturns a set containing the paths that need to be renamed.

This set may include directories when the original sequence of paths
included every file on disk.
rG   c                s0    V ^8  d   QhR\         R\         /# )r   ar    r!   r#   r%   r&   r'   Z)compress_for_rename.<locals>.__annotate__v   s     2 2c 2c 2r(   c                  sx    \         P                  P                  \         P                  P                  ! V !  4      # r0   )r)   r*   normcaser+   )rQ   s   *r&   	norm_joinZ&compress_for_rename.<locals>.norm_joinv   s$    wwa 011r(   c              3   s   <"   T F3  p\         P                  P                  S4      P                  V4      x  K5  	  R # 5ir0   )r)   r*   rS   rI   )rK   Zwroots   & r&   rM   &compress_for_rename.<locals>.<genexpr>z   s.     GYrww%0033Ys   ;>TFc              3   8   <"   T F  pS! SSV4      x  K  	  R # 5ir0    )rK   ZddirnamerT   rU      & r&   rM   rV      s     LGqyw::G   c              3   rW   r0   rX   )rK   ZfrY   rT   rU   rZ   r&   rM   rV      s     H%QYtWa88%r[   )r)   r*   rS   r1   rN   valuesr?   rJ   rO   walkZupdateZdifference_updater2   rL   mapZ__getitem__)rE   pZcase_mapZ	remainingZ	uncheckedZ	wildcardsZ	all_filesZall_subdirsZsubdirsfilesrY   rT   rU   s   &         @@@r&   compress_for_renamera   k   sL    1661  #Q&H6HIX__5FG5Fa(++5FGSQI%I2 3GYG333GYGGG!e	 #')wwt}#GWLGLLH%HH (5 %%''	2MM$-( " s8''34y@@3 7Gs   )G/Gc                s    V ^8  d   QhR\         \        ,          R\        \        \        ,          \        \        ,          3,          /# rD   )r   r!   r
   r	   r#   r%   r&   r'   r'      s0     ." ."x} ."s3xS?Q9R ."r(   c                s   \        V 4      p\        4       p\        4       p\        4       pV Fy  pVP                  R4      '       d   K  VP                  R4      '       g   RV9   d/   VP                  \        P                  P                  V4      4       VP                  V4       K{  	  \        \        \        P                  P                  V4      4      p\        V4      pV F  p\        P                  ! V4       F  w  rp
V
 F  pVP                  R4      '       d   K  \        P                  P                  W4      p\        P                  P                  V4      '       g   Kb  \        P                  P                  V4      V9  g   K  VP                  V4       K  	  K  	  K  	  YC Uu0 uF#  p\        P                  P                  VR4      kK%  	  up,          pW3# u upi )a[  Returns a tuple of 2 sets of which paths to display to user

The first set contains paths that would be deleted. Files of a package
are not added and the top-level directory of the package has a '*' added
at the end - to signify that all it's contents are removed.

The second set contains files that would have been skipped in the above
folders.
r:   z__init__.pyz
.dist-inforH   )r1   r>   r2   r)   r*   rY   r^   rS   rP   r]   r+   isfile)rE   will_remove	will_skipZfoldersr`   r*   Z_normcased_filesZfolderZdirpathZ_ZdirfilesZfnameZfile_s   &            r&   compress_for_output_listingre      se    e*KI eGEE==  ==''<4+?KK-.		$  3rww//78gG $&GGFO G!>>&))W4GGNN5))((/7GG MM%( " %4  7K7277<<47KKK!! Ls   -)G"c                   s   a  ] tR t^t o RtV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR	 ltV 3R
 lR lt	V 3R lR lt
]V 3R lR l4       tRtV tR# )StashedUninstallPathSetzSA set of file rename operations to stash files while
tentatively uninstalling them.c                   < V ^8  d   QhRR/# r   r    NrX   r$   __classdict__   "r&   r'   $StashedUninstallPathSet.__annotate__   s     0 0$ 0r(   c                s"    / V n         . V n        R # r0   )
_save_dirs_movesself   &r&   __init__Z StashedUninstallPathSet.__init__   s     57 .0r(   c                &   < V ^8  d   QhRS[ RS[ /# r   r*   r    rR   ri   rk   r&   r'   rl      s        r(   c                s     \        V4      pW P                  \        P
                  P                  V4      &   VP
                  #   \         d    \        RR7      p LPi ; i)zStashes a directory.

Directories are stashed adjacent to their original location if
possible, or else moved/copied into the user's temp dir.	uninstallZkind)r   OSErrorr   rm   r)   r*   rS   )rp   r*   save_dir   && r&   _get_directory_stashZ,StashedUninstallPathSet._get_directory_stash   sS    	7&;D&AH 3;((./}}	  	7$+6H	7s   A AAc                rs   rt   rR   ri   rk   r&   r'   rl      s      C C r(   c                s   \         P                  P                  V4      p\         P                  P                  V4      Rr2RpW#8w  d    V P                  V,          pM9\         P                  P                  V4      p\        RR7      pW@P                  V&   \         P                  P                  W4      pV'       dJ   V\         P                  P                  8w  d+   \         P                  P                  VP                  V4      # VP                  #   \
         d     Mi ; i\         P                  P                  T4      Tr2EK  )zrStashes a file.

If no root has been provided, one will be created for the directory
in the user's temp directory.Nru   rv   )
r)   r*   rS   rY   rm   ZKeyErrorr   relpathZcurdirr+   )rp   r*   headZold_headrx   r{   s   &&    r&   _get_file_stashZ'StashedUninstallPathSet._get_file_stash   s    
 ww%.h??40 77??4(D$+6H$,OOD!''//$-w"''..077<<w77}}  WW__T2D(s   	D D D c                rs   rt   rR   ri   rk   r&   r'   rl      s      # # r(   c                s   \         P                  P                  V4      ;'       d%    \         P                  P                  V4      '       * pV'       d   V P	                  V4      pMV P                  V4      pV P                  P                  W34       V'       d<   \         P                  P                  V4      '       d   \         P                  ! V4       \        W4       V# )z}Stashes the directory or file and returns its new location.
Handle symlinks as files to avoid modifying the symlink targets.
)
r)   r*   isdirislinkrz   r}   rn   ZappendZrmdirr   )rp   r*   Zpath_is_dirnew_path   &&  r&   stashZStashedUninstallPathSet.stash   s     ggmmD)FF"''..2F.F006H++D1HD+,277==22 HHXr(   c                rg   rh   rX   ri   rk   r&   r'   rl     s       r(   c                s    V P                   P                  4        F  pVP                  4        K  	  . V n        / V n         R# )z0Commits the uninstall by removing stashed files.N)rm   r\   Zcleanuprn   )rp   rx      & r&   commitZStashedUninstallPathSet.commit  s3    ..0H 1r(   c                rg   rh   rX   ri   rk   r&   r'   rl     s      $ r(   c                s   V P                    F  p\        P                  ! R.VO5!   K  	  V P                    F  w  r# \        P                  RW#4       \        P
                  P                  V4      '       g&   \        P
                  P                  V4      '       d   \        P                  ! V4       M0\        P
                  P                  V4      '       d   \        V4       \        W24       K  	  V P                  4        R#   \         d9   p\        P                  RT4       \        P                  RT4        Rp?EK  Rp?ii ; i)z2Undoes the uninstall by moving stashed files back.zMoving to %s
 from %szReplacing %s from %szFailed to restore %szException: %sN)rn   loggerinfodebugr)   r*   rb   r   Zunlinkr~   r   r   rw   errorr   )rp   r_   r   r*   Zex   &    r&   rollbackZ StashedUninstallPathSet.rollback  s    AKK0515  #kkNH	23XD77>>(++rww~~h/G/GIIh'WW]]8,,8$' * 		  23X>_b112s$   AD;DDE	,EE	c                    < V ^8  d   QhRS[ /# r   r    r"   ri   rk   r&   r'   rl   #  s     ! !d !r(   c                s,    \        V P                  4      # r0   )r"   rn   ro   rq   r&   can_rollbackZ$StashedUninstallPathSet.can_rollback"  s    DKK  r(   )rn   rm   N)__name__
__module____qualname____firstlineno____doc__rr   rz   r}   r   r   r   Zpropertyr   __static_attributes____classdictcell__rj      @r&   rf   rf      sZ     &0 0  6 *  & ! !r(   rf   c                   s   a  ] tR tRt o RtV 3R lR ltV 3R lR ltV 3R lR ltV 3R	 lR
 ltRV 3R lR llt	V 3R lR lt
V 3R lR ltV 3R lR lt]V 3R lR l4       tRtV tR# )UninstallPathSeti'  zIA set of file paths to be removed in the uninstallation of a
requirement.c                $   < V ^8  d   QhRS[ RR/# r6   r   ri   rk   r&   r'   UninstallPathSet.__annotate__+  s      	J 	J- 	J$ 	Jr(   c                s    \        4       V n        \        4       V n        / V n        Wn        \        4       V n        \        P                  ! \        4      V n
        R # r0   )r1   _paths_refuse_pth_distrf   _moved_pathsr4   Z	lru_cacher   _normalize_path_cached)rp   r7      &&r&   rr   ZUninstallPathSet.__init__+  s@     #!$46	
35 '0&9&9.&I#r(   c                s&   < V ^8  d   QhRS[ RS[/# rt   )r!   r"   ri   rk   r&   r'   r   6  s     	H 	Hs 	Ht 	Hr(   c                s    \        4       '       g   R# VP                  V P                  \        P                  4      4      # )z[
Return True if the given path is one we are permitted to
remove/modify, False otherwise.

T)r   rI   r   sysprefix)rp   r*   r   r&   
_permittedZUninstallPathSet._permitted6  s.     ())t::3::FGGr(   c                r   )r   r*   r    NrR   ri   rk   r&   r'   r   A  s     . . . .r(   c                sX   \         P                  P                  V4      w  r#\         P                  P                  V P	                  V4      \         P                  P                  V4      4      p\         P                  P                  V4      '       g   R # V P                  V4      '       d   V P                  P                  V4       MV P                  P                  V4       \         P                  P                  V4      ^,          R8X  d   V P                  \        V4      4       R # R # )Nr9   )r)   r*   r?   r+   r   rS   existsr   r   r2   r   Zsplitextr   )rp   r*   r|   Ztailr   r&   r2   ZUninstallPathSet.addA  s    WW]]4(
 ww||D77=rww?O?OPT?UVww~~d##??4  KKOOD!LLT" 77D!!$-HH&t,- .r(   c                *   < V ^8  d   QhRS[ RS[ RR/# )r   pth_filerA   r    NrR   ri   rk   r&   r'   r   T  s"     ' ' 'C 'D 'r(   c                s$   V P                  V4      pV P                  V4      '       dM   WP                  9  d   \        V4      V P                  V&   V P                  V,          P	                  V4       R # V P
                  P	                  V4       R # r0   )r   r   r   UninstallPthEntriesr2   r   )rp   r   rA   s   &&&r&   add_pthZUninstallPathSet.add_pthT  sg    ..x8??8$$yy(&9(&C		(#IIh##E*LLX&r(   c                r   )r   auto_confirmverboser    Nr   ri   rk   r&   r'   r   ]  s'     N N4 N$ N4 Nr(   c                s   V P                   '       g-   \        P                  RV P                  P                  4       R# V P                  P                   RV P                  P
                   2p\        P                  RV4       \        4       ;_uu_ 4        V'       g   V P                  V4      '       d   V P                  p\        V P                   4      p\        \        V4      4       F*  pVP                  V4       \        P                  RV4       K,  	  V P                  P                  4        F  pVP!                  4        K  	  \        P                  RV4       RRR4       R#   + '       g   i     R# ; i)zTRemove paths in ``self._paths`` with confirmation (unless
``auto_confirm`` is True).z7Can't uninstall '%s'. No files were found to uninstall.NZ-zUninstalling %s:zRemoving file or directory %szSuccessfully uninstalled %s)r   r   r   r   raw_nameZraw_versionr   _allowed_to_proceedr   ra   rN   rP   r   r   r   r\   remove)rp   r   r   Zdist_name_versionZmovedZ
for_renamer*   pths   &&&     r&   r   ZUninstallPathSet.remove]  s    {{{KKI

## #zz2231TZZ5K5K4LM&(9:\\t77@@))0=
"7:#67DKK%NN#BDI 8  99++-CJJL . 9;LM \\\s   E*6B*E**E;	c                rs   )r   r   r    r   ri   rk   r&   r'   r   z  s     = =4 =D =r(   c                s<   R R lpV'       g   \        V P                  4      w  r4M\        V P                  4      p\        4       pV! RV4       V! RV4       V! RV P                  4       V'       d   V! R\	        V P                  4      4       \        RR	4      R8g  # )
z@Display which files would be deleted and prompt for confirmationc                sJ    V ^8  d   QhR\         R\        \         ,          RR/# )r   msgrE   r    N)r!   r   r#   r%   r&   r'   Z:UninstallPathSet._allowed_to_proceed.<locals>.__annotate__}  s%     	& 	&# 	&hsm 	& 	&r(   c                 s   V'       g   R # \         P                  V 4       \        4       ;_uu_ 4        \        \	        V4      4       F  p\         P                  V4       K  	  R R R 4       R #   + '       g   i     R # ; ir0   )r   r   r   rN   rP   )r   rE   r*   ry   r&   _displayZ6UninstallPathSet._allowed_to_proceed.<locals>._display}  sF    KK"75>2DKK% 3 s   1A--A>	zWould remove:z+Would not remove (might be manually added):z%Would not remove (outside of prefix):zWill actually move:zProceed (Y/n)? n)Zyr   Z )re   r   r1   r   ra   r   )rp   r   r   rc   rd   s   &&   r&   r   Z$UninstallPathSet._allowed_to_proceedz  s    	& %@%M"K dkk*KI+.>	J8$,,G*,?,LM$n5<<r(   c                rg   rh   rX   ri   rk   r&   r'   r     s      $ r(   c                s   V P                   P                  '       g-   \        P                  RV P                  P
                  4       R# \        P                  RV P                  P
                  4       V P                   P                  4        V P                  P                  4        F  pVP                  4        K  	  R# )z1Rollback the changes previously made by remove().z'Can't roll back %s; was not uninstalledNzRolling back uninstall of %s)
r   r   r   r   r   r   r   r   r   r\   )rp   r   r   r&   r   ZUninstallPathSet.rollback  s      ---LL9

## 2DJJ4G4GH""$99##%CLLN &r(   c                rg   rh   rX   ri   rk   r&   r'   r     s     # # #r(   c                s:    V P                   P                  4        R# )z?Remove temporary save dir: rollback will no longer be possible.N)r   r   ro   rq   r&   r   ZUninstallPathSet.commit  s      "r(   c                r   )r   r7   r    r   r   ri   rk   r&   r'   r     s!     Z Z- Z2D Zr(   c                s   VP                   pVP                  pVf)   \        P                  RVP                  4       V ! V4      # \        V4      pVP                  '       g9   \        P                  RVP                  V\        P                  4       V ! V4      # T\        P                  ! R4      \        P                  ! R4      0 Uu0 uF  pV'       g   K  VkK  	  up9   d*   \        P                  RVP                  V4       V ! V4      # V ! V4      p\        VP                  4      pVP                  ;'       dW    VR J;'       dK    \        P                  P!                  V4      ;'       d$    VP#                  VP$                   R24      '       * pV'       EdT   Ve   VP'                  V4       VP)                  4       p	V	e:   V	 F1  p
VP'                  \        P                  P+                  W*4      4       K3  	  EMVP-                  R4      '       d    VP/                  R4      pVP1                  R	R
7      pVP/                  R4      P1                  4        Uu. uF  pV'       g   K  W\9  g   K  VNK  	  up Fo  p\        P                  P+                  W-4      pVP'                  V4       VP'                  V R24       VP'                  V R24       VP'                  V R24       Kq  	  EMVP4                  '       d   \7        VR7      hVP8                  '       d   VP'                  V4       \        P                  P;                  V4      ^,          p\        P                  P+                  \        P                  P=                  V4      R4      pVP?                  VRV,           4       EMVP@                  '       d%   \C        V4       F  pVP'                  V4       K  	  MV'       d   \E        V4      ;_uu_ 4       p\        P                  PG                  VPI                  4       PK                  4       4      pVPM                  V4      pR R R 4       VP'                  V4       \        P                  P+                  \        P                  P=                  V4      R4      pVP?                  VV4       M\        PO                  RVV4       VPP                  '       d   \S        4       pM
\U        4       p VPW                  4        Fr  pVP'                  \        P                  P+                  VV4      4       \X        '       g   K@  VP'                  \        P                  P+                  VV R24      4       Kt  	  R R lpV! VV4       F  pVP'                  V4       K  	  V# u upi   \2         d    . p ELi ; iu upi   + '       g   i     EL~; i  \2        \Z        3 d     Lni ; i)Nz-Not uninstalling %s since it is not installedz1Not uninstalling %s at %s, outside environment %sZstdlibZ
platstdlibz<Not uninstalling %s at %s, as it is in the standard library.z	.egg-infoztop_level.txtznamespace_packages.txtF)Zkeependsr9   r:   r;   r8   zeasy-install.pthz./z)Not sure how to uninstall: %s - Check: %sz.batc          	      sX    V ^8  d   QhR\         R\        R\        \        RR3,          /# )r   r7   r   r    N)r   r!   r   r#   r%   r&   r'   Z0UninstallPathSet.from_dist.<locals>.__annotate__5  s6     	N 	N"	N	N sD$'	Nr(   c              3   s  "   V P                  4        Fe  pVP                  R 8X  d!   \        WP                  R4       Rj  xL
  K4  VP                  R8X  g   KG  \        WP                  R4       Rj  xL
  Kg  	  R#  L= L5i)Zconsole_scriptsFNZgui_scriptsT)Ziter_entry_pointsZgroupr,   Zname)r7   r   Zentry_pointry   r&   iter_scripts_to_removeZ:UninstallPathSet.from_dist.<locals>.iter_scripts_to_remove5  si       $557$$(99,W6F6FNNN &&-7,W6F6FMMM	  8NMs)   >B A>BB3B 4B B).r<   info_locationr   r   Zcanonical_namer   Zlocalr   r   	sysconfigZget_pathr   r   Z"installed_with_setuptools_egg_infor)   r*   r   r>   Zsetuptools_filenamer2   r=   r+   Zis_fileZ	read_textZ
splitlinesZFileNotFoundErrorZinstalled_by_distutilsr   Zinstalled_as_eggr?   rY   r   Zinstalled_with_dist_inforB   openrS   ZreadlineZstripr   r   Zin_usersiter   r   Ziter_distutils_script_namesr   ZNotADirectoryError)Zclsr7   Zdist_locationr   Znormalized_dist_locationr_   Zpaths_to_removeZdevelop_egg_linkZsetuptools_flat_installationZinstalled_filesZinstalled_fileZnamespace_packagesZ
namespacesZtop_level_pkgr*   Zeasy_install_eggZeasy_install_pthfhZlink_pointerZnormalized_link_pointerr   Zscriptr   Zss   &&                      r&   	from_distZUninstallPathSet.from_dist  s   ** KK?## t9#1-#@ zzzKKC##(

	 t9#((2I4F4F|4TU(
U AU(
 

 KKN##(
 t9d)6t}}E 33 S ST)S S}-S S
 "**d.F.F-Gy+QRR 	% ('(##M2"88:O*&5N#''](ST '6
 o..O)-8P)Q& "4!>!>!>!NJ "^^O<GGI&I 0 AI&M
 77<<ED#''-#''4&5#''4&6#''4&6& ((((d;;"""  89!ww}}-EFqI!ww|| 89"  ##$4d=M6MN***,T2##D) 3  &''2!ww//0C0C0EF*9*P*P +' (  01!ww|| 013E  ##$4mD LL; "nG$&G	::<##BGGLL&$AB7#''Wo(NO =	N (g6A" 7 M(
T ) $!#J$&H (''F "#56 		sV   	
V%V%V* 
V>+V>3V>AW6AW 6W *V;:V;W	W+*W+)r   r   r   r   r   r   N)FF)r   r   r   r   r   rr   r   r2   r   r   r   r   r   Zclassmethodr   r   r   r   r   r&   r   r   '  sv     	J 	J	H 	H. .&' 'N N:= =8 # # Z Zr(   r   c                   sh   a  ] tR tRt o V 3R lR ltV 3R lR ltV 3R lR ltV 3R lR	 ltR
tV t	R# )r   iE  c                r   )r   r   r    NrR   ri   rk   r&   r'    UninstallPthEntries.__annotate__F  s     8 8 8 8r(   c                s>    Wn         \        4       V n        R V n        R # r0   )filer1   r@   _saved_lines)rp   r   r   r&   rr   ZUninstallPthEntries.__init__F  s    	!$37r(   c                r   )r   rA   r    NrR   ri   rk   r&   r'   r   K  s            r(   c                s   \         P                  P                  V4      p\        '       d?   \         P                  P	                  V4      ^ ,          '       g   VP                  RR4      pV P                  P                  V4       R# )r    Z\Z/N)r)   r*   rS   r   Z
splitdriveZreplacer@   r2   )rp   rA   r   r&   r2   ZUninstallPthEntries.addK  sX      ' 7277--e4Q77MM$,Er(   c                rg   rh   rX   ri   rk   r&   r'   r   Z  s     ! ! !r(   c                s   \         P                  R V P                  4       \        P                  P                  V P                  4      '       g#   \         P                  RV P                  4       R# \        V P                  R4      ;_uu_ 4       pVP                  4       pW n	        RRR4       \        ;QJ d    R X 4       F  '       g   K   RM	  RM! R X 4       4      '       d   RpMRpV'       dP   VR,          P                  VP                  R	4      4      '       g#   VR,          VP                  R	4      ,           VR&   V P                   F@  p \         P                  R
V4       VP                  WC,           P                  R	4      4       KB  	  \        V P                  R4      ;_uu_ 4       pVP!                  V4       RRR4       R#   + '       g   i     EL1; i  \         d     K  i ; i  + '       g   i     R# ; i)zRemoving pth entries from %s:z.Cannot remove entries from nonexistent file %sNZrbc              3   s,   "   T F
  pR V9   x  K  	  R# 5i)s   
NrX   )rK   Zliner   r&   rM   Z-UninstallPthEntries.remove.<locals>.<genexpr>e  s     154w$5s   TFz
Z
zutf-8zRemoving entry: %swbi)r   r   r   r)   r*   rb   Zwarningr   Z	readlinesr   rO   r>   Zencoder@   r   Z
ValueError
writelines)rp   r   ZlinesZendlinerA   r   r&   r   ZUninstallPthEntries.removeZ  sb   6		B ww~~dii((NNKTYYW$))T""bLLNE % # 315133315111GGr++GNN7,CDDb	GNN7$;;E"I\\E3U;eo55g>? " $))T""bMM%  #"# #""  """s*   G<G#3G5G 	#G21G25H	c                r   r   r   ri   rk   r&   r'   r   u  s      $ r(   c                sR   V P                   f#   \        P                  RV P                  4       R# \        P	                  RV P                  4       \        V P                  R4      ;_uu_ 4       pVP                  V P                   4       R R R 4       R#   + '       g   i     R# ; i)Nz.Cannot roll back changes to %s, none were madeFz!Rolling %s back to previous stater   T)r   r   r   r   r   r   r   )rp   r   r   r&   r   ZUninstallPthEntries.rollbacku  sp    $LLI499U8$))D$))T""bMM$++, # #"s   /BB&	)r   r@   r   N)
r   r   r   r   rr   r2   r   r   r   r   r   r   r&   r   r   E  s-     8 8
   ! !6 r(   r   )4r4   r)   r   r   Zimportlib.utilr   Ztypingr   r   r   r   r   r   r   r	   r
   Zpip._internal.exceptionsr   r   Zpip._internal.locationsr   r   Zpip._internal.metadatar   Zpip._internal.utils.compatr   Zpip._internal.utils.egg_linkr   Zpip._internal.utils.loggingr   r   Zpip._internal.utils.miscr   r   r   r   Zpip._internal.utils.temp_dirr   r   Zpip._internal.utils.virtualenvr   r   r   r,   r5   rB   rP   ra   re   rf   r   r   rX   r(   r&   <module>r      s     	 
  , W W W S @ 3 . D = I I M C	8	&& 	 	B&AD."bf! f!R[ [|7 7r(   