
    $TXg                      d Z ddlmZ ddlZddl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 dd	lm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 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+ ddl,m-Z-m.Z. ddl/m0Z0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7 	 ddl8m8Z8  ee<      Z= ed      Z>e+Z?e*Z*ej                  e!ej                  e"ej                  e#iZCe	ej                  fd       ZDd ZE G d d      ZFy# e9$ r	 ddl:m;Z8 Y iw xY w)zuLow-level SAT solver wrapper/interface for the classic solver.

See conda.core.solver.Solver for the high-level API.
    )annotationsN)defaultdictdeque)cache)DEBUG	getLogger)tqdm   memoizemethod)MAX_CHANNEL_PRIORITYChannelPrioritySatSolverChoice)context)on_win)dashlisttime_recorder)groupby_to_dict)TRUEClausesPycoSatSolverPyCryptoSatSolverPySatSolverminimal_unsatisfiable_subset)toposort)CondaDependencyErrorInvalidSpecResolvePackageNotFoundUnsatisfiableError)ChannelMultiChannel)
NoarchTypePackageType	MatchSpec)PackageRecord)VersionOrder)
frozendict)FrozenOrderedDictzconda.stdoutlogc                   d }t         |    }	  ||       t        j                  d|        |S # t        $ r8}t        j	                  d|        t        j                  d|d       Y d }~nd }~ww xY wt         j                         D ]Q  }	  ||       t        j                  d|        |c S # t        $ r!}t        j                  d| |       Y d }~Kd }~ww xY w t        d	      )
Nc                   t        |       }|j                         |j                         h} |j                  |j                  g|  t	        |j                               }|j                  |      st        d| d|       y )N
sat_solverzWrong SAT solution: z. Required: )r   new_varRequireAndsetsatissubsetRuntimeError)r-   crequiredsolutions       -lib/python3.12/site-packages/conda/resolve.pytry_out_solverz+_get_sat_solver_cls.<locals>.try_out_solverB   st    z*IIK-		!%%#(#quuw<  *!5hZ|H:VWW +    z Using SAT solver interface '%s'.z0Could not run SAT solver through interface '%s'.zSAT interface error due to: %sT)exc_infoz*Falling back to SAT solver interface '%s'.z7Attempted SAT interface '%s' but unavailable due to: %sz@Cannot run solver. No functioning SAT implementations available.)_sat_solverslogdebug	Exceptionwarningvaluesr   )sat_solver_choicer9   r-   es       r8   _get_sat_solver_clsrD   @   s    X /0J	z" 			46GH  F>@Q	
 			2A	EE	F #))+

	:& IIBDUV  	III! 	 , J s,   . 	A/.A**A/
B,,	C5CCc                    |j                   dk(  rC| j                  |      }d}|r,|d   j                  D ]  }|t        |      j                   z  } |S |j                   }|S )zSorting 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.
       r   )
strictnessfind_matchesdependsr%   )resolve_objmsprecvaluedeps        r8   exactness_and_number_of_depsrO   f   se     
}}''+Aw3222 ' L Lr:   c                      e Zd Zd/dZ fdZd0dZd1dZd1dZd1dZd Z	d Z
d	 Zd0d
Z	 d2dZd Zd0dZd Zed        Zd Z ee       	 d3d       Zd Zd4dZd5dZd6dZed        Zd7dZed        Zed        Zd Z ee       d        Z d Z!d Z"d Z#d  Z$d! Z%d" Z&d# Z'd7d$Z(	 	 	 	 d8d%Z)d& Z*d' Z+d( Z,d) Z-d1d*Z.d9d+Z/d, Z0d- Z1 ee       	 	 	 	 	 d:	 	 	 	 	 d;d.       Z2 xZ3S )<Resolvec                r   || _         || _        |r| j                  |      ni | _        t        j
                  | _        t        j                  | _        t        d |j                               }t        t              }|D ]v  }||   D cg c]  }|j                  s| }}|rt        j                  d|       |||<   d ||   D        }	|	D ]'  }|j                   D ]  }
||
   j#                  |        ) x || _        || _        i | _        i | _        i | _        i | _        i | _        |D ch c]-  }t3        |d      r|j4                  t6        j8                  k(  r|/ c}| _        | j$                  j=                         D ]*  \  }}t?        || j@                  d      | j$                  |<   , y c c}w c c}w )Nc                    | j                   S Nnamexs    r8   <lambda>z"Resolve.__init__.<locals>.<lambda>   s    166r:   z(restricting to unmanageable packages: %sc              3  :   K   | ]  }|j                   s|  y wrT   track_features.0rL   s     r8   	<genexpr>z#Resolve.__init__.<locals>.<genexpr>   s     M9L9Ls   package_typeTkeyreverse)!indexchannels_make_channel_priorities_channel_priorities_mapr   channel_priority_channel_prioritysolver_ignore_timestamps_solver_ignore_timestampsgroupbyrA   r   listis_unmanageabler=   r>   r\   appendgroupstrackers_cached_find_matchesms_depends__reduced_index_cache_pool_cache_strict_channel_cachehasattrr`   r#   VIRTUAL_SYSTEM_system_precsitemssortedversion_key)selfrd   	processedre   rp   rq   rV   rL   unmanageable_precstf_precsfeature_name_groups                r8   __init__zResolve.__init__x   s   
 7?D))(3R 	$ ")!9!9)0)I)I&)5<<>:t$D39$<!X<44CWCW$<!X!		DdK1tMMH $($7$7L\*11$7 %8 !   $&!$&!%'" 
>*NNk&@&@@	 
  ;;,,.KD% &u$2B2BD QDKK /? "Y"
s   	F/F/-2F4c                ,   t         |          t        t        | j                              z  t        t        | j                              z  t        | j                        z  t        | j                        z  t        t        d | j                  j                         D                    z  t        t        d | j                  j                         D                    z  t        t        d | j                  j                         D                    z  S )Nc              3  <   K   | ]  \  }}|t        |      f  y wrT   tupler^   kvs      r8   r_   z#Resolve.__hash__.<locals>.<genexpr>   s     L8K1q%(m8K   c              3  <   K   | ]  \  }}|t        |      f  y wrT   r   r   s      r8   r_   z#Resolve.__hash__.<locals>.<genexpr>   s     N8M1q%(m8Mr   c              3  <   K   | ]  \  }}|t        |      f  y wrT   r   r   s      r8   r_   z#Resolve.__hash__.<locals>.<genexpr>   s     Q8P1q%(m8Pr   )super__hash__hash	frozensetre   r(   rg   ri   rk   rp   rz   rq   rs   )r}   	__class__s    r8   r   zResolve.__hash__   s    G9T]]+,-:d::;<= 4))*+ 4112	3
 :L8I8I8KLLMN :N8K8K8MNNOP :Q8H8H8N8N8PQQRS		
r:   c                D   |i }n|j                          |j                  | j                  j                         D ci c]  }t	        j
                  |      d c}       |r3|j                  |D ci c]  }t	        j
                  |      d c}       |S c c}w c c}w )NFT)clearupdaterq   keysr&   feature)r}   featuresfilterrV   s       r8   default_filterzResolve.default_filter   s    >FLLN<@MM<N<N<PQ<PD]""4(%/<PQ	
 MMR=006<RS	 R Ss   B2Bc                H     fd} fd fd ||      }|S )a  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                D    t        | t              r |       S  |       S rT   
