U
    „}ag$~  ã                   @   s  d dl Z d dlZd dlZd dlmZmZmZmZmZm	Z	m
Z
mZmZmZmZ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 d dlmZmZ d dlmZm Z m!Z!m"Z"m#Z# d d	l$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/m0Z0m1Z1 d dl2m3Z3m4Z4 d dl5m6Z6 d dl7m8Z8 d dl9m:Z: d dl;m<Z< d dl=m>Z> ddl?m@Z@mAZAmBZBmCZC ddlDmEZEmFZFmGZGmHZHmIZImJZJmKZK ddlLmMZMmNZN ddlOmPZPmQZQmRZRmSZSmTZT e�rÞd dlmUZU G dd„ deUƒZVe WeX¡ZYedƒZZee*eZf Z[G dd„ deƒZ\G d d!„ d!ƒZ]dS )"é    N)ÚTYPE_CHECKINGÚDictÚ	FrozenSetÚIterableÚIteratorÚListÚMappingÚ
NamedTupleÚOptionalÚSequenceÚSetÚTupleÚTypeVarÚcast)ÚInvalidRequirement)ÚSpecifierSet)ÚNormalizedNameÚcanonicalize_name)ÚResolutionImpossible)Ú
CacheEntryÚ
WheelCache)ÚDistributionNotFoundÚInstallationErrorÚMetadataInconsistentÚUnsupportedPythonVersionÚUnsupportedWheel)ÚPackageFinder)ÚBaseDistributionÚget_default_environment)ÚLink)ÚWheel)ÚRequirementPreparer)Úinstall_req_drop_extrasÚinstall_req_from_link_and_ireq)ÚInstallRequirementÚcheck_invalid_constraint_type)ÚInstallRequirementProvider)Úget_supported)ÚHashes)Úget_requirement)Úrunning_under_virtualenvé   )Ú	CandidateÚCandidateVersionÚ
ConstraintÚRequirement)ÚAlreadyInstalledCandidateÚBaseCandidateÚEditableCandidateÚExtrasCandidateÚLinkCandidateÚRequiresPythonCandidateÚas_base_candidate)ÚFoundCandidatesÚIndexCandidateInfo)ÚExplicitRequirementÚRequiresPythonRequirementÚSpecifierRequirementÚ!SpecifierWithoutExtrasRequirementÚUnsatisfiableRequirement)ÚProtocolc                   @   s   e Zd ZU eed< eed< dS )ÚConflictCauseÚrequirementÚparentN)Ú__name__Ú
__module__Ú__qualname__r:   Ú__annotations__r,   © rF   rF   úc/var/www/html/publicvenv/lib/python3.8/site-packages/pip/_internal/resolution/resolvelib/factory.pyr?   K   s   
r?   ÚCc                   @   s:   e Zd ZU ee ed< eeef ed< eee	f ed< dS )ÚCollectedRootRequirementsÚrequirementsÚconstraintsÚuser_requestedN)
rB   rC   rD   r   r/   rE   r   Ústrr.   ÚintrF   rF   rF   rG   rI   V   s   
rI   c                   @   sX  e Zd ZdEeeeee eeeeee	e
df  ddœ
dd„Zeedœdd„ƒZedd	œd
d„Zddœeee ee edœdd„Zeee eedœdd„Zeee eee ee ee dœdd„Zeeee ee ee dœdd„Zee eeee e
 e!e dœdd„Z"e!e# ee e$e dœdd„Z%ee&ee$e dœd d!„Z'ee(ee!e# f e(ee$e f e&ee!e d"œd#d$„Z)ee!e e$e# d%œd&d'„Z*e+e e,d(œd)d*„Z-ee.d+œd,d-„Z/dFeee e!e e$e# d/œd0d1„Z0eee# d2œd3d4„Z1eee ee2 d5œd6d7„Z3eee d+œd8d9„Z4ed: e5d;œd<d=„Z6e#ee e7d>œd?d@„Z8dAe9ee&f e:dBœdCdD„Z;dS )GÚFactoryN.)
ÚfinderÚpreparerÚmake_install_reqÚwheel_cacheÚuse_user_siteÚforce_reinstallÚignore_installedÚignore_requires_pythonÚpy_version_infoÚreturnc
                 C   s€   || _ || _|| _t|	ƒ| _|| _|| _|| _|| _i | _	i | _
