§
    �’jXa  ã                  óŠ  — d dl mZ d dlZd dlZd dlZd dlZd dlmZmZm	Z	 d dl
mZ d dlmZ d dlmZmZ d dlmZmZ d dlmZ d d	lmZ d d
lmZ d dlmZmZ d dlmZmZm Z m!Z! d dl"m#Z#m$Z$ d dl%m&Z&  ee'¦  «        Z(d*d„Z)d+d„Z*e*d,d„¦   «         Z+d-d „Z,d-d!„Z-d.d#„Z. G d$„ d%¦  «        Z/ G d&„ d'¦  «        Z0 G d(„ d)¦  «        Z1dS )/é    )Ú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_virtualenvÚbin_dirÚstrÚscript_nameÚis_guiÚboolÚreturnúGenerator[str, None, None]c              #  ó¤   K  — t           j                             | |¦  «        }|V — t          sdS |› d�V — |› d�V — |r	|› d�V — dS |› d�V — dS )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   )r   r   r   Úexe_names       úMC:\Projects\DSCons\.venv\Lib\site-packages\pip\_internal\req\req_uninstall.pyÚ_script_namesr&      s›   è è € õ Œw�|Š|˜G [Ñ1Ô1€HØ
€N€N€NÝð ØˆØÐ
Ð
Ð
ÐÐÐØÐ
$Ð
$Ð
$Ð$Ð$Ð$Øð &ØÐ&Ð&Ð&Ð&Ð&Ð&Ð&Ð&àÐ%Ð%Ð%Ð%Ð%Ð%Ð%Ð%ó    Úfnú)Callable[..., Generator[Any, None, None]]c                óH   ‡ — t          j        ‰ ¦  «        dˆ fd„¦   «         }|S )NÚargsr   Úkwr   úGenerator[Any, None, None]c               ?  óx   •K  — t          ¦   «         } ‰| i |¤ŽD ]}||vr|                     |¦  «         |V — Œ d S ©N)ÚsetÚadd)r+   r,   ÚseenÚitemr(   s       €r%   Úuniquez_unique.<locals>.unique.   sY   øè è € å™œˆØ�B˜�O �O�Oð 	ð 	ˆDØ˜4ÐÐØ—’˜‘”�Ø�
�
�
øð	ð 	r'   )r+   r   r,   r   r   r-   )Ú	functoolsÚwraps)r(   r4   s   ` r%   Ú_uniquer7   +   s?   ø€ õ „_�RÑÔðð ð ð ð ñ Ôðð €Mr'   Údistr   c              #  óì  K  — | j         }|€
J d¦   «         ‚|                      ¦   «         }|€t          | ¬¦  «        ‚|D ]µ}t          j                             ||¦  «        }|V — |                     d¦  «        rzt          j                             |¦  «        \  }}|dd…         }t          j                             ||dz   ¦  «        }|V — t          j                             ||dz   ¦  «        }|V — Œ¶dS )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)r8   r@   ÚentriesÚentryr"   Údnr(   Úbases           r%   Úuninstallation_pathsrH   9   sþ   è è € ð Œ}€HØÐÐ ÑÔÐà×(Ò(Ñ*Ô*€GØ€Ý$°$Ð7Ñ7Ô7Ð7àð 	ð 	ˆÝŒw�|Š|˜H eÑ,Ô,ˆØˆ
ˆ
ˆ
Ø�=Š=˜ÑÔð 	Ý”W—]’] 4Ñ(Ô(‰FˆB�Ø�c�r�c”7ˆDÝ”7—<’<  D¨6¡MÑ2Ô2ˆDØˆJˆJˆJÝ”7—<’<  D¨6¡MÑ2Ô2ˆDØˆJˆJˆJøð	ð 	r'   ÚpathsúIterable[str]úset[str]c                ó  — t           j        j        }t          ¦   «         }t          ¦   «         }t	          | t
          ¬¦  «        D ]½}|                     |dz   ¦  «        r
|dd…         n|}|                     |¦  «        }|rC||v rn{t           j                             |¦  «                             |¦  «        }||k    rdn|}|°C| 	                    |¦  «         | 	                    |                     |¦  «        ¦  «         Œ¾|S )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"   Úsepr0   ÚsortedÚlenrB   ÚrstripÚdirnamer1   )rI   rR   Úshort_pathsÚprefixesr"   ÚcurrentÚparentÚnext_parents           r%   Úcompactr\   [   sÿ   € õ Œ'Œ+€CÝ™EœE€KÝ™œ€Hå�u¥#Ð&Ñ&Ô&ð 
.ð 
.ˆØ#Ÿ}š}¨S°3©YÑ7Ô7ÐA�$�s˜�s”)�)¸TˆØ—’ Ñ$Ô$ˆØð 	.Ø˜Ð!Ð!ØÝœ'Ÿ/š/¨&Ñ1Ô1×8Ò8¸Ñ=Ô=ˆKØ&¨&Ò0Ð0�R�R°kˆFð	 ð 	.ð �OŠO˜DÑ!Ô!Ð!Ø�LŠL˜Ÿš¨Ñ,Ô,Ñ-Ô-Ð-øØÐr'   c                óÄ  ‡	‡
‡— d„ | D ¦   «         }t          |¦  «        }t          d„ |                     ¦   «         D ¦   «         t          ¬¦  «        }t          ¦   «         }dd„Š
|D ]×Št	          ˆfd„|D ¦   «         ¦  «        rŒt          ¦   «         }t          ¦   «         }t          j        ‰¦  «        D ]L\  Š	}}|                     ˆ	ˆ
ˆfd	„|D ¦   «         ¦  «         |                     ˆ	ˆ
ˆfd
„|D ¦   «         ¦  «         ŒM||z
  s7|                     |¦  «         | 	                    ‰t
          j
        z   ¦  «         ŒØt          t          |j        |¦  «        ¦  «        |z  S )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.
    c                óN   — i | ]"}t           j                             |¦  «        |“Œ#S © )r!   r"   Únormcase©Ú.0Úps     r%   ú