isinstancer%   )specv_fkey_v_ms_s    r8   v_zResolve.valid.<locals>.v_   s    ",T9"=5;P74=Pr:   c                n    xr | j                   xs# t        fdj                  |       D              S )Nc              3  .   K   | ]  } |        y wrT    )r^   fkeyr   s     r8   r_   z/Resolve.valid.<locals>.v_ms_.<locals>.<genexpr>   s     G1Fwt}1F   optionalanyrH   )rK   r   r}   r   s    r8   r   zResolve.valid.<locals>.v_ms_   s6      KKHG1B1B21FGGr:   c                    j                  |       }|2d| <   	 j                  |       }t        fd|D              x}| <   |S |S # t        $ r dx}| <   Y |S w xY w)NTc              3  .   K   | ]  } |        y wrT   r   )r^   rK   r   s     r8   r_   z1Resolve.valid.<locals>.v_fkey_.<locals>.<genexpr>   s     ,I2U2Yr   F)get
ms_dependsallr   )rL   valrI   r   r}   r   s      r8   r   zResolve.valid.<locals>.v_fkey_   s}    **T"C{#tJ"ood3G *-,I,I)IIC&,J3J	 # /)..C&, J	/s   A	 	AAr   )r}   spec_or_precr   r   r   resultr   r   s   ` ``  @@r8   validzResolve.valid   s$    "	Q	
	 L!r:   c                V     fd}t          fd        fd ||      S )Nc                D    t        | t              r |       S  |       S rT   r   )_spec_or_precis_valid_precis_valid_specs    r8   is_validz Resolve.valid2.<locals>.is_valid   s#    -3$]33$]33r:   c                n    xr | j                   xs# t        fdj                  |       D              S )Nc              3  .   K   | ]  } |        y wrT   r   )r^   _precr   s     r8   r_   z8Resolve.valid2.<locals>.is_valid_spec.<locals>.<genexpr>   s     R9Q}U+9Qr   r   )_specr   r   r}   s    r8   r   z%Resolve.valid2.<locals>.is_valid_spec   s8      #NNSR9J9J59QRRr:   c                    j                  |       }|7d| <   	 t        fdj                  |       D              }|rdndx}| <   | S | S # t        $ r dx}| <   Y | S w xY w)NFc              3  .   K   | ]  } |        y wrT   r   )r^   rK   r   s     r8   r_   z8Resolve.valid2.<locals>.is_valid_prec.<locals>.<genexpr>   s      )4Ibb)4Ir   zinvalid depends specszinvalid dep specs)r   r   r   r   )rL   r   has_valid_deps
filter_outr   r}   s      r8   r   z%Resolve.valid2.<locals>.is_valid_prec   s    ..&C{#(
4 	%( )48OOD4I) &N "05LC*T* 7Ns7N # A-@@C*T*
 7NAs   #A A$#A$r   )r}   r   r   r   r   r   r   s   ` `` @@r8   valid2zResolve.valid2   s.    	4 
	 
		  %%r:   c                <      fd |t                     S )a  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    K   | j                   |v ry |j                  | j                          j                  |       ry j                  |       }d}t	               }|D ]A  }j                  |      D ]+  } 
||      D ]  }d}| f|z     |j                  |       - C |s>t        d |      }|j                         D ]  }	| ft        j                  |	      z     y y w)NFTc                    | j                   S rT   rU   rW   s    r8   rY   z9Resolve.invalid_chains.<locals>.chains_.<locals>.<lambda>.  s    AFFr:   )
rV   addr   rH   r1   r   rl   rA   r%   union)r   namesprecsfoundconflict_depsrL   m2rX   conflict_groupsr   chains_r   r   r}   s             r8   r   z'Resolve.invalid_chains.<locals>.chains_  s     yyE!IIdii zz$1%%d+EEEM//$/B$R/ $#gk) 0 &))"- 0  ")*:M"J,335E'IOOE$::: 6 s   C#C&)r1   )r}   r   r   r   r   s   ` ``@r8   invalid_chainszResolve.invalid_chains  s     	;, tSU##r:   c                    g }g }t               }|D ]8  }|j                  d      }|r|j                  |       (|j                  |       : |j	                   fd|D               |rt        |      t        |      |fS )aO  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.
        r\   c              3  ^   K   | ]$  }|j                   sj                  |      s|f & y wrT   )r   rH   )r^   r   r}   s     r8   r_   z'Resolve.verify_specs.<locals>.<genexpr>H  s/      
$MM$*;*;D*A G$   *-)r1   get_exact_valuer   ro   extendr   r   )r}   specsnon_tf_specsbad_depsfeature_namesrK   _feature_namess   `      r8   verify_specszResolve.verify_specs4  s     B//0@AN$$^4##B'  	 
$
 	

 (22\"M11r:   c                V   t               t               t               t               d}|xs g D ch c]  }t        |       }}|xs g D ch c]  }t        |       }}|D ]i  t              dkD  r؉d   j                  dk(  rt	        d |D              st	        d |D              r|D cg c]  }|d   j                  dk(  s|d    }}|sp|d   }t        | j                  |            t        | j                  d               z  r|d   j                  t        d   d   g      t        t        |d             f       d   j                  j                  d	      rj| j                  D cg c]!  }|j                  d   j                  k(  s |# }	}|	r|	d   j                  nd
}
|d   j                  t              |
f       rd   |v rd}|D ]T  }|j                  d   j                  k(  s |d   j                  t              t        t        |d             f       d}V |r|d   j                  t              t        t        d   d             f       t              dkD  st	        fd|D              s4|d   j                  t              t        t        d   d             f       l |d   r;|d   D cg c])  }|d   j                  d      st        |d         dkD  r|+ c}|d<   |S c c}w c c}w c c}w c c}w c c}w )N)pythonrequest_conflict_with_historydirectvirtual_packager
   r   c              3  :   K   | ]  }|j                   d k(    yw)r   NrU   r^   r   s     r8   r_   z-Resolve._classify_bad_deps.<locals>.<genexpr>a  s     E1AFFh.s   c              3  L   K   | ]  }|d    j                   dk(  s|d      yw)r   r   NrU   r   s     r8   r_   z-Resolve._classify_bad_deps.<locals>.<genexpr>b  s$     Hh!A$))x2G!hs   $
$r   )target__znot availabler   Fr   Tr   c              3  T   K   | ]  }t        |      d k\  xr |d   d   k(   ! yw)r
   r   Nlen)r^   r5   chains     r8   r_   z-Resolve._classify_bad_deps.<locals>.<genexpr>  s2      )>FCFaK4AaDE!H$44h   %(zpython )r1   r%   r   rV   r   rH   r   r   str
startswithry   version)r}   r   specs_to_addhistory_specsstrict_channel_priorityclassesr   python_first_specspython_specr   virtual_package_versionmatchr   r   s                @r8   _classify_bad_depszResolve._classify_bad_depsQ  s%    e-0Ue"u	
 /;.@b.@A.@	!.@A/</B/BC/B!1/BCE E
Q"INNh.EEEHhHH4<%VHq!		X@UadH"%V%"4Q"7KD--k:;d//b	:;<  )-- %uQxr&; < #Ik$$G H r**40&*&8&8U&8AFFeBinn<T1&8U*1GAJ&& ( )*..e>U/VWq\))DyyE"INN2 ?@DD"5\3yd/K+LM !% * H%))us9U1Xd+K'LM u:>S )>F) & H%))us9U1Xd+K'LMY ` 8 !*!*AQ4??9-QqTQ *!GH
 s BC &W V8!s)   LL/LL9!L!L!.L&c                    | j                  |      }|s|S | j                  |j                        t        fd|D              S )Nc              3  V   K   | ]   }|j                   j                  k(  s| " y wrT   channelrV   )r^   fsole_source_channel_names     r8   r_   z3Resolve.find_matches_with_strict.<locals>.<genexpr>  s"     V1199>>=U+UQs   )))rH   _get_strict_channelrV   r   )r}   rK   r   matchesr   s       @r8   find_matches_with_strictz Resolve.find_matches_with_strict  sA    ##B'&N#'#;#;BGG#D VVVVr:   c                    t         j                  r/t         j                  st        d       | j	                  |||      }ni }t         j
                  t        j                  k(  }t        ||      )Nzk