i | _i | _i | _|svtƒ }
dd„ |
jdd�D ƒ| _ni | _d S )Nc                 S   s   i | ]}|j |“qS rF   )Úcanonical_name)Ú.0ÚdistrF   rF   rG   Ú
<dictcomp>|   s   ÿ z$Factory.__init__.<locals>.<dictcomp>F)Ú
local_only)Ú_finderrQ   Ú_wheel_cacher5   Ú_python_candidateÚ_make_install_req_from_specÚ_use_user_siteÚ_force_reinstallÚ_ignore_requires_pythonÚ_build_failuresÚ_link_candidate_cacheÚ_editable_candidate_cacheÚ_installed_candidate_cacheÚ_extras_candidate_cacher   Úiter_installed_distributionsÚ_installed_dists)ÚselfrP   rQ   rR   rS   rT   rU   rV   rW   rX   ÚenvrF   rF   rG   Ú__init__]   s(    
þ
þ
zFactory.__init__©rY   c                 C   s   | j S ©N)rd   ©rm   rF   rF   rG   rU   ƒ   s    zFactory.force_reinstall)ÚlinkrY   c                 C   sB   |j s
d S t|jƒ}| | jj ¡ ¡r*d S |j› d�}t|ƒ‚d S )Nz+ is not a supported wheel on this platform.)Úis_wheelr    ÚfilenameÚ	supportedr_   Útarget_pythonÚget_unsorted_tagsr   )rm   rs   ÚwheelÚmsgrF   rF   rG   Ú"_fail_if_link_is_unsupported_wheel‡   s    
z*Factory._fail_if_link_is_unsupported_wheel©Ú
comes_from)ÚbaseÚextrasr}   rY   c                C   sZ   t |ƒtdd„ |D ƒƒf}z| j| }W n, tk
rT   t|||d�}|| j|< Y nX |S )Nc                 s   s   | ]}t |ƒV  qd S rq   )r   )r[   ÚerF   rF   rG   Ú	<genexpr>—   s     z1Factory._make_extras_candidate.<locals>.<genexpr>r|   )ÚidÚ	frozensetrj   ÚKeyErrorr3   )rm   r~   r   r}   Z	cache_keyÚ	candidaterF   rF   rG   Ú_make_extras_candidate�   s    zFactory._make_extras_candidate)r\   r   ÚtemplaterY   c                 C   sX   z| j |j }W n. tk
r>   t||| d�}|| j |j< Y nX |sH|S | j|||d�S )N)Úfactoryr|   )ri   rZ   r„   r0   r†   )rm   r\   r   r‡   r~   rF   rF   rG   Ú_make_candidate_from_distŸ   s    z!Factory._make_candidate_from_dist)rs   r   r‡   ÚnameÚversionrY   c                 C   s0   |   ||||¡}|r|d kr |S | j|||d�S )Nr|   )Ú_make_base_candidate_from_linkr†   )rm   rs   r   r‡   rŠ   r‹   r~   rF   rF   rG   Ú_make_candidate_from_link®   s       ÿz!Factory._make_candidate_from_link)rs   r‡   rŠ   r‹   rY   c              
   C   s  || j krd S |jrŽ|| jkr„zt||| ||d�| j|< W nH tk
r‚ } z*tjd||ddid� || j |< W Y ¢d S d }~X Y nX | j| S || jk�rzt||| ||d�| j|< W nJ tk
�r  } z*tjd||ddid� || j |< W Y ¢d S d }~X Y nX | j| S d S )N)rˆ   rŠ   r‹   z3Discarding [blue underline]%s[/]: [yellow]%s[reset]ÚmarkupT)Úextra)	rf   Úeditablerh   r2   r   ÚloggerÚinforg   r4   )rm   rs   r‡   rŠ   r‹   r€   rF   rF   rG   rŒ   ½   sR    


ûü

