ó
    T=ŒjÔ^  ã                  óŽ  • 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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  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)ÚCallableÚ	GeneratorÚIterable)Úcache_from_source)ÚAny)Ú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)z…Create 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       Úc/Users/stevendouglas/BidBrain/.venv/lib/python3.13/site-packages/pip/_internal/req/req_uninstall.pyÚ_script_namesr"      s]   é € ô �w‰w�|‰|˜GÓ1€HØ
‚NßŠ7ØØˆJ�dÐ
ÒØˆJ�mÐ
$Ò$ÞØ�
˜+Ð&Ó&à�
˜*Ð%Ó%ù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 ”OˆDØÕØ—‘˜”Ø”
ò $ù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ãˆÜ�w‰w�|‰|˜HÓ,ˆØŠ
Ø�=‰=˜×ÓÜ—W‘W—]‘] 4Ó(‰FˆBØ�c�r�7ˆDÜ—7‘7—<‘< ¨6¡MÓ2ˆDØŠJÜ—7‘7—<‘< ¨6¡MÓ2ˆDØŒJò ùs   ‚A/C,Á5A7C,c                óì  • [         R                  R                  n[        5       n[        5       n[	        U [
        S9 H³  nUR                  US-   5      (       a  USS OUnUR                  U5      nU(       aG  Xc;   a  MB  [         R                  R                  U5      R                  U5      nXv:X  a  SOUnU(       a  MG  UR                  U5        UR                  UR                  U5      5        Mµ     U$ )z¼Compact 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.©ÚkeyÚ*NéÿÿÿÿÚ )
r   r   Úsepr&   ÚsortedÚlenr=   ÚrstripÚdirnamer'   )ÚpathsrK   Úshort_pathsÚprefixesr   ÚcurrentÚparentÚnext_parents           r!   ÚcompactrV   [   sÄ   € ô �'‰'�+‰+€CÜ›E€KÜ›€Hä�u¤#Ô&ˆØ#Ÿ}™}¨S°3©Y×7Ñ7�$�s˜‘)¸TˆØ—‘ Ó$ˆÞØÓ!ÙÜŸ'™'Ÿ/™/¨&Ó1×8Ñ8¸Ó=ˆKØ&Ó0‘R°kˆF÷	 ˆfð �O‰O˜DÔ!Ø�L‰L˜Ÿ™¨Ó,Ö-ñ 'ð Ð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
p‰U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 )zŸReturns 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_join~   s$   € Ü�w‰w×Ñ¤§¡§¢¨aÐ 0Ó1Ð1r3   c              3  ó€   >#   • U  H3  n[         R                  R                  T5      R                  U5      v •  M5     g 7fr%   )r   r   rY   Ú
startswith)Ú.0ÚwÚroots     €r!   Ú	<genexpr>Ú&compress_for_rename.<locals>.<genexpr>‚   s.   øé € ÐGºY¸Œr�w‰w×Ñ Ó%×0Ñ0°×3Ð3ºYùs   ƒ;>c              3  ó8   >#   • U  H  nT" TTU5      v •  M     g 7fr%   © )r_   ÚdrO   r[   ra   s     €€€r!   rb   rc   ‰   s   øé € ÐLÂG¸q™y¨¨w¸×:Ð:ÂGùó   ƒc              3  ó8   >#   • U  H  nT" TTU5      v •  M     g 7fr%   re   )r_   ÚfrO   r[   ra   s     €€€r!   rb   rc   Š   s   øé € ÐHÂ%¸Q™Y t¨W°a×8Ð8Â%ùrg   )rZ   Ústrr/   rj   )r   r   rY   r&   rL   Úvaluesr>   rM   ÚanyÚwalkÚupdateÚdifference_updater'   rK   ÚmapÚ__getitem__)rP   ÚpÚcase_mapÚ	remainingÚ	uncheckedÚ	wildcardsÚ	all_filesÚall_subdirsÚsubdirsÚfilesrO   r[   ra   s             @@@r!   Úcompress_for_renamer{   s   s9  ú€ ñ 16Ó6²¨1”—‘× Ñ  Ó# QÒ&±€HÐ6Ü�H“€IÜ°X·_±_Ô5FÓGÒ5F°œŸ™Ÿ™ aÓ(¨Ô+Ñ5FÑGÌSÑQ€IÜ›%€Iô2ó ˆÜÔG¹YÓG×GÑGáä!›eˆ	Ü #£ˆÜ')§w¢w¨t¦}Ñ#ˆG�WØ×ÑÖLÁGÓLÔLØ×ÑÖHÁ%ÓHÖHñ (5ð ×%Ñ%Ø×'Ñ'¨	Ô2Ø�M‰M˜$¤§¡™-Ö(ñ ô" Œs�8×'Ñ'¨Ó3Ó4°yÑ@Ð@ùò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  p‰n
U
 H–  nUR                  S5      (       a  M  [        R                  R                  X‹5      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-inforH   )r&   r=   r'   r   r   rO   rp   rY   rV   rm   r   Úisfile)rP   Úwill_removeÚ	will_skipÚfoldersrz   r   Ú_normcased_filesÚfolderÚdirpathÚ_ÚdirfilesÚfnameÚfile_s                r!   Úcompress_for_output_listingrˆ   •   se  € ô �e“*€KÜ“€Iô ‹e€GÜ‹E€EÛˆØ�=‰=˜× Ñ ÙØ�=‰=˜×'Ñ'¨<¸4Ó+?Ø�K‰KœŸ™Ÿ™¨Ó-Ô.Ø�	‰	�$Žñ ô œ3œrŸw™w×/Ñ/°Ó7Ó8Ðä�gÓ€Gó ˆÜ$&§G¢G¨F¦OÑ ˆG˜Û!�Ø—>‘> &×)Ñ)ÙäŸ™Ÿ™ WÓ4�ä—G‘G—N‘N 5×)Ó)ÜŸ™×(Ñ(¨Ó/Ð7GÕGð —M‘M %Ö(ó "ó %4ñ ð À7ÓKÂ7¸œ2Ÿ7™7Ÿ<™<¨°Ö4Á7ÑKÑK€KàÐ!Ð!ùò 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)z�Stashes 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   rY   )r�   r   Úsave_dirs      r!   Ú_get_directory_stashÚ,StashedUninstallPathSet._get_directory_stashÒ   sS   € ð	7Ü&;¸DÓ&AˆHð 3;�‰œŸ™×(Ñ(¨Ó.Ñ/à�}‰}Ðøô	 ó 	7Ü$¨+Ñ6ŠHð	7ús   ‚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   rY   rO   r�   ÚKeyErrorr   ÚrelpathÚcurdirr   )r�   r   ÚheadÚold_headr˜   r�   s         r!   Ú_get_file_stashÚ'StashedUninstallPathSet._get_file_stashà   sî   € ô
 �w‰w×Ñ Ó%ˆÜŸ™Ÿ™¨Ó.°ˆhØˆàÓðØŸ?™?¨4Ñ0�Øô —7‘7—?‘? 4Ó(ˆDÜ$¨+Ñ6ˆHØ$,�O‰O˜DÑ!ä—'‘'—/‘/ $Ó-ˆÞ�w¤"§'¡'§.¡.Ó0Ü—7‘7—<‘< §¡¨wÓ7Ð7Ø�}‰}Ðøô ó ÙðúäŸW™WŸ_™_¨TÓ2°D�(ð Ö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“   € ô —g‘g—m‘m DÓ)×F´"·'±'·.±.ÀÓ2FÔ.FˆÞØ×0Ñ0°Ó6‰Hà×+Ñ+¨DÓ1ˆHà�‰×Ñ˜DÐ+Ô,Þœ2Ÿ7™7Ÿ=™=¨×2Ñ2ô �HŠH�XÔÜ�ÔØˆ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�   rk   ÚcleanuprŽ   )r�   r˜   s     r!   ÚcommitÚStashedUninstallPathSet.commit  s3   € àŸ™×.Ñ.Ö0ˆHØ×ÑÖñ 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�   rr   r©   r   Úexs        r!   ÚrollbackÚ StashedUninstallPathSet.rollback  sÙ   € à—”ˆAÜ�KŠKÐ0Ð5°1Õ5ñ ð #Ÿkœk‰NˆHð	2Ü—‘Ð3°XÔDÜ—7‘7—>‘> (×+Ñ+¬r¯w©w¯~©~¸h×/GÑ/GÜ—I’I˜hÕ'Ü—W‘W—]‘] 8×,Ñ,Ü˜8Ô$Ü˜Ö'ñ *ð 	�‰�øô	 ó 2Ü—‘Ð3°XÔ>Ü—‘˜_¨b×1Ó1ûð2ús   ½B/DÄ
EÄ,D>Ä>Ec                ó,   • [        U R                  5      $ r%   )ÚboolrŽ   r�   s    r!   Úcan_rollbackÚ$StashedUninstallPathSet.can_rollback*  s   € ä�D—K‘KÓ Ð r3   )rŽ   r�   N©r/   ÚNone)r   rj   r/   rj   ©r/   rº   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r‘   r™   r¡   rª   r®   r·   Úpropertyr»   Ú__static_attributes__re   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__3  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   r^   rÐ   ÚsysÚprefix)r�   r   s     r!   Ú
_permittedÚUninstallPathSet._permitted>  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Ð   rY   ÚexistsrÕ   rÊ   r'   rË   Úsplitextr   )r�   r   rŸ   Útails       r!   r'   ÚUninstallPathSet.addI  sÃ   € Ü—W‘W—]‘] 4Ó(‰
ˆô �w‰w�|‰|˜D×7Ñ7¸Ó=¼r¿w¹w×?OÑ?OÐPTÓ?UÓVˆä�w‰w�~‰~˜d×#Ñ#ØØ�?‰?˜4× Ñ Ø�K‰K�O‰O˜DÕ!à�L‰L×Ñ˜TÔ"ô �7‰7×Ñ˜DÓ! !Ñ$¨Ó-Ø�H‰HÔ& 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_pth\  sg   € Ø×.Ñ.¨xÓ8ˆØ�?‰?˜8×$Ñ$ØŸy™yÓ(Ü&9¸(Ó&C�—	‘	˜(Ñ#Ø�I‰I�hÑ×#Ñ# EÕ*à�L‰L×Ñ˜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Î   r{   rL   rV   rª   ÚverboserÌ   rk   Úremove)r�   Úauto_confirmrç   Údist_name_versionÚmovedÚ
for_renamer   Úpths           r!   rè   ÚUninstallPathSet.removee  s  € ð �{�{Ü�K‰KØIØ—
‘
×#Ñ#ôð à#Ÿz™z×2Ñ2Ð3°1°T·Z±Z×5KÑ5KÐ4LÐMÐÜ�‰Ð&Ð(9Ô:ä�\Þ˜t×7Ñ7¸×@Ñ@Ø×)Ñ)�ä0°·±Ó=�
ä"¤7¨:Ó#6Ö7�DØ—K‘K Ô%Ü—N‘NÐ#BÀDÖIñ 8ð  Ÿ9™9×+Ñ+Ö-�CØ—J‘J–Lñ .ô —‘Ð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   rL   rV   )ÚmsgrP   r   s      r!   Ú_displayÚ6UninstallPathSet._allowed_to_proceed.<locals>._display…  sB   € ÞØä�K‰K˜ÔÜ•Ü"¤7¨5£>Ö2�DÜ—K‘K Ö%ñ 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ÚnrJ   rõ   )rñ   rj   rP   úIterable[str]r/   r¾   )rˆ   rÊ   r&   rË   r{   r   )r�   rç   rò   r~   r   s        r!   ræ   Ú$UninstallPathSet._allowed_to_proceed‚  s…   € ô	&ö Ü%@ÀÇÁÓ%MÑ"ˆK˜ô ˜dŸk™kÓ*ˆ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Ì   rk   )r�   rí   s     r!   r·   ÚUninstallPathSet.rollbackž  s}   € à× Ñ ×-×-Ü�L‰LØ9Ø—
‘
×#Ñ#ôð Ü�‰Ð2°D·J±J×4GÑ4GÔHØ×Ñ×"Ñ"Ô$Ø—9‘9×#Ñ#Ö%ˆCØ�L‰LŽNò &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O÷U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N®f = 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_remove=  si   é € ð  $×5Ñ5Ö7�Ø×$Ñ$Ð(9Ó9Ü,¨W×6FÑ6FÈÓN×NÒNØ ×&Ñ&¨-Õ7Ü,¨W×6FÑ6FÈÓM×MÒMò	  8áNáMùs(   ‚=A?¿A;Á A?ÁA?Á1A=Á2
A?Á=A?)r?   r   r   rj   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>   rO   rà   Úinstalled_with_dist_inforD   ÚopenrY   ÚreadlineÚstriprÐ   Úsamefiler³   Úin_usersiter   r   Úiter_distutils_script_namesr   ÚNotADirectoryError)Úclsr?   Údist_locationr  Únormalized_dist_locationrr   Ú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  € àŸ™ˆØ×*Ñ*ˆØÑ Ü�K‰KØ?Ø×#Ñ#ôñ �t“9Ðä#1°-Ó#@Ð Ø�z�zÜ�K‰KØCØ×#Ñ#Ø(Ü—
‘
ô	ñ �t“9Ðà#ä×(Ò(¨Ó2´I×4FÒ4FÀ|Ó4TÑUó(
âU�Ü÷ ÙUñ(
ó 
ô
 �K‰KØNØ×#Ñ#Ø(ôñ
 �t“9Ðá˜d›)ˆÜ6°t·}±}ÓEÐð ×3Ñ3÷ SØ TÐ)÷Sä—‘—‘˜}Ó-÷Sð
 "×*Ñ*¨d×.FÑ.FÐ-GÀyÐ+QÓRÔRð 	%÷ (ØÑ(Ø×#Ñ# MÔ2Ø"×8Ñ8Ó:ˆOØÑ*Û&5�NØ#×'Ñ'¬¯©¯©°]Ó(SÖTó '6ð
 —‘˜o×.Ñ.ðOØ)-¯©Ð8PÓ)QÐ&ð "4×!>Ñ!>ÈÐ!>Ð!N�Jð "Ÿ^™^¨OÓ<×GÑGÔIó&âI˜Üó àÑ0÷ ÙIô&�Mô
 Ÿ7™7Ÿ<™<¨ÓE�DØ#×'Ñ'¨Ô-Ø#×'Ñ'¨4¨&°¨Ô5Ø#×'Ñ'¨4¨&°¨Ô6Ø#×'Ñ'¨4¨&°¨Ö6ñ&ùð ×(×(Ü(°dÑ;Ð;à×"×"ð ×ÑÐ 8Ô9Ü!Ÿw™wŸ}™}Ð-EÓFÀqÑIÐÜ!Ÿw™wŸ|™|Ü—‘—‘Ð 8Ó9Ø"ó Ðð ×#Ñ#Ð$4°dÐ=MÑ6MÖNà×*×*Ü,¨TÖ2�Ø×#Ñ# DÖ)ó 3÷ ô Ð&Ô'¨2Ü!Ÿw™w×/Ñ/°·±³×0CÑ0CÓ0EÓF�Ø*9×*PÑ*PØ ó+Ð'÷ (ô
 —7‘7×#Ñ#Ø'Ð)A÷ñ ð ð Ð,Ð-¨U°<°.ð A)Ø)-¯©¨°u¸]¸OÈ1ðNóð ð ×ÑÐ 0Ô1Ü!Ÿw™wŸ|™|Ü—‘—‘Ð 0Ó1Ð3Eó Ðð ×#Ñ#Ð$4°mÕDô �L‰LØ;ØØôð ××Ü"“n‰Gä$Ó&ˆGð	Ø×:Ñ:Ö<�Ø×#Ñ#¤B§G¡G§L¡L°¸&Ó$AÔBß”7Ø#×'Ñ'¬¯©¯©°WÀÀÈ¸oÓ(NÖOñ =ð	NØ"ð	Nàð	Nð (ô	Nñ (¨¨gÖ6ˆAØ×Ñ Ö"ñ 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   rj   r/   rº   )r   rj   r/   r¾   )rß   rj   rA   rj   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®   Úclassmethodr2  rÆ   re   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Þ   iM  c                ó<   • Xl         [        5       U l        S U l        g r%   )Úfiler&   r@   Ú_saved_lines)r�   rß   s     r!   r‘   ÚUninstallPthEntries.__init__N  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   rY   r   Ú
splitdriveÚreplacer@   r'   )r�   rA   s     r!   r'   ÚUninstallPthEntries.addS  sU   € Ü—‘× Ñ  Ó'ˆ÷ Š7œ2Ÿ7™7×-Ñ-¨eÓ4°Q×7Ø—M‘M $¨Ó,ˆ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   
Nre   )r_   Úlines     r!   rb   Ú-UninstallPthEntries.remove.<locals>.<genexpr>m  s   é € Ð1ª5 4ˆw˜$Žª5ùs   ‚z
Ú
rI   zutf-8zRemoving entry: %sÚwb)r±   rç   r7  r   r   r}   Úwarningr  Ú	readlinesr8  rl   r=   Úencoder@   rè   Ú
ValueErrorÚ
writelines)r�   r-  ÚlinesÚendlinerA   s        r!   rè   ÚUninstallPthEntries.removeb  sF  € Ü�‰Ð6¸¿	¹	ÔBô �w‰w�~‰~˜dŸi™i×(Ñ(Ü�N‰NÐKÈTÏYÉYÔWØÜ�$—)‘)˜TÔ" bà—L‘L“NˆEØ %Ô÷ #ô Ñ1©5Ó1×1Ñ1Ø‰GàˆGæ˜˜r™×+Ñ+¨G¯N©N¸7Ó,C×DÑDØ˜b™	 G§N¡N°7Ó$;Ñ;ˆE�"‰IØ—\”\ˆEðÜ—‘Ð3°UÔ;Ø—‘˜e™o×5Ñ5°gÓ>Ö?ñ "ô �$—)‘)˜TÔ" bØ�M‰M˜%Ô ÷ #Ð"÷# #Õ"ûô ó Úðúç"Õ"ú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)r8  r±   rµ   r7  r³   r  rK  )r�   r-  s     r!   r·   ÚUninstallPthEntries.rollback}  sm   € Ø×ÑÑ$Ü�L‰LÐIÈ4Ï9É9ÔUØÜ�‰Ð8¸$¿)¹)ÔDÜ�$—)‘)˜TÔ" bØ�M‰M˜$×+Ñ+Ô,÷ #à÷ #Ô"àús   Á%B
Â

B)r8  r@   r7  N)rß   rj   r/   r¾   )rA   rj   r/   r¾   r½   r¿   )	rÀ   rÁ   rÂ   rÃ   r‘   r'   rè   r·   rÆ   re   r3   r!   rÞ   rÞ   M  s   † ô5ô
 ô!÷6r3   rÞ   )r   rj   r   rj   r   rº   r/   r
  )r,   ú)Callable[..., Generator[Any, None, None]]r/   rQ  )r?   r   r/   r
  )rP   rö   r/   zset[str])rP   rö   r/   ztuple[set[str], set[str]])2Ú
__future__r   r0   r   rÓ   r  Úcollections.abcr   r   r   Úimportlib.utilr   Útypingr   Ú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   rV   r{   rˆ   rŠ   rÈ   rÞ   re   r3   r!   Ú<module>r_     sÍ   ðÝ "ã Û 	Û 
Û ß 9Ñ 9Ý ,Ý ç Sß @Ý 3Ý .Ý Dß =ß IÓ Iß MÝ Cá	�8Ó	€ð&Øð&Ø"ð&Ø,0ð&àô&ð&Ø1ðà.ôð 	óó 	ðôBô0AôD."÷bf!ñ f!÷R[ñ [÷|7ò 7r3   