Found conflicts! Looking for incompatible packages.
This can take several minutes.  Press CTRL-C to abort.)strict)	r   unsatisfiable_hintsjsonprintbuild_conflict_maprh   r   STRICTr   )r}   r   r   r   r   r   s         r8   find_conflictszResolve.find_conflicts  s`    &&<<M ..ulMRHH")":":o>T>T"T 2IJJr:   c                   g }|j                  |g       g }g }|rb|j                  d      d   }||v r|j                  |       |j                  |k(  rt        |      dk(  r|j                         t        |d         t              k(  r,t	        j
                  d   |d   d   f      d   }	|	|d   d<   n|j                         t        |      |k(  xr t        fd|D              }
t        |      dk(  s|
r|S |}dd D ]  }||   }	 |j                  |i       D cg c]  }| }}||D ]>  }t        |      |k  st              }|j                  |       |j                  |       @ |rb|S c c}w )z1Return shorted path from root_spec to target_namer   r   c              3  L   K   | ]  }t        |      t              k7    y wrT   r   )r^   r   paths     r8   r_   z=Resolve.breadth_first_search_for_dep_graph.<locals>.<genexpr>  s#      M16ACFc$i's   !$)	ro   poprV   r   r%   r   r   r   rm   )r}   	root_spectarget_name	dep_graphnum_targetsqueuevisitedtarget_pathsnode	last_specfound_all_targets	sub_graphpr   childrenadjnew_pathr  s                    @r8   "breadth_first_search_for_dep_graphz*Resolve.breadth_first_search_for_dep_graph  s    i[!99Q<D8DwNN4 yyK'|$) ''-|B'(CI5 )b<;KB;O0P QRS TI+4L$R( ''-$'$5$D % M16M J! u:?&7''!I!BZ%aL	  #,==r#:;#:a#:H;|${2#DzHOOC(LL*	  5 >  <s   )	Fc                   |i i}t               }|gg}|r|j                  d      }|}|D ]  }||   }	 |d   }| j                  |      }	|	D ]  }
t        |
j                        dkD  s|
j                  D ]{  }t        |      }|j                  |i i       |j                  |       t        |      }|j                  |       t        |      t        j                  k  sk|j                  |       }  |r||fS )Nr   r   )r1   r  rH   r   rI   r%   r   r   rm   ro   r   unsatisfiable_hints_check_depth)r}   r   r  all_depsr  r  r  r  parent_noder   matinew_noder  s                 r8   build_graph_of_depszResolve.build_graph_of_deps  s    2J	599Q<D!I%aL	 r(K''4Gs{{#a' [[#,Q<!(((B8 X.#': 1x=G,S,SS!LL2 )  " (""r:   c           
     H
   t         j                  t        j                  k(  }t	        |      |xs
 t	               z  }|D ch c]   }|j
                  j                  d      r|" }}t        |      dk(  rN| j                  t        t        |                  }t        |      dk(  rt	        | j                  |d               }|j                  | j                  D ch c]  }|j                          c}       |D ]  }| j                  |f        i }i }	t!        t        |      ddt         j"                        5 }
|D ]  }|
j%                  d|        |
j                          | j'                  |      \  }}|j                  |       |	j)                  |j
                        r|	|j
                     j+                  |       n|g|	|j
                  <   |D ]L  }|	j)                  |j
                        r|	|j
                     j+                  |       =|g|	|j
                  <   N  	 ddd       g }i }|	j-                         D ]x  \  }t/        |      }t        |      dkD  r-|j)                  |      g||<   7||   j+                         Lj                  d      s^t1        fd	|D              ssg||<   z t!        t        |      d
dt         j"                        5 }
|j-                         D ]  \  }}|
j%                  dj3                  dj5                  d |D                           |
j                          |D cg c]  }| }}g }d}t/        |      j7                  |D ch c]  }|j
                   c}      }|r|j+                  |D cg c]  }|j
                  |v s| c}       |d   d   }|D ]S  }||d   d   k7  s|j
                  }|	|   j9                  |      }| j;                  ||||      }|j=                  |       U $|D ]k  }|	|   j9                  |d         }| j;                  |d   |||      }|j=                  |       t        |      dk(  st        |      t        |      k  sh|}|}m |dd D ];  }|	|   j9                  |      }| j;                  ||||      }|j=                  |       =  	 ddd       | j?                  ||||      }|S c c}w c c}w # 1 sw Y   xY wc c}w c c}w c c}w # 1 sw Y   ExY w)aU  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.
        r   r
   r   zBuilding graph of depsF)totaldescleavedisablez
Examining Nc              3  B   K   | ]  }|j                   k7  s|  y wrT   rU   )r^   sr   s     r8   r_   z-Resolve.build_conflict_map.<locals>.<genexpr>6  s     +Lu!!Aus   zDetermining conflictszExamining conflict for {} c              3  4   K   | ]  }|j                     y wrT   rU   r   s     r8   r_   z-Resolve.build_conflict_map.<locals>.<genexpr>A  s     ?VPU1PU   r   ) r   rh   r   r  r1   rV   r   r   rH   nextiterr   r   ry   to_match_spec_get_package_poolr	   r  set_descriptionr$  r   ro   rz   r   r   formatjoinintersectioncountr  r   r   ) r}   r   r   r   r   r   r   r   r  dep_listtdep_graph_for_specall_deps_for_specrN   chainsconflicting_pkgs_pkgsr   set_vrootsnodeslrootscurrent_shortest_chainshortest_noderequested_spec_unsatrootsearch_nodenum_occurancesr5   r  r   r   r   s                                   @r8   r  zResolve.build_conflict_map  s   < #*":":o>T>T"TE
l3ce4"'J%$tyy/C/CD/I%Ju:?''T%[(9:G7|q DOOGAJ781C1CD1CAaoo'1CDED""D7+  	e*)LL	

 !!Jtf"56
8<8P8PQU8V5"$5  !34<<		*TYY'..t4+/&HTYY',C||CHH- *11$7.2V*	 - 
*  "NN$DAqaLE5zA~(,,U3;453)%0)%077:d#+Lu+L(L01s%e, % e*(LL	

  5 ; ; =u!!/66sxx?VPU?V7VW 
%*+U!U+)+& $'0'7'D'D%*+UQVVU+($ (MMe"VeqvvAU7U1e"VW$*2JqMM %6!9Q</*7*<*<K-5k-B-H-H-NN $ G G $k9n!A #MM!, !& !&)1$)=)=fQi)H $ G G"1ItY! e,56!;s5zC2M @ 6;2,0M !& !'qr
)1-)@)F)Ft)L CC -N a( !+E !>
^ **L-1H
 A K
 E
 
\ , , #W%
 
sj    S2"S2S7>C,S<(A"T
	T	T1TTT0T4TB2TAT<T	TT!c                v   d }	 | j                   |   }|S # t        $ r || j                  v r| j                  |   D ch c]  }|j                  j                   nc c}w }}|D ci c]  }| j
                  j                  |d      |! nc c}w }}t        |      d   }||   x}| j                   |<   Y |S w xY w)Nr
   r   )rv   KeyErrorrp   r   rV   rg   r   r{   )r}   package_namechannel_namerL   all_channel_namescnby_cphighest_prioritys           r8   r   zResolve._get_strict_channelm  s    	55lCL    	t{{*26++l2K%2K$DLL%%2K%! %
 0/ 0044R;R?/  $*%=$  KP$K t99,G 	s&    (B8AB8&$B
*B87B8c                @    |sy|j                   |d   j                   k  S )zIPrevent introduction of matchspecs that broaden our selection of choices.Fr   )rG   )r}   rK   specs_by_names      r8   _broaderzResolve._broader  s$     }}}Q/::::r:   c                   t        |      }|| j                  v r| j                  |   }|S | j                  |      }t        d |      }|j	                         D ci c]  \  }}|t        |       }}}|| j                  |<   |S c c}}w )Nc                    | j                   S rT   rU   rW   s    r8   rY   z+Resolve._get_package_pool.<locals>.<lambda>  s    QVVr:   )r   ru   get_reduced_indexrl   rz   r1   )r}   r   poolgrouped_poolr   r   s         r8   r2  zResolve._get_package_pool  s    % D$$$##E*D 	 ))%0D"#3T:L*6*<*<*>?*>$!QAs1vI*>D?&*DU# @s   B)module_namec                b	    ! t         j                  t        j                  k(    t	        |      f}| j
                  v r j
                  |   S t        j                  t              r/t        j                  dt        t        d |D                            j                  |      \  }} j                  |      j                         D ci c]  \  }}||rdnd c}}t               d !t               |rt        t!        |       fdd      }t	        |      }i |D ]N  }j#                  |j$                  t                     t         j'                  |            z  |j$                  <   P   !fdt               }	t)        d	      D ]_  }
j+                          t-        |      }|s!|j/                         } |g      r|j1                  |       n|	j3                  |       |r?a |	r|ri S d
 |D        D ci c]  }|| c}i }|D ]/  }|j#                  |j$                  g       |gz   ||j$                  <   1 |D ]2  }t	         fd j'                  |      D              } r4|r2 j5                  |d   j$                        t	        fd|D              }j7                  d |D               |D ]  }t               }t9        j:                  |      }t         j=                  |            }|D ]a  }|j#                  |j$                  g       }||vr0|r|j>                  |d   j>                  k\  r|jA                  d|       |||j$                  <   c |s|jC                         }|j3                  |       fd j'                  |      D        D ]  } jE                  |      s r3 j5                  |j$                        |jF                  j$                  k(  sK||<   t         j=                  |            |z
  }|D ]^  }d|vrG jI                  |t	        |j#                  |j$                  d                  s|j3                  |       N|j3                  |       `  |r 5 tK               j
                  |<   S c c}}w c c}w )NzRetrieving packages for: %sc              3  2   K   | ]  }t        |        y wrT   r   r^   r+  s     r8   r_   z,Resolve.get_reduced_index.<locals>.<genexpr>  s     ?1A   Fzfeature not enabledc                <    t        |       | j                         fS rT   )rO   dist_str)rX   r}   s    r8   rY   z+Resolve.get_reduced_index.<locals>.<lambda>  s    ;D!DajjlSr:   Tra   c                   t        t        |             j                  }j                  j	                  |d      }|rNrL|vrHj                  |      }|D ]!  }|j                  j                  |k7  sd|<   # j                  |       dx}}|D ]  }j                  |d      r|dz  }j                  | |      rj	                  |      r||   vr	d |<   Nt               }j                  |      D ]D  }|j                  rt        fdj                  |      D              r4|j                  |       F |r+dj                  d	j!                  d
 |D                    |<   d|<   |dz  } ||k  }	|	rt"        j%                  d|||fz         t        d | D              r|	S |dk(  ry |	s|vrj                  |       t'        d fd|D              }