ûü
z&Factory._make_base_candidate_from_link)ÚireqsÚ	specifierÚhashesÚprefers_installedÚincompatible_idsrY   c           	         sÂ   |sdS |d ‰ˆj stdƒ‚tˆj jƒ‰tƒ ‰ |D ]<}|j sFtdƒ‚ˆ|j jM ‰ˆ|jdd�M ‰ˆ t|jƒO ‰ q4tt	 dœ‡ ‡‡‡‡‡fdd„}t
t dœ‡ ‡‡‡‡‡fd	d
„}t||ƒ |ˆƒS )NrF   r   z)Candidates found on index must be PEP 508F)Útrust_internetrp   c                     sh   ˆj r
dS zˆjˆ } W n tk
r.   Y dS X ˆj| jdd�sDdS ˆj| ˆ ˆd�}t|ƒˆkrddS |S )z6Get the candidate for the currently-installed version.NT)Úprereleases)r\   r   r‡   )rd   rl   r„   Úcontainsr‹   r‰   r‚   )Úinstalled_distr…   )r   r—   rŠ   rm   r”   r‡   rF   rG   Ú_get_installed_candidate  s     ýz@Factory._iter_found_candidates.<locals>._get_installed_candidatec               	   3   s”   ˆj jˆˆˆd�} t|  ¡ ƒ}tdd„ |D ƒƒ}ttdœdd„}|ˆƒ}t|ƒD ]>}|r\|sf|jj	rfqPt
jˆj|jˆ ˆˆ|jd�}|j|fV  qPd S )N)Úproject_namer”   r•   c                 s   s   | ]}|j jV  qd S rq   )rs   Ú	is_yanked)r[   ÚicanrF   rF   rG   r�   3  s     zUFactory._iter_found_candidates.<locals>.iter_index_candidate_infos.<locals>.<genexpr>©r”   rY   c                 S   s<   | D ]2}|j dkr dS |j dkr$q|j d¡r2q dS dS )Nz===Tú==z.*F)Úoperatorr‹   Úendswith)r”   ÚsprF   rF   rG   Ú	is_pinned5  s    

zUFactory._iter_found_candidates.<locals>.iter_index_candidate_infos.<locals>.is_pinned)rs   r   r‡   rŠ   r‹   )r_   Úfind_best_candidateÚlistÚiter_applicableÚallr   ÚboolÚreversedrs   rž   Ú	functoolsÚpartialr�   r‹   )ÚresultZicansZ
all_yankedr¥   ÚpinnedrŸ   Úfunc)r   r•   rŠ   rm   r”   r‡   rF   rG   Úiter_index_candidate_infos(  s*    ýúzBFactory._iter_found_candidates.<locals>.iter_index_candidate_infos)ÚreqÚAssertionErrorr   rŠ   rƒ   r”   r•   r   r
   r,   r   r8   r7   )	rm   r“   r”   r•   r–   r—   Úireqrœ   r±   rF   )r   r•   r—   rŠ   rm   r”   r‡   rG   Ú_iter_found_candidatesö   s&      (üzFactory._iter_found_candidates)Úbase_requirementsr   rY   c                 c   sJ   |D ]@}|  ¡ \}}|dkrqt|ƒ}|dk	s6tdƒ‚|  ||¡V  qdS )a8  Produce explicit candidates from the base given an extra-ed package.

        :param base_requirements: Requirements known to the resolver. The
            requirements are guaranteed to not have extras.
        :param extras: The extras to inject into the explicit requirements'
            candidates.
        Nzno extras here)Úget_candidate_lookupr6   r³   r†   )rm   r¶   r   r²   Zlookup_candÚ_Z	base_candrF   rF   rG   Ú#_iter_explicit_candidates_from_baseW  s    z+Factory._iter_explicit_candidates_from_base)Ú
