B
    `d                 @   s:  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
mZmZmZmZ ddlmZmZmZ er&d dl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 d dl m!Z! d dl"m#Z# d dl$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/ edZ0ee%e0f Z1G dd de2Z3dS )    )canonicalize_name)InstallationErrorUnsupportedPythonVersion)get_installed_distributions)MYPY_CHECK_RUNNING   )AlreadyInstalledCandidateEditableCandidateExtrasCandidateLinkCandidateRequiresPythonCandidate)ExplicitRequirementRequiresPythonRequirementSpecifierRequirement)DictIteratorOptionalSetTupleTypeVar)SpecifierSet)_BaseVersion)Distribution)ResolutionImpossible)PackageFinder)Link)RequirementPreparer)InstallRequirement)InstallRequirementProvider)	CandidateRequirement)BaseCandidateCc               @   s`   e Zd ZdddZdd ZdddZdd	 Zd
d Zdd Zdd Z	dd Z
dd Zdd ZdS )FactoryNc             C   sV   || _ || _t|| _|| _|| _|| _i | _i | _|sLdd t	 D | _
ni | _
d S )Nc             S   s   i | ]}|t |jqS  )r   project_name).0distr$   r$   O/tmp/pip-unpacked-wheel-hu9qqap1/pip/_internal/resolution/resolvelib/factory.py
<dictcomp>C   s   z$Factory.__init__.<locals>.<dictcomp>)finderpreparerr   _python_candidate_make_install_req_from_spec_force_reinstall_ignore_requires_python_link_candidate_cache_editable_candidate_cacher   _installed_dists)selfr*   r+   make_install_reqforce_reinstallignore_installedignore_requires_pythonpy_version_infor$   r$   r(   __init__-   s    
zFactory.__init__c             C   s    t ||| d}|rt||S |S )N)factory)r   r
   )r3   r'   extrasparentbaser$   r$   r(   _make_candidate_from_distJ   s    
z!Factory._make_candidate_from_distc             C   sr   |j r4|| jkr(t||| ||d| j|< | j| }n,|| jkrVt||| ||d| j|< | j| }|rnt||S |S )N)r:   nameversion)editabler1   r	   r0   r   r
   )r3   linkr;   r<   r?   r@   r=   r$   r$   r(   _make_candidate_from_linkV   s    



z!Factory._make_candidate_from_linkc             c   s   t |jj}| js | j|}nd }| jj|jj|jj|j	ddd}x@|
 D ]4}|d k	rj|j|jkrjqP| j|j||||jdV  qPW |d k	r|j|jjkr| j|||dV  d S )NF)trust_internet)r%   	specifierhashes)rB   r;   r<   r?   r@   )r'   r;   r<   )r   reqr?   r.   r2   getr*   find_best_candidaterE   rF   iter_applicableparsed_versionr@   rC   rB   r>   )r3   ireqr;   r?   Zinstalled_distfoundZicanr$   r$   r(   iter_found_candidatesq   s0    zFactory.iter_found_candidatesc             C   s.   |j r"| j|j t |d}t|S t|| dS )N)r;   r<   )r:   )rB   rC   setr   r   )r3   rL   Zcandr$   r$   r(   !make_requirement_from_install_req   s
    z)Factory.make_requirement_from_install_reqc             C   s   |  ||}| |S )N)r-   rP   )r3   rE   
comes_fromrL   r$   r$   r(   make_requirement_from_spec   s    z"Factory.make_requirement_from_specc             C   s   | j s|d krd S t|| jS )N)r/   r   r,   )r3   rE   r$   r$   r(    make_requires_python_requirement   s    z(Factory.make_requires_python_requirementc             C   s   |j | jkS )N)r?   r2   )r3   	candidater$   r$   r(   should_reinstall   s    zFactory.should_reinstallc             C   s(   d}|j |j| jjt|jd}t|S )NzOPackage {package!r} requires a different Python: {version} not in {specifier!r})packager@   rE   )formatr?   r,   r@   strrE   r   )r3   requirementr<   templatemessager$   r$   r(   _report_requires_python_error   s    z%Factory._report_requires_python_errorc             C   s0   x*|j D ] }t|jtr| |j|jS qW d S )N)Zcauses
isinstancerY   r   r\   r<   )r3   ecauser$   r$   r(   get_installation_error   s    zFactory.get_installation_error)N)NN)__name__
__module____qualname__r9   r>   rC   rN   rP   rR   rS   rU   r\   r`   r$   r$   r$   r(   r#   ,   s   	
 
#r#   N)4pip._vendor.packaging.utilsr   pip._internal.exceptionsr   r   pip._internal.utils.miscr   pip._internal.utils.typingr   
candidatesr   r	   r
   r   r   requirementsr   r   r   typingr   r   r   r   r   r   Z pip._vendor.packaging.specifiersr   pip._vendor.packaging.versionr   Zpip._vendor.pkg_resourcesr   Zpip._vendor.resolvelibr   "pip._internal.index.package_finderr   pip._internal.models.linkr    pip._internal.operations.preparer   Zpip._internal.req.req_installr   pip._internal.resolution.baser   r=   r   r    r!   r"   Cacheobjectr#   r$   r$   r$   r(   <module>   s*    