|
j)                  dd        t+        |
j-                         d       D ].  \  }}t/        |      |k\  s t        |            }|rd}	+|. y  |	S )Nr   z&removed due to strict channel priorityr   Fr
   z incompatible with required spec c              3  F   K   | ]  }j                  |d       s|  ywFN)r   )r^   recr   s     r8   r_   zBResolve.get_reduced_index.<locals>.filter_group.<locals>.<genexpr>  s'      7'<#->>#u#=  '<s   !zunsatisfiable dependencies {}r,  c              3  2   K   | ]  }t        |        y wrT   r[  r\  s     r8   r_   zBResolve.get_reduced_index.<locals>.filter_group.<locals>.<genexpr>  s     $M5LSV5Lr]  z%s: pruned from %d -> %dc              3  4   K   | ]  }|j                     y wrT   r   )r^   rK   s     r8   r_   zBResolve.get_reduced_index.<locals>.filter_group.<locals>.<genexpr>  s     022;;r.  c                    | j                   S rT   rU   )r+  s    r8   rY   zAResolve.get_reduced_index.<locals>.filter_group.<locals>.<lambda>  s    affr:   c              3     K   | ]:  }j                  |d       s&j                  |      D ]  }|j                  s|  < ywrb  )r   r   r   )r^   rL   dep_specr   r}   s      r8   r_   zBResolve.get_reduced_index.<locals>.filter_group.<locals>.<genexpr>  sH      $)D)~~dE:(,(=H'00	 ! )> !$)s   A A*c                ,    t        d | d   D              S )Nc              3  4   K   | ]  }|j                     y wrT   rf  r   s     r8   r_   zTResolve.get_reduced_index.<locals>.filter_group.<locals>.<lambda>.<locals>.<genexpr>  s     9Sd!**dr.  r
   r   rW   s    r8   rY   zAResolve.get_reduced_index.<locals>.filter_group.<locals>.<lambda>  s    c9SaPQd9S6Sr:   rb   T)r/  r0  rV   rp   r   r   r   r   
setdefault	match_anyr1   r   r   r   rH   r4  r5  r=   r>   rl   r  r{   rz   r   )_specsrV   r   r   rL   noldnnewunsatisfiable_dep_specsrK   reduced
_dep_specs	deps_namedepsrescp_filter_appliedexplicit_spec_package_poolfilter_groupr   r}   snamesr   top_level_specs                 r8   r|  z/Resolve.get_reduced_index.<locals>.filter_group  sh   V%**DKKOOD"-E 0TAR5R+/+C+CD+I(!D||((,DD+S
4( " "%%d+ OD4!,,T59AID NN648266t< (B4(HH ?~>NO #4( !.1e+"ood3!{{3 7'+'8'8'<7 4
 477; 4 /+J+Q+QHH$M5L$MM,
4( !',Jt$AID3 6 TkG		4dD7IIJ000 $f,

4 $$$)	
 sD)'-$$&,S(OIt 4yD(*3t95&*G [#'( Nr:      c              3  F   K   | ]  }t        j                  |        y wrT   )r&   r   )r^   rV   s     r8   r_   z,Resolve.get_reduced_index.<locals>.<genexpr>'  s     #UHDM$9$9$$?Hs   !c              3  N   K   | ]  }|vrj                  |      r|  y wrT   )r   )r^   rL   r   reduced_index2r}   s     r8   r_   z,Resolve.get_reduced_index.<locals>.<genexpr>-  s.      %<D~-$++dJ2O <s   "%r   c              3  T   K   | ]  }|j                   j                  k(  r| ! y wrT   r   )r^   rL   strict_channel_names     r8   r_   z,Resolve.get_reduced_index.<locals>.<genexpr>6  s,      ) 0||((,??  0r   c              3  $   K   | ]  }||f 
 y wrT   r   r]   s     r8   r_   z,Resolve.get_reduced_index.<locals>.<genexpr>;  s     !L;K44,;K   c              3  ,   K   | ]  }|vs|  y wrT   r   )r^   r   r  s     r8   r_   z,Resolve.get_reduced_index.<locals>.<genexpr>T  s      $#8aA^<S#8s   	r\   r   )&r   rh   r   r  r   rt   r=   isEnabledForr   r>   r   r{   r   r   rz   r1   rm   r   rV   rH   ranger   r   popleftro   r   r   r   copydeepcopyr   rG   insertr  r   r   rR  r(   )"r}   explicit_specssort_by_exactnessexit_on_conflict	cache_keyr   rL   r   r+  pruned_to_zeror   slistspecs_by_name_seedexplicit_specadd_these_precs2pkg
seen_specsrQ  	dep_specsrN   r   rK   dep_pkg	new_specsnew_msrz  r{  r|  r   r  r}  r  r   r~  s"   `                        @@@@@@@@@r8   rU  zResolve.get_reduced_index  sv    #*":":o>T>T"T+U>-BB	111,,Y77E"II-???@
 $(#4#4^#D  "00:@@B
B	c 3%$99B

 E $^$SN ~.%'"A1K1O1O2D%%a()2*&qvv.  
S	 S	t qALLN.)EMMO$LLO"&&q)   .I $VH#U
#U4D$J#U
  A);)?)?)Kqc)Qqvv&  +M$ % --m<%   '+;&*&>&>?OPQ?R?W?W&X##( ) 0) $ 
 !!!L;K!LL'
 !U
 $.@ A 45	$C)--chh;E%'!S^^uQx7J7J%JQ,.3M#((+ %   #BNN2&$#'#4#4R#8$  ${{7J?$  7 44W\\B&334 7>N73 ),DOOG,D(E