<dictcomp>z'compress_for_rename.<locals>.<dictcomp>y   s*   € Ð6Ð6Ð6¨1•”× Ò  Ñ#Ô# QÐ6Ð6Ð6r'   c                óX   — h | ]'}t           j                             |¦  «        d          ’Œ(S )r   )r!   r"   rC   ra   s     r%   ú	<setcomp>z&compress_for_rename.<locals>.<setcomp>{   s+   € ÐGÐGÐG°�œŸš aÑ(Ô(¨Ô+ÐGÐGÐGr'   rM   Úar   r   c                 ób   — t           j                             t          j        j        | Ž ¦  «        S r/   )r!   r"   r`   r#   )rg   s    r%   Ú	norm_joinz&compress_for_rename.<locals>.norm_join~   s!   € ÝŒw×Ò¥¤¤¨aÐ 0Ñ1Ô1Ð1r'   c              3  ó|   •K  — | ]6}t           j                             ‰¦  «                             |¦  «        V — Œ7d S r/   )r!   r"   r`   Ú
startswith)rb   ÚwÚroots     €r%   ú	<genexpr>z&compress_for_rename.<locals>.<genexpr>‚   sA   øè è € ÐGÐG¸�rŒw×Ò Ñ%Ô%×0Ò0°Ñ3Ô3ÐGÐGÐGÐGÐGÐGr'   c              3  ó2   •K  — | ]} ‰‰‰|¦  «        V — Œd S r/   r_   )rb   ÚdrV   ri   rm   s     €€€r%   rn   z&compress_for_rename.<locals>.<genexpr>‰   s1   øè è € ÐLÐL¸q˜y˜y¨¨w¸Ñ:Ô:ÐLÐLÐLÐLÐLÐLr'   c              3  ó2   •K  — | ]} ‰‰‰|¦  «        V — Œd S r/   r_   )rb   ÚfrV   ri   rm   s     €€€r%   rn   z&compress_for_rename.<locals>.<genexpr>Š   s1   øè è € ÐHÐH¸Q˜Y˜Y t¨W°aÑ8Ô8ÐHÐHÐHÐHÐHÐHr'   )rg   r   r   r   )r0   rS   ÚvaluesrT   Úanyr!   ÚwalkÚupdateÚdifference_updater1   rR   ÚmapÚ__getitem__)rI   Úcase_mapÚ	remainingÚ	uncheckedÚ	wildcardsÚ	all_filesÚall_subdirsÚsubdirsÚfilesrV   ri   rm   s            @@@r%   Úcompress_for_renamer‚   s   s•  øøø€ ð 7Ð6°Ð6Ñ6Ô6€HÝ�H‘”€IÝÐGÐG°X·_²_Ñ5FÔ5FÐGÑGÔGÍSÐQÑQÔQ€IÝ™%œ%€Ið2ð 2ð 2ð 2ð ð )ð )ˆÝÐGÐGÐGÐG¸YÐGÑGÔGÑGÔGð 	àå!™eœeˆ	Ý #¡¤ˆÝ')¤w¨t¡}¤}ð 	Ið 	IÑ#ˆG�W˜eØ×ÒÐLÐLÐLÐLÐLÐLÀGÐLÑLÔLÑLÔLÐLØ×ÒÐHÐHÐHÐHÐHÐHÀ%ÐHÑHÔHÑHÔHÐHÐHð ˜IÑ%ð 	)Ø×'Ò'¨	Ñ2Ô2Ð2Ø�MŠM˜$¥¤™-Ñ(Ô(Ð(øå�s�8Ô'¨Ñ3Ô3Ñ4Ô4°yÑ@Ð@r'   útuple[set[str], set[str]]c                óf  — t          | ¦  «        }t          ¦   «         }t          ¦   «         }t          ¦   «         }|D ]x}|                     d¦  «        rŒ|                     d¦  «        sd|v r2|                     t          j                             |¦  «        ¦  «         |                     |¦  «         Œyt          t          t          j        j        |¦  «        ¦  «        }t          |¦  «        }|D ]­}t          j	        |¦  «        D ]–\  }}	}
|
D ]�}|                     d¦  «        rŒt          j         
                    ||¦  «        }t          j                             |¦  «        r6t          j                             |¦  «        |vr|                     |¦  «         ŒŽŒ—Œ®|d„ |D ¦   «         z  }||fS )as  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-infoc                óN   — h | ]"}t           j                             |d ¦  «        ’Œ#S )rO   )r!   r"   r#   )rb   Úfolders     r%   rf   z.compress_for_output_listing.<locals>.<setcomp>Á   s(   € ÐKÐKÐK¸�2œ7Ÿ<š<¨°Ñ4Ô4ÐKÐKÐKr'   )r0   rB   r1   r!   r"   rV   rx   r`   r\   ru   r#   Úisfile)rI   Úwill_removeÚ	will_skipÚfoldersr�   r"   Ú_normcased_filesr†   ÚdirpathÚ_ÚdirfilesÚfnameÚfile_s                r%   Úcompress_for_output_listingr‘   •   s¬  € õ �e‘*”*€KÝ‘”€Iõ ‰eŒe€GÝ‰EŒE€EØð ð ˆØ�=Š=˜Ñ Ô ð 	ØØ�=Š=˜Ñ'Ô'ð 	/¨<¸4Ð+?Ð+?Ø�KŠK�œŸš¨Ñ-Ô-Ñ.Ô.Ð.Ø�	Š	�$‰Œˆˆå�3�rœwÔ/°Ñ7Ô7Ñ8Ô8Ðå�gÑÔ€Gð ð )ð )ˆÝ$&¤G¨F¡O¤Oð 	)ð 	)Ñ ˆG�Q˜Ø!ð 
)ð 
)�Ø—>’> &Ñ)Ô)ð ØåœŸš W¨eÑ4Ô4�å”G—N’N 5Ñ)Ô)ð)åœ×(Ò(¨Ñ/Ô/Ð7GÐGÐGð —M’M %Ñ(Ô(Ð(øð
)ð	)ð ÐKÐKÀ7ÐKÑKÔKÑK€Kà˜	Ð!Ð!r'   c                  óZ   — e Zd ZdZdd„Zdd„Zdd„Zdd	„Zdd
„Zdd„Z	e
dd„¦   «         ZdS )ÚStashedUninstallPathSetzWA set of file rename operations to stash files while
    tentatively uninstalling them.r   ÚNonec                ó"   — i | _         g | _        d S r/   )Ú
_save_dirsÚ_moves©Úselfs    r%   Ú__init__z StashedUninstallPathSet.__init__Ê   s   € ð 57ˆŒð .0ˆŒˆˆr'   r"   r   c                óÀ   — 	 t          |¦  «        }n # t          $ r t          d¬¦  «        }Y nw xY w|| j        t          j                             |¦  «        <   |j        S )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"   r`   )r™   r"   Úsave_dirs      r%   Ú_get_directory_stashz,StashedUninstallPathSet._get_directory_stashÒ   si   € ð	7Ý&;¸DÑ&AÔ&AˆHˆHøÝð 	7ð 	7ð 	7Ý$¨+Ð6Ñ6Ô6ˆHˆHˆHð	7øøøà2:ˆŒ�œ×(Ò(¨Ñ.Ô.Ñ/àŒ}Ðs   ‚ ’/®/c                óV  — t           j                             |¦  «        }t           j                             |¦  «        d}}d}||k    rF	 | j        |         }np# t
          $ r Y nw xY wt           j                             |¦  «        |}}||k    °Ft           j                             |¦  «        }t          d¬¦  «        }|| j        |<   t           j                             ||¦  «        }|r:|t           j        j        k    r%t           j         	                    |j        |¦  «        S |j        S )z‚Stashes 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"   r`   rV   r–   ÚKeyErrorr   ÚrelpathÚcurdirr#   )r™   r"   ÚheadÚold_headr    r¤   s         r%   Ú_get_file_stashz'StashedUninstallPathSet._get_file_stashà   s  € õ
 Œw×Ò Ñ%Ô%ˆÝœŸš¨Ñ.Ô.°ˆhˆØˆà�hÒÐðØœ?¨4Ô0�ØøÝð ð ð Ø�ðøøøåœWŸ_š_¨TÑ2Ô2°D�(ˆDð �hÒÐõ ”7—?’? 4Ñ(Ô(ˆDÝ$¨+Ð6Ñ6Ô6ˆHØ$,ˆDŒO˜DÑ!å”'—/’/ $¨Ñ-Ô-ˆØð 	8�w¥"¤'¤.Ò0Ð0Ý”7—<’< ¤¨wÑ7Ô7Ð7ØŒ}Ðs   Á
A Á
A%Á$A%c                ó   — t           j                             |¦  «        ot           j                             |¦  «         }|r|                      |¦  «        }n|                      |¦  «        }| j                             ||f¦  «         |r3t           j                             |¦  «        rt          j        |¦  «         t          ||¦  «         |S )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%   ÚstashzStashedUninstallPathSet.stashû   s¼   € õ ”g—m’m DÑ)Ô)ÐFµ"´'·.².ÀÑ2FÔ2FÐ.FˆØð 	2Ø×0Ò0°Ñ6Ô6ˆHˆHà×+Ò+¨DÑ1Ô1ˆHàŒ×Ò˜D (Ð+Ñ,Ô,Ð,Øð 	�2œ7Ÿ=š=¨Ñ2Ô2ð 	õ ŒH�XÑÔÐÝ��hÑÔÐØˆr'   c                ó‚   — | j                              ¦   «         D ]}|                     ¦   «          Œg | _        i | _         dS )z0Commits the uninstall by removing stashed files.N)r–   rs   Úcleanupr—   )r™   r    s     r%   ÚcommitzStashedUninstallPathSet.commit  sF   € àœ×.Ò.Ñ0Ô0ð 	ð 	ˆHØ×ÒÑÔÐÐØˆŒØˆŒˆˆr'   c                óx  — | j         D ]}t          j        dg|¢R Ž  Œ| j         D �] \  }}	 t                               d||¦  «         t          j                             |¦  «        st          j                             |¦  «        rt	          j        |¦  «         n.t          j         	                    |¦  «        rt          |¦  «         t          ||¦  «         Œµ# t          $ r@}t                               d|¦  «         t                               d|¦  «         Y d}~Œúd}~ww xY w|                      ¦   «          dS )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™   rc   r¯   r"   Úexs        r%   Úrollbackz StashedUninstallPathSet.rollback  s?  € à”ð 	6ð 	6ˆAÝŒKÐ0Ð5°1Ð5Ð5Ð5Ð5Ð5à"œkð 
	2ñ 
	2‰NˆH�dð	2Ý—’Ð3°X¸tÑDÔDÐDÝ”7—>’> (Ñ+Ô+ð %­r¬w¯~ª~¸hÑ/GÔ/Gð %Ý”I˜hÑ'Ô'Ð'Ð'Ý”W—]’] 8Ñ,Ô,ð %Ý˜8Ñ$Ô$Ð$Ý˜˜hÑ'Ô'Ð'Ð'øÝð 2ð 2ð 2Ý—’Ð3°XÑ>Ô>Ð>Ý—’˜_¨bÑ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1øøøøð2øøøð 	�Š‰Œˆˆˆs   «B-CÃ