identifierÚ
constraintr‡   rY   c                 c   s@   |j D ]4}|  |¡ | j|t||ƒt|ƒdd�}|r|V  qdS )zÖProduce explicit candidates from constraints.

        This creates "fake" InstallRequirement objects that are basically clones
        of what "should" be the template, but with original_link set to link.
        N©r‡   rŠ   r‹   )Úlinksr{   rŒ   r#   r   )rm   rº   r»   r‡   rs   r…   rF   rF   rG   Ú!_iter_candidates_from_constraintsm  s    

üz)Factory._iter_candidates_from_constraints)rº   rJ   Úincompatibilitiesr»   r–   rY   c              	      sL  t ƒ }g }ˆˆ D ]4}| ¡ \}	}
|	d k	r4| |	¡ |
d k	r| |
¡ qt t¡�l tˆƒ}|jˆkrº| 	|  
ˆ |jd¡t|jƒ¡¡ ˆ |jg ¡D ]"}| ¡ \}}
|
d k	r–| |
¡ q–W 5 Q R X |�rz| 	| jˆˆ |d d�¡ W n tk
�r    Y dS X dd„ | ˆd¡D ƒ‰|�s4|  |ˆ jˆ j|ˆ¡S ‡ ‡‡‡fdd„|D ƒS )NrF   r   )r‡   c                 S   s   h | ]}t |ƒ’qS rF   )r‚   )r[   ÚcrF   rF   rG   Ú	<setcomp>¹  s     z*Factory.find_candidates.<locals>.<setcomp>c                 3   sB   | ]:‰ t ˆ ƒˆkrˆ ˆ ¡rt‡ fd d„ˆˆ D ƒƒrˆ V  qdS )c                 3   s   | ]}|  ˆ ¡V  qd S rq   )Úis_satisfied_by)r[   r²   ©rÀ   rF   rG   r�   Ë  s     z4Factory.find_candidates.<locals>.<genexpr>.<genexpr>N)r‚   rÂ   r©   )r[   ©r»   rº   Zincompat_idsrJ   rÃ   rG   r�   Æ  s
   
üz*Factory.find_candidates.<locals>.<genexpr>)Úsetr·   ÚaddÚappendÚ
contextlibÚsuppressr   r)   rŠ   Úupdater¹   Úgetrƒ   r   r¾   r   rµ   r”   r•   )rm   rº   rJ   r¿   r»   r–   Zexplicit_candidatesr“   r²   Úcandr´   Zparsed_requirementr¸   rF   rÄ   rG   Úfind_candidatesƒ  sX    	

þÿýÿûþzFactory.find_candidates)r´   Úrequested_extrasrY   c                 c   sì   |  |¡st d|j|j¡ nÊ|jsR|jrF|jdk	rF|jjrFt	|ƒV  t
|ƒV  n–|  |j¡ | j|j|jrtt|ƒn||jr†t|jƒnddd�}|dkr¼|jsª| j|j ‚tt|jƒƒV  n,|  |¡V  |jrè|  |  |t|jƒ¡¡V  dS )aW  
        Returns requirement objects associated with the given InstallRequirement. In
        most cases this will be a single object but the following special cases exist:
            - the InstallRequirement has markers that do not apply -> result is empty
            - the InstallRequirement has both a constraint (or link) and extras
                -> result is split in two requirement objects: one with the constraint
                (or link) and one with the extra. This allows centralized constraint
                handling for the base, resulting in fewer candidate rejections.
        z6Ignoring %s: markers '%s' don't match your environmentNr¼   )Úmatch_markersr‘   r’   rŠ   Úmarkersrs   r   r²   r”   r<   r;   r{   rŒ   r"   r   rf   r=   Úmake_requirement_from_candidater†   rƒ   )rm   r´   rÎ   rÌ   rF   rF   rG   Ú#_make_requirements_from_install_reqÎ  s4    
ý
üÿz+Factory._make_requirements_from_install_req)Ú
root_ireqsrY   c           	      C   sê   t g i i ƒ}t|ƒD ]¾\}}|jrˆt|ƒ}|r6t|ƒ‚| ¡ s@q|jsNtdƒ‚t|jƒ}||j	krv|j	|  |M  < qÒt
 |¡|j	|< qt| j|dd�ƒ}|s q|d }|jrÆ|j|jkrÆ||j|j< |j |¡ q|jjdd„ d� |S )NzConstraint must be namedrF   )rÎ   r   c                 S   s   | j | jkS rq   )rŠ   r�   )ÚrrF   rF   rG   Ú<lambda>*  ó    z3Factory.collect_root_requirements.<locals>.<lambda>)Úkey)rI   Ú	enumerater»   r%   r   rÏ   rŠ   r³   r   rK   r.   Ú	from_ireqr§   rÒ   Úuser_suppliedrL   rJ   ÚextendÚsort)	rm   rÓ   Ú	collectedÚir´   ÚproblemrŠ   Úreqsr‡   rF   rF   rG   Úcollect_root_requirements  s6    

þÿ	z!Factory.collect_root_requirements)r…   rY   c                 C   s   t |ƒS rq   )r9   )rm   r…   rF   rF   rG   rÑ   -  s    z'Factory.make_requirement_from_candidaterF   )r”   r}   rÎ   rY   c                 C   s   |   ||¡}|  ||¡S )a(  
        Returns requirement objects associated with the given specifier. In most cases
        this will be a single object but the following special cases exist:
            - the specifier has markers that do not apply -> result is empty
            - the specifier has both a constraint and extras -> result is split
                in two requirement objects: one with the constraint and one with the
                extra. This allows centralized constraint handling for the base,
                resulting in fewer candidate rejections.
        )rb   rÒ   )rm   r”   r}   rÎ   r´   rF   rF   rG   Úmake_requirements_from_spec2  s    z#Factory.make_requirements_from_specr    c                 C   s"   | j r