(RI*3 $46#A$--$*$)-*;*;FKK*L$MK" %.MM&$9 %/NN6$:# +4!$  # (# ,d $N3/=!!),w
B
s   R&
R,c                ,    t        fd|D              S )Nc              3  @   K   | ]  }|j                          y wrT   r   )r^   rK   rL   s     r8   r_   z$Resolve.match_any.<locals>.<genexpr>  s     0Cb288D>C   rm  )r}   mssrL   s     `r8   rp  zResolve.match_any  s    0C000r:   c                     j                   j                  d       }||S j                  d      }|r j                  j                  |d      }nej                  d      r:j                  d      }t        j
                  j                   fd|D              }n j                  j                         }t        fd|D              }| j                   <   |S )NrV   r   r\   c              3  V   K   | ]   }j                   j                  |d        " yw)r   N)rq   r   )r^   r   r}   s     r8   r_   z'Resolve.find_matches.<locals>.<genexpr>  s&      <HU!!,3s   &)c              3  F   K   | ]  }j                  |      s|  y wrT   r  )r^   r  r   s     r8   r_   z'Resolve.find_matches.<locals>.<genexpr>  s     @!$**Q-As   !!)
rr   r   r   rp   	itertoolsr   from_iterablerd   rA   r   )r}   r   ry  	spec_namecandidate_precsr   s   ``    r8   rH   zResolve.find_matches  s    ''++D$7?J((0	"kkooi<O!!"23 001ABM'oo;; <HU< O #jj//1O@@@*-!!$'
r:   c                    | j                   j                  |      }|S|j                  D cg c]  }t        |       }}|j	                  d |j
                  D               || j                   |<   |S c c}w )Nc              3  4   K   | ]  }t        |         yw)r[   Nr$   )r^   feats     r8   r_   z%Resolve.ms_depends.<locals>.<genexpr>  s     Q=4	66=r.  )rs   r   combined_dependsr%   r   r   )r}   rL   rx  ds       r8   r   zResolve.ms_depends  sn    ##D)<*.*?*?@*?QIaL*?D@KKQ4==QQ%)DT" As   A3c                   |j                   }| j                  j                  |j                  d      }|t        k  rdnd}t        |j                  dd            }|j                  dd      }|j                  d      }t        |j                  dk(         }	| j                  t        j                  k7  r	|| |||	g}
n||| ||	g}
| j                  r|
j                  |       |
S |
j                  |j                  dd      |f       |
S )	Nr
   r   r    build_numberbuildnoarch	timestamp)r   rg   r   rV   r   r'   intsubdirri   r   DISABLEDrk   ro   r   )r}   rL   vtyper   rh   r   version_comparatorr  build_stringr  vkeys              r8   r|   zResolve.version_key  s   ,,77;;LL!
 &(<<!)$((9b*ABxx2xx(dkkX-..!!_%=%==,,.@,PVWD-0@/@,PVWD))KK%  KK+q1<@Ar:   c                    i }t        t        j                  j                  d d | D        D                    D ],  \  }}|j                  }||v rt        |t        dz
        ||<   . |S )Nc              3  h   K   | ]*  }t        |t              rd  |j                  D        n|f , yw)c              3  2   K   | ]  }t        |        y wrT   r    )r^   ccs     r8   r_   z=Resolve._make_channel_priorities.<locals>.<genexpr>.<genexpr>  s     3{{r]  N)r   r!   	_channelsr^   r5   s     r8   r_   z3Resolve._make_channel_priorities.<locals>.<genexpr>  s;      * 8A a. 4q{{3T 8s   02c              3  2   K   | ]  }t        |        y wrT   r  r  s     r8   r_   z3Resolve._make_channel_priorities.<locals>.<genexpr>  s     7h'!*hr]  r
   )	enumerater  r   r  rV   minr   )re   priorities_mappriority_counterchnrK  s        r8   rf   z Resolve._make_channel_priorities  sz    %.OO)) * 8h7	* &
!c 88L~-+. "6":,N<(&
 r:   c                    t        |      }| j                  |      }|s|st        |fg      t        || j                        S )Nrn  )r%   rH   r   r{   r|   )r}   rK   emptyokr   s       r8   get_pkgszResolve.get_pkgs  sB    r]!!"%W(2%11e!1!122r:   c                    t        | t              r| j                         S t        | t              r!dt	        |       z   | j
                  rdz   S dz   S t               )Nz@s@?r  )r   r&   r_  r%   r   r   NotImplementedError)r   s    r8   to_sat_namezResolve.to_sat_name  sO     c=)<<>!Y'3s8#cllsCCCC%''r:   c                    d|  d| S )Nz@fm@@r   )prec_dist_strr  s     r8   to_feature_metric_idzResolve.to_feature_metric_id  s    m_AdV,,r:   c                F   t        |      }| j                  |      }|j                  |      }||S |j                         }|j	                  d      }t        d d |j	                  d      xs dD        D              }|r| j                  j                  |g       x}}	nc|rCt        |      dk(  sJ t        t        |            }
| j                  j                  |
g       x}}	n| j                  j                         x}}	d}|s!|D cg c]  }|j                  |      s| }	}t        |	      t        |      k(  rO|j                  rt         }n<|s:|rt        |      n
t        |      }|j                  | j#                  ||            }|w|	D cg c]  }| j                  |       }}|j                  r<|rt        |      n
t        |      }|j%                  d	| j                  |      z          |j'                  |      }|j)                  ||       |S c c}w c c}w )
NrV   c              3  $   K   | ]  }|r| 
 y wrT   r   )r^   _tfs     r8   r_   z)Resolve.push_MatchSpec.<locals>.<genexpr>  s      
X Xr  c              3  <   K   | ]  }|j                           y wrT   )strip)r^   r   s     r8   r_   z)Resolve.push_MatchSpec.<locals>.<genexpr>  s     X+Wa	+Wr   r\   r   r
   Fr[   !)r%   r  	from_name
_is_singler   r   rp   r   r   r/  r0  rq   rd   r   r   r   r   push_MatchSpecro   Anyname_var)r}   Cr   sat_namemsimplenmtftgrouplibsr   r   ms2rL   	sat_namess                  r8   r  zResolve.push_MatchSpec  s   ##D)KK!=O"!!&) 
X4+?+?@P+Q+WUW+WX
 
  KKOOB33FTr7a<<T"XA MM--a44FT JJOO--FTF%+@VTtzz$/?DVD@t9F#}}68ir2imKK 3 3As ;<9<@ADD))$/DIA}}68ir2im  t'7'7'<!<=i A	

1h A Bs   	H HHc           
     l   t        t        t        j                              }| j                  j                         D ]  \  }}|D cg c]  }| j                  |       }}|D ]  }|j                  |        |j                  | j                  t        |                  }|j                  |j                  ||j                  |      gz           | j                  j                         D ]  }|j                  | j                  |            }| j                  |      D ]K  }|j                  j!                  d      r|j                  |j"                  || j%                  ||             M  t&        j)                  t*              r$t&        j-                  d|j/                                |S c c}w )Nr,   r   z+gen_clauses returning with clause count: %d)r   rD   r   r-   rp   rz   r  r.   r%   r/   
ExactlyOneNotrd   rA   r   rV   r   Orr  r=   r  r   r>   get_clause_count)	r}   r  rV   r   rL   r  r  nkeyrK   s	            r8   gen_clauseszResolve.gen_clauses  sX   273E3EFG;;,,.KD%8=>T%%d+E>!		(# " 		$**9T?;<A IIallEQUU1XJ$67 / JJ%%'D55))$/0Dood+ww))$/IIaddD$*=*=a*DE , ( E"II=q?Q?Q?S / ?s   F1c                    |D cg c]  }| j                  ||      f }}t        j                  t              r$t        j	                  d|j                                |S c c}w )Nz9generate_spec_constraints returning with clause count: %d)r  r=   r  r   r>   r  )r}   r  r   rK   r   s        r8   generate_spec_constraintsz!Resolve.generate_spec_constraints%  s\    :?@%B4&&q"-/%@E"IIK""$  As   A c           	        | j                   j                         D ci c]  }| j                  |t        |            d! }}t        j                  t              r$t        j                  d|j                                |S c c}w )Nr[   r
   z6generate_feature_count returning with clause count: %d)	rq   r   r  r%   r=   r  r   r>   r  )r}   r  rV   r   s       r8   generate_feature_countzResolve.generate_feature_count.  s     **,
, 9D#ABAE, 	 
 E"IIH""$ 
s   $Bc                    |D ci c];  }|j                   s|j                  |j                         s,d|j                   z   d= c}S c c}w Nr  r
   )r   r  r}   r  r   rK   s       r8   generate_update_countzResolve.generate_update_count:  sE    ).
).2"))BII@VC"))OQ
 	
 
s   AAAc           	         i }| j                   j                         D ]  \  }}|D ci c]'  }| j                  |      t        |j                        ) }}t        j
                  |j                          j                  | j                        }|D ]t  }| j                  |t        |            }	|j                         D ]C  \  }
}||vs| j                  |
|      }|j                  |j                  |
|	      |       d||<   E v  |S c c}w )Nr[   r
   )rp   rz   r  r1   r   r   rA   r6  rq   r  r%   r  r  r0   )r}   r  eqrV   r   rL   
prec_featsactive_featsr  clause_id_for_featureprec_sat_namer   feature_metric_ids                r8   generate_feature_metriczResolve.generate_feature_metric?  s     ;;,,.KD%QVWQV$**40#dmm2DDQVJW99j&7&7&9:GGVL$(,(;(;y5)% 0:/?/?/A+M88+,0,E,E)4-) 

EE-1FG- 12,- 0B	 % /" 	! Xs   ,Dc                h    |D ci c]"  }d| j                  ||j                        z   d$ c}S c c}w r  )r  rV   r  s       r8   generate_removal_countzResolve.generate_removal_countY  s5    CHI5Rd))!RWW55q85IIIs   '/c                |    |D ci c],  }|j                   s| j                  ||j                        d. c}S c c}w Nr
   )r   r  rV   r  s       r8   generate_install_countzResolve.generate_install_count\  s6    =BRUrbkk##Arww/2URRRs   99c                N    |D ci c]  }| j                  ||      d c}S c c}w r  )r  )r}   r  missingr  s       r8   generate_package_countzResolve.generate_package_count_  s,    8?@"##Ar*A-@@@s   "c                   i }i }i }i }i }i }	|D ])  }
t        |
      }
|	j                  |
j                  g        + |	j                         D ]/  \  }}| j                  j                  |g       D cg c]  }| j                  |      |f }}d }|D ]  \  }|rt        fd|D              r|dx}x}x}x}}n|d   |d   k7  s|d   |d   k7  rdz  }dx}x}x}}n[|d   |d   k7  rdz  }dx}x}}nD|d   |d   k7  r
dz  }dx}}n/|d   |d   k7  rdz  }d}n| j                  s|d   |d   k7  rdz  }| j                        }s|r|||<   s|r|||<   s|r|||<   s|r|||<   s|r|||<   |} 2 |||||fS c c}w )Nc              3  (   K   | ]	  }|k(    y wrT   r   )r^   r9  rL   s     r8   r_   z3Resolve.generate_version_metrics.<locals>.<genexpr>  s     ">g419g   r   r
   r  rF         )
r%   ro  rV   rz   rp   r   r|   r   rk   r  )r}   r  r   include0eqceqveqbeqaeqtsdictr+  rV   targetsr  pkgspkeyr|   icivibitiar  rL   s                          @r8   generate_version_metricsz Resolve.generate_version_metricsb  s    A!AQVVR(  #[[]MD'6:kkoodB6OP6OT%%a(!,6ODPD &*!Ts">g">><-..B..b.2!WA.$q'[^2K!GB())B))b2!WA.!GB#$$B$b!WA.!GBKB!WA.!GBB77DG{ST~<U!GB $ 0 0 6)+C&)+C&)+C&)+C&)+C&"G &* +V Cc3&&U Qs   1Fc                   t        |t              sJ i }|j                         D ]@  \  }}|| j                  v s| j	                  |      D ch c]  }|j
                   c}||<   B t        rvd|v rr|j                         D ]_  \  }}| j                  j                        }t        |d      s.|j                  t        j                  k(  sL||   j                  d       a t        |      }|j                         }|D 	cg c]  }	|	|v s|j                  |	       }
}	|
j!                  |j#                                |
S c c}w c c}	w )Ncondar  )r   dictrz   rd   r   rV   r   r   rw   r  r"   r   r   r   r  r  r   rA   )r}   	must_havedigraphrJ  rL   rK   distrecordsorted_keysrb   r   s              r8   dependency_sortzResolve.dependency_sort  s)    )T***"+//"3L$tzz!;???4;P(Q;PR;P(Q% #4  g(&/oo&7"d-68,*BSBS1SL)--g6 '8
 w'NN$	 1<Psi?O)--$Pi&&()7 )R0 Qs   E	EEc           
        t         j                  d       |sd g fS i }g }|D ]V  }||| j                  |      <   |j                  t	        |j
                   d|j                   d|j                                X t        |D ci c]  }|| c}d| j                        }|j                         }|j                  ||      }|j                  |      }t        |      S c c}w )N1Checking if the current environment is consistentr,  Tre   )r=   r>   r  ro   r%   rV   r   r  rQ   re   r  r  r2   bool)	r}   	installedsat_name_mapr   rL   r2r  constraintsr7   s	            r8   environment_is_consistentz!Resolve.environment_is_consistent  s    		EF8OD37L))$/0LLdii[$,,q#MNO  Y7YTdDjY7VNN221e<55%H~	 8s   
C c                  	 |syt        |      t        |      z  }| j                  |      }d	fd	}|r2t        |d| j                        		j	                          ||d      }nd }|rd}|S t
        j                  rKt        | j                  d| j                        		j	                         t        t        |||            }|S d }|S )Nr   c                L    j                  |       }j                  ||      S rT   r  r2   r   add_ifr,  r  r+  s      r8   mysatz,Resolve.get_conflicting_specs.<locals>.mysat  &    66q%@K55f--r:   Tr'  )r2   r  F)
r1   rU  rQ   re   r  r   r  rd   r   r   )
r}   r   r  	all_specsreduced_indexr3  r7   final_unsat_specsr  r+  s
           @@r8   get_conflicting_specszResolve.get_conflicting_specs  s    J^!44	..y9	. t}}EB AY-HH " !  ((TDMMBB A %,u^! !  !%  r:   c           
         t         j                  d       |sd g fS i g }|D ]V  }| j                  |      <   |j                  t	        |j
                   d|j                   d|j                                X j                         D ci c]  }|| }}|D ci c]  }|j
                  | }}d|v r@d|vr<||d      }d|j                  v r&|j                  D 	cg c]
  }	|	dk7  s	|	 }
}	|
|_	        t        |d j                        }|j                         |j                  |      }j                  |      }d x}}|r|r fdt               }|j!                  |      }j#                  |j                               \  }}|j%                  fdfd	|D        D               |D ]  } t	        |      j
                  |         t'        |      t'              k  rP|}j)                         D cg c]  \  }}|d
   |vr| }}}t         j                  ddj+                  |             |rt         j                  d|       ||fS c c}w c c}w c c}	w c c}}w )Nr&  r,  r   pipTr'  c                    | |vr\|j                  |        j                  j                  | g       D ]+  }j                  |      D ]  } |j                  |        - y y rT   )r   rp   r   r   rV   )rV   r}  fnrK   get_r}   s       r8   r>  z#Resolve.bad_installed.<locals>.get_  sV    v%JJt$"kkoodB7"&//""5B &1 #6 8 &r:   c              3  J   K   | ]  }|r|d    dk7  rd|vr
|   d     yw)r   r  r  rV   Nr   )r^   r  r*  s     r8   r_   z(Resolve.bad_installed.<locals>.<genexpr>!  s8       CHs 2s(7J X&v. Cs    #c              3  @   K   | ]  }j                  |        y wrT   
from_indexr^   r+  r  s     r8   r_   z(Resolve.bad_installed.<locals>.<genexpr>#  s      C(Qa(r  rV   z-Limiting solver to the following packages: %s, zPackages to be preserved: %s)r=   r>   r  ro   r%   rV   r   r  rA   rI   rQ   re   r  r  r2   r1   r   minimizer   r   rz   r5  )r}   r)  r  r   rL   	new_indexr  name_mappython_precr  new_depsr+  r,  r7   limitxtrar}  eq_optional_cr   r   r  rc  r  r>  r*  s   `                     @@@r8   bad_installedzResolve.bad_installed  sp   		EF8OD37L))$/0LLdii[$,,q#MNO  -9,?,?,AB,ADT4Z,A	B'01y!AFFAIy1xE$9#HX$67K+++'2':':I':!a5jA':I&.#Yt}}=NN221e<55%42 UF55a?M**]AEEG<KHaMM  C( C  "Yt_))62 "6{S.. *6););)=)=#6{&0 )=  
 		CTYYuEU II4d;d{a C1
 J@s   
I!I!#
I&.I&I+c                    |r6|D ci c]  }|j                   | c}|j                  fd|D               y y c c}w )Nc              3  @   K   | ]  }|j                   vs|  y wrT   rU   )r^   r  r  s     r8   r_   z&Resolve.restore_bad.<locals>.<genexpr>:  s     C8aqvvU/B8s   )rV   r   )r}   r  preserverL   r  s       @r8   restore_badzResolve.restore_bad7  s<    156TYY_6EKKC8CC 6s   ;c                   t        t        t        |            }|D ch c]  }|j                   }}t        j                  d       | j                  ||      \  }}|D ]  }|| j                  vr|j                  |j                  |j                  }}
}	|j                  j                  }|	|v s||	|vrW|rt        |	|j                               }nt        |	|
||      }|j                  d|        t        |      |fS c c}w )Nz*Checking satisfiability of current install)rV   r   )rV   r   r  r   r   )rm   mapr%   rV   r=   r>   rM  rd   r   r  r   canonical_namer_  r  r   )r}   r   r)  update_depsr+  r}  rJ  rP  rL   rV   r   r  schannelr   s                 r8   install_specszResolve.install_specs<  s    SE*+"'(%Q!&&%(		>?,,Y>xD4::%#'99dllDJJ5'D||22Hv~!2t57H  d4==?C weX LLD!# $ U|X%%+ )s   Dc                    | j                  ||xs g |      \  }}g }|r| j                  ||d      }| j                  ||       |S )NF)	returnall_remove)rW  solverQ  )r}   r   r)  rU  rY  rP  r  s          r8   installzResolve.installU  sO    ,,UIO[Qx::ey%:HDx(r:   c           
     &   g }t        t        |      D ]L  }|j                         r|j                  t        |dd             1|j                  t        |d             N |D ch c]  }|j                  s|j                   }}| j                  ||      \  }}g }|D ]f  }	|	j                  |	j                  }}
