ó
Ð²Ebc           @   s’  d  Z  d d l 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 e j e ƒ Z e rId d	 l m Z m Z m Z m Z m Z m Z m Z d d
 l m Z e e d f Z e e e f Z e e e e f Z e e e e f Z e e e e f Z  e e e  f Z! e e e! f Z" n  e d d d g ƒ Z# d „  Z$ d d „ Z& d „  Z' d „  Z( d „  Z) d S(   s'   Validation of dependencies of packages
iÿÿÿÿN(   t
   namedtuple(   t   canonicalize_name(   t   RequirementParseError(   t)   make_distribution_for_install_requirement(   t   get_installed_distributions(   t   MYPY_CHECK_RUNNING(   t   Anyt   Callablet   Dictt   Listt   Optionalt   Sett   Tuple(   t   InstallRequirementt   PackageDetailst   versiont   requiresc          K   s´   |  i  k r# i t  d 6d d 6}  n  i  } t  } xx t |    D]j } t | j ƒ } y  t | j | j ƒ  ƒ | | <Wq< t t f k
 r¥ } t	 j
 d | | ƒ t } q< Xq< W| | f S(   s8   Converts a list of distributions into a PackageSet.
    t
   local_onlyt   skips%   Error parsing requirements for %s: %s(    (   t   FalseR   R   t   project_nameR   R   R   t   OSErrorR   t   loggert   warningt   True(   t   kwargst   package_sett   problemst   distt   namet   e(    (    s;   /tmp/pip-build-UPPWic/pip/pip/_internal/operations/check.pyt!   create_package_set_from_installed"   s     c         C   sI  i  } i  } x0|  D](} t  ƒ  } t  ƒ  } | rC | | ƒ rC q n  x· |  | j D]¨ } t | j ƒ } | |  k r» t }	 | j d k	 r™ | j j ƒ  }	 n  |	 rQ | j | | f ƒ qQ qQ n  |  | j	 }
 | j
 j |
 d t ƒsQ | j | |
 | f ƒ qQ qQ W| rt | d t ƒ| | <n  | r t | d t ƒ| | <q q W| | f S(   s—   Check if a package set is consistent

    If should_ignore is passed, it should be a callable that takes a
    package name and returns a boolean.
    t   prereleasest   keyN(   t   setR   R   R   R   t   markert   Nonet   evaluatet   addR   t	   specifiert   containst   sortedt   str(   R   t   should_ignoret   missingt   conflictingt   package_namet   missing_depst   conflicting_depst   reqR   t   missedR   (    (    s;   /tmp/pip-build-UPPWic/pip/pip/_internal/operations/check.pyt   check_package_set7   s0    		c            sL   t  ƒ  \ } } t |  | ƒ } t | | ƒ ‰  | t | d ‡  f d †  ƒf S(   se   For checking if the dependency graph would be consistent after     installing given requirements
    R+   c            s
   |  ˆ  k S(   N(    (   R   (   t	   whitelist(    s;   /tmp/pip-build-UPPWic/pip/pip/_internal/operations/check.pyt   <lambda>s   t    (   R   t   _simulate_installation_oft   _create_whitelistR3   (   t
   to_installR   t   _t   would_be_installed(    (   R4   s;   /tmp/pip-build-UPPWic/pip/pip/_internal/operations/check.pyt   check_install_conflictsc   s    c         C   s€   t  ƒ  } xp |  D]h } t | ƒ } | j ƒ  } | d k	 s@ t ‚ t | j ƒ } t | j | j	 ƒ  ƒ | | <| j
 | ƒ q W| S(   sB   Computes the version of packages after installing to_install.
    N(   R"   R   t   get_pkg_resources_distributionR$   t   AssertionErrorR   R!   R   R   R   R&   (   R9   R   t	   installedt   inst_reqt   abstract_distR   R   (    (    s;   /tmp/pip-build-UPPWic/pip/pip/_internal/operations/check.pyR7   x   s    	c         C   sq   t  |  ƒ } x^ | D]V } | | k r+ q n  x; | | j D], } t | j ƒ | k r9 | j | ƒ Pq9 q9 Wq W| S(   N(   R"   R   R   R   R&   (   R;   R   t   packages_affectedR.   R1   (    (    s;   /tmp/pip-build-UPPWic/pip/pip/_internal/operations/check.pyR8   Ž   s    (*   t   __doc__t   loggingt   collectionsR    t   pip._vendor.packaging.utilsR   t   pip._vendor.pkg_resourcesR   t   pip._internal.distributionsR   t   pip._internal.utils.miscR   t   pip._internal.utils.typingR   t	   getLoggert   __name__R   t   typingR   R   R   R	   R
   R   R   t   pip._internal.req.req_installR   R*   t
   PackageSett   Missingt   Conflictingt   MissingDictt   ConflictingDictt   CheckResultt   ConflictDetailsR   R   R$   R3   R<   R7   R8   (    (    (    s;   /tmp/pip-build-UPPWic/pip/pip/_internal/operations/check.pyt   <module>   s0   4	,		