ó
Ý²k^c           @` sj  d  d l  m Z m Z m Z m Z d  d l m Z m Z m Z d  d l	 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 d d	 l m Z m Z d d
 l m Z m Z m Z d d l m Z 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& m' Z' m( Z( m) Z) m* Z* m+ Z+ d d l, m- Z- d d l. m/ Z/ m0 Z0 m1 Z1 m2 Z2 d d l3 m4 Z4 m5 Z5 d d l6 m7 Z7 m8 Z8 d d l9 m: Z: d d l; m< Z< d d l= m> Z> e e? ƒ Z@ e d ƒ ZA e2 ZB e1 Z1 e  e jC e' f e jD e( f e jE e) f g ƒ ZF e e jC d „ ƒ ZG d d „ ZH d „  ZI d eJ f d „  ƒ  YZK d S(   i    (   t   absolute_importt   divisiont   print_functiont   unicode_literals(   t   defaultdictt   OrderedDictt   dequeN(   t   DEBUGt	   getLogger(   t   tqdmi   (   t
   frozendict(   t   memoizet   memoizemethod(   t   concatt   groupby(   t   ChannelPriorityt   MAX_CHANNEL_PRIORITYt   SatSolverChoice(   t   context(   t	   iteritemst   iterkeyst
   itervaluest   odictt   on_wint	   text_type(   t   time_recorder(   t   Clausest   PycoSatSolvert   PyCryptoSatSolvert   PySatSolvert   TRUEt   minimal_unsatisfiable_subset(   t   toposort(   t   CondaDependencyErrort   InvalidSpect   ResolvePackageNotFoundt   UnsatisfiableError(   t   Channelt   MultiChannel(   t
   NoarchTypet   PackageType(   t	   MatchSpec(   t   PackageRecord(   t   VersionOrderu   conda.stdoutlogc         C` sé   d „  } t  |  } y | | ƒ Wn9 t k
 r\ } t j d |  ƒ t j d | d t ƒn Xt j d |  ƒ | Sxe t  j ƒ  D]W \ } } y | | ƒ Wn& t k
 rÀ } t j d |  | ƒ q~ Xt j d |  ƒ | Sq~ Wt d ƒ ‚ d  S(	   Nc         S` sz   t  d |  ƒ } | j ƒ  | j ƒ  h } | j | j | Œ t | j ƒ  ƒ } | j | ƒ sv t d j | | ƒ ƒ ‚ n  d  S(   Nt
   sat_solveru$   Wrong SAT solution: {}. Required: {}(	   R   t   new_vart   Requiret   Andt   sett   satt   issubsett   RuntimeErrort   format(   R,   t   ct   requiredt   solution(    (    s,   lib/python2.7/site-packages/conda/resolve.pyt   try_out_solver-   s    u0   Could not run SAT solver through interface '%s'.u   SAT interface error due to: %st   exc_infou    Using SAT solver interface '%s'.u7   Attempted SAT interface '%s' but unavailable due to: %su*   Falling back to SAT solver interface '%s'.u@   Cannot run solver. No functioning SAT implementations available.(   t   _sat_solverst	   Exceptiont   logt   warningt   debugt   Truet   itemsR!   (   t   sat_solver_choiceR8   R,   t   et   solver_choice(    (    s,   lib/python2.7/site-packages/conda/resolve.pyt   _get_sat_solver_cls+   s$    	
	i   c         ` s   d j  ‡  f d †  |  Dƒ ƒ S(   Nu    c         3` s+   |  ]! } d  d ˆ  d t  | ƒ Vq d S(   u   
u    u   - N(   t   str(   t   .0t   x(   t   indent(    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>K   s    (   t   join(   t   iterableRH   (    (   RH   s,   lib/python2.7/site-packages/conda/resolve.pyt   dashlistJ   s    c         C` sh   | j  d k r[ |  j | ƒ } d } | rd x+ | d j D] } | t | ƒ j  7} q8 Wqd n	 | j  } | S(   uÜ   Sorting key to emphasize packages that have more strict
    requirements. More strict means the reduced index can be reduced
    more, so we want to consider these more constrained deps earlier in
    reducing the index.i   i    (   t
   strictnesst   find_matchest   dependsR)   (   t   resolve_objt   mst   prect   valuet   dep(    (    s,   lib/python2.7/site-packages/conda/resolve.pyt   exactness_and_number_of_depsN   s    	t   Resolvec           B` s0  e  Z e d/ d  „ Z d „  Z d0 d0 d „ Z e d „ Z e d „ Z	 e d „ Z
 d „  Z d „  Z d „  Z d0 d0 d	 „ Z d
 d „ Z d „  Z d0 d0 d „ Z d „  Z e d „  ƒ Z d „  Z e d e  ƒ e e d „ ƒ Z d „  Z d „  Z d „  Z d0 d „ Z e d „  ƒ Z e d „ Z e d „  ƒ Z e d „  ƒ Z  d „  Z! e d e  ƒ d „  ƒ Z" d „  Z# d „  Z$ d „  Z% d  „  Z& d! „  Z' d" „  Z( d# „  Z) e d$ „ Z* d% „  Z+ d& „  Z, d' „  Z- d( „  Z. d) „  Z/ e d* „ Z0 d0 e e d+ „ Z1 d, „  Z2 d- „  Z3 e d e  ƒ e e d0 d0 e d. „ ƒ Z4 RS(1   c         C` s¥  | |  _  | |  _ | r' |  j | ƒ n i  |  _ t j |  _ t j |  _ t	 d t
 | ƒ ƒ } t t ƒ } x¡ | D]™ } g  | | D] } | j r | ^ q } | r¿ t j d | ƒ | | | <n  d „  | | Dƒ }	 x3 |	 D]+ } x" | j D] }
 | |
 j | ƒ qê WqÚ Wqp W| |  _ | |  _ i  |  _ i  |  _ i  |  _ i  |  _ i  |  _ d „  | Dƒ |  _ x? |  j j ƒ  D]. \ } } t | d |  j d t ƒ|  j | <qoWd  S(   Nu   nameu(   restricting to unmanageable packages: %sc         s` s   |  ] } | j  r | Vq d  S(   N(   t   track_features(   RF   RQ   (    (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>p   s    c         S` s7   h  |  ]- } t  | d  ƒ r | j t j k r | ’ q S(   u   package_type(   t   hasattrt   package_typeR(   t   VIRTUAL_SYSTEM(   RF   t   _(    (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <setcomp>}   s   	 t   keyt   reverse(   t   indext   channelst   _make_channel_prioritiest   _channel_priorities_mapR   t   channel_priorityt   _channel_priorityt   solver_ignore_timestampst   _solver_ignore_timestampsR   R   R   t   listt   is_unmanageableR<   R>   RV   t   appendt   groupst   trackerst   _cached_find_matchest   ms_depends_t   _reduced_index_cachet   _pool_cachet   _strict_channel_cachet   _system_precsR@   t   sortedt   version_keyR?   (   t   selfR]   t	   processedR^   Rh   Ri   t   nameRQ   t   unmanageable_precst   tf_precst   feature_namet   group(    (    s,   lib/python2.7/site-packages/conda/resolve.pyt   __init__`   s4    		&							c         C` s¼   t  t |  ƒ j ƒ  t t |  j ƒ ƒ At t |  j ƒ ƒ At |  j ƒ At |  j	 ƒ At t d „  |  j
 j ƒ  Dƒ ƒ ƒ At t d „  |  j j ƒ  Dƒ ƒ ƒ At t d „  |  j j ƒ  Dƒ ƒ ƒ AS(   Nc         s` s'   |  ] \ } } | t  | ƒ f Vq d  S(   N(   t   tuple(   RF   t   kt   v(    (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>Ž   s    c         s` s'   |  ] \ } } | t  | ƒ f Vq d  S(   N(   Rz   (   RF   R{   R|   (    (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>   s    c         s` s'   |  ] \ } } | t  | ƒ f Vq d  S(   N(   Rz   (   RF   R{   R|   (    (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>   s    (   t   superRU   t   __hash__t   hasht	   frozensetR^   R
   R`   Rb   Rd   Rh   R@   Ri   Rk   (   Rr   (    (    s,   lib/python2.7/site-packages/conda/resolve.pyR~   ˆ   s    ˜c         ` s   d d l  m ‰  | d  k r% i  } n
 | j ƒ  | j ‡  f d †  t |  j ƒ Dƒ ƒ | r{ | j ‡  f d †  | Dƒ ƒ n  | S(   Ni   (   t   make_feature_recordc         ` s   i  |  ] } t  ˆ  | ƒ “ q S(    (   t   False(   RF   t   fstr(   R   (    s,   lib/python2.7/site-packages/conda/resolve.pys
   <dictcomp>œ   s   	 c         ` s   i  |  ] } t  ˆ  | ƒ “ q S(    (   R?   (   RF   Rƒ   (   R   (    s,   lib/python2.7/site-packages/conda/resolve.pys
   <dictcomp>ž   s   	 (   t   core.subdir_dataR   t   Nonet   cleart   updateR   Ri   (   Rr   t   featurest   filter(    (   R   s,   lib/python2.7/site-packages/conda/resolve.pyt   default_filter“   s    	
& c         ` sL   ‡ ‡ f d †  } ‡ ‡ ‡ f d †  ‰ ‡  ‡ ‡ f d †  ‰ | | ƒ } | S(   uí  Tests if a package, MatchSpec, or a list of both has satisfiable
        dependencies, assuming cyclic dependencies are always valid.

        Args:
            spec_or_prec: a package record, a MatchSpec, or an iterable of these.
            filter: a dictionary of (fkey,valid) pairs, used to consider a subset
                of dependencies, and to eliminate repeated searches.
            optional: if True (default), do not enforce optional specifications
                when considering validity. If False, enforce them.

        Returns:
            True if the full set of dependencies can be satisfied; False otherwise.
            If filter is supplied and update is True, it will be updated with the
            search results.
        c         ` s#   t  |  t ƒ r ˆ |  ƒ Sˆ  |  ƒ S(   N(   t
   isinstanceR)   (   t   spec(   t   v_fkey_t   v_ms_(    s,   lib/python2.7/site-packages/conda/resolve.pyt   v_±   s    c         ` s2   ˆ  r |  j  p1 t ‡ f d †  ˆ j |  ƒ Dƒ ƒ S(   Nc         3` s   |  ] } ˆ  | ƒ Vq d  S(   N(    (   RF   t   fkey(   R   (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>¶   s    (   t   optionalt   anyRM   (   RP   (   R‘   Rr   R   (    s,   lib/python2.7/site-packages/conda/resolve.pyRŽ   ´   s    c         ` s…   ˆ  j  |  ƒ } | d  k r t ˆ  |  <y ˆ j |  ƒ } Wn t k
 rY t } ˆ  |  <q Xt ‡ f d †  | Dƒ ƒ } ˆ  |  <n  | S(   Nc         3` s   |  ] } ˆ  | ƒ Vq d  S(   N(    (   RF   RP   (   RŽ   (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>Á   s    (   t   getR…   R?   t
   ms_dependsR"   R‚   t   all(   RQ   t   valRN   (   R‰   Rr   RŽ   (    s,   lib/python2.7/site-packages/conda/resolve.pyR   ¸   s    
'(    (   Rr   t   spec_or_precR‰   R‘   R   t   result(    (   R‰   R‘   Rr   R   RŽ   s,   lib/python2.7/site-packages/conda/resolve.pyt   valid¡   s
    c         ` sL   ‡ ‡ f d †  } t  ‡ ‡ ‡ f d †  ƒ ‰ ‡  ‡ ‡ f d †  ‰ | | ƒ S(   Nc         ` s'   t  |  t ƒ r ˆ |  ƒ Sˆ  |  ƒ Sd  S(   N(   R‹   R)   (   t   _spec_or_prec(   t   is_valid_prect   is_valid_spec(    s,   lib/python2.7/site-packages/conda/resolve.pyt   is_validÈ   s    
c         ` s2   ˆ r |  j  p1 t ‡  f d †  ˆ j |  ƒ Dƒ ƒ S(   Nc         3` s   |  ] } ˆ  | ƒ Vq d  S(   N(    (   RF   t   _prec(   R›   (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>Ñ   s    (   R‘   R’   RM   (   t   _spec(   R›   R‘   Rr   (    s,   lib/python2.7/site-packages/conda/resolve.pyRœ   Î   s    c         ` s’   ˆ  j  |  ƒ } | d  k r t ˆ  |  <y) t ‡ f d †  ˆ j |  ƒ Dƒ ƒ } Wn t k
 ro d } ˆ  |  <q X| r| t n d } ˆ  |  <n  | S(   Nc         3` s   |  ] } ˆ  | ƒ Vq d  S(   N(    (   RF   RP   (   Rœ   (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>Ù   s    u   invalid dep specsu   invalid depends specs(   R“   R…   R‚   R•   R”   R"   (   RQ   R–   t   has_valid_deps(   t
   filter_outRœ   Rr   (    s,   lib/python2.7/site-packages/conda/resolve.pyR›   Ô   s    
)(   R   (   Rr   R—   R¡   R‘   R   (    (   R¡   R›   Rœ   R‘   Rr   s,   lib/python2.7/site-packages/conda/resolve.pyt   valid2Ç   s    c         ` s(   ‡  ‡ ‡ ‡ f d †  ‰  ˆ  | t  ƒ  ƒ S(   u  Constructs a set of 'dependency chains' for invalid specs.

        A dependency chain is a tuple of MatchSpec objects, starting with
        the requested spec, proceeding down the dependency tree, ending at
        a specification that cannot be satisfied.

        Args:
            spec: a package key or MatchSpec
            filter: a dictionary of (prec, valid) pairs to be used when
                testing for package validity.

        Returns:
            A tuple of tuples, empty if the MatchSpec is valid.
        c   
      3` s	  |  j  | k r d  S| j |  j  ƒ ˆ j |  ˆ ˆ ƒ r< d  Sˆ j |  ƒ } t } t ƒ  } xa | D]Y } xP ˆ j | ƒ D]? } x6 ˆ  | | ƒ D] } t } |  f | Vq W| j | ƒ qw Wqa W| st d „  | ƒ } x, | j	 ƒ  D] }	 |  f t
 j |	 ƒ Vqã Wn  d  S(   Nc         S` s   |  j  S(   N(   Rt   (   RG   (    (    s,   lib/python2.7/site-packages/conda/resolve.pyt   <lambda>  s    (   Rt   t   addR™   RM   R‚   R0   R”   R?   R   t   valuesR)   t   union(
   RŒ   t   namest   precst   foundt   conflict_depsRQ   t   m2RG   t   conflict_groupsRx   (   t   chains_R‰   R‘   Rr   (    s,   lib/python2.7/site-packages/conda/resolve.pyR­   ñ   s$    	(   R0   (   Rr   RŒ   R‰   R‘   (    (   R­   R‰   R‘   Rr   s,   lib/python2.7/site-packages/conda/resolve.pyt   invalid_chainsâ   s    c         ` sš   g  } g  } t  ƒ  } x@ | D]8 } | j d ƒ } | rG | j | ƒ q | j | ƒ q W| j ‡  f d †  | Dƒ ƒ | rŠ t | ƒ ‚ n  t | ƒ | f S(   uO  Perform a quick verification that specs and dependencies are reasonable.

        Args:
            specs: An iterable of strings or MatchSpec objects to be tested.

        Returns:
            Nothing, but if there is a conflict, an error is thrown.

        Note that this does not attempt to resolve circular dependencies.
        u   track_featuresc         3` s2   |  ]( } | j  r ˆ  j | ƒ r | f Vq d  S(   N(   R‘   RM   (   RF   RŒ   (   Rr   (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>  s    (   R0   t   get_exact_valueR‡   Rg   t   extendR#   Rz   (   Rr   t   specst   non_tf_specst   bad_depst   feature_namesRP   t   _feature_names(    (   Rr   s,   lib/python2.7/site-packages/conda/resolve.pyt   verify_specs	  s    	c      	   ` se  i t  ƒ  d 6t  ƒ  d 6t  ƒ  d 6t  ƒ  d 6} t  d „  | p@ g  Dƒ ƒ } t  d „  | p\ g  Dƒ ƒ } x¡| D]™‰  t ˆ  ƒ d k rwˆ  d j d k rwt d	 „  | Dƒ ƒ rwt d
 „  | Dƒ ƒ rwg  | D]# } | d j d k rÌ | d ^ qÌ } | r| d } t  |  j | ƒ ƒ t  |  j ˆ  d ƒ ƒ @st| d j t ˆ  d ˆ  d g ƒ t t | d d  ƒƒ f ƒ qtqqm ˆ  d j d k rîg  |  j
 D] } | j d k r”| ^ q”}	 |	 rÈ|	 d j n d }	 | d j t ˆ  ƒ |	 f ƒ qm ˆ  d | k r¢t }
 x\ | D]T } | j ˆ  d j k r| d j t ˆ  ƒ t t | d d  ƒƒ f ƒ t }
 qqW|
 s| d j t ˆ  ƒ t t ˆ  d d d  ƒƒ f ƒ qqm t ˆ  ƒ d k sÐt ‡  f d †  | Dƒ ƒ rm | d j t ˆ  ƒ t t ˆ  d d d  ƒƒ f ƒ qm qm W| d rag  | d D]5 } | d j d ƒ sNt | d ƒ d k r| ^ q| d <n  | S(   Nu   pythonu   request_conflict_with_historyu   directu   cudac         s` s   |  ] } t  | ƒ Vq d  S(   N(   R)   (   RF   RZ   (    (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>(  s    c         s` s   |  ] } t  | ƒ Vq d  S(   N(   R)   (   RF   RZ   (    (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>)  s    i   iÿÿÿÿc         s` s   |  ] } | j  d  k Vq d S(   u   pythonN(   Rt   (   RF   RZ   (    (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>-  s    c         s` s,   |  ]" } | d  j  d k r | d  Vq d S(   i    u   pythonN(   Rt   (   RF   RZ   (    (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>.  s    i    t   targetu   __cudau   not availablec         3` s5   |  ]+ } t  | ƒ d  k o, | d ˆ  d k Vq d S(   i   i    N(   t   len(   RF   R5   (   t   chain(    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>E  s    u   python (   R0   R¸   Rt   R’   RM   R¤   Rz   RE   R)   R…   Ro   t   versionR‚   R?   t
   startswith(   Rr   R³   t   specs_to_addt   history_specst   strict_channel_priorityt   classesRZ   t   python_first_specst   python_spect   cuda_versiont   matchRŒ   (    (   R¹   s,   lib/python2.7/site-packages/conda/resolve.pyt   _classify_bad_deps#  sJ    

%0
!%+ 
%9.'
<c         ` sE   |  j  | ƒ } | s | S|  j | j ƒ ‰  t ‡  f d †  | Dƒ ƒ S(   Nc         3` s'   |  ] } | j  j ˆ  k r | Vq d  S(   N(   t   channelRt   (   RF   t   f(   t   sole_source_channel_name(    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>T  s    (   RM   t   _get_strict_channelRt   Rz   (   Rr   RP   R¾   t   matches(    (   RÇ   s,   lib/python2.7/site-packages/conda/resolve.pyt   find_matches_with_strictO  s
    c         C` se   t  j r7 t  j s t d ƒ n  |  j | | | ƒ } n i  } t  j t j k } t | d | ƒ‚ d  S(   Nuk   
Found conflicts! Looking for incompatible packages.
This can take several minutes.  Press CTRL-C to abort.t   strict(	   R   t   unsatisfiable_hintst   jsont   printt   build_conflict_mapRa   R   t   STRICTR$   (   Rr   R±   R¼   R½   R³   R¾   (    (    s,   lib/python2.7/site-packages/conda/resolve.pyt   find_conflictsV  s    		i   c         ` só  g  } | j  | g ƒ g  } g  } xÊ| rî| j d ƒ ‰  ˆ  d } | | k rV q% n  | j  | ƒ | j | k r@t | ƒ d k r” | j  ˆ  ƒ n  t | d ƒ t ˆ  ƒ k ræ t j ˆ  d | d d f ƒ d }	 |	 | d d <n | j  ˆ  ƒ t | ƒ | k ot ‡  f d †  | Dƒ ƒ }
 t | ƒ d k s9|
 r@| Sn  | } x ˆ  d d !D] } | | } qTWg  | j | i  ƒ D] } | ^ q{} | d k rŸq% n  xI | D]A } t | ƒ | k  r¦t	 ˆ  ƒ } | j  | ƒ | j  | ƒ q¦q¦Wq% W| S(   u1   Return shorted path from root_spec to target_namei    iÿÿÿÿc         3` s'   |  ] } t  | ƒ t  ˆ  ƒ k Vq d  S(   N(   R¸   (   RF   RZ   (   t   path(    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>w  s    N(
   Rg   t   popRt   R¸   R)   R¦   R’   R“   R…   Re   (   Rr   t	   root_spect   target_namet	   dep_grapht   num_targetst   queuet   visitedt   target_pathst   nodet	   last_spect   found_all_targetst	   sub_grapht   pRZ   t   childrent   adjt   new_path(    (   RÒ   s,   lib/python2.7/site-packages/conda/resolve.pyt"   breadth_first_search_for_dep_grapha  sB    	
%%c         C` s*  i i  | 6} t  ƒ  } | g g } xû | r| j d ƒ } | } x | D] } | | } qG W| d } |  j | ƒ }	 x¥ |	 D] }
 t |
 j ƒ d k r{ x |
 j D]q } t | ƒ } | j i i  | 6ƒ | j | ƒ t | ƒ } | j	 | ƒ t | ƒ t
 j k r  | j	 | ƒ q  q  Wq{ q{ Wq% W| | f S(   Ni    iÿÿÿÿ(   R0   RÓ   RM   R¸   RN   R)   R‡   R¤   Re   Rg   R   t   unsatisfiable_hints_check_depth(   Rr   RŒ   RÖ   t   all_depsRØ   RÒ   RÞ   Rß   t   parent_nodeRÉ   t   matt   it   new_nodeRâ   (    (    s,   lib/python2.7/site-packages/conda/resolve.pyt   build_graph_of_deps‡  s*    		
c          C` sä  t  j t j k } t | ƒ | p' t ƒ  B} t | ƒ d k r‰ |  j t t | ƒ ƒ ƒ } t | ƒ d k r‰ t |  j	 | d ƒ ƒ } q‰ n  | j
 d „  |  j Dƒ ƒ x | D] } |  j | f ƒ qª Wi  } i  } t d t | ƒ d d d t d t  j ƒ Ý }	 xÓ | D]Ë } |	 j d	 j | ƒ ƒ |	 j
 ƒ  |  j | ƒ \ }
 } | j
 |
 ƒ | j | j ƒ ru| | j j | ƒ n | g | | j <xG | D]? } | j | j ƒ r»| | j j | ƒ qŒ| g | | j <qŒWqWWd
 QXg  } i  } x | j ƒ  D] \ } } t | ƒ } | d k r&| g | | <qòt | ƒ d k rò| j | ƒ d
 k r]| g | | <qq| | j | ƒ qòqòWt d t | ƒ d d d t d t  j ƒ '}	 x| j ƒ  D]\ } } |	 j d j d j d „  | Dƒ ƒ ƒ ƒ |	 j
 ƒ  g  | D] } | ^ qõ} g  } d
 } t | ƒ j t d „  | Dƒ ƒ ƒ } | rç| j g  | D] } | j | k rK| ^ qKƒ | d d } x@| D]^ } | | d d k r‚| j } | | j | ƒ } |  j | | | | ƒ } | j | ƒ q‚q‚Wq¯x‡ | D] } | | j | d ƒ } |  j | d | | | ƒ } | j | ƒ t | ƒ d k s^t | ƒ t | ƒ k  rî| } | } qîqîWxJ | d D]> } | | j | ƒ } |  j | | | | ƒ } | j | ƒ q|Wq¯WWd
 QX|  j | | | | ƒ } | S(   uU  Perform a deeper analysis on conflicting specifications, by attempting
        to find the common dependencies that might be the cause of conflicts.

        Args:
            specs: An iterable of strings or MatchSpec objects to be tested.
            It is assumed that the specs conflict.

        Returns:
            bad_deps: A list of lists of bad deps

        Strategy:
            If we're here, we know that the specs conflict. This could be because:
            - One spec conflicts with another; e.g.
                  ['numpy 1.5*', 'numpy >=1.6']
            - One spec conflicts with a dependency of another; e.g.
                  ['numpy 1.5*', 'scipy 0.12.0b1']
            - Each spec depends on *the same package* but in a different way; e.g.,
                  ['A', 'B'] where A depends on numpy 1.5, and B on numpy 1.6.
            Technically, all three of these cases can be boiled down to the last
            one if we treat the spec itself as one of the "dependencies". There
            might be more complex reasons for a conflict, but this code only
            considers the ones above.

            The purpose of this code, then, is to identify packages (like numpy
            above) that all of the specs depend on *but in different ways*. We
            then identify the dependency chains that lead to those packages.
        i   i    c         S` s   h  |  ] } | j  ƒ  ’ q S(    (   t   to_match_spec(   RF   RZ   (    (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <setcomp>Ã  s   	 t   totalt   descu   Building graph of depst   leavet   disableu   Examining {}Nu   __cudau   Determining conflictsu   Examining conflict for {}u    c         s` s   |  ] } | j  Vq d  S(   N(   Rt   (   RF   RZ   (    (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>í  s    c         s` s   |  ] } | j  Vq d  S(   N(   Rt   (   RF   RZ   (    (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>ò  s    iÿÿÿÿ(   R   Ra   R   RÐ   R0   R¸   RM   t   nextt   iterR”   R‡   Ro   t   _get_package_poolR	   R‚   RÍ   t   set_descriptionR4   Rê   R“   Rt   Rg   R@   R€   R…   RI   t   intersectiont   countRã   R°   RÄ   (    Rr   R±   R¼   R½   R¾   RÉ   RŒ   RÖ   t   dep_listt   tt   dep_graph_for_spect   all_deps_for_specRS   t   chainst   conflicting_pkgs_pkgsR{   R|   t   set_vt   rootst   nodesRZ   t   lrootst   current_shortest_chaint   shortest_nodet   requested_spec_unsatt   roott   search_nodet   num_occurancesR5   RÛ   R¹   R³   (    (    s,   lib/python2.7/site-packages/conda/resolve.pyRÏ   ž  s    

%/		c         ` s™   d  } y ˆ  j | } Wn{ t k
 r” | ˆ  j k r• t d „  ˆ  j | Dƒ ƒ } ‡  f d †  | Dƒ } t | ƒ d } | | } ˆ  j | <q• n X| S(   Nc         s` s   |  ] } | j  j Vq d  S(   N(   RÅ   Rt   (   RF   RQ   (    (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>  s    c         ` s(   i  |  ] } | ˆ  j  j | d  ƒ “ q S(   i   (   R`   R“   (   RF   t   cn(   Rr   (    s,   lib/python2.7/site-packages/conda/resolve.pys
   <dictcomp>  s   	 i    (   R…   Rn   t   KeyErrorRh   R0   Rp   (   Rr   t   package_namet   channel_namet   all_channel_namest   by_cpt   highest_priority(    (   Rr   s,   lib/python2.7/site-packages/conda/resolve.pyRÈ     s    c         C` s   | s
 t  S| j | d j k  S(   uH   prevent introduction of matchspecs that broaden our selection of choicesi    (   R‚   RL   (   Rr   RP   t   specs_by_name(    (    s,   lib/python2.7/site-packages/conda/resolve.pyt   _broader  s    c         C` ss   t  | ƒ } | |  j k r+ |  j | } nD |  j | ƒ } t d „  | ƒ } d „  t | ƒ Dƒ } | |  j | <| S(   Nc         S` s   |  j  S(   N(   Rt   (   RG   (    (    s,   lib/python2.7/site-packages/conda/resolve.pyR£   *  s    c         S` s%   i  |  ] \ } } t  | ƒ | “ q S(    (   R0   (   RF   R{   R|   (    (    s,   lib/python2.7/site-packages/conda/resolve.pys
   <dictcomp>+  s   	 (   R€   Rm   t   get_reduced_indexR   R   (   Rr   R±   t   poolt   grouped_pool(    (    s,   lib/python2.7/site-packages/conda/resolve.pyRò   $  s    t   module_namec      
   ` sß  d d l  m ‰ t j t j k ‰	 ˆ	 t | ƒ f } | ˆ j k rN ˆ j | St j	 t
 ƒ r† t j d t t d „  | Dƒ ƒ ƒ ƒ n  ˆ j | ƒ \ } } d „  t ˆ j | ƒ ƒ Dƒ ‰ t ƒ  ‰ d  ‰
 t ƒ  ‰  | rt t | ƒ d ‡ f d †  d t ƒ} n  t | ƒ } i  ‰ x@ | D]8 } ˆ j | j t ƒ  ƒ t ˆ j | ƒ ƒ Bˆ | j <qW‡  ‡ ‡ ‡ ‡ ‡ ‡	 ‡
 f d	 †  ‰ t ƒ  } xo t d
 ƒ D]a } ˆ j ƒ  t | ƒ }	 xB |	 rñ|	 j ƒ  } ˆ | g ƒ rá|	 j | ƒ q°| j | ƒ q°Wq‘W| r| ri  Sd „  ‡ f d †  | Dƒ Dƒ ‰ t ƒ  }
 x4 | D], } |
 j | j t ƒ  ƒ | g |
 | j <q6WxY| D]Q} t ‡ ‡ ‡ f d †  ˆ j | ƒ Dƒ ƒ } ˆ	 rß| rßˆ j | d j ƒ ‰ t ‡ f d †  | Dƒ ƒ } n  ˆ j  d „  | Dƒ ƒ xÅ| D]½} t ƒ  } t! j" |
 ƒ } t ˆ j# | ƒ ƒ } xo | D]g } | j | j t ƒ  ƒ } | | k r‘| s~| j$ | d j$ k r‘| j% d | ƒ n  | | | j <q7Wx| r¹| j& ƒ  } | j | ƒ xï ‡ f d †  ˆ j | ƒ Dƒ D]Î } ˆ j' | ˆ ƒ sqän  ˆ	 s'ˆ j | j ƒ | j( j k rä| ˆ | <t ˆ j# | ƒ ƒ | } xe | D]Z } d | k ržˆ j) | t | j | j t ƒ  ƒ ƒ ƒ rž| j | ƒ qQ| j | ƒ qQWqäqäWq¥WqýWqmWt* ˆ ƒ ‰ ˆ ˆ j | <ˆ S(   Ni   (   R   u   Retrieving packages for: %sc         s` s   |  ] } t  | ƒ Vq d  S(   N(   R   (   RF   t   s(    (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr><  s    c         S` s+   i  |  ]! \ } } | r t  n d  | “ q S(   u   feature not enabled(   R‚   (   RF   RQ   R–   (    (    s,   lib/python2.7/site-packages/conda/resolve.pys
   <dictcomp>?  s   	R[   c         ` s   t  ˆ  |  ƒ |  j ƒ  f S(   N(   RT   t   dist_str(   RG   (   Rr   (    s,   lib/python2.7/site-packages/conda/resolve.pyR£   G  s    R\   c         ` sÛ  t  t |  ƒ ƒ j } ˆ j j | d ƒ } | r‘ ˆ r‘ | ˆ  k r‘ ˆ j | ƒ } x- | D]% } | j j | k rX d ˆ | <qX qX Wˆ  j | ƒ n  d } } x| D]} ˆ j | t	 ƒ s¢ | d 7} ˆ j
 |  | ƒ sö ˆ j | ƒ r
| ˆ | k r
d ˆ ˆ | <q¢ n  t ƒ  } xW ˆ j | ƒ D]F } | j r#t ‡ f d †  ˆ j | ƒ Dƒ ƒ r#| j | ƒ q#q#W| ršd d j d „  | Dƒ ƒ ˆ | <q¢ n  t	 ˆ | <| d 7} q¢ q¢ W| | k  }	 |	 rät j d	 | | | f ƒ n  t d
 „  |  Dƒ ƒ rþ|	 S| d k rd  S|	 s | ˆ k r×ˆ j | ƒ t d „  ‡ ‡ f d †  | Dƒ ƒ }
 |
 j d d  ƒ xr t |
 j ƒ  d d „  ƒD]R \ } } t | ƒ | k r~ˆ t | ƒ ƒ } | r½t }	 qÐ| d  k rÐd  Sq~q~Wn  |	 S(   Nu&   removed due to strict channel priorityi    i   u"   incompatible with required spec %sc         3` s'   |  ] } ˆ  j  | t ƒ s | Vq d  S(   N(   R“   R‚   (   RF   t   rec(   R¡   (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>l  s    u   unsatisfiable dependencies %su    c         s` s   |  ] } t  | ƒ Vq d  S(   N(   RE   (   RF   R  (    (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>q  s    u   %s: pruned from %d -> %dc         s` s   |  ] } | j  Vq d  S(   N(   R‘   (   RF   RP   (    (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>z  s    c         S` s   |  j  S(   N(   Rt   (   R  (    (    s,   lib/python2.7/site-packages/conda/resolve.pyR£   ˆ  s    c         3` sF   |  ]< } ˆ  j  | t ƒ s ˆ j | ƒ D] } | j s( | Vq( q d  S(   N(   R“   R‚   R”   R‘   (   RF   RQ   t   dep_spec(   R¡   Rr   (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>‰  s   u   *R[   c         S` s   t  d „  |  d Dƒ ƒ S(   Nc         s` s   |  ] } | j  Vq d  S(   N(   R‘   (   RF   RZ   (    (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>  s    i   (   R’   (   RG   (    (    s,   lib/python2.7/site-packages/conda/resolve.pyR£     s    (    (   Rð   Rñ   Rt   Rh   R“   RÈ   RÅ   R¤   t
   setdefaultR‚   t	   match_anyR0   R”   R‘   R’   RM   RI   R<   R>   R…   R   RÓ   Rp   R@   R¸   R?   (   t   _specsRt   Rx   RÇ   RQ   t   noldt   nnewt   unsatisfiable_dep_specsRP   t   reducedt
   _dep_specst	   deps_namet   depst   res(   t   cp_filter_appliedt   explicit_spec_package_poolt   filter_groupR¡   Rr   t   snamesR¾   t   top_level_spec(    s,   lib/python2.7/site-packages/conda/resolve.pyR$  Q  sd    

	#	
		i   c         S` s   i  |  ] } | | “ q S(    (    (   RF   RQ   (    (    s,   lib/python2.7/site-packages/conda/resolve.pys
   <dictcomp>¯  s   	 c         3` s   |  ] } ˆ  | ƒ Vq d  S(   N(    (   RF   Rƒ   (   R   (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>¯  s    c         3` s3   |  ]) } | ˆ k r ˆ j  | ˆ  ƒ r | Vq d  S(   N(   R¢   (   RF   RQ   (   R¡   t   reduced_index2Rr   (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>µ  s    i    c         3` s'   |  ] } | j  j ˆ  k r | Vq d  S(   N(   RÅ   Rt   (   RF   RQ   (   t   strict_channel_name(    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>¼  s    c         s` s   |  ] } | | f Vq d  S(   N(    (   RF   RQ   (    (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>¾  s    c         3` s!   |  ] } | ˆ  k r | Vq d  S(   N(    (   RF   RZ   (   R'  (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>Õ  s    u   track_features(+   R„   R   R   Ra   R   RÐ   Rz   Rl   R<   t   isEnabledForR   R>   RK   Rp   R¶   R   RŠ   R0   R…   Re   R?   R“   Rt   RM   t   rangeR†   R   t   popleftRg   R¤   R   RÈ   R‡   t   copyt   deepcopyR”   RL   t   insertRÓ   R¢   RÅ   R  R
   (   Rr   t   explicit_specst   sort_by_exactnesst   exit_on_conflictt	   cache_keyRˆ   R  t   pruned_to_zeroRZ   t   slistt   specs_by_name_seedt   explicit_spect   add_these_precs2t   pkgt
   seen_specsR  t	   dep_specsRS   R±   RP   t   dep_pkgt	   new_specst   new_ms(    (   R"  R#  R$  R¡   R   R'  Rr   R%  R(  R¾   R&  s,   lib/python2.7/site-packages/conda/resolve.pyR  /  s”    		0$O	
	 	*(	)	&
	%$	c         ` s   t  ‡  f d †  | Dƒ ƒ S(   Nc         3` s   |  ] } | j  ˆ  ƒ Vq d  S(   N(   RÃ   (   RF   RP   (   RQ   (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>ÿ  s    (   R’   (   Rr   t   mssRQ   (    (   RQ   s,   lib/python2.7/site-packages/conda/resolve.pyR  þ  s    c         ` sË   ˆ  j  j ˆ d  ƒ } | d  k	 r% | Sˆ j d ƒ } | rR ˆ  j j | d ƒ } nL ˆ j d ƒ r ˆ j d ƒ } t ‡  f d †  | Dƒ ƒ } n t ˆ  j ƒ } t ‡ f d †  | Dƒ ƒ } | ˆ  j  ˆ <| S(   Nu   nameu   track_featuresc         3` s$   |  ] } ˆ  j  j | d ƒ Vq d  S(   N(    (   Ri   R“   (   RF   Rw   (   Rr   (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>  s    c         3` s$   |  ] } ˆ  j  | ƒ r | Vq d  S(   N(   RÃ   (   RF   Rß   (   RŒ   (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>  s    (    (	   Rj   R“   R…   R¯   Rh   R   R   R]   Rz   (   Rr   RŒ   R!  t	   spec_namet   candidate_precsR´   (    (   Rr   RŒ   s,   lib/python2.7/site-packages/conda/resolve.pyRM     s    c         C` sn   |  j  j | ƒ } | d  k rj g  | j D] } t | ƒ ^ q( } | j d „  | j Dƒ ƒ | |  j  | <n  | S(   Nc         s` s   |  ] } t  d  | ƒ Vq d S(   RV   N(   R)   (   RF   t   feat(    (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>  s    (   Rk   R“   R…   t   combined_dependsR)   R°   Rˆ   (   Rr   RQ   R   t   d(    (    s,   lib/python2.7/site-packages/conda/resolve.pyR”     s    "c         C` s  | j  } |  j j | j d ƒ } | t k  r3 d n d } t | j d d ƒ ƒ } | j d d ƒ } | j d ƒ } t | j d k ƒ }	 |  j t	 j
 k r³ | | | | |	 g }
 n | | | | |	 g }
 |  j râ |
 j | ƒ n |
 j | j d d ƒ | f ƒ |
 S(	   Ni   i    u   versionu    u   build_numberu   buildu   noarchu	   timestamp(   RÅ   R`   R“   Rt   R   R+   t   intt   subdirRb   R   t   DISABLEDRd   Rg   R°   (   Rr   RQ   t   vtypeRÅ   Ra   R™   t   version_comparatort   build_numbert   build_stringt   noarcht   vkey(    (    s,   lib/python2.7/site-packages/conda/resolve.pyRq     s    		c         C` sv   t  ƒ  } xf t t d „  d „  |  Dƒ Dƒ ƒ ƒ D]> \ } } | j } | | k rW q0 n  t | t d ƒ | | <q0 W| S(   Nc         s` s:   |  ]0 } t  | t ƒ r+ d  „  | j Dƒ n | f Vq d S(   c         s` s   |  ] } t  | ƒ Vq d  S(   N(   R%   (   RF   t   cc(    (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>5  s    N(   R‹   R&   t	   _channels(   RF   R5   (    (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>5  s   c         s` s   |  ] } t  | ƒ Vq d  S(   N(   R%   (   RF   R5   (    (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>6  s    i   (   R   t	   enumerateR   Rt   t   minR   (   R^   t   priorities_mapt   priority_countert   chnR	  (    (    s,   lib/python2.7/site-packages/conda/resolve.pyR_   1  s    		$	c         C` sQ   t  | ƒ } |  j | ƒ } | r> | r> t | f g ƒ ‚ n  t | d |  j ƒS(   NR[   (   R)   RM   R#   Rp   Rq   (   Rr   RP   t   emptyokR¨   (    (    s,   lib/python2.7/site-packages/conda/resolve.pyt   get_pkgs>  s
    c         C` sV   t  |  t ƒ r |  j ƒ  St  |  t ƒ rI d t |  ƒ |  j rD d n d St ƒ  ‚ d  S(   Nu   @s@u   ?u    (   R‹   R*   R  R)   R   R‘   t   NotImplementedError(   R–   (    (    s,   lib/python2.7/site-packages/conda/resolve.pyt   to_sat_nameF  s
    
!c         C` s   d |  | f S(   Nu	   @fm@%s@%s(    (   t   prec_dist_strRA  (    (    s,   lib/python2.7/site-packages/conda/resolve.pyt   to_feature_metric_idP  s    c         C` sI  t  | ƒ } |  j | ƒ } | j | ƒ } | d  k	 r: | S| j ƒ  } | j d ƒ } t d „  d „  | j d ƒ pv d Dƒ Dƒ ƒ } | r¦ |  j j | g  ƒ } }	 ne | rò t	 | ƒ d k sÄ t
 ‚ t t | ƒ ƒ }
 |  j j |
 g  ƒ } }	 n |  j j ƒ  } }	 t } | s<g  | D] } | j | ƒ r| ^ q}	 n  t	 |	 ƒ t	 | ƒ k r®| j rft } q®| s®| rt  d | ƒ n	 t  | ƒ } | j |  j | | ƒ ƒ } q®n  | d  k r5g  |	 D] } |  j | ƒ ^ qÁ} | j r#| rút  d | ƒ n	 t  | ƒ } | j d |  j | ƒ ƒ n  | j | ƒ } n  | j | | ƒ | S(	   Nu   namec         s` s   |  ] } | r | Vq d  S(   N(    (   RF   t   _tf(    (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>^  s    c         s` s   |  ] } | j  ƒ  Vq d  S(   N(   t   strip(   RF   RÆ   (    (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>_  s    u   track_featuresi   RV   u   !(    (   R)   RW  t	   from_nameR…   t
   _is_singleR¯   R€   Rh   R“   R¸   t   AssertionErrorRð   Rñ   Ri   R]   t   keysR‚   RÃ   R‘   R   t   push_MatchSpecRg   t   Anyt   name_var(   Rr   t   CRŒ   t   sat_namet   mt   simplet   nmt   tft   tgroupt   libsR{   R   t   ms2RQ   t	   sat_names(    (    s,   lib/python2.7/site-packages/conda/resolve.pyR`  T  sB    	&+		!!"	!c   	      C` sS  t  d t t j ƒ ƒ } xž t |  j ƒ D] \ } } g  | D] } |  j | ƒ ^ q; } x | D] } | j | ƒ q] W| j |  j t | ƒ ƒ ƒ } | j	 | j
 | | j | ƒ g ƒ q( Wxk t |  j ƒ D]Z } | j |  j | ƒ ƒ } x9 |  j | ƒ D]( } | j	 | j | |  j | | ƒ ƒ q÷ WqÉ Wt j t ƒ rOt j d | j ƒ  ƒ n  | S(   NR,   u+   gen_clauses returning with clause count: %d(   R   RD   R   R,   R   Rh   RW  R-   R)   R.   t
   ExactlyOnet   NotR   R]   R”   t   OrR`  R<   R)  R   R>   t   get_clause_count(	   Rr   Rc  Rt   Rx   RQ   Rd  Re  t   nkeyRP   (    (    s,   lib/python2.7/site-packages/conda/resolve.pyt   gen_clauses|  s    "'*c         C` sT   g  | D] } |  j  | | ƒ f ^ q } t j t ƒ rP t j d | j ƒ  ƒ n  | S(   Nu9   generate_spec_constraints returning with clause count: %d(   R`  R<   R)  R   R>   Rp  (   Rr   Rc  R±   RP   R˜   (    (    s,   lib/python2.7/site-packages/conda/resolve.pyt   generate_spec_constraints•  s    (c         ` sN   ‡  ‡ f d †  t  ˆ j ƒ Dƒ } t j t ƒ rJ t j d ˆ  j ƒ  ƒ n  | S(   Nc         ` s.   i  |  ]$ } d  ˆ j  ˆ  t d | ƒ ƒ “ q S(   i   RV   (   R`  R)   (   RF   Rt   (   Rc  Rr   (    s,   lib/python2.7/site-packages/conda/resolve.pys
   <dictcomp>ž  s   	u6   generate_feature_count returning with clause count: %d(   R   Ri   R<   R)  R   R>   Rp  (   Rr   Rc  R˜   (    (   Rc  Rr   s,   lib/python2.7/site-packages/conda/resolve.pyt   generate_feature_count  s    c         ` s   ‡  f d †  | Dƒ S(   Nc         ` s;   i  |  ]1 } | j  r ˆ  j | j  ƒ r d  d | j  “ q S(   i   u   !(   R·   R\  (   RF   RP   (   Rc  (    s,   lib/python2.7/site-packages/conda/resolve.pys
   <dictcomp>¦  s   	 (    (   Rr   Rc  R±   (    (   Rc  s,   lib/python2.7/site-packages/conda/resolve.pyt   generate_update_count¥  s    c         ` sñ   i  } xä t  ˆ  j ƒ D]Ó \ } } ‡  f d †  | Dƒ } t j | j ƒ  Œ  j ˆ  j ƒ } x | D]… } ˆ  j | t d | ƒ ƒ } xa | j	 ƒ  D]S \ }	 }
 | |
 k rŽ ˆ  j
 |	 | ƒ } | j | j |	 | ƒ | ƒ d | | <qŽ qŽ Wq` Wq W| S(   Nc         ` s+   i  |  ]! } t  | j ƒ ˆ  j | ƒ “ q S(    (   R0   Rˆ   RW  (   RF   RQ   (   Rr   (    s,   lib/python2.7/site-packages/conda/resolve.pys
   <dictcomp>°  s   	 RV   i   (   R   Rh   R0   R¦   R¥   Rô   Ri   R`  R)   R@   RY  Rb  R/   (   Rr   Rc  t   eqRt   Rx   t
   prec_featst   active_featsRA  t   clause_id_for_featuret   prec_sat_nameRˆ   t   feature_metric_id(    (   Rr   s,   lib/python2.7/site-packages/conda/resolve.pyt   generate_feature_metric¨  s    !c         ` s   ‡  ‡ f d †  | Dƒ S(   Nc         ` s,   i  |  ]" } d  d ˆ j  ˆ  | j ƒ “ q S(   i   u   !(   R`  Rt   (   RF   RP   (   Rc  Rr   (    s,   lib/python2.7/site-packages/conda/resolve.pys
   <dictcomp>¼  s   	 (    (   Rr   Rc  R±   (    (   Rc  Rr   s,   lib/python2.7/site-packages/conda/resolve.pyt   generate_removal_count»  s    c         ` s   ‡  ‡ f d †  | Dƒ S(   Nc         ` s1   i  |  ]' } | j  r d  ˆ j ˆ  | j ƒ “ q S(   i   (   R‘   R`  Rt   (   RF   RP   (   Rc  Rr   (    s,   lib/python2.7/site-packages/conda/resolve.pys
   <dictcomp>¿  s   	 (    (   Rr   Rc  R±   (    (   Rc  Rr   s,   lib/python2.7/site-packages/conda/resolve.pyt   generate_install_count¾  s    c         ` s   ‡  ‡ f d †  | Dƒ S(   Nc         ` s%   i  |  ] } d  ˆ j  ˆ  | ƒ “ q S(   i   (   R`  (   RF   Rg  (   Rc  Rr   (    s,   lib/python2.7/site-packages/conda/resolve.pys
   <dictcomp>Â  s   	 (    (   Rr   Rc  t   missing(    (   Rc  Rr   s,   lib/python2.7/site-packages/conda/resolve.pyt   generate_package_countÁ  s    c         ` sª  i  } i  } i  } i  } i  } i  }	 x- | D]% }
 t  |
 ƒ }
 |	 j |
 j g  ƒ q+ Wx@t |	 ƒ D]2\ } } g  |  j j | g  ƒ D] } |  j | ƒ | f ^ qƒ } d  } xæ| D]Þ\ } ‰  | rå t ‡  f d †  | Dƒ ƒ rå q± n  | d  k r
d } } } } } nó | d | d k s2| d | d k rQ| d 7} d } } } } n¬ | d | d k r€| d 7} d } } } n} | d | d k r«| d 7} d } } nR | d | d k rÒ| d 7} d } n+ |  j	 rý| d | d k rý| d 7} n  |  j
 ˆ  ƒ } | s| r%| | | <n  | s1| r>| | | <n  | sJ| rW| | | <n  | sc| rp| | | <n  | s|| r‰| | | <n  | } q± Wqa W| | | | | f S(   Nc         3` s   |  ] } ˆ  | k Vq d  S(   N(    (   RF   R÷   (   RQ   (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>á  s    i    i   i   i   i   i   (   R)   R  Rt   R   Rh   R“   Rq   R…   R’   Rd   RW  (   Rr   Rc  R±   t   include0t   eqct   eqvt   eqbt   eqat   eqtt   sdictR  Rt   t   targetsRß   t   pkgst   pkeyRq   t   ict   ivt   ibt   itt   iaRz  (    (   RQ   s,   lib/python2.7/site-packages/conda/resolve.pyt   generate_version_metricsÄ  sX    	7"(



	c   
      C` sC  t  | t ƒ s t ‚ i  } xO t | ƒ D]A \ } } | |  j k r( t d „  |  j | ƒ Dƒ ƒ | | <q( q( Wt ræ d | k ræ xd t | ƒ D]S \ } } |  j j | ƒ } t	 | d ƒ rŒ | j
 t j k rŒ | | j d ƒ qŒ qŒ Wn  t | ƒ } | j ƒ  } g  | D]! } | | k r| j | ƒ ^ q}	 |	 j | j ƒ  ƒ |	 S(   Nc         s` s   |  ] } | j  Vq d  S(   N(   Rt   (   RF   RP   (    (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>  s    u   condau   noarch(   R‹   t   dictR^  R   R]   R0   R”   R   R“   RW   RK  R'   t   pythonR¤   R    R,  RÓ   R°   R¥   (
   Rr   t	   must_havet   digraphR  RQ   t   distt   recordt   sorted_keysR[   R˜   (    (    s,   lib/python2.7/site-packages/conda/resolve.pyt   dependency_sort  s    *!.c   	      C` sÕ   t  j d ƒ | s d  g  f Si  } g  } xJ | D]B } | | |  j | ƒ <| j t d | j | j | j f ƒ ƒ q0 Wt	 t
 d „  | Dƒ ƒ t d |  j ƒ} | j ƒ  } | j | | ƒ } | j | ƒ } t | ƒ S(   Nu1   Checking if the current environment is consistentu   %s %s %sc         s` s   |  ] } | | f Vq d  S(   N(    (   RF   RQ   (    (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>4  s    R^   (   R<   R>   R…   RW  Rg   R)   Rt   Rº   t   buildRU   R   R?   R^   Rr  Rs  R1   t   bool(	   Rr   t	   installedt   sat_name_mapR±   RQ   t   r2Rc  t   constraintsR7   (    (    s,   lib/python2.7/site-packages/conda/resolve.pyt   environment_is_consistent+  s    
-(c         ` sð   | s
 d St  | ƒ t  | ƒ B} |  j | ƒ } t ‡  ‡ f d † } | r€ t | t d |  j ƒ‰ ˆ j ƒ  ‰  | | t ƒ } n d  } | r• d } nW t j	 ræ t |  j
 t d |  j ƒ‰ ˆ j ƒ  ‰  t t | d | d | ƒƒ } n d  } | S(   Nc         ` s"   ˆ j  ˆ  |  ƒ } ˆ  j | | ƒ S(   N(   Rs  R1   (   R±   t   add_ifRž  (   Rc  R  (    s,   lib/python2.7/site-packages/conda/resolve.pyt   mysatB  s    R^   R1   R/  (    (    (   R0   R  R‚   RU   R?   R^   Rr  R…   R   RÌ   R]   Rz   R   (   Rr   R±   R/  t	   all_specst   reduced_indexR¡  R7   t   final_unsat_specs(    (   Rc  R  s,   lib/python2.7/site-packages/conda/resolve.pyt   get_conflicting_specs:  s&    		c         ` s˜  t  j d ƒ | s d  g  f Si  ‰ g  } xJ | D]B } | ˆ ˆ j | ƒ <| j t d | j | j | j f ƒ ƒ q0 Wd „  t	 ˆ ƒ Dƒ } d „  | Dƒ } d | k rd | k r| | d } d | j
 k rg  | j
 D] } | d k rÛ | ^ qÛ }	 |	 | _
 qn  t | t d ˆ j ƒ}
 |
 j ƒ  ‰  |
 j ˆ  | ƒ } ˆ  j | ƒ } d  } } | sd| ru‡ ‡ f d †  ‰ t ƒ  } |
 j ˆ  | ƒ } ˆ  j | ˆ  j ƒ  ƒ \ } } | j ‡ f d	 †  ‡  f d
 †  | Dƒ Dƒ ƒ x$ | D] } ˆ t | ƒ j | ƒ qãWt | ƒ t ˆ ƒ k  ru| } g  t ˆ ƒ D]" \ } } | d | k r.| ^ q.} t  j d d j | ƒ ƒ qun  | rŽt  j d | ƒ n  | | f S(   Nu1   Checking if the current environment is consistentu   %s %s %sc         S` s   i  |  ] } | | “ q S(    (    (   RF   RQ   (    (    s,   lib/python2.7/site-packages/conda/resolve.pys
   <dictcomp>b  s   	 c         S` s   i  |  ] } | | j  “ q S(    (   Rt   (   RF   Rß   (    (    s,   lib/python2.7/site-packages/conda/resolve.pys
   <dictcomp>c  s   	 u   pythonu   pipR^   c         ` sj   |  | k rf | j  |  ƒ xJ ˆ j j |  g  ƒ D]0 } x' ˆ j | ƒ D] } ˆ  | j | ƒ qE Wq/ Wn  d  S(   N(   R¤   Rh   R“   R”   Rt   (   Rt   R%  t   fnRP   (   t   get_Rr   (    s,   lib/python2.7/site-packages/conda/resolve.pyR§  p  s
    c         3` s?   |  ]5 } | r | d  d k r d | k r ˆ  | d Vq d S(   i    u   !u   @u   nameN(    (   RF   Rd  (   Rœ  (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>|  s   c         3` s   |  ] } ˆ  j  | ƒ Vq d  S(   N(   t
   from_index(   RF   R  (   Rc  (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>}  s    u   nameu-   Limiting solver to the following packages: %su   , u   Packages to be preserved: %s(   R<   R>   R…   RW  Rg   R)   Rt   Rº   R™  R   RN   RU   R?   R^   Rr  Rs  R1   R0   R}  t   minimizeR‡   R¸   R   RI   (   Rr   R›  R<  R±   RQ   t	   new_indext   name_mapt   python_precRC  t   new_depsR  Rž  R7   t   limitt   xtraR%  t   eq_optional_cRZ   RŒ   Rd  R  (    (   Rc  R§  Rœ  Rr   s,   lib/python2.7/site-packages/conda/resolve.pyt   bad_installedY  sJ    
-(
		c         ` s:   | r6 d „  | Dƒ ‰  | j  ‡  f d †  | Dƒ ƒ n  d  S(   Nc         S` s   i  |  ] } | | j  “ q S(    (   Rt   (   RF   RQ   (    (    s,   lib/python2.7/site-packages/conda/resolve.pys
   <dictcomp>  s   	 c         3` s$   |  ] } | j  ˆ  k r | Vq d  S(   N(   Rt   (   RF   Rß   (   R‡  (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>Ž  s    (   R°   (   Rr   R‰  t   preserve(    (   R‡  s,   lib/python2.7/site-packages/conda/resolve.pyt   restore_bad‹  s    c      
   C` s(  t  t t | ƒ ƒ } d „  | Dƒ } t j d ƒ |  j | | ƒ \ } } xË | D]Ã } | |  j k rl qQ n  | j | j | j	 } }	 }
 | j
 j } | | k sQ | d  k	 r¿ | | k r¿ qQ n  | rã t d | d | j ƒ  ƒ } n! t d | d |	 d |
 d | ƒ } | j d | ƒ qQ Wt | ƒ | f S(	   Nc         S` s   h  |  ] } | j  ’ q S(    (   Rt   (   RF   R  (    (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <setcomp>’  s   	 u*   Checking satisfiability of current installRt   R·   Rº   R™  RÅ   i    (   Re   t   mapR)   R<   R>   R±  R]   Rt   Rº   R™  RÅ   t   canonical_nameR…   R  R.  Rz   (   Rr   R±   R›  t   update_depsR%  R®  R²  RQ   Rt   Rº   R™  t   schannelRŒ   (    (    s,   lib/python2.7/site-packages/conda/resolve.pyt   install_specs  s"    $c         C` s_   |  j  | | p g  | ƒ \ } } g  } | rK |  j | d | d t ƒ} n  |  j | | ƒ | S(   Nt	   returnallt   _remove(   R¸  t   solveR‚   R³  (   Rr   R±   R›  R¶  R¹  R²  R‰  (    (    s,   lib/python2.7/site-packages/conda/resolve.pyt   install¨  s    !c         C` s5  g  } x^ t  t | ƒ D]M } | j ƒ  rJ | j t | d d d t ƒƒ q | j t | d t ƒƒ q Wt d „  | Dƒ ƒ } |  j | | ƒ \ } } g  } x | D]… }	 |	 j |	 j }
 } |
 | k rÍ q¢ q¢ | d  k	 ré | j |	 ƒ q¢ | j t d |
 d | rd | n d  d t d |	 j
 ƒ  ƒ ƒ q¢ W| | f S(   NRº   u   @R‘   c         s` s!   |  ] } | j  r | j  Vq d  S(   N(   Rt   (   RF   R  (    (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>¿  s    Rt   u   >=R·   (   R´  R)   R]  Rg   R?   R0   R±  Rt   Rº   R…   R  (   Rr   R±   R›  t   nspecsR  R%  R®  RZ   R²  RQ   Rg  t   ver(    (    s,   lib/python2.7/site-packages/conda/resolve.pyt   remove_specs°  s&    "c         C` sA   |  j  | | ƒ \ } } |  j | d t ƒ} |  j | | ƒ | S(   NRº  (   R¿  R»  R?   R³  (   Rr   R±   R›  R²  R‰  (    (    s,   lib/python2.7/site-packages/conda/resolve.pyt   removeÐ  s    c   ;      ` s;	  t  j t ƒ r> t d „  t | ƒ Dƒ ƒ } t  j d | ƒ n  | rq t | d t ƒ rq t d „  | Dƒ ƒ } n  t	 | ƒ } | sŠ t ƒ  St  j d ƒ t
 | ƒ } ˆ j | d t j ƒ}	 |	 s—t	 ƒ  }
 t	 ƒ  } xO | D]G } ˆ j | ƒ sÛ | j ˆ j k r| j | ƒ q"|
 j | ƒ qÛ qÛ W|
 r;t |
 ƒ ‚ n1 | rlt g  | D] } | g ^ qKd t ƒ‚ n  | rt i  ƒ ‚ q—ˆ j | | | ƒ n  t  j d ƒ t ‡  ‡ f d	 † } ‡  f d
 †  ‰ ‡  ‡ f d †  } t |	 t d ˆ j ƒ‰ ˆ j ƒ  ‰  | | t ƒ } | s>| r(t i  ƒ ‚ q>ˆ j | | | ƒ n  g  } g  } g  } t	 ˆ j ƒ } xÀ t | ƒ D]² \ } } | j | k rš| j | j ƒ n  | j sÎ| j s¸| | k r¾| n | j | ƒ qlt ˆ j | ƒ ƒ rlt | j d t d | j ƒ} | j | ƒ | j | ƒ qlqlW| j d „  | Dƒ ƒ t  j t ƒ rãt  j d t t  d „  | Dƒ ƒ ƒ ƒ t  j d t t  d „  | Dƒ ƒ ƒ ƒ t  j d t t  d „  | Dƒ ƒ ƒ ƒ t  j d t t  d „  | Dƒ ƒ ƒ ƒ n  t  j d ƒ | r3ˆ j! ˆ  | ƒ } ˆ  j" | | ƒ \ } } t  j d | ƒ n  t  j d ƒ ˆ j# ˆ  | ƒ \ } } } } } ˆ  j" | | ƒ \ } } ˆ  j" | | ƒ \ } } t  j d | | ƒ t  j d ƒ ˆ j$ ˆ  ƒ } ˆ  j" | | ƒ \ } }  t  j d |  ƒ ˆ j% ˆ  ƒ }! ˆ  j" |! | ƒ \ } }" t  j d |" ƒ t  j d ƒ ˆ  j" | | ƒ \ } }# t  j d  |# ƒ t  j d! ƒ ˆ  j" | | ƒ \ } }$ t  j d" |$ ƒ | sÙt  j d# ƒ ˆ j& ˆ  | ƒ }% ˆ  j" |% | ƒ \ } }& t  j d$ |& ƒ n  t  j d% ƒ ˆ j' ˆ  | ƒ }' ˆ  j" |' | ƒ \ } }( t  j d& |( ƒ t  j d' ƒ ˆ j# ˆ  | ƒ \ }) }* }+ }, }- ˆ  j" |) | ƒ \ } }. ˆ  j" |* | ƒ \ } }/ ˆ  j" |+ | ƒ \ } }0 ˆ  j" |, | ƒ \ } }1 t  j d( |. |/ |0 |1 ƒ t  j d) ƒ ˆ j( ˆ  | ƒ }) ˆ  j" |) | d* t ƒ\ } } t  j d+ | ƒ | | ƒ sX|- j) | ƒ ˆ  j" |- | ƒ \ } }2 t  j d, |2 ƒ n  t  j d- ƒ d. }3 g  }4 ˆ | ƒ }5 |4 j |5 ƒ x‹ t rt ‡  f d/ †  |5 Dƒ ƒ }6 ˆ  j* |6 f t ƒ } | d  k rÔPn  |3 d. 7}3 |3 d0 k rût  j d1 ƒ Pn  ˆ | ƒ }5 |4 j |5 ƒ qW|3 d. k rÎt, t- t	 |4 ƒ ƒ }7 t	 j. |7 Œ  }8 g  |7 D] }9 t  t	 |9 ƒ |8 ƒ ^ qO}: t j/ sÎt0 j1 d2 |3 d0 k r•d3 n |3 t d4 „  |: Dƒ ƒ |3 d0 k r½d5 n d6 f ƒ qÎn  ‡ f d7 †  t2 ˆ j3 ƒ Dƒ ‰ | r	t
 |4 ƒ d. k r	t4 ƒ  ‚ q	n  t  ‡ f d8 †  |4 d Dƒ d9 d: „  ƒS(;   Nc         s` s7   |  ]- \ } } t  d  | | | j | j f ƒ Vq d S(   u   %i: %s target=%s optional=%sN(   R   R·   R‘   (   RF   Rè   R  (    (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>Û  s   u   Solving for: %si    c         s` s   |  ] } t  | ƒ Vq d  S(   N(   R)   (   RF   RZ   (    (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>á  s    u2   Solve: Getting reduced index of compliant packagesR1  Rú   u!   Solve: determining satisfiabilityc         ` s"   ˆ j  ˆ  |  ƒ } ˆ  j | | ƒ S(   N(   Rs  R1   (   R±   R   Rž  (   Rc  R  (    s,   lib/python2.7/site-packages/conda/resolve.pyR¡    s    c         ` sI   g  ‡  f d †  |  Dƒ D]. } | r | d d k r d | k r | ^ q S(   Nc         3` s   |  ] } ˆ  j  | ƒ Vq d  S(   N(   R¨  (   RF   R  (   Rc  (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>  s    i    u   !u   @(    (   t   solt   q(   Rc  (    s,   lib/python2.7/site-packages/conda/resolve.pyt   clean  s    c         ` sN   ˆ |  ƒ } t  ‡  f d †  | Dƒ ƒ } ˆ  j | f d t ƒd k rJ t St S(   uz   Determine if the SAT problem has converged to a single solution.

            This is determined by testing for a SAT solution with the current
            clause set and a clause in which at least one of the packages in
            the current solution is excluded. If a solution exists the problem
            has not converged as multiple solutions still exist.
            c         3` s'   |  ] } ˆ  j  ˆ  j | ƒ ƒ Vq d  S(   N(   Rn  R\  (   RF   RÂ  (   Rc  (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>  s    t	   includeIfN(   Rz   R1   R‚   R…   R?   (   R7   t	   psolutiont   nclause(   Rc  RÃ  (    s,   lib/python2.7/site-packages/conda/resolve.pyt   is_converged  s
    R^   R‘   R·   c         s` s   |  ] } t  | ƒ Vq d  S(   N(   R)   (   RF   R  (    (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>5  s    u   Requested specs: %sc         s` s   |  ] } t  | ƒ Vq d  S(   N(   R   (   RF   R  (    (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>8  s    u   Optional specs: %sc         s` s   |  ] } t  | ƒ Vq d  S(   N(   R   (   RF   R  (    (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>9  s    u   All other specs: %sc         s` s   |  ] } t  | ƒ Vq d  S(   N(   R   (   RF   R  (    (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>:  s    u   missing specs: %sc         s` s   |  ] } t  | ƒ Vq d  S(   N(   R   (   RF   R  (    (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>;  s    u    Solve: minimize removed packagesu   Package removal metric: %du.   Solve: maximize versions of requested packagesu-   Initial package channel/version metric: %d/%du#   Solve: minimize track_feature countu   Track feature count: %du   Package misfeature count: %du3   Solve: maximize build numbers of requested packagesu    Initial package build metric: %du5   Solve: prefer arch over noarch for requested packagesu   Noarch metric: %du0   Solve: minimize number of optional installationsu#   Optional package install metric: %du,   Solve: minimize number of necessary upgradesu   Dependency update count: %duh   Solve: maximize versions and builds of indirect dependencies.  Prefer arch over noarch where equivalent.uD   Additional package channel/version/build/noarch metrics: %d/%d/%d/%du!   Solve: prune unnecessary packagest   trymaxu   Weak dependency count: %du   Timestamp metric: %du   Looking for alternate solutionsi   c         3` s'   |  ] } ˆ  j  ˆ  j | ƒ ƒ Vq d  S(   N(   Rn  R\  (   RF   RÂ  (   Rc  (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>  s    i
   u   Too many solutions; terminatinguP   
Warning: %s possible package resolutions (only showing differing packages):%s%su   >10c         s` s   |  ] } d  j  | ƒ Vq d S(   u   , N(   RI   (   RF   t   diff(    (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>¤  s    u   
  ... and othersu    c         ` s"   i  |  ] } | ˆ  j  | ƒ “ q S(    (   RW  (   RF   RQ   (   Rr   (    s,   lib/python2.7/site-packages/conda/resolve.pys
   <dictcomp>ª  s   	 c         3` s   |  ] } ˆ  | Vq d  S(   N(    (   RF   Rd  (   Rª  (    s,   lib/python2.7/site-packages/conda/resolve.pys	   <genexpr>µ  s    R[   c         S` s   |  j  S(   N(   Rt   (   RG   (    (    s,   lib/python2.7/site-packages/conda/resolve.pyR£   µ  s    (5   R<   R)  R   RK   RO  R>   R‹   R)   Rz   R0   R¸   R  R   RÌ   RM   Rt   Rh   R¤   R#   R$   R‚   RÑ   RU   R?   R^   Rr  RÀ  R‘   R·   Rg   R’   R°   Rp   R}  R©  R  Rt  R|  R~  Ru  R€  R‡   R1   R…   Re   R´  Rô   RÍ   t	   stdoutlogt   infoR   R]   R3   (;   Rr   R±   R¹  Rº  R¼   R½   t   should_retry_solvet   dlistt   len0R£  t   not_found_packagest   wrong_version_packagesR  RC  R¡  RÇ  R7   t   specot   specrt   specat   specmR{   R°  t   obj7t   eq_req_ct   eq_req_vt   eq_req_bt   eq_req_at   eq_req_tt   obj3at   obj3t   eq_feature_countt   obj1t   eq_feature_metrict   obj2t   obj4t
   noarch_objt   eq_optional_installt   obj49t   eq_ut   obj50t   eq_ct   eq_vt   eq_bt   eq_at   eq_tt   obj5at   obj5t   obj6t   obj6at   obj6tt   nsolt
   psolutionsRÅ  RÆ  t   psols2t   commonRÁ  t   diffs(    (   Rc  RÃ  Rª  R  Rr   s,   lib/python2.7/site-packages/conda/resolve.pyR»  Ö  s   			+	+&&&)!	!		
)	#(    N(5   t   __name__t
   __module__R‚   Ry   R~   R…   RŠ   R?   R™   R¢   R®   R¶   RÄ   RÊ   RÑ   Rã   Rê   RÏ   RÈ   R   R  Rò   R   R  R  RM   R”   Rq   t   staticmethodR_   RU  RW  RY  R`  Rr  Rs  Rt  Ru  R|  R}  R~  R€  R  R˜  RŸ  R¥  R±  R³  R¸  R¼  R¿  RÀ  R»  (    (    (    s,   lib/python2.7/site-packages/conda/resolve.pyRU   ^   s`   (	&'		,	&	s		Î				
	(							C	$			2		 	(L   t
   __future__R    R   R   R   t   collectionsR   R   R   R,  t   loggingR   R   R	   t   _vendor.auxlib.collectionR
   t   _vendor.auxlib.decoratorsR   R   t   _vendor.toolzR   R   t   base.constantsR   R   R   t   base.contextR   t   common.compatR   R   R   R   R   R   t	   common.ioR   t   common.logicR   R   R   R   R   R   t   common.toposortR    t
   exceptionsR!   R"   R#   R$   t   models.channelR%   R&   t   models.enumsR'   R(   t   models.match_specR)   t   models.recordsR*   t   models.versionR+   Rö  R<   RÊ  t   Unsatisfiablet   PYCOSATt   PYCRYPTOSATt   PYSATR:   RD   RK   RT   t   objectRU   (    (    (    s,   lib/python2.7/site-packages/conda/resolve.pyt   <module>   s@   ".."	