|
|v r ||j                  |	       4|j                  t        |
|rd|z   nd d|	j                                      h ||fS c c}w )Nr  T)r   r   rf  z>=)rV   r   r   r   )rS  r%   r  ro   rV   rM  r   r_  )r}   r   r)  nspecsr+  r}  rJ  r   rP  rL   r  vers               r8   remove_specszResolve.remove_specs]  s    Y&A ||~i3FGiD9: ' #)3&QAFF!&&&3%%i8qDiiBV|"% .1s
t!%#}}	   x' 4s   &D8Dc                z    | j                  ||      \  }}| j                  |d      }| j                  ||       |S )NT)rZ  )r`  r[  rQ  )r}   r   r)  rP  r  s        r8   removezResolve.remove  s?    ++E9=xzz%z.x(r:   c           	     T  <=>? |r%t        |d   t              st        d |D              }t        |      }t        j                  t              r1t        d t        |      D              }t        j                  d|       |syt        j                  d       t        |      }| j                  |t        j                         }	|	st               }
t               }|D ]O  }| j                  |      r|j                  | j                   v r|j#                  |       ?|
j#                  |       Q |
rt%        |
      |rt'        |D cg c]  }|g c}d	      |rt'        i       | j)                  |||       t        j                  d
       d<<?fd	}<fd=<=fd}t+        |	d| j,                        ??j/                         < ||d      }|s |rt'        i       | j)                  |||       g }g }g }t        ?j                         }t        |      D ]  \  }}|j                  |v r|j1                  |j                         |j2                  s%|j4                  s||k\  r|n|j7                  |       `t9        ?j                  |            s{t        |j                  d|j4                        }|j7                  |       |j7                  |        |j;                  d |D               t        j                  t              rt        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                           t        j                  d       |r=?j?                  <|      }<jA                  ||      \  }}t        j                  d|       t        j                  d       ?jC                  <|      \  }}}}}<jA                  ||      \  }}<jA                  ||      \  }}t        j                  d||       t        j                  d       ?jE                  <      }<jA                  ||      \  }} t        j                  d|        ?jG                  <      }!<jA                  |!|      \  }}"t        j                  d |"       t        j                  d!       <jA                  ||      \  }}#t        j                  d"|#       t        j                  d#       <jA                  ||      \  }}$t        j                  d$|$       |sRt        j                  d%       ?jI                  <|      }%<jA                  |%|      \  }}&t        j                  d&|&       t        j                  d'       ?jK                  <|      }'<jA                  |'|      \  }}(t        j                  d(|(       t        j                  d)       ?jC                  <|      \  })}*}+},}-<jA                  |)|      \  }}.<jA                  |*|      \  }}/<jA                  |+|      \  }}0<jA                  |,|      \  }}1t        j                  d*|.|/|0|1       t        j                  d+       ?jM                  <|      })<jA                  |)|d,      \  }}t        j                  d-|        ||      s<|-jO                  |       <jA                  |-|      \  }}2t        j                  d.|2       t        j                  d/       d0}3g }4 =|      }5|4j7                  |5       	 t        <fd1|5D              }6<jQ                  |6fd      }|n:|3d0z  }3|3d2kD  rt        j                  d3       n =|      }5|4j7                  |5       d|3d0kD  rtS        tU        t        |4            }7t        jV                  |7 }8|7D 9cg c]  }9t=        t        |9      |8z
         }:}9t        jX                  sDtZ        j]                  d4j_                  |3d2kD  rd5n|3t        d6 |:D              |3d2kD  rd7nd8             | j`                  jc                         D ;ci c]  };| je                  |;      |; c};>|rt        |4      d0kD  r
tg               t=        >fd9|4d   D        d: ;      S c c}w c c}9w c c};w )=Nr   c              3  2   K   | ]  }t        |        y wrT   r$   r   s     r8   r_   z Resolve.solve.<locals>.<genexpr>  s     61)A,r]  c              3  n   K   | ]-  \  }}t        d |||j                  |j                  fz         / yw)z%i: %s target=%s optional=%sN)r   r   r   )r^   r"  r+  s      r8   r_   z Resolve.solve.<locals>.<genexpr>  s8      ,DAq 2aAHHajj5QQR,s   35zSolving for: %sr   z2Solve: Getting reduced index of compliant packages)r  F)r<  z!Solve: determining satisfiabilityc                L    j                  |       }j                  ||      S rT   r0  r1  s      r8   r3  zResolve.solve.<locals>.mysat  r4  r:   c                \    fd| D        D cg c]  }|r|d   dk7  rd|vr| c}S c c}w )Nc              3  @   K   | ]  }j                  |        y wrT   rA  rC  s     r8   r_   z/Resolve.solve.<locals>.clean.<locals>.<genexpr>  s     73a!,,q/3r  r   r  r  r   )solqr  s     r8   cleanzResolve.solve.<locals>.clean  sB     8377A1A 7  s   )c                h     |       }t        fd|D              }j                  |fd      yy)ay  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  ^   K   | ]$  }j                  j                  |             & y wrT   r  r  r^   rj  r  s     r8   r_   z6Resolve.solve.<locals>.is_converged.<locals>.<genexpr>  #     E9aAEE!++a.19r   F)	includeIfT)r   r2   )r7   	psolutionnclauser  rk  s      r8   is_convergedz#Resolve.solve.<locals>.is_converged  s9     hIE9EEGuugZ5u19r:   Tr'  )r   r   c              3  2   K   | ]  }t        |        y wrT   r$   r\  s     r8   r_   z Resolve.solve.<locals>.<genexpr>  s     15aYq\5r]  zRequested specs: %sc              3  2   K   | ]  }t        |        y wrT   r[  r\  s     r8   r_   z Resolve.solve.<locals>.<genexpr>       <SUSVUr]  zOptional specs: %sc              3  2   K   | ]  }t        |        y wrT   r[  r\  s     r8   r_   z Resolve.solve.<locals>.<genexpr>  s     ;REqCFEr]  zAll other specs: %sc              3  2   K   | ]  }t        |        y wrT   r[  r\  s     r8   r_   z Resolve.solve.<locals>.<genexpr>  rw  r]  zmissing specs: %sc              3  2   K   | ]  }t        |        y wrT   r[  r\  s     r8   r_   z Resolve.solve.<locals>.<genexpr>  s     :Q5a3q65r]  z Solve: minimize removed packageszPackage removal metric: %dz.Solve: maximize versions of requested packagesz-Initial package channel/version metric: %d/%dz#Solve: minimize track_feature countzTrack feature count: %dzPackage misfeature count: %dz3Solve: maximize build numbers of requested packagesz Initial package build metric: %dz5Solve: prefer arch over noarch for requested packageszNoarch metric: %dz0Solve: minimize number of optional installationsz#Optional package install metric: %dz,Solve: minimize number of necessary upgradeszDependency update count: %dzhSolve: maximize versions and builds of indirect dependencies.  Prefer arch over noarch where equivalent.zDAdditional package channel/version/build/noarch metrics: %d/%d/%d/%dz!Solve: prune unnecessary packages)trymaxzWeak dependency count: %dzTimestamp metric: %dzLooking for alternate solutionsr
   c              3  ^   K   | ]$  }j                  j                  |             & y wrT   rn  ro  s     r8   r_   z Resolve.solve.<locals>.<genexpr>W  rp  r   
   zToo many solutions; terminatingzP
Warning: {} possible package resolutions (only showing differing packages):{}{}z>10c              3  >   K   | ]  }d j                  |        yw)rD  N)r5  )r^   diffs     r8   r_   z Resolve.solve.<locals>.<genexpr>k  s      CUT4Us   z
  ... and othersr  c              3  (   K   | ]	  }|     y wrT   r   )r^   r  rF  s     r8   r_   z Resolve.solve.<locals>.<genexpr>  s     ?XYx r	  c                    | j                   S rT   rU   rW   s    r8   rY   zResolve.solve.<locals>.<lambda>  s    qvvr:   rn  r5  )4r   r%   r   r1   r=   r  r   r   r  r>   r   rU  r   r  rH   rV   rp   r   r   r   r  rQ   re   r  rb  r   r   ro   r   r   r{   r   rE  r  r  r  r  r  r  r   r2   rm   rS  r6  r  	stdoutloginfor4  rd   rA   r  r4   )@r}   r   rY  rZ  r   r   should_retry_solvedlistlen0r7  not_found_packageswrong_version_packagesr+  r  r3  rt  r7   specospecrspecaspecmr   rL  obj7eq_req_ceq_req_veq_req_beq_req_aeq_req_tobj3aobj3eq_feature_countobj1eq_feature_metricobj2obj4
noarch_objeq_optional_installobj49eq_uobj50eq_ceq_veq_beq_aeq_tobj5aobj5obj6obj6aobj6tnsol
psolutionsrr  rs  psols2commonri  diffsrL   r  rk  rF  r+  s@                                                               @@@@r8   r[  zResolve.solve  s    E!Hi8666EE
E" %e, E II'/ 			FG5z..(C(C$C / 
  "%%(U"((+vv,.2215*..q1  ",-?@@'("89"8QaS"89%  " ),,##E<G 			56	.
		 ]D4==ANN%!(,,##E<GBIIe$DAqvvQVV$::((a4iUBB1ER__Q'(afftAHHEQQ % 	1511E"II+Xf<SU<S6S-TUII*HV;RE;R5R,STII+Xf<SU<S6S-TUII)8F:Q5:Q4Q+RS 			4555a?MZZx@NHdII2D9 			BC;=;V;Vu<
8(Hh **Xx8%Hh7$		A5$O 			7844Q7$4h?$		+T2 66q9$5x@$		0$7 			GHHh7$		4d; 			IJ zz(H=*		%z2 IIHI"$";";Au"Ejj)<hGOHeII;UC 			@A''51**T84%		/7 			8	
 (*'B'B1e'L$dD$**T84%D(3$D(3$**T84%		R	
 			56((E2D(4@$		-t4H%KK!jjx8OHeII,e4		34
(O	)$E9EEGuugZ.HAIDby		;<hIi(  !8#c:./F%%v.F:@A&3VCHv-.&EA<<==CV!%  CU CC04r	,r> ?Cjj>O>O>QR>QdT%%d+T1>QR	:""n$ ?A?EU
 	
S :` B Ss   
d;d d%)Fr   )NN)T)r
   )TF)r   r%   returnztuple[PackageRecord])rL   r&   r  zlist[MatchSpec]rT   r5  )r  zdict[str, PackageRecord]r  list[PackageRecord])NTF)FFNNF)r   rm   rY  r(  r  r  )4__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r  r  r$  r  r   r   rR  r2  r   rU  rp  rH   r   r|   staticmethodrf   r  r  r  r  r  r  r  r  r  r   r  r  r  r$  r-  r9  rM  rQ  rW  r\  r`  rb  r[  __classcell__)r   s   @r8   rQ   rQ   w   s   .R`

(T&B&$P2:BHWK >?'R#.BH* ; ;	 x(GLk )kZ1((  $3 ( ( - -(T x( )8


4JSAA'F$+$ 
$L !D9vD
&2" H x(   x
x
 x
 
x
 )x
r:   rQ   )G__doc__
__future__r   r  r  collectionsr   r   	functoolsr   loggingr   r   r	   auxlib.decoratorsr   base.constantsr   r   r   base.contextr   common.compatr   	common.ior   r   common.iteratorsr   rl   common.logicr   r   r   r   r   r   common.toposortr   
exceptionsr   r   r   r   models.channelr    r!   models.enumsr"   r#   models.match_specr%   models.recordsr&   models.versionr'   r(   ImportError_vendor.frozendictr)   r  r=   r  UnsatisfiablePYCOSATPYCRYPTOSATPYSATr<   rD   rO   rQ   r   r:   r8   <module>r     s   
 #   *  $  , R R ! ! . 8  &  2 1 ( ) (D% '(	 #/  ]!2; *9*A*A " "J"I
 I
Q  DCDs   C> >DD