d S t|ƒsd S t|| jƒS rq   )re   rM   r:   ra   )rm   r”   rF   rF   rG   Ú make_requires_python_requirementD  s
    z(Factory.make_requires_python_requirement)rs   rŠ   rY   c                 C   s"   | j dkrdS | j j||tƒ d�S )a—  Look up the link in the wheel cache.

        If ``preparer.require_hashes`` is True, don't use the wheel cache,
        because cached wheels, always built locally, have different hashes
        than the files downloaded from the index server and thus throw false
        hash mismatches. Furthermore, cached wheels at present have
        nondeterministic contents due to file modification times.
        N)rs   Úpackage_nameÚsupported_tags)r`   Úget_cache_entryr'   )rm   rs   rŠ   rF   rF   rG   Úget_wheel_cache_entryO  s    
ýzFactory.get_wheel_cache_entryc                 C   sZ   | j  |j¡}|d krd S | js$|S |jr.|S tƒ rV|jrVd|j› d|j› �}t	|ƒ‚d S )NzNWill not install to the user site because it will lack sys.path precedence to z in )
rl   rË   r�   rc   Úin_usersiter*   Úin_site_packagesÚraw_nameÚlocationr   )rm   r…   r\   ÚmessagerF   rF   rG   Úget_dist_to_uninstallb  s    ÿzFactory.get_dist_to_uninstallr?   )ÚcausesrY   c                 C   s    |st dƒ‚| jj}t|ƒdkrVt|d jjƒ}d|d jj›d|› d|›�}t	|ƒS d|› d�}|D ]0}|j 
¡ }t|jjƒ}|d	|›d
|› d�7 }qft	|ƒS )Nz,Requires-Python error reported with no causer+   r   zPackage z requires a different Python: z not in z%Packages require a different Python. z not in:Ú
z (required by ú))r³   ra   r‹   ÚlenrM   r@   r”   rA   rŠ   r   Úformat_for_error)rm   rî   r‹   r”   rì   ÚcauseÚpackagerF   rF   rG   Ú_report_requires_python_error~  s    ÿ
z%Factory._report_requires_python_error)r²   rA   rY   c                 C   s  |d krt |ƒ}n|› d|j› d�}| j |j¡}| j ¡ }tƒ }tƒ }|D ]4}|jr^|jjnd}	|	rt| 	|j
¡ qL| 	|j
¡ qLdd„ t|ƒD ƒ}
dd„ t|ƒD ƒ}|rÀt dd |¡p¼d	¡ |rÚt d
d |¡pÖd	¡ t d|d |
¡pîd	¡ t |ƒdk�r
t d¡ td|› �ƒS )Nz (from rð   Fc                 S   s   g | ]}t |ƒ‘qS rF   ©rM   ©r[   ÚvrF   rF   rG   Ú
<listcomp>¨  s     z?Factory._report_single_requirement_conflict.<locals>.<listcomp>c                 S   s   g | ]}t |ƒ‘qS rF   rö   r÷   rF   rF   rG   rù   ©  s     z)Ignored the following yanked versions: %sú, ÚnonezJIgnored the following versions that require a different python version: %sz; zNCould not find a version that satisfies the requirement %s (from versions: %s)zrequirements.txtz¶HINT: You are attempting to install a package literally named "requirements.txt" (which cannot exist). Consider using the '-r' flag to install the packages listed in requirements.txtz#No matching distribution found for )rM   rŠ   r_   Úfind_all_candidatesr�   Úrequires_python_skipped_reasonsrÅ   rs   rž   rÆ   r‹   Úsortedr‘   ÚcriticalÚjoinr’   r   )rm   r²   rA   Zreq_dispZcandsZskipped_by_requires_pythonZversions_setZyanked_versions_setrÀ   rž   ÚversionsZyanked_versionsrF   rF   rG   Ú#_report_single_requirement_conflict”  sD    

þýüÿz+Factory._report_single_requirement_conflictz,ResolutionImpossible[Requirement, Candidate])r€   rK   rY   c                    s´  |j stdƒ‚‡ fdd„|j D ƒ}|r6ˆ  td|ƒ¡S t|j ƒdkrh|j d \}}|j|krhˆ  ||¡S tt tdœdd	„}t	td
œdd„}t
ƒ }|j D ],\}}|d kr²| ¡ }	n||ƒ}	| |	¡ q˜|rØ|t|ƒƒ}
nd}
d|
› d�}t |¡ d}t
ƒ }|j D ]^\}}|j|k�r"| |j¡ |d }|�rJ||j› d|j› d� }n|d }|| ¡  }�q|D ]"}|| j}|d|› |› �7 }�qf|d d d d d }t |¡ tdƒS )Nz)Installation error reported with no causec                    s*   g | ]"}t |jtƒr|j ˆ j¡s|‘qS rF   )Ú
isinstancer@   r:   rÂ   ra   )r[   ró   rr   rF   rG   rù   Ñ  s   ýz2Factory.get_installation_error.<locals>.<listcomp>zSequence[ConflictCause]r+   r   )ÚpartsrY   c                 S   s2   t | ƒdkr| d S d | d d… ¡d | d  S )Nr+   r   rú   éÿÿÿÿz and )rñ   r   )r  rF   rF   rG   Ú	text_joinì  s    z1Factory.get_installation_error.<locals>.text_join)rA   rY   c                 S   sF   |   ¡ }|r|js$| j› d| j› �S t|jtƒr<t|jjƒS t|jƒS )Nr¡   )Úget_install_requirementr}   rŠ   r‹   r  r$   rM   )rA   r´   rF   rF   rG   Údescribe_triggerò  s    
z8Factory.get_installation_error.<locals>.describe_triggerzthe requested packageszCannot install z> because these package versions have conflicting dependencies.z
The conflict is caused by:z
    ú z depends on zThe user requested z%
    The user requested (constraint) z

zTo fix this you could try to:
z91. loosen the range of package versions you've specified
z92. remove package versions to allow pip attempt to solve zthe dependency conflict
z‚ResolutionImpossible: for help visit https://pip.pypa.io/en/latest/topics/dependency-resolution/#dealing-with-dependency-conflicts)rî   r³   rõ   r   rñ   rŠ   r  r   rM   r,   rÅ   rò   rÆ   rþ   r‘   rÿ   r‹   r”   r’   r   )rm   r€   rK   Zrequires_python_causesr²   rA   r  r  ZtriggersZtriggerr’   rz   Zrelevant_constraintsr×   ÚspecrF   rr   rG   Úget_installation_errorÈ  sn    
þÿ	


ÿ

ÿþýüûÿ	
ÿzFactory.get_installation_error)N)rF   )<rB   rC   rD   r   r!   r&   r
   r   rª   r   rN   ro   ÚpropertyrU   r   r{   r1   r   rM   r$   r3   r†   r   r,   r‰   r   r-   r�   rŒ   r   r   r(   r   r   rµ   r/   r   r¹   r.   r¾   r   rÍ   rÒ   r   rI   rá   r9   rÑ   râ   rã   r   rç   rí   r   rõ   r   r  r   r   r  rF   rF   rF   rG   rO   \   sÈ    öõ&ûúûùú;ùcüûùL þ6þ+þ	 üûý þþ þ6
ürO   )^rÈ   r¬   ÚloggingÚtypingr   r   r   r   r   r   r   r	   r
   r   r   r   r   r   Ú"pip._vendor.packaging.requirementsr   Z pip._vendor.packaging.specifiersr   Úpip._vendor.packaging.utilsr   r   Úpip._vendor.resolvelibr   Úpip._internal.cacher   r   Úpip._internal.exceptionsr   r   r   r   r   Ú"pip._internal.index.package_finderr   Úpip._internal.metadatar   r   Úpip._internal.models.linkr   Úpip._internal.models.wheelr    Ú pip._internal.operations.preparer!   Úpip._internal.req.constructorsr"   r#   Úpip._internal.req.req_installr$   r%   Úpip._internal.resolution.baser&   Ú&pip._internal.utils.compatibility_tagsr'   Úpip._internal.utils.hashesr(   Úpip._internal.utils.packagingr)   Úpip._internal.utils.virtualenvr*   r~   r,   r-   r.   r/   Ú
candidatesr0   r1   r2   r3   r4   r5   r6   Zfound_candidatesr7   r8   rJ   r9   r:   r;   r<   r=   r>   r?   Ú	getLoggerrB   r‘   rH   ÚCacherI   rO   rF   rF   rF   rG   Ú<module>   sB   @$	
