
    4Քh#^                       S SK Jr  S SKrS SKrS SKrS SKrS SKJrJr  S SK	J
r
  S SKJrJr  S SKJrJr  S SKJrJr  S SKJr  S S	KJr  S S
KJr  S SKJrJr  S SKJrJrJ r J!r!  S SK"J#r#J$r$  S SK%J&r&  \" \'5      r(        SS jr)    SS jr*\*SS j5       r+SS jr,SS jr-SS jr. " S S5      r/ " S S5      r0 " S S5      r1g)     )annotationsN)	GeneratorIterable)cache_from_source)AnyCallable)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              #     #    [         R                  R                  X5      nUv   [        (       d  gU S3v   U S3v   U(       a  U S3v   gU S3v   g7f)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   )bin_dirscript_nameis_guiexe_names       W/var/www/auris/envauris/lib/python3.13/site-packages/pip/_internal/req/req_uninstall.py_script_namesr"      s]      ww||G1H
N7Jd
Jm
$$
+&&
*%%s   AAc                J   ^  [         R                  " T 5      SU 4S jj5       nU$ )Nc               ?  x   >#    [        5       nT" U 0 UD6 H  nX2;  d  M
  UR                  U5        Uv   M!     g 7fN)setadd)argskwseenitemfns       r!   unique_unique.<locals>.unique.   s5     OOD
 $s   ::)r(   r   r)   r   returnzGenerator[Any, None, None])	functoolswraps)r,   r-   s   ` r!   _uniquer2   +   s'     __R  M    c              #    #    U R                   nUc   S5       eU R                  5       nUc	  [        U S9eU H  n[        R                  R                  X5      nUv   UR                  S5      (       d  M>  [        R                  R                  U5      u  pVUSS n[        R                  R                  XWS-   5      nUv   [        R                  R                  XWS-   5      nUv   M     g7f)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/
Nznot installeddistribution.py.pyc.pyo)locationiter_declared_entriesr
   r   r   r   endswithsplit)distr;   entriesentryr   dnr,   bases           r!   uninstallation_pathsrD   9   s      }}H00((*G$$77ww||H,
==WW]]4(FBcr7D77<<6M2DJ77<<6M2DJ s   A/C,5A7C,c                   ^^ [         R                  R                  m[        5       n[	        U [
        S9 H3  m[        UU4S jU 5       5      nU(       a  M"  UR                  T5        M5     U$ )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.keyc              3     >#    U  H[  nTR                  UR                  S 5      5      =(       a/    T[        UR                  S 5      R                  T5      5         T:H  v   M]     g7f)*N)
startswithrstriplen).0	shortpathr   seps     r!   	<genexpr>compact.<locals>.<genexpr>d   sb      
 )	 OOI,,S12 DS))#.55c:;<CD(s   A#A&)r   r   rO   r&   sortedrL   anyr'   )pathsshort_pathsshould_skipr   rO   s      @@r!   compactrW   [   s^     ''++CEKu#& 
 )
 

 {OOD! ' r3   c                0  ^
^^ U  Vs0 s H#  n[         R                  R                  U5      U_M%     nn[        U5      n[	        UR                  5        Vs1 s H%  n[         R                  R                  U5      S   iM'     sn[        S9n[        5       nSS jmU H  m[        U4S jU 5       5      (       a  M  [        5       n[        5       n[         R                  " T5       H@  u  m
pUR                  U
UU4S jU 5       5        UR                  U
UU4S jU	 5       5        MB     Xc-
  (       a  M  UR                  U5        UR                  T[         R                  -   5        M     [        [        UR                  U5      5      U-  $ s  snf s  snf )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.
r   rF   c                 v    [         R                  R                  [         R                  R                  " U 6 5      $ r%   )r   r   normcaser   )as    r!   	norm_join&compress_for_rename.<locals>.norm_joiny   s$    wwa 011r3   c              3     >#    U  H3  n[         R                  R                  T5      R                  U5      v   M5     g 7fr%   )r   r   rZ   rJ   )rM   wroots     r!   rP   &compress_for_rename.<locals>.<genexpr>}   s.     GYrww%0033Ys   ;>c              3  8   >#    U  H  nT" TTU5      v   M     g 7fr%    )rM   ddirnamer\   r`   s     r!   rP   ra      s     LGqyw::G   c              3  8   >#    U  H  nT" TTU5      v   M     g 7fr%   rc   )rM   fre   r\   r`   s     r!   rP   ra      s     H%QYtWa88%rf   )r[   strr/   ri   )r   r   rZ   r&   rR   valuesr>   rL   rS   walkupdatedifference_updater'   rO   map__getitem__)rT   pcase_map	remaining	unchecked	wildcards	all_filesall_subdirssubdirsfilesre   r\   r`   s             @@@r!   compress_for_renamery   n   s9    1661  #Q&H6HIX__5FG5Fa(+5FGSQI%I2 GYGGG!e	 #')wwt}#GWLGLLH%HH (5 %%''	2MM$-( " s8''34y@@3 7Gs   *F,Fc                   [        U 5      n[        5       n[        5       n[        5       nU Hv  nUR                  S5      (       a  M  UR                  S5      (       d  SU;   a.  UR                  [        R                  R                  U5      5        UR                  U5        Mx     [        [        [        R                  R                  U5      5      n[        U5      nU H  n[        R                  " U5       H  u  pn
U
 H  nUR                  S5      (       a  M  [        R                  R                  X5      n[        R                  R                  U5      (       d  M`  [        R                  R                  U5      U;  d  M  UR                  U5        M     M     M     XC Vs1 s H#  n[        R                  R                  US5      iM%     sn-  nX4$ s  snf )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.
r9   z__init__.pyz
.dist-inforI   )r&   r=   r'   r   r   re   rn   rZ   rW   rk   r   isfile)rT   will_remove	will_skipfoldersrx   r   _normcased_filesfolderdirpath_dirfilesfnamefile_s                r!   compress_for_output_listingr      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                  h    \ rS rSrSrSS jrSS jrSS jrSS jrSS jr	SS jr
\SS	 j5       rS
rg)StashedUninstallPathSet   zSA set of file rename operations to stash files while
tentatively uninstalling them.c                     0 U l         / U l        g r%   )
_save_dirs_movesselfs    r!   __init__ StashedUninstallPathSet.__init__   s     57 .0r3   c                     [        U5      nX R                  [        R
                  R                  U5      '   UR
                  $ ! [         a    [        SS9n NLf = f)zStashes a directory.

Directories are stashed adjacent to their original location if
possible, or else moved/copied into the user's temp dir.	uninstallkind)r   OSErrorr   r   r   r   rZ   )r   r   save_dirs      r!   _get_directory_stash,StashedUninstallPathSet._get_directory_stash   sS    	7&;D&AH 3;((./}}	  	7$+6H	7s   A AAc                   [         R                  R                  U5      n[         R                  R                  U5      Sp2SnX#:w  a   U R                  U   nO6[         R                  R                  U5      n[        SS9nX@R                  U'   [         R                  R                  X5      nU(       aH  U[         R                  R                  :w  a*  [         R                  R                  UR                  U5      $ UR                  $ ! [
         a     Of = f[         R                  R                  U5      Up2X#:w  a  M  N)zrStashes a file.

If no root has been provided, one will be created for the directory
in the user's temp directory.Nr   r   )
r   r   rZ   re   r   KeyErrorr   relpathcurdirr   )r   r   headold_headr   r   s         r!   _get_file_stash'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                   [         R                  R                  U5      =(       a$    [         R                  R                  U5      (       + nU(       a  U R	                  U5      nOU R                  U5      nU R                  R                  X45        U(       a:  [         R                  R                  U5      (       a  [         R                  " U5        [        X5        U$ )z}Stashes the directory or file and returns its new location.
Handle symlinks as files to avoid modifying the symlink targets.
)
r   r   isdirislinkr   r   r   appendrmdirr   )r   r   path_is_dirnew_paths       r!   stashStashedUninstallPathSet.stash   s     ggmmD)F"''..2F.F006H++D1HD+,277==22 HHXr3   c                    U R                   R                  5        H  nUR                  5         M     / U l        0 U l         g)z0Commits the uninstall by removing stashed files.N)r   rj   cleanupr   )r   r   s     r!   commitStashedUninstallPathSet.commit  s3    ..0H 1r3   c                   U R                    H  n[        R                  " S/UQ76   M     U R                    H  u  p# [        R                  SX#5        [        R
                  R                  U5      (       d$  [        R
                  R                  U5      (       a  [        R                  " U5        O/[        R
                  R                  U5      (       a  [        U5        [        X25        M     U R                  5         g! [         a8  n[        R                  SU5        [        R                  SU5         SnAGM  SnAff = f)z2Undoes the uninstall by moving stashed files back.zMoving to %s
 from %szReplacing %s from %szFailed to restore %szException: %sN)r   loggerinfodebugr   r   r{   r   unlinkr   r   r   r   errorr   )r   rp   r   r   exs        r!   rollback 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   B/D
E,D>>Ec                ,    [        U R                  5      $ r%   )boolr   r   s    r!   can_rollback$StashedUninstallPathSet.can_rollback%  s    DKK  r3   )r   r   Nr/   None)r   ri   r/   ri   r/   r   )__name__
__module____qualname____firstlineno____doc__r   r   r   r   r   r   propertyr   __static_attributes__rc   r3   r!   r   r      s9    &06*& ! !r3   r   c                      \ rS rSrSrSS jrSS jrSS jrSS jrSSS jjr	SS jr
SS	 jrSS
 jr\SS j5       rSrg)UninstallPathSeti*  zIA set of file paths to be removed in the uninstallation of a
requirement.c                    [        5       U l        [        5       U l        0 U l        Xl        [        5       U l        [        R                  " [        5      U l
        g r%   )r&   _paths_refuse_pth_distr   _moved_pathsr0   	lru_cacher   _normalize_path_cached)r   r?   s     r!   r   UninstallPathSet.__init__.  s@     #!$46	
35 '0&9&9.&I#r3   c                ~    [        5       (       d  gUR                  U R                  [        R                  5      5      $ )z[
Return True if the given path is one we are permitted to
remove/modify, False otherwise.

T)r   rJ   r   sysprefix)r   r   s     r!   
_permittedUninstallPathSet._permitted9  s.     ())t::3::FGGr3   c                D   [         R                  R                  U5      u  p#[         R                  R                  U R	                  U5      [         R                  R                  U5      5      n[         R                  R                  U5      (       d  g U R                  U5      (       a  U R                  R                  U5        OU R                  R                  U5        [         R                  R                  U5      S   S:X  a  U R                  [        U5      5        g g )N   r7   )r   r   r>   r   r   rZ   existsr   r   r'   r   splitextr   )r   r   r   tails       r!   r'   UninstallPathSet.addD  s    WW]]4(
 ww||D77=rww?O?OPT?UVww~~d##??4  KKOOD!LLT" 77D!!$-HH&t,- .r3   c                   U R                  U5      nU R                  U5      (       aF  XR                  ;  a  [        U5      U R                  U'   U R                  U   R	                  U5        g U R
                  R	                  U5        g r%   )r   r   r   UninstallPthEntriesr'   r   )r   pth_filerA   s      r!   add_pthUninstallPathSet.add_pthW  sg    ..x8??8$$yy(&9(&C		(#IIh##E*LLX&r3   c                   U R                   (       d+  [        R                  SU R                  R                  5        gU R                  R                   SU R                  R
                   3n[        R                  SU5        [        5          U(       d  U R                  U5      (       a  U R                  n[        U R                   5      n[        [        U5      5       H*  nUR                  U5        [        R                  SU5        M,     U R                  R                  5        H  nUR!                  5         M     [        R                  SU5        SSS5        g! , (       d  f       g= f)zTRemove paths in ``self._paths`` with confirmation (unless
``auto_confirm`` is True).z7Can't uninstall '%s'. No files were found to uninstall.N-zUninstalling %s:zRemoving file or directory %szSuccessfully uninstalled %s)r   r   r   r   raw_nameraw_versionr   _allowed_to_proceedr   ry   rR   rW   r   verboser   rj   remove)r   auto_confirmr   dist_name_versionmoved
for_renamer   pths           r!   r   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   CE
E+c                6   S	S jnU(       d  [        U R                  5      u  p4O[        U R                  5      n[        5       nU" SU5        U" SU5        U" SU R                  5        U(       a  U" S[	        U R                  5      5        [        SS5      S:g  $ )
z@Display which files would be deleted and prompt for confirmationc                    U(       d  g [         R                  U 5        [        5          [        [	        U5      5       H  n[         R                  U5        M     S S S 5        g ! , (       d  f       g = fr%   )r   r   r   rR   rW   )msgrT   r   s      r!   _display6UninstallPathSet._allowed_to_proceed.<locals>._display  sB    KK"75>2DKK% 3 s   1A""
A0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)? )yn r   )r   ri   rT   Iterable[str]r/   r   )r   r   r&   r   ry   r   )r   r   r   r|   r}   s        r!   r   $UninstallPathSet._allowed_to_proceed}  s    	& %@%M"K dkk*KI+.>	J8$,,G*,?,LM$n5<<r3   c                z   U R                   R                  (       d+  [        R                  SU R                  R
                  5        g[        R                  SU R                  R
                  5        U R                   R                  5         U R                  R                  5        H  nUR                  5         M     g)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   rj   )r   r   s     r!   r   UninstallPathSet.rollback  s}      --LL9

## 2DJJ4G4GH""$99##%CLLN &r3   c                8    U R                   R                  5         g)z?Remove temporary save dir: rollback will no longer be possible.N)r   r   r   s    r!   r   UninstallPathSet.commit  s      "r3   c           
        UR                   nUR                  nUc(  [        R                  SUR                  5        U " U5      $ [        U5      nUR                  (       d8  [        R                  SUR                  U[        R                  5        U " U5      $ U[        R                  " S5      [        R                  " S5      1 Vs1 s H  nU(       d  M  UiM     sn;   a)  [        R                  SUR                  U5        U " U5      $ U " U5      n[        UR                  5      nUR                  =(       aT    US L=(       aI    [        R                  R!                  U5      =(       a#    UR#                  UR$                   S35      (       + nU(       GaL  Ub  UR'                  U5        UR)                  5       n	U	b9  U	 H1  n
UR'                  [        R                  R+                  X*5      5        M3     GOUR-                  S5      (       a   UR/                  S5      nUR1                  S	S
9nUR/                  S5      R1                  5        Vs/ s H  nU(       d  M  X\;  d  M  UPM     sn Ho  n[        R                  R+                  X-5      nUR'                  U5        UR'                  U S35        UR'                  U S35        UR'                  U S35        Mq     GOUR4                  (       a	  [7        US9eUR8                  (       a  UR'                  U5        [        R                  R;                  U5      S   n[        R                  R+                  [        R                  R=                  U5      S5      nUR?                  USU-   5        GOYUR@                  (       a%  [C        U5       H  nUR'                  U5        M     GO#U(       Ga  [E        U5       n[        R                  RG                  URI                  5       RK                  5       5      nURM                  U5      nS S S 5        [        R                  RO                  WU5      (       d   SU SW SUR                   SU S3	5       eUR'                  U5        [        R                  R+                  [        R                  R=                  U5      S5      nUR?                  UU5        O[        RQ                  SUU5        URR                  (       a  [U        5       nO
[W        5       n URY                  5        Hq  nUR'                  [        R                  R+                  UU5      5        [Z        (       d  M?  UR'                  [        R                  R+                  UU S35      5        Ms           SS jnU" UU5       H  nUR'                  U5        M     U$ s  snf ! [2         a    / n GNf = fs  snf ! , (       d  f       GN= f! [2        [\        4 a     Nof = f)Nz-Not uninstalling %s since it is not installedz1Not uninstalling %s at %s, outside environment %sstdlib
platstdlibz<Not uninstalling %s at %s, as it is in the standard library.z	.egg-infoztop_level.txtznamespace_packages.txtF)keependsr7   r9   r:   r5   r   zeasy-install.pthz./z	Egg-link z (to z') does not match installed location of z (at )z)Not sure how to uninstall: %s - Check: %sz.batc              3    #    U R                  5        Hc  nUR                  S:X  a   [        XR                  S5       S h  vN   M3  UR                  S:X  d  ME  [        XR                  S5       S h  vN   Me     g  N; N7f)Nconsole_scriptsFgui_scriptsT)iter_entry_pointsgroupr"   name)r?   r   entry_points      r!   iter_scripts_to_remove:UninstallPathSet.from_dist.<locals>.iter_scripts_to_remove8  si       $557$$(99,W6F6FNNN &&-7,W6F6FMMM	  8NMs(   =A?A; A?A?1A=2
A?=A?)r?   r   r   ri   r/   Generator[str, None, None])/r;   info_locationr   r   canonical_namer   localr   r   	sysconfigget_pathr   r   "installed_with_setuptools_egg_infor   r   r   r=   setuptools_filenamer'   r<   r   is_file	read_text
splitlinesFileNotFoundErrorinstalled_by_distutilsr	   installed_as_eggr>   re   r   installed_with_dist_inforD   openrZ   readlinestripr   samefiler   in_usersiter   r   iter_distutils_script_namesr   NotADirectoryError)clsr?   dist_locationr
  normalized_dist_locationrp   paths_to_removedevelop_egg_linksetuptools_flat_installationinstalled_filesinstalled_filenamespace_packages
namespacestop_level_pkgr   easy_install_eggeasy_install_pthfhlink_pointernormalized_link_pointerr   scriptr  ss                           r!   	from_distUninstallPathSet.from_dist  sQ   ** KK?## t9#1-#@ zzKKC##(

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

 KKN##(
 t9d)6t}}E 33 ST)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 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 +' (
 77##')A   ,-U<. A))-u]O1N   01!ww|| 013E  ##$4mD LL; "nG$&G	::<##BGGLL&$AB7#''Wo(NO =	N"	N	N (	N (g6A" 7 M(
T ) $!#J$&H ('F "#56 		sV   WWW W W %W AW%AW7 $6W7 WW%
W47X
	X
)r   r   r   r   r   r   N)r?   r   r/   r   )r   ri   r/   r   )r   ri   r/   r   )r   ri   rA   ri   r/   r   )FF)r   r   r   r   r/   r   )r   r   r/   r   r   )r?   r   r/   r   )r   r   r   r   r   r   r   r'   r   r   r   r   r   classmethodr1  r   rc   r3   r!   r   r   *  sH    	J	H.&'N:=8# Z Zr3   r   c                  <    \ rS rSrSS jrS	S jrS
S jrSS jrSrg)r   iH  c                <    Xl         [        5       U l        S U l        g r%   )filer&   r@   _saved_lines)r   r   s     r!   r   UninstallPthEntries.__init__I  s    	!$04r3   c                    [         R                  R                  U5      n[        (       a9  [         R                  R	                  U5      S   (       d  UR                  SS5      nU R                  R                  U5        g )Nr   \/)r   r   rZ   r   
splitdrivereplacer@   r'   )r   rA   s     r!   r'   UninstallPthEntries.addN  sU      ' 7277--e4Q7MM$,Er3   c                t   [         R                  SU R                  5        [        R                  R                  U R                  5      (       d!  [         R                  SU R                  5        g [        U R                  S5       nUR                  5       nX l	        S S S 5        [        S W 5       5      (       a  SnOSnU(       aB  US   R                  UR                  S5      5      (       d  US   UR                  S5      -   US'   U R                   H<  n [         R                  S	U5        UR                  XC-   R                  S5      5        M>     [        U R                  S
5       nUR!                  U5        S S S 5        g ! , (       d  f       N= f! [         a     M  f = f! , (       d  f       g = f)NzRemoving pth entries from %s:z.Cannot remove entries from nonexistent file %srbc              3  ,   #    U  H
  nS U;   v   M     g7f)s   
Nrc   )rM   lines     r!   rP   -UninstallPthEntries.remove.<locals>.<genexpr>h  s     154w$5s   z

zutf-8zRemoving entry: %swb)r   r   r6  r   r   r{   warningr  	readlinesr7  rS   r=   encoder@   r   
ValueError
writelines)r   r,  linesendlinerA   s        r!   r   UninstallPthEntries.remove]  sF   6		B ww~~dii((NNKTYYW$))T"bLLNE % # 15111GGr++GNN7,CDDb	GNN7$;;E"I\\E3U;eo55g>? " $))T"bMM%  #"# #"  ""s*   F8F,F)
F
F&%F&)
F7c                6   U R                   c!  [        R                  SU R                  5        g[        R	                  SU R                  5        [        U R                  S5       nUR                  U R                   5        S S S 5        g! , (       d  f       g= f)Nz.Cannot roll back changes to %s, none were madeFz!Rolling %s back to previous staterF  T)r7  r   r   r6  r   r  rK  )r   r,  s     r!   r   UninstallPthEntries.rollbackx  sm    $LLI499U8$))D$))T"bMM$++, # #"s   %B


B)r7  r@   r6  N)r   ri   r/   r   )rA   ri   r/   r   r   r   )	r   r   r   r   r   r'   r   r   r   rc   r3   r!   r   r   H  s    5
 !6r3   r   )r   ri   r   ri   r   r   r/   r	  )r,   )Callable[..., Generator[Any, None, None]]r/   rQ  )r?   r   r/   r	  )rT   r   r/   zset[str])rT   r   r/   ztuple[set[str], set[str]])2
__future__r   r0   r   r   r  collections.abcr   r   importlib.utilr   typingr   r   pip._internal.exceptionsr	   r
   pip._internal.locationsr   r   pip._internal.metadatar   pip._internal.utils.compatr   pip._internal.utils.egg_linkr   pip._internal.utils.loggingr   r   pip._internal.utils.miscr   r   r   r   pip._internal.utils.temp_dirr   r   pip._internal.utils.virtualenvr   r   r   r"   r2   rD   rW   ry   r   r   r   r   rc   r3   r!   <module>r_     s    "  	 
  / ,   S @ 3 . D = I I M C	8	&&"&,0&&&1. 	 	B&AD."bf! f!R[ [|7 7r3   