D#Ã#6DÄD#r   c                ó*   — t          | j        ¦  «        S r/   )r   r—   r˜   s    r%   Úcan_rollbackz$StashedUninstallPathSet.can_rollback*  s   € å�D”KÑ Ô Ð r'   N©r   r”   )r"   r   r   r   ©r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rš   r¡   r¨   r°   r³   r»   Úpropertyr½   r_   r'   r%   r“   r“   Æ   s¶   € € € € € ð&ð &ð0ð 0ð 0ð 0ðð ð ð ðð ð ð ð6ð ð ð ð*ð ð ð ðð ð ð ð& ð!ð !ð !ñ „Xð!ð !ð !r'   r“   c                  ól   — e Zd ZdZdd„Zdd
„Zdd„Zdd„Zddd„Zdd„Z	dd„Z
dd„Zed d„¦   «         ZdS )!ÚUninstallPathSetzMA set of file paths to be removed in the uninstallation of a
    requirement.r8   r   r   r”   c                óÐ   — t          ¦   «         | _        t          ¦   «         | _        i | _        || _        t          ¦   «         | _        t          j        t          ¦  «        | _
        d S r/   )r0   Ú_pathsÚ_refuseÚ_pthÚ_distr“   Ú_moved_pathsr5   Ú	lru_cacher   Ú_normalize_path_cached)r™   r8   s     r%   rš   zUninstallPathSet.__init__3  sO   € Ý #¡¤ˆŒÝ!$¡¤ˆŒØ46ˆŒ	ØˆŒ
Ý3Ñ5Ô5ˆÔõ '0Ô&9½.Ñ&IÔ&IˆÔ#Ð#Ð#r'   r"   r   r   c                ó†   — t          ¦   «         sdS |                     |                      t          j        ¦  «        ¦  «        S )zs
        Return True if the given path is one we are permitted to
        remove/modify, False otherwise.

        T)r   rk   rÎ   ÚsysÚprefix)r™   r"   s     r%   Ú
_permittedzUninstallPathSet._permitted>  s9   € õ (Ñ)Ô)ð 	Ø�4Ø�Š˜t×:Ò:½3¼:ÑFÔFÑGÔGÐGr'   c                óZ  — t           j                             |¦  «        \  }}t           j                             |                      |¦  «        t           j                             |¦  «        ¦  «        }t           j                             |¦  «        sd S |                      |¦  «        r| j         	                    |¦  «         n| j
         	                    |¦  «         t           j                             |¦  «        d         dk    r$|  	                    t          |¦  «        ¦  «         d S d S )Né   r<   )r!   r"   rC   r#   rÎ   r`   ÚexistsrÒ   rÈ   r1   rÉ   Úsplitextr   )r™   r"   r¦   Útails       r%   r1   zUninstallPathSet.addI  sö   € Ý”W—]’] 4Ñ(Ô(‰
ˆˆdõ Œw�|Š|˜D×7Ò7¸Ñ=Ô=½r¼w×?OÒ?OÐPTÑ?UÔ?UÑVÔVˆåŒw�~Š~˜dÑ#Ô#ð 	ØˆFØ�?Š?˜4Ñ Ô ð 	#ØŒK�OŠO˜DÑ!Ô!Ð!Ð!àŒL×Ò˜TÑ"Ô"Ð"õ Œ7×Ò˜DÑ!Ô! !Ô$¨Ò-Ð-Ø�HŠHÕ& tÑ,Ô,Ñ-Ô-Ð-Ð-Ð-ð .Ð-r'   Úpth_filerE   c                ó  — |                       |¦  «        }|                      |¦  «        rB|| j        vrt          |¦  «        | j        |<   | j        |                              |¦  «         d S | j                             |¦  «         d S r/   )rÎ   rÒ   rÊ   ÚUninstallPthEntriesr1   rÉ   )r™   rØ   rE   s      r%   Úadd_pthzUninstallPathSet.add_pth\  s‡   € Ø×.Ò.¨xÑ8Ô8ˆØ�?Š?˜8Ñ$Ô$ð 	'Ø˜tœyÐ(Ð(Ý&9¸(Ñ&CÔ&C�”	˜(Ñ#ØŒI�hÔ×#Ò# EÑ*Ô*Ð*Ð*Ð*àŒL×Ò˜XÑ&Ô&Ð&Ð&Ð&r'   FÚauto_confirmÚverbosec                ó´  — | j         s't                               d| j        j        ¦  «         dS | j        j        › d| j        j        › �}t                               d|¦  «         t          ¦   «         5  |s|                      |¦  «        rµ| j        }t          | j         ¦  «        }t          t          |¦  «        ¦  «        D ]2}|                     |¦  «         t                               d|¦  «         Œ3| j                             ¦   «         D ]}|                     ¦   «          Œt                               d|¦  «         ddd¦  «         dS # 1 swxY w Y   dS )z\Remove 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‚   rS   r\   r°   rÝ   rÊ   rs   Úremove)r™   rÜ   rÝ   Údist_name_versionÚmovedÚ
for_renamer"   Úpths           r%   rã   zUninstallPathSet.removee  s¯  € ð Œ{ð 	Ý�KŠKØIØ”
Ô#ñô ð ð ˆFà#œzÔ2ÐMÐM°T´ZÔ5KÐMÐMÐÝ�ŠÐ&Ð(9Ñ:Ô:Ð:å‰\Œ\ð 	Nð 	NØð N˜t×7Ò7¸Ñ@Ô@ð NØÔ)�å0°´Ñ=Ô=�
å"¥7¨:Ñ#6Ô#6Ñ7Ô7ð Jð J�DØ—K’K Ñ%Ô%Ð%Ý—N’NÐ#BÀDÑIÔIÐIÐIàœ9×+Ò+Ñ-Ô-ð !ð !�CØ—J’J‘L”L�L�Lå—’Ð9Ð;LÑMÔMÐMð	Nð 	Nð 	Nñ 	Nô 	Nð 	Nð 	Nð 	Nð 	Nð 	Nð 	Nð 	Nøøøð 	Nð 	Nð 	Nð 	Nð 	Nð 	Ns   Á3CEÅEÅEc                ó<  — dd„}|st          | j        ¦  «        \  }}n"t          | j        ¦  «        }t          ¦   «         } |d|¦  «          |d	|¦  «          |d
| j        ¦  «         |r |dt	          | j        ¦  «        ¦  «         t          dd¦  «        dk    S )z@Display which files would be deleted and prompt for confirmationÚmsgr   rI   rJ   r   r”   c                ó  — |sd S t                                | ¦  «         t          ¦   «         5  t          t	          |¦  «        ¦  «        D ]}t                                |¦  «         Œ	 d d d ¦  «         d S # 1 swxY w Y   d S r/   )rµ   r¶   r   rS   r\   )ré   rI   r"   s      r%   Ú_displayz6UninstallPathSet._allowed_to_proceed.<locals>._display…  sÆ   € Øð Ø�å�KŠK˜ÑÔÐÝ‘”ð &ð &Ý"¥7¨5¡>¤>Ñ2Ô2ð &ð &�DÝ—K’K Ñ%Ô%Ð%Ð%ð&ð&ð &ð &ñ &ô &ð &ð &ð &ð &ð &ð &ð &øøøð &ð &ð &ð &ð &ð &s   ­:A5Á5A9Á<A9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ÚnrQ   rí   )ré   r   rI   rJ   r   r”   )r‘   rÈ   r0   rÉ   r‚   r   )r™   rÝ   rë   rˆ   r‰   s        r%   râ   z$UninstallPathSet._allowed_to_proceed‚  sÇ   € ð	&ð 	&ð 	&ð 	&ð ð 	Ý%@ÀÄÑ%MÔ%MÑ"ˆK˜˜õ ˜dœkÑ*Ô*ˆKÝ™œˆIàˆ� +Ñ.Ô.Ð.ØˆÐ>À	ÑJÔJÐJØˆÐ8¸$¼,ÑGÔGÐGØð 	NØˆHÐ*Õ,?ÀÄÑ,LÔ,LÑMÔMÐMåÐ$ nÑ5Ô5¸Ò<Ð<r'   c                óH  — | j         j        s't                               d| j        j        ¦  «         dS t                               d| j        j        ¦  «         | j                              ¦   «          | j         	                    ¦   «         D ]}|                     ¦   «          ŒdS )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Ê   rs   )r™   rç   s     r%   r»   zUninstallPathSet.rollbackž  s�   € àÔ Ô-ð 	Ý�LŠLØ9Ø”
Ô#ñô ð ð ˆFÝ�ŠÐ2°D´JÔ4GÑHÔHÐHØÔ×"Ò"Ñ$Ô$Ð$Ø”9×#Ò#Ñ%Ô%ð 	ð 	ˆCØ�LŠL‰NŒNˆNˆNð	ð 	r'   c                ó8   — | j                              ¦   «          dS )z?Remove temporary save dir: rollback will no longer be possible.N)rÌ   r³   r˜   s    r%   r³   zUninstallPathSet.commit«  s   € àÔ× Ò Ñ"Ô"Ð"Ð"Ð"r'   c           
     óª  ‡— |j         }|j        }|€+t                               d|j        ¦  «          | |¦  «        S t          |¦  «        }|j        s7t                               d|j        |t          j        ¦  «          | |¦  «        S |d„ t          j
        d¦  «        t          j
        d¦  «        hD ¦   «         v r,t                               d|j        |¦  «          | |¦  «        S  | |¦  «        }t          |j        ¦  «        }|j        o@|d uo<t          j                             |¦  «        o|                     |j        › d�¦  «         }|�rp|�|                     |¦  «         |                     ¦   «         }|�:|D ]5}	|                     t          j                             ||	¦  «        ¦  «         Œ6�n,|                     d¦  «        rò	 |                     d	¦  «        }
|
                     d
¬¦  «        Šn# t2          $ r g ŠY nw xY wˆfd„|                     d¦  «                             ¦   «         D ¦   «         D ]}t          j                             ||¦  «        }|                     |¦  «         |                     |› d�¦  «         |                     |› d�¦  «         |                     |› d�¦  «         Œ€�n#|j        rt7          |¬¦  «        ‚|j        r’|                     |¦  «         t          j                             |¦  «        d         }t          j                             t          j                             |¦  «        d¦  «        }|                     |d|z   ¦  «         �ns|j         r)tC          |¦  «        D ]}|                     |¦  «         Œ�nC|�r$tE          |¦  «        5 }t          j         #                    | $                    ¦   «          %                    ¦   «         ¦  «        }| &                    |¦  «        }d d d ¦  «         n# 1 swxY w Y   t          j         '                    ||¦  «        sJ d|› d|› d|j        › d|› d�	¦   «         ‚|                     |¦  «         t          j                             t          j                             |¦  «        d¦  «        }|                     ||¦  «         nt           (                    d||¦  «         |j)        rtU          ¦   «         }ntW          ¦   «         }	 | ,                    ¦   «         D ]r}|                     t          j                             ||¦  «        ¦  «         tZ          r6|                     t          j                             ||› d�¦  «        ¦  «         Œsn# t2          t\          f$ r Y nw xY wd"d!„} |||¦  «        D ]}|                     |¦  «         Œ|S )#Nz-Not uninstalling %s since it is not installedz1Not uninstalling %s at %s, outside environment %sc                ó   — h | ]}|¯|’ŒS r_   r_   ra   s     r%   rf   z-UninstallPathSet.from_dist.<locals>.<setcomp>Ä  s.   € ð (
ð (
ð (
àØð(
Øð(
ð (
ð (
r'   ÚstdlibÚ
platstdlibz<Not uninstalling %s at %s, as it is in the standard library.z	.egg-infoztop_level.txtznamespace_packages.txtF)Úkeependsc                ó    •— g | ]
}|r|‰v¯|‘ŒS r_   r_   )rb   rc   Ú
namespacess     €r%   ú
<listcomp>z.UninstallPathSet.from_dist.<locals>.<listcomp>ò  s8   ø€ ð &ð &ð &àØð&ð  jÐ0Ð0ð à0Ð0Ð0r'   r<   r>   r?   r:   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.batr8   r   r   r   r   r   c              3  óÖ   K  — |                       ¦   «         D ]Q}|j        dk    rt          ||j        d¦  «        E d {V —† Œ*|j        dk    rt          ||j        d¦  «        E d {V —† ŒRd S )NÚconsole_scriptsFÚgui_scriptsT)Úiter_entry_pointsÚgroupr&   Úname)r8   r   Úentry_points      r%   Úiter_scripts_to_removez:UninstallPathSet.from_dist.<locals>.iter_scripts_to_remove=  s    è è € ð  $×5Ò5Ñ7Ô7ð Nð N�ØÔ$Ð(9Ò9Ð9Ý,¨W°kÔ6FÈÑNÔNÐNÐNÐNÐNÐNÐNÐNÐNØ Ô&¨-Ò7Ð7Ý,¨W°kÔ6FÈÑMÔMÐMÐMÐMÐMÐMÐMÐMøð	Nð Nr'   )r8   r   r   r   r   r   )/r@   Úinfo_locationrµ   r¶   Úcanonical_namer   ÚlocalrÐ   rÑ   Ú	sysconfigÚget_pathr   rà   Ú"installed_with_setuptools_egg_infor!   r"   rÕ   rB   Úsetuptools_filenamer1   rA   r#   Úis_fileÚ	read_textÚ
splitlinesÚFileNotFoundErrorÚinstalled_by_distutilsr	   Úinstalled_as_eggrC   rV   rÛ   Úinstalled_with_dist_inforH   Úopenr`   ÚreadlineÚstriprÎ   Úsamefiler·   Úin_usersiter   r   Úiter_distutils_script_namesr   ÚNotADirectoryError)Úclsr8   Údist_locationr  Únormalized_dist_locationÚpaths_to_removeÚdevelop_egg_linkÚsetuptools_flat_installationÚinstalled_filesÚinstalled_fileÚnamespace_packagesÚtop_level_pkgr"   Úeasy_install_eggÚeasy_install_pthÚfhÚlink_pointerÚnormalized_link_pointerr   Úscriptr   Úsrö   s                         @r%   Ú	from_distzUninstallPathSet.from_dist¯  sã  ø€ àœˆØÔ*ˆØÐ Ý�KŠKØ?ØÔ#ñô ð ð �3�t‘9”9Ðå#1°-Ñ#@Ô#@Ð ØŒzð 	Ý�KŠKØCØÔ#Ø(Ý”
ñ	ô ð ð �3�t‘9”9Ðà#ð (
ð (
åÔ(¨Ñ2Ô2µIÔ4FÀ|Ñ4TÔ4TÐUð(
ñ (
ô (
ð 
ð 
õ
 �KŠKØNØÔ#Ø(ñô ð ð
 �3�t‘9”9Ðà˜#˜d™)œ)ˆÝ6°t´}ÑEÔEÐð Ô3ð SØ TÐ)ðSå”—’˜}Ñ-Ô-ðSð
 "×*Ò*¨dÔ.FÐ+QÐ+QÐ+QÑRÔRÐRð 	%ð (ñ K	ØÐ(Ø×#Ò# MÑ2Ô2Ð2Ø"×8Ò8Ñ:Ô:ˆOØÐ*Ø&5ð Uð U�NØ#×'Ò'­¬¯ª°]ÀNÑ(SÔ(SÑTÔTÐTÐTñUð
 —’˜oÑ.Ô.ð 7ðOØ)-¯ªÐ8PÑ)QÔ)QÐ&ð "4×!>Ò!>ÈÐ!>Ñ!NÔ!N�J�Jøõ )ð $ð $ð $Ø!#�J�J�Jð$øøøð&ð &ð &ð &à!Ÿ^š^¨OÑ<Ô<×GÒGÑIÔIð&ñ &ô &ð 	7ð 	7�Mõ
 œ7Ÿ<š<¨°}ÑEÔE�DØ#×'Ò'¨Ñ-Ô-Ð-Ø#×'Ò'¨4¨¨¨Ñ5Ô5Ð5Ø#×'Ò'¨4¨¨¨Ñ6Ô6Ð6Ø#×'Ò'¨4¨¨¨Ñ6Ô6Ð6Ð6ùàÔ(ð /	Ý(°dÐ;Ñ;Ô;Ð;àÔ"ð ,	ð ×ÒÐ 8Ñ9Ô9Ð9Ý!œwŸ}š}Ð-EÑFÔFÀqÔIÐÝ!œwŸ|š|Ý”—’Ð 8Ñ9Ô9Ø"ñ ô  Ðð ×#Ò#Ð$4°dÐ=MÑ6MÑNÔNÐNÑNàÔ*ð 	Ý,¨TÑ2Ô2ð *ð *�Ø×#Ò# DÑ)Ô)Ð)Ð)ñ*ð ñ 	õ Ð&Ñ'Ô'ð ¨2Ý!œw×/Ò/°·²±´×0CÒ0CÑ0EÔ0EÑFÔF�Ø*9×*PÒ*PØ ñ+ô +Ð'ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð õ
 ”7×#Ò#Ø'Ð)Añô ð ð ðNÐ,ð Nð N°<ð Nð NØ)-¬ðNð NØ=JðNð Nð Nñô ð ð ×ÒÐ 0Ñ1Ô1Ð1Ý!œwŸ|š|Ý”—’Ð 0Ñ1Ô1Ð3Eñ ô  Ðð ×#Ò#Ð$4°mÑDÔDÐDÐDõ �LŠLØ;ØØñô ð ð Ôð 	'Ý"‘n”nˆGˆGå$Ñ&Ô&ˆGð	Ø×:Ò:Ñ<Ô<ð Pð P�Ø×#Ò#¥B¤G§L¢L°¸&Ñ$AÔ$AÑBÔBÐBÝð PØ#×'Ò'­¬¯ª°WÀ¸o¸o¸oÑ(NÔ(NÑOÔOÐOøðPøõ "Õ#5Ð6ð 	ð 	ð 	ØˆDð	øøøð	Nð 	Nð 	Nð 	Nð (Ð'¨¨gÑ6Ô6ð 	#ð 	#ˆAØ×Ò Ñ"Ô"Ð"Ð"àÐs8   ÇG= Ç=HÈHÎ6APÐPÐ"PÔBV ÖV(Ö'V(N)r8   r   r   r”   )r"   r   r   r   )r"   r   r   r”   )rØ   r   rE   r   r   r”   )FF)rÜ   r   rÝ   r   r   r”   )rÝ   r   r   r   r¾   )r8   r   r   rÆ   )rÀ   rÁ   rÂ   rÃ   rš   rÒ   r1   rÛ   rã   râ   r»   r³   Úclassmethodr'  r_   r'   r%   rÆ   rÆ   /  sö   € € € € € ðð ð	Jð 	Jð 	Jð 	Jð	Hð 	Hð 	Hð 	Hð.ð .ð .ð .ð&'ð 'ð 'ð 'ðNð Nð Nð Nð Nð:=ð =ð =ð =ð8ð ð ð ð#ð #ð #ð #ð ðZð Zð Zñ „[ðZð Zð Zr'   rÆ   c                  ó.   — e Zd Zdd„Zdd„Zdd„Zdd
„ZdS )rÚ   rØ   r   r   r”   c                óH   — || _         t          ¦   «         | _        d | _        d S r/   )Úfiler0   rD   Ú_saved_lines)r™   rØ   s     r%   rš   zUninstallPthEntries.__init__N  s"   € ØˆŒ	Ý!$¡¤ˆŒØ04ˆÔÐÐr'   rE   c                óü   — t           j                             |¦  «        }t          r;t           j                             |¦  «        d         s|                     dd¦  «        }| j                             |¦  «         d S )Nr   ú\ú/)r!   r"   r`   r   Ú
splitdriveÚreplacerD   r1   )r™   rE   s     r%   r1   zUninstallPthEntries.addS  sl   € Ý”× Ò  Ñ'Ô'ˆõ ð 	-�2œ7×-Ò-¨eÑ4Ô4°QÔ7ð 	-Ø—M’M $¨Ñ,Ô,ˆEØŒ×Ò˜ÑÔÐÐÐr'   c                óˆ  — t                                d| j        ¦  «         t          j                             | j        ¦  «        s"t                                d| j        ¦  «         d S t          | j        d¦  «        5 }|                     ¦   «         }|| _	        d d d ¦  «         n# 1 swxY w Y   t          d„ |D ¦   «         ¦  «        rd}nd}|rO|d                              |                     d¦  «        ¦  «        s!|d         |                     d¦  «        z   |d<   | j        D ]Y}	 t                                d	|¦  «         |                     ||z                        d¦  «        ¦  «         ŒJ# t          $ r Y ŒVw xY wt          | j        d
¦  «        5 }|                     |¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NzRemoving pth entries from %s:z.Cannot remove entries from nonexistent file %sÚrbc              3  ó   K  — | ]}d |v V — Œ	dS )s   
Nr_   )rb   Úlines     r%   rn   z-UninstallPthEntries.remove.<locals>.<genexpr>m  s&   è è € Ð1Ð1 4ˆw˜$ˆÐ1Ð1Ð1Ð1Ð1Ð1r'   z
ú
rP   zutf-8zRemoving entry: %sÚwb)rµ   rÝ   r+  r!   r"   r‡   Úwarningr  Ú	readlinesr,  rt   rB   ÚencoderD   rã   Ú
ValueErrorÚ
writelines)r™   r"  ÚlinesÚendlinerE   s        r%   rã   zUninstallPthEntries.removeb  s7  € Ý�ŠÐ6¸¼	ÑBÔBÐBõ Œw�~Š~˜dœiÑ(Ô(ð 	Ý�NŠNÐKÈTÌYÑWÔWÐWØˆFÝ�$”)˜TÑ"Ô"ð 	& bà—L’L‘N”NˆEØ %ˆDÔð	&ð 	&ð 	&ñ 	&ô 	&ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&øøøð 	&ð 	&ð 	&ð 	&õ Ð1Ð1¨5Ð1Ñ1Ô1Ñ1Ô1ð 	ØˆGˆGàˆGàð 	<˜˜rœ×+Ò+¨G¯NªN¸7Ñ,CÔ,CÑDÔDð 	<Ø˜bœ	 G§N¢N°7Ñ$;Ô$;Ñ;ˆE�"‰IØ”\ð 	ð 	ˆEðÝ—’Ð3°UÑ;Ô;Ð;Ø—’˜e g™o×5Ò5°gÑ>Ô>Ñ?Ô?Ð?Ð?øÝð ð ð Ø�ðøøøå�$”)˜TÑ"Ô"ð 	! bØ�MŠM˜%Ñ Ô Ð ð	!ð 	!ð 	!ñ 	!ô 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!øøøð 	!ð 	!ð 	!ð 	!ð 	!ð 	!s7   Á<B$Â$B(Â+B(Ä(AE/Å/
E<Å;E<ÆF7Æ7F;Æ>F;r   c                ó&  — | j         €"t                               d| j        ¦  «         dS t                               d| j        ¦  «         t          | j        d¦  «        5 }|                     | j         ¦  «         d d d ¦  «         n# 1 swxY w Y   dS )Nz.Cannot roll back changes to %s, none were madeFz!Rolling %s back to previous stater7  T)r,  rµ   r¹   r+  r·   r  r<  )r™   r"  s     r%   r»   zUninstallPthEntries.rollback}  s¼   € ØÔÐ$Ý�LŠLÐIÈ4Ì9ÑUÔUÐUØ�5Ý�ŠÐ8¸$¼)ÑDÔDÐDÝ�$”)˜TÑ"Ô"ð 	- bØ�MŠM˜$Ô+Ñ,Ô,Ð,ð	-ð 	-ð 	-ñ 	-ô 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-øøøð 	-ð 	-ð 	-ð 	-àˆts   ÁBÂB
ÂB
N)rØ   r   r   r”   )rE   r   r   r”   r¾   r¿   )rÀ   rÁ   rÂ   rš   r1   rã   r»   r_   r'   r%   rÚ   rÚ   M  sd   € € € € € ð5ð 5ð 5ð 5ð
 ð  ð  ð  ð!ð !ð !ð !ð6ð ð ð ð ð r'   rÚ   )r   r   r   r   r   r   r   r   )r(   r)   r   r)   )r8   r   r   r   )rI   rJ   r   rK   )rI   rJ   r   rƒ   )2Ú
__future__r   r5   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&   r7   rH   r\   r‚   r‘   r“   rÆ   rÚ   r_   r'   r%   ú<module>rM     s}  ðØ "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø 	€	€	€	Ø 
€
€
€
Ø Ð Ð Ð Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø Ð Ð Ð Ð Ð à SÐ SÐ SÐ SÐ SÐ SÐ SÐ SØ @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø .Ð .Ð .Ð .Ð .Ð .Ø DÐ DÐ DÐ DÐ DÐ DØ =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MØ CÐ CÐ CÐ CÐ CÐ Cà	ˆ�8Ñ	Ô	€ð&ð &ð &ð &ð&ð ð ð ð 	ðð ð ñ 	„ððBð ð ð ð0Að Að Að AðD."ð ."ð ."ð ."ðbf!ð f!ð f!ð f!ð f!ñ f!ô f!ð f!ðR[ð [ð [ð [ð [ñ [ô [ð [ð|7ð 7ð 7ð 7ð 7ñ 7ô 7ð 7ð 7ð 7r'   