
    sig                      S r SSKJr  SSKrSSKrSSKJrJr  SSKJ	r	  SSK
JrJr  SSKJr  SSKJr  SS	KJr  S
SKJr  S
SKJrJrJr  S
SKJr  S
SKJr  S
SKJrJr  S
SKJr   S
SK!J"r"J#r#J$r$J%r%J&r&J'r'  S
SK(J)r)  S
SK*J+r+J,r,J-r-J.r.  S
SK/J0r0  S
SK1J2r2J3r3  S
SK4J5r5  S
SK6J7r7  S
SK8J9r9  \(       a  SSK:J;r;  \" \<5      r=\" S5      r>\.r?\-r-\R                  \$\R                  \%\R                  \&0rC\	\R                  4S j5       rDS rE " S S5      rFg)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)TYPE_CHECKING)
frozendict)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)
NoarchTypePackageType	MatchSpec)PackageRecord)VersionOrder)Iterablezconda.stdoutlogc                   S n[         U    n U" U5        [        R                  SU 5        U$ ! [         a5  n[        R	                  SU 5        [        R                  SUSS9   S nAOS nAff = f[         R                  5        HS  n U" U5        [        R                  SU 5        Us  $ ! [         a"  n[        R                  SU U5         S nAMM  S nAff = f   [        S	5      e)
Nc                   [        U S9nUR                  5       UR                  5       1nUR                  " UR                  /UQ76   [	        UR                  5       5      nUR                  U5      (       d  [        SU SU 35      eg )N
sat_solverzWrong SAT solution: z. Required: )r   new_varRequireAndsetsatissubsetRuntimeError)r-   crequiredsolutions       -lib/python3.13/site-packages/conda/resolve.pytry_out_solver+_get_sat_solver_cls.<locals>.try_out_solverB   su    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_clsrE   @   s    X /0J	z" 			46GH  F>@Q	
 			2A	E	F #))+

	:& IIBDUV  	III! 	 , J s,   . 
A-+A((A-B**
C4CCc                    UR                   S:X  aJ  U R                  U5      nSnU(       a.  US   R                   H  nU[        U5      R                   -  nM     U$ UR                   nU$ )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_depsrP   f   se     
}}''+Aw3222 ' L Lr;   c                    ^  \ rS rSrS1S jrU 4S jrS2S jrS3S jrS3S jrS3S jr	S r
S	 rS
 rS2S jr S4S jrS rS2S jrS r\S 5       rS r\" \ S9 S5S j5       rS rS6S jrS7S jrS8S jr\S9S j5       rS:S jr\S 5       r\S 5       rS r \" \ S9S 5       r!S r"S r#S  r$S! r%S" r&S# r'S$ r(S:S% jr)    S;S& jr*S' r+S( r,S) r-S* r.S3S+ jr/S<S, jr0S- r1S. r2\" \ S9     S=     S>S/ jj5       r3S0r4U =r5$ )?Resolvew   c                   Xl         X0l        U(       a  U R                  U5      O0 U l        [        R
                  U l        [        R                  U l        [        S UR                  5       5      n[        [        5      nU H  nXF    Vs/ s H  owR                  (       d  M  UPM     nnU(       a  [        R                  SU5        XU'   S XF    5       n	U	 H)  nUR                    H  n
XZ   R#                  U5        M     M+     M     X@l        XPl        0 U l        0 U l        0 U l        0 U l        0 U l        U Vs1 s H8  n[3        US5      (       d  M  UR4                  [6        R8                  :X  d  M6  UiM:     snU l        U R$                  R=                  5        H&  u  pl[?        XR@                  SS9U R$                  U'   M(     g s  snf s  snf )Nc                    U R                   $ Nnamexs    r8   <lambda>"Resolve.__init__.<locals>.<lambda>   s    166r;   z(restricting to unmanageable packages: %sc              3  J   #    U  H  oR                   (       d  M  Uv   M     g 7frV   track_features.0rM   s     r8   	<genexpr>#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groupbyrB   r   listis_unmanageabler>   r?   r_   appendgroupstrackers_cached_find_matchesms_depends__reduced_index_cache_pool_cache_strict_channel_cachehasattrrd   r$   VIRTUAL_SYSTEM_system_precsitemssortedversion_key)selfrh   	processedri   rt   ru   rX   rM   unmanageable_precstf_precsfeature_name_groups                r8   __init__Resolve.__init__x   s   
 7?D))(3R 	$ ")!9!9)0)I)I&)5<<>:t$D39<!X<4CWCW$<!X!		DdK1tMMH $($7$7L*11$7 %8 !   $&!$&!%'" 
>*  NNk&@&@@	 
  ;;,,.KD &u2B2BD QDKK /? "Y"
s   G	#G	=GG6Gc                ,  > [         TU ]  5       [        [        U R                  5      5      -  [        [        U R                  5      5      -  [        U R                  5      -  [        U R                  5      -  [        [        S U R                  R                  5        5       5      5      -  [        [        S U R                  R                  5        5       5      5      -  [        [        S U R                  R                  5        5       5      5      -  $ )Nc              3  @   #    U  H  u  pU[        U5      4v   M     g 7frV   tuplera   kvs      r8   rb   #Resolve.__hash__.<locals>.<genexpr>   s     L8Kq%(m8K   c              3  @   #    U  H  u  pU[        U5      4v   M     g 7frV   r   r   s      r8   rb   r      s     N8Mq%(m8Mr   c              3  @   #    U  H  u  pU[        U5      4v   M     g 7frV   r   r   s      r8   rb   r      s     Q8Pq%(m8Pr   )super__hash__hash	frozensetri   r
   rk   rm   ro   rt   r~   ru   rw   )r   	__class__s    r8   r   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                `   Uc  0 nOUR                  5         UR                  U R                  R                  5        Vs0 s H  n[        R
                  " U5      S_M     sn5        U(       a7  UR                  U Vs0 s H  n[        R
                  " U5      S_M     sn5        U$ s  snf s  snf )NFT)clearupdateru   keysr'   feature)r   featuresfilterrX   s       r8   default_filter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&<!B+c                N   ^ ^^^^ UU4S jnUU U4S jmUU U4S jmU" U5      nU$ )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                N   > [        U [        5      (       a  T" U 5      $ T" U 5      $ rV   
isinstancer&   )specv_fkey_v_ms_s    r8   v_Resolve.valid.<locals>.v_   s"    ",T9"="=5;P74=Pr;   c                   > T=(       a    U R                   =(       d$    [        U4S jTR                  U 5       5       5      $ )Nc              3  4   >#    U  H  nT" U5      v   M     g 7frV    )ra   fkeyr   s     r8   rb   /Resolve.valid.<locals>.v_ms_.<locals>.<genexpr>   s     G1Fwt}}1F   optionalanyrI   )rL   r   r   r   s    r8   r   Resolve.valid.<locals>.v_ms_   s6      KKHG1B1B21FGGr;   c                   > TR                  U 5      nUc3  STU '    TR                  U 5      n[        U4S jU 5       5      =nTU '   U$ U$ ! [         a    S=nTU '    U$ f = f)NTc              3  4   >#    U  H  nT" U5      v   M     g 7frV   r   )ra   rL   r   s     r8   rb   1Resolve.valid.<locals>.v_fkey_.<locals>.<genexpr>   s     ,I2U2YYr   F)get
ms_dependsallr   )rM   valrJ   r   r   r   s      r8   r   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   validResolve.valid   s$    "	Q	
	 L!r;   c                \   ^ ^^^^ UU4S jn[         UUU 4S j5       mUUU 4S jmU" U5      $ )Nc                N   > [        U [        5      (       a  T" U 5      $ T" U 5      $ rV   r   )_spec_or_precis_valid_precis_valid_specs    r8   is_valid Resolve.valid2.<locals>.is_valid   s&    -33$]33$]33r;   c                   > T=(       a    U R                   =(       d$    [        U4S jTR                  U 5       5       5      $ )Nc              3  4   >#    U  H  nT" U5      v   M     g 7frV   r   )ra   _precr   s     r8   rb   8Resolve.valid2.<locals>.is_valid_spec.<locals>.<genexpr>   s     R9Q}U++9Qr   r   )_specr   r   r   s    r8   r   %Resolve.valid2.<locals>.is_valid_spec   s8      #NNSR9J9J59QRRr;   c                   > TR                  U 5      nUcA  STU '    [        U4S jTR                  U 5       5       5      nU(       a  SOS=nTU '   U(       + $ U(       + $ ! [         a    S=nTU '    U(       + $ f = f)NFc              3  4   >#    U  H  nT" U5      v   M     g 7frV   r   )ra   rL   r   s     r8   rb   8Resolve.valid2.<locals>.is_valid_prec.<locals>.<genexpr>   s      )4Ibb))4Ir   zinvalid depends specszinvalid dep specs)r   r   r   r   )rM   r   has_valid_deps
filter_outr   r   s      r8   r   %Resolve.valid2.<locals>.is_valid_prec   s    ..&C{#(
4 	%( )48OOD4I) &N "05LC*T* 7Ns7N # A-@@C*T*
 7NAs   $A A87A8r   )r   r   r   r   r   r   r   s   ` `` @@r8   valid2Resolve.valid2   s.    	4 
	 
		  %%r;   c                >   ^ ^^^ UUUU 4S jmT" U[        5       5      $ )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    >#    U R                   U;   a  g UR                  U R                   5        TR                  U TT5      (       a  g TR                  U 5      nSn[	        5       nU HE  nTR                  U5       H-  nT
" Xa5       H  nSnU 4U-   v   M     UR                  U5        M/     MG     U(       dA  [        S U5      nUR                  5        H  n	U 4[        R                  " U	5      -   v   M!     g g 7f)NFTc                    U R                   $ rV   rW   rY   s    r8   r[   9Resolve.invalid_chains.<locals>.chains_.<locals>.<lambda>.  s    AFFr;   )
rX   addr   rI   r1   r   rp   rB   r&   union)r   namesprecsfoundconflict_depsrM   m2rZ   conflict_groupsr   chains_r   r   r   s             r8   r   'Resolve.invalid_chains.<locals>.chains_  s     yyE!IIdii zz$11%%d+EEEM//$/B$R/ $#gk) 0 &))"- 0  ")*:M"J,335E'IOOE$::: 6 s   C7C:)r1   )r   r   r   r   r   s   ` ``@r8   invalid_chainsResolve.invalid_chains  s     	; 	;, tSU##r;   c                  ^  / n/ n[        5       nU H?  nUR                  S5      nU(       a  UR                  U5        M.  UR                  U5        MA     UR	                  U 4S jU 5       5        U(       a  [        U5      e[        U5      U4$ )a  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     >#    U  H3  nUR                   (       a  M  TR                  U5      (       a  M.  U4v   M5     g 7frV   )r   rI   )ra   r   r   s     r8   rb   'Resolve.verify_specs.<locals>.<genexpr>H  s6      
$MM *.*;*;D*A TG$s   >>
>)r1   get_exact_valuer   rs   extendr    r   )r   specsnon_tf_specsbad_depsfeature_namesrL   _feature_namess   `      r8   verify_specsResolve.verify_specs4  s     B//0@AN$$^4##B'  	 
$
 	

 (22\"M11r;   c                
  ^ [        5       [        5       [        5       [        5       S.nU=(       d    /  Vs1 s H  n[        U5      iM     nnU=(       d    /  Vs1 s H  n[        U5      iM     nnU GH  m[        T5      S:  a  TS   R                  S:X  a  [	        S U 5       5      (       d  [	        S U 5       5      (       a  U Vs/ s H  ofS   R                  S:X  d  M  US   PM     nnU(       a  US   n[        U R                  U5      5      [        U R                  TS   5      5      -  (       d;  US   R                  [        TS   TS   /5      [        [        US S95      45        GM  GM  GM  TS   R                  R                  S	5      (       at  U R                   Vs/ s H#  ofR                  TS   R                  :X  d  M!  UPM%     n	nU	(       a  U	S   R                  OS
n
US   R                  [        T5      U
45        GM  TS   U;   a  SnU HT  nUR                  TS   R                  :X  d  M"  US   R                  [        T5      [        [        US S95      45        SnMV     U(       d6  US   R                  [        T5      [        [        TS   S S95      45        GM@  GMC  [        T5      S:  d  [	        U4S jU 5       5      (       d  GMo  US   R                  [        T5      [        [        TS   S S95      45        GM     US   (       aF  US    Vs/ s H2  nUS   R                  S5      (       d  [        US   5      S:  d  M0  UPM4     snUS'   U$ s  snf s  snf s  snf s  snf s  snf )N)pythonrequest_conflict_with_historydirectvirtual_packager   r   c              3  >   #    U  H  oR                   S :H  v   M     g7f)r   NrW   ra   r   s     r8   rb   -Resolve._classify_bad_deps.<locals>.<genexpr>a  s     E1FFh.s   c              3  T   #    U  H  oS    R                   S:X  d  M  US    v   M      g7f)r   r   NrW   r   s     r8   rb   r   b  s#     HhA$))x2G!hs   ((r   )target__znot availabler   Fr   Tr   c              3  d   >#    U  H%  n[        U5      S :  =(       a    US   TS   :H  v   M'     g7f)r   r   Nlen)ra   r5   chains     r8   rb   r     s1      )>FCFaK4AaDE!H$44h   -0zpython )r1   r&   r  rX   r   rI   r   r   str
startswithr}   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_depsResolve._classify_bad_depsQ  sC    e-0Ue"u	
 /;.@b.@A.@	!.@A/</B/BC/B!1/BCE E
Q"INNh.EEEEHhHHH4<%VHq!		X@UdadH"%V%"4Q"7KD--k:;d//b	:;<  )-- %uQxr&; < #Ik$$G H< & r**400&*&8&8U&8FFeBinn<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/   M,M1M6%	M6+ M;M;+/N N c                   ^ U R                  U5      nU(       d  U$ U R                  UR                  5      m[        U4S jU 5       5      $ )Nc              3  ^   >#    U  H"  oR                   R                  T:X  d  M  Uv   M$     g 7frV   channelrX   )ra   fsole_source_channel_names     r8   rb   3Resolve.find_matches_with_strict.<locals>.<genexpr>  s!     V199>>=U+UQQs   -	-)rI   _get_strict_channelrX   r   )r   rL   r
  matchesr  s       @r8   find_matches_with_strict Resolve.find_matches_with_strict  sA    ##B'&N#'#;#;BGG#D VVVVr;   c                    [         R                  (       a3  [         R                  (       d  [        S5        U R	                  XU5      nO0 n[         R
                  [        R                  :H  n[        XES9e)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_maprl   r   STRICTr!   )r   r   r  r	  r   r
  s         r8   find_conflictsResolve.find_conflicts  s[    &&<<M ..uMRHH")":":o>T>T"T JJr;   c                V  ^ / nUR                  U/5        / n/ nU(       Ga  UR                  S5      mTS   nX;   a  M%  UR                  U5        UR                  U:X  a  [        U5      S:X  a  UR                  T5        [        US   5      [        T5      :X  a,  [        R
                  " TS   US   S   45      S   n	XS   S'   OUR                  T5        [        U5      U:H  =(       a    [        U4S jU 5       5      n
[        U5      S:X  d  U
(       a  U$ UnTSS  H  nX   nM	     UR                  U0 5       Vs/ s H  oPM     nnUc  GM9  U HA  n[        U5      U:  d  M  [        T5      nUR                  U5        UR                  U5        MC     U(       a  GM  U$ s  snf )z1Return shorted path from root_spec to target_namer   r   c              3  R   >#    U  H  n[        U5      [        T5      :g  v   M     g 7frV   r  )ra   r   paths     r8   rb   =Resolve.breadth_first_search_for_dep_graph.<locals>.<genexpr>  s"      M16ACFc$i's   $')	rs   poprX   r  r&   r   r   r   rq   )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_graph*Resolve.breadth_first_search_for_dep_graph  s    i[!99Q<D8DNN4 yyK'|$) ''-|B'(CI5 )b<;KB;O0P QRS TI+4$R( ''-$'$5$D % M16M J! u:?&7''!I!BZ%L	  #,==r#:;#:a#:H;|${2#DzHOOC(LL*	  5 e>  <s    F&c                   U0 0n[        5       nU//nU(       a  UR                  S5      nUnU H  nXg   nM	     US   nU R                  U5      n	U	 H  n
[        U
R                  5      S:  d  M  U
R                   H~  n[        U5      nUR                  U0 05        UR                  U5        [        U5      nUR                  U5        [        U5      [        R                  ::  d  Mm  UR                  U5        M     M     U(       a  M  X#4$ )Nr   r   )r1   r*  rI   r  rJ   r&   r   r   rq   rs   r   unsatisfiable_hints_check_depth)r   r   r-  all_depsr/  r(  r5  r6  parent_noder  matinew_noder9  s                 r8   build_graph_of_depsResolve.build_graph_of_deps  s    2J	599Q<D!I%L	 r(K''4Gs{{#a' [[#,Q<!(((B8 X.#': 1x=G,S,SS!LL2 )  e" ""r;   c           
     
  ^ [         R                  [        R                  :H  n[	        U5      U=(       d
    [	        5       -  nU Vs1 s H&  oUR
                  R                  S5      (       a  M$  UiM(     nn[        U5      S:X  aO  U R                  [        [        U5      5      5      n[        U5      S:X  a  [	        U R                  US   5      5      nUR                  U R                   Vs1 s H  owR                  5       iM     sn5        U H  nU R                  U45        M     0 n0 n	[!        [        U5      SS[         R"                  S9 n
U H  nU
R%                  SU 35        U
R                  5         U R'                  U5      u  pUR                  U5        U	R)                  UR
                  5      (       a  XR
                     R+                  U5        OU/XR
                  '   U HQ  nU	R)                  UR
                  5      (       a  XR
                     R+                  U5        MB  U/XR
                  '   MS     M     SSS5        / n0 nU	R-                  5        H  u  mn[/        U5      n[        U5      S:  a0  UR)                  U5      c  T/UU'   M:  UU   R+                  T5        MP  TR                  S5      (       d  Mh  [1        U4S	 jU 5       5      (       d  M  T/UU'   M     [!        [        U5      S
S[         R"                  S9 n
UR-                  5        GH  u  nnU
R%                  SR3                  SR5                  S U 5       5      5      5        U
R                  5         U Vs/ s H  owPM     nn/ nSn[/        U5      R7                  U Vs1 s H  owR
                  iM     sn5      nU(       a  UR+                  U Vs/ s H  owR
                  U;   d  M  UPM     sn5        US   S   nU HV  nUUS   S   :w  d  M  UR
                  nU	U   R9                  U5      nU R;                  UUUU5      nUR=                  U5        MX     GM7  U Ho  nU	U   R9                  US   5      nU R;                  US   UUU5      nUR=                  U5        [        U5      S:X  d  [        U5      [        U5      :  d  Mk  UnUnMq     USS  H<  nU	U   R9                  U5      nU R;                  UUUU5      nUR=                  U5        M>     GM     SSS5        U R?                  XX45      nU$ s  snf s  snf ! , (       d  f       GN= fs  snf s  snf s  snf ! , (       d  f       NM= f)a  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  J   >#    U  H  oR                   T:w  d  M  Uv   M     g 7frV   rW   )ra   sr   s     r8   rb   -Resolve.build_conflict_map.<locals>.<genexpr>6  s     +Lu!!AAu   #	#zDetermining conflictszExamining conflict for {} c              3  8   #    U  H  oR                   v   M     g 7frV   rW   r   s     r8   rb   rL  A  s     ?VPU1PU   r   ) r   rl   r   r#  r1   rX   r  r  rI   nextiterr   r   r}   to_match_spec_get_package_poolr   r   set_descriptionrC  r   rs   r~   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_specrO   chainsconflicting_pkgs_pkgsr   set_vrootsnodeslrootscurrent_shortest_chainshortest_noderequested_spec_unsatrootsearch_nodenum_occurancesr5   r2  r  r   r   s                                   @r8   r"  Resolve.build_conflict_map  s   < #*":":o>T>T"TE
l3ce4"'J%$yy/C/CD/I%Ju:?''T%[(9:G7|q DOOGAJ781C1CD1CAoo'1CDED""D7+  	e*)LL	

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

  5 ; ; =u!!/66sxx?VPU?V7VW 
%*+U!U+)+& $'0'7'D'D%*+UVVU+($ (MMe"VevvAU7U1e"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 !>
^ **-
 A K
 E
 
\ , , #W%
 
sj   #T4-T4,T9C6T>A"U3U>UU1UU%U+UB5UAU>
UU
U-c                   S n U R                   U   nU$ ! [         a    XR                  ;   a  U R                  U    Vs1 s H  o3R                  R                  iM     Os  snf nnU Vs0 s H   nU R
                  R                  US5      U_M"     Os  snf nn[        U5      S   nUU   =o R                   U'    U$ f = f)Nr   r   )rz   KeyErrorrt   r  rX   rk   r   r   )r   package_namechannel_namerM   all_channel_namescnby_cphighest_prioritys           r8   r  Resolve._get_strict_channelm  s    	55lCL    	{{*26++l2K%2K$LL%%2K%! %
 0/ 0044R;R?/  $*%=$  KP$K 99,G 	s&    *B>AB>*'B)B>=B>c                J    U(       d  gUR                   US   R                   :  $ )zIPrevent introduction of matchspecs that broaden our selection of choices.Fr   )rH   )r   rL   specs_by_names      r8   _broaderResolve._broader  s$     }}}Q/::::r;   c                   [        U5      nXR                  ;   a  U R                  U   nU$ U R                  U5      n[        S U5      nUR	                  5        VVs0 s H  u  pEU[        U5      _M     nnnX R                  U'   U$ s  snnf )Nc                    U R                   $ rV   rW   rY   s    r8   r[   +Resolve._get_package_pool.<locals>.<lambda>  s    QVVr;   )r   ry   get_reduced_indexrp   r~   r1   )r   r   poolgrouped_poolr   r   s         r8   rT  Resolve._get_package_pool  s    % $$$##E*D 	 ))%0D"#3T:L*6*<*<*>?*>$!As1vI*>D?&*U# @s   B)module_namec                H
  ^ ^^^^^^^^ ^! [         R                  [        R                  :H  m T [	        U5      4nUT R
                  ;   a  T R
                  U   $ [        R                  [        5      (       a/  [        R                  S[        [        S U 5       5      5      5        T R                  U5      u  pT R                  U5      R                  5        VVs0 s H  u  pgXg(       a  SOS_M     snnm[        5       mS m![        5       mU(       a  [        [!        U5      U 4S jSS9n[	        U5      n0 mU HO  nTR#                  UR$                  [        5       5      [        T R'                  U5      5      -  TUR$                  '   MQ     UUUUU UU U!4S jm[        5       n	[)        S	5       Hq  n
TR+                  5         [-        U5      nU(       d  M'  UR/                  5       nT" U/5      (       a  UR1                  U5        OU	R3                  U5        U(       a  MJ  Ms     U	(       a	  U(       a  0 $ S
 U 5        Vs0 s H  ofU_M     snm0 nU H/  nUR#                  UR$                  / 5      U/-   XR$                  '   M1     U GHr  n[	        UUU 4S jT R'                  U5       5       5      nT (       a:  U(       a3  T R5                  US   R$                  5      m[	        U4S jU 5       5      nTR7                  S U 5       5        U GH  n[        5       n[8        R:                  " U5      n[        T R=                  U5      5      nU Hj  nUR#                  UR$                  / 5      nUU;  a6  U(       a  UR>                  US   R>                  :  a  URA                  SU5        UUUR$                  '   Ml     U(       d  M  URC                  5       nUR3                  U5        U4S jT R'                  U5       5        H  nT RE                  UT5      (       d  M  T (       a5  T R5                  UR$                  5      URF                  R$                  :X  d  MX  UTU'   [        T R=                  U5      5      U-
  nU Hg  nSU;  aM  T RI                  U[	        UR#                  UR$                  S5      5      5      (       d  UR3                  U5        MV  UR3                  U5        Mi     M     U(       a  GM1  GM     GMu     [K        T5      mTT R
                  U'   T$ s  snnf s  snf )NzRetrieving packages for: %sc              3  8   #    U  H  n[        U5      v   M     g 7frV   r  ra   rK  s     r8   rb   ,Resolve.get_reduced_index.<locals>.<genexpr>  s     ?1ArP  Fzfeature not enabledc                <   > [        TU 5      U R                  5       4$ rV   )rP   dist_str)rZ   r   s    r8   r[   +Resolve.get_reduced_index.<locals>.<lambda>  s    ;D!DajjlSr;   Tre   c                2  > [        [        U 5      5      R                  nTR                  R	                  US5      nU(       aY  T(       aR  UT;  aL  TR                  U5      nU H$  nUR                  R                  U:w  d  M  STU'   M&     TR                  U5        S=pVU GH  nTR                  US5      (       a  M  US-  nTR                  X5      (       a  TR	                  U5      (       a  UTU   ;  a
  ST 3TU'   Ma  [        5       nTR                  U5       HR  nUR                  (       a  M  [        U4S jTR                  U5       5       5      (       a  MA  UR                  U5        MT     U(       a-  SR                  S	R!                  S
 U 5       5      5      TU'   GM  STU'   US-  nGM     Xe:  n	U	(       a  ["        R%                  SXU4-  5        [        S U  5       5      (       a  U	$ US:X  a  g U	(       d  UT;  a  TR                  U5        ['        S UU4S jU 5       5      n
U
R)                  SS 5        [+        U
R-                  5       S S9 H7  u  p[/        U5      U:  d  M  T" [        U5      5      nU(       a  Sn	M2  Ub  M7    g    U	$ )Nr   z&removed due to strict channel priorityr   Fr   z incompatible with required spec c              3  Z   >#    U  H   nTR                  US 5      (       a  M  Uv   M"     g7fFN)r   )ra   recr   s     r8   rb   BResolve.get_reduced_index.<locals>.filter_group.<locals>.<genexpr>  s(      7'<#->>#u#=  C'<s   +	+zunsatisfiable dependencies {}rN  c              3  8   #    U  H  n[        U5      v   M     g 7frV   r  r  s     r8   rb   r    s     $M5LSVV5LrP  z%s: pruned from %d -> %dc              3  8   #    U  H  oR                   v   M     g 7frV   r   )ra   rL   s     r8   rb   r    s     02;;rP  c                    U R                   $ rV   rW   )rK  s    r8   r[   AResolve.get_reduced_index.<locals>.filter_group.<locals>.<lambda>  s    affr;   c              3     >#    U  HL  nTR                  US 5      (       a  M  TR                  U5        H  nUR                  (       a  M  Uv   M     MN     g7fr  )r   r   r   )ra   rM   dep_specr   r   s      r8   rb   r    sP      $)D)~~dE: ! )-(=H'00	 ! )> !$)s   A$A
A*c                ,    [        S U S    5       5      $ )Nc              3  8   #    U  H  oR                   v   M     g 7frV   r  r   s     r8   rb   TResolve.get_reduced_index.<locals>.filter_group.<locals>.<lambda>.<locals>.<genexpr>  s     9Sd**drP  r   r   rY   s    r8   r[   r    s    c9SaPQd9S6Sr;   rf   T)rQ  rR  rX   rt   r   r  r  r   
setdefault	match_anyr1   r   r   r   rI   rV  rW  r>   r?   rp   r*  r   r~   r  )_specsrX   r   r  rM   noldnnewunsatisfiable_dep_specsrL   reduced
_dep_specs	deps_namedepsrescp_filter_appliedexplicit_spec_package_poolfilter_groupr   r   snamesr
  top_level_specs                 r8   r  /Resolve.get_reduced_index.<locals>.filter_group  sq   V%**DKKOOD"-E 0TAR5R+/+C+CD+I(!D||((,DD+S
4( " "%%d+ OD!,,T599AID NN688266t<< (B4(HH ?~>NO #4( !.1e+"ood3!{{{3 7'+'8'8'<7 4 4
 477; 4 /+J+Q+QHH$M5L$MM,
4( !',Jt$AID3 6 kG		4D7IIJ0000 $f,

4 $$$)	
 sD)'-$$&,S(OI 4yD(*3t95&*G [#'( Nr;      c              3  N   #    U  H  n[         R                  " U5      v   M     g 7frV   )r'   r   )ra   rX   s     r8   rb   r  '  s     #UHDM$9$9$$?$?Hs   #%c              3  j   >#    U  H(  nUT;  d  M  TR                  UT5      (       d  M$  Uv   M*     g 7frV   )r   )ra   rM   r   reduced_index2r   s     r8   rb   r  -  s5      %<D~- 26++dJ2O <s   
33	3r   c              3  `   >#    U  H#  nUR                   R                  T:X  d  M  Uv   M%     g 7frV   r  )ra   rM   strict_channel_names     r8   rb   r  6  s-      ) 0||((,?? D 0s   .	.c              3  (   #    U  H  oU4v   M
     g 7frV   r   r`   s     r8   rb   r  ;  s     !L;K4,;Ks   c              3  6   >#    U  H  oT;  d  M
  Uv   M     g 7frV   r   )ra   r   r  s     r8   rb   r  T  s      $#8a^<S#8s   		r_   r   )&r   rl   r   r#  r   rx   r>   isEnabledForr   r?   r   r   r   r   r~   r1   rq   r   rX   rI   ranger   r   popleftrs   r   r  r   copydeepcopyr   rH   insertr*  r   r  rv  r
   )"r   explicit_specssort_by_exactnessexit_on_conflict	cache_keyr   rM   r   rK  pruned_to_zeror   slistspecs_by_name_seedexplicit_specadd_these_precs2pkg
seen_specsru  	dep_specsrO   r   rL   dep_pkg	new_specsnew_msr  r  r  r   r  r  r  r
  r  s"   `                        @@@@@@@@@r8   r{  Resolve.get_reduced_index  s    #*":":o>T>T"T+U>-BB	111,,Y77E""II-???@
 $(#4#4^#D  "00:@@B
B	 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
#U4$J#U
  A);)?)?)Kqc)Qvv&  +M$ % --m<%   '+;&*&>&>?OPQ?R?W?W&X##( ) 0) $ 
 !!!L;K!LL'
 !U
 $.@ A 45	$C)--chh;E%'!S^^uQx7J7J%JQ,.3M#((+ %  i #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" K" %.MM&$9 %/NN6$:# +4!$  i# (# ,d $N3/=!!),w
B
s   T>Tc                .   ^ [        U4S jU 5       5      $ )Nc              3  D   >#    U  H  oR                  T5      v   M     g 7frV   r  )ra   rL   rM   s     r8   rb   $Resolve.match_any.<locals>.<genexpr>  s     0Cb88D>>Cs    r  )r   mssrM   s     `r8   r  Resolve.match_any  s    0C000r;   c                  ^ ^ T R                   R                  TS 5      nUb  U$ TR                  S5      nU(       a  T R                  R                  US5      nOkTR                  S5      (       a;  TR                  S5      n[        R
                  R                  U 4S jU 5       5      nOT R                  R                  5       n[        U4S jU 5       5      nUT R                   T'   U$ )NrX   r   r_   c              3  \   >#    U  H!  nTR                   R                  US 5      v   M#     g7f)r   N)ru   r   )ra   r   r   s     r8   rb   'Resolve.find_matches.<locals>.<genexpr>  s(      <HU!!,33s   ),c              3  X   >#    U  H  nTR                  U5      (       d  M  Uv   M!     g 7frV   r  )ra   r6  r   s     r8   rb   r    s     @!$**Q-AAs   *	*)
rv   r   r   rt   	itertoolsr  from_iterablerh   rB   r   )r   r   r  	spec_namecandidate_precsr   s   ``    r8   rI   Resolve.find_matches  s    ''++D$7?J((0	"kkooi<O!!"233 001ABM'oo;; <HU< O #jj//1O@@@*-!!$'
r;   c                    U R                   R                  U5      nUcU  UR                   Vs/ s H  n[        U5      PM     nnUR	                  S UR
                   5       5        X R                   U'   U$ s  snf )Nc              3  4   #    U  H  n[        US 9v   M     g7f)r^   Nr%   )ra   feats     r8   rb   %Resolve.ms_depends.<locals>.<genexpr>  s     Q=4	6=s   )rw   r   combined_dependsr&   r   r   )r   rM   r  ds       r8   r   Resolve.ms_depends  sl    ##D)<*.*?*?@*?QIaL*?D@KKQ4==QQ%)T" As   A6c                   UR                   nU R                  R                  UR                  S5      nU[        :  a  SOSn[        UR                  SS5      5      nUR                  SS5      nUR                  S5      n[        UR                  S:H  5      * n	U R                  [        R                  :w  a  XT* XgU	/n
OXVU* Xy/n
U R                  (       a  U
R                  U5        U
$ U
R                  UR                  SS5      U45        U
$ )	Nr   r   r   build_numberbuildnoarch	timestamp)r  rk   r   rX   r   r(   intsubdirrm   r   DISABLEDro   rs   r   )r   rM   vtyper  rl   r   version_comparatorr  build_stringr  vkeys              r8   r   Resolve.version_key  s    ,,77;;LL!
 &(<<!)$((9b*ABxx2xx(dkkX-..!!_%=%==,.@PVWD0@/@,WD))KK%  KK+q1<@Ar;   c                ~    0 n S U  5       n[        U5       H!  u  p4XA;   a  M  [        U[        S-
  5      X'   M#     U$ )Nc              3  r   #    U  H-  n[        U5      R                    H  o"R                  v   M     M/     g 7frV   )r"   ri   rX   )ra   rX   r  s      r8   rb   3Resolve._make_channel_priorities.<locals>.<genexpr>  s(      
%-TWT]=S=S'LL=SLXs   57r   )	enumerateminr   )ri   priorities_mapchannel_namespriority_counterrn  s        r8   rj    Resolve._make_channel_priorities  sZ    	 
%-
 /8.F*-+. "6":,N( /G r;   c                    [        U5      nU R                  U5      nU(       d  U(       d  [        U4/5      e[        X0R                  S9$ )Nr  )r&   rI   r    r   r   )r   rL   emptyokr   s       r8   get_pkgsResolve.get_pkgs  s@    r]!!"%W(2%11e!1!122r;   c                    [        U [        5      (       a  U R                  5       $ [        U [        5      (       a&  S[	        U 5      -   U R
                  (       a  S-   $ S-   $ [        5       e)Nz@s@?r  )r   r'   r  r&   r  r   NotImplementedError)r   s    r8   to_sat_nameResolve.to_sat_name  sU     c=))<<>!Y''3s8#cllsCCCC%''r;   c                    SU  SU 3$ )Nz@fm@@r   )prec_dist_strr  s     r8   to_feature_metric_idResolve.to_feature_metric_id  s    m_AdV,,r;   c                   [        U5      nU R                  U5      nUR                  U5      nUb  U$ UR                  5       nUR	                  S5      n[        S S UR	                  S5      =(       d    S 5        5       5      nU(       a  U R                  R                  U/ 5      =pOkU(       aG  [        U5      S:w  a  [        e[        [        U5      5      n
U R                  R                  U
/ 5      =pOU R                  R                  5       =pSnU(       d)  U Vs/ s H  oR                  U5      (       d  M  UPM     n	n[        U	5      [        U5      :X  aZ  UR                   (       a  ["        nOBU(       d;  U(       a	  [        US9O
[        U5      nUR                  U R%                  X5      5      nUc  U	 Vs/ s H  oR                  U5      PM     nnUR                   (       a>  U(       a	  [        US9O
[        U5      nUR'                  S	U R                  U5      -   5        UR)                  U5      nUR+                  XC5        U$ s  snf s  snf )
NrX   c              3  8   #    U  H  nU(       d  M  Uv   M     g 7frV   r   )ra   _tfs     r8   rb   )Resolve.push_MatchSpec.<locals>.<genexpr>  s      
X CXs   	c              3  @   #    U  H  oR                  5       v   M     g 7frV   )strip)ra   r  s     r8   rb   r    s     X+Wa		+Wr   r_   r   r   Fr^   !)r&   r  	from_name
_is_singler   r   rt   r   r  r4   rQ  rR  ru   rh   r   r  r   r   push_MatchSpecrs   Anyname_var)r   Cr   sat_namemsimplenmtftgrouplibsr   r   ms2rM   	sat_namess                  r8   r  Resolve.push_MatchSpec  s   ##D)KK!=O"!!&) 
X4+?+?@P+Q+WUW+WX
 
  KKOOB33FT2w!|""T"XA MM--a44FT JJOO--FF%+@VTzz$/?DVD@t9F#}}68ir2imKK 3 3A ;<9<@ADD))$/DIA}}68ir2im  t'7'7'<!<=i A	

1 A Bs    I=I>Ic           
        [        [        [        R                  5      S9nU R                  R                  5        H  u  p#U Vs/ s H  o@R                  U5      PM     nnU H  nUR                  U5        M     UR                  U R                  [        U5      5      5      nUR                  UR                  X1R                  U5      /-   5        M     U R                  R                  5        H  nUR                  U R                  U5      5      nU R                  U5       HP  nUR                  R!                  S5      (       a  M%  UR                  UR"                  XpR%                  X5      5        MR     M     [&        R)                  [*        5      (       a$  [&        R-                  SUR/                  5       5        U$ s  snf )Nr,   r   z+gen_clauses returning with clause count: %d)r   rE   r   r-   rt   r~   r  r.   r&   r/   
ExactlyOneNotrh   rB   r   rX   r  Orr  r>   r  r   r?   get_clause_count)	r   r  rX   r   rM   r  r  nkeyrL   s	            r8   gen_clausesResolve.gen_clauses  sT   273E3EFG;;,,.KD8=>%%d+E>!		(# " 		$**9T?;<A IIallEUU1XJ$67 / JJ%%'D55))$/0Dood+ww))$//IIaddD*=*=a*DE , ( E""II=q?Q?Q?S / ?s   F?c                    U Vs/ s H  o0R                  X5      4PM     nn[        R                  [        5      (       a$  [        R	                  SUR                  5       5        U$ s  snf )Nz9generate_spec_constraints returning with clause count: %d)r  r>   r  r   r?   r  )r   r  r   rL   r   s        r8   generate_spec_constraints!Resolve.generate_spec_constraints1  s[    :?@%B&&q-/%@E""IIK""$  As   A&c           
        U R                   R                  5        Vs0 s H  nU R                  U[        US95      S_M     nn[        R                  [        5      (       a$  [        R                  SUR                  5       5        U$ s  snf )Nr^   r   z6generate_feature_count returning with clause count: %d)	ru   r   r  r&   r>   r  r   r?   r  )r   r  rX   r   s       r8   generate_feature_countResolve.generate_feature_count:  s     **,
, 9D#ABAE, 	 
 E""IIH""$ 
s   $Bc                    U Vs0 s HG  o3R                   (       d  M  UR                  UR                   5      (       d  M7  SUR                   -   S_MI     sn$ s  snf Nr
  r   )r   r  r   r  r   rL   s       r8   generate_update_countResolve.generate_update_countF  sI    ).
).2))BII@VC"))OQ
 	
 
s   AAAc           	     &   0 nU R                   R                  5        H  u  p4U Vs0 s H'  oPR                  U5      [        UR                  5      _M)     nn[        R
                  " UR                  5       6 R                  U R                  5      nU Hr  nU R                  U[        US95      n	UR                  5        HB  u  pX;  d  M  U R                  X5      nUR                  UR                  X5      U5        SX,'   MD     Mt     M     U$ s  snf )Nr^   r   )rt   r~   r  r1   r   r   rB   rX  ru   r  r&   r  r  r0   )r   r  eqrX   r   rM   
prec_featsactive_featsr  clause_id_for_featureprec_sat_namer   feature_metric_ids                r8   generate_feature_metricResolve.generate_feature_metricK  s     ;;,,.KDQVWQV**40#dmm2DDQVJW99j&7&7&9:GGVL$(,(;(;y5)% 0:/?/?/A+M+,0,E,E)-) 

EE-G- 12- 0B	 % /" 	! Xs   .Dc                l    U Vs0 s H"  nSU R                  XR                  5      -   S_M$     sn$ s  snf r*  )r  rX   r+  s       r8   generate_removal_countResolve.generate_removal_counte  s3    CHI5Rd))!WW55q85IIIs   )1c                    U Vs0 s H1  o3R                   (       d  M  U R                  XR                  5      S_M3     sn$ s  snf Nr   )r   r  rX   r+  s       r8   generate_install_countResolve.generate_install_counth  s5    =BRUrkk2##Aww/2URRRs
   A  A c                P    U Vs0 s H  o0R                  X5      S_M     sn$ s  snf r;  )r  )r   r  missingr  s       r8   generate_package_countResolve.generate_package_countk  s(    8?@"##A*A-@@@s   #c                  ^ 0 n0 n0 n0 n0 n0 n	U H*  n
[        U
5      n
U	R                  U
R                  / 5        M,     U	R                  5        GH  u  pU R                  R                  U/ 5       Vs/ s H  oR                  U5      U4PM     nnS nU GH4  u  nmU(       a  [        U4S jU 5       5      (       a  M*  Uc  S=n=n=n=nnOUS   US   :w  d  US   US   :w  a  WS-  nS=n=n=nnOdUS   US   :w  a  WS-  nS=n=nnOLUS   US   :w  a
  WS-  nS=nnO6US   US   :w  a  WS-  nSnO"U R                  (       d  US   US   :w  a  WS-  nU R                  T5      nW(       d  U(       a  UUU'   W(       d  U(       a  UUU'   W(       d  U(       a  UUU'   W(       d  U(       a  UUU'   W(       d  U(       a  UUU'   UnGM7     GM     XEXgU4$ s  snf )Nc              3  .   >#    U  H
  nTU:H  v   M     g 7frV   r   )ra   r[  rM   s     r8   rb   3Resolve.generate_version_metrics.<locals>.<genexpr>  s     ">g419g   r   r   r  rG         )
r&   r  rX   r~   rt   r   r   r   ro   r  )r   r  r   include0eqceqveqbeqaeqtsdictrK  rX   targetsr6  pkgspkeyr   icivibitiar3  rM   s                          @r8   generate_version_metrics Resolve.generate_version_metricsn  s    A!AQVVR(  #[[]MD6:kkoodB6OP6O%%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 3&&U Qs   2Gc                   [        U[        5      (       d  [        S5      e0 nUR                  5        HC  u  p4X@R                  ;   d  M  U R                  U5       Vs1 s H  oUR                  iM     snX#'   ME     [        (       a  SU;   az  UR                  5        Hf  u  p6U R                  R                  W5      n[        US5      (       d  M3  UR                  [        R                  :X  d  MS  X#   R                  S5        Mh     [        U5      nUR                  5       nU V	s/ s H  oU;   d  M
  UR!                  U	5      PM     n
n	U
R#                  UR%                  5       5        U
$ s  snf s  sn	f )Nz'must_have' must be a dict.condar  )r   dict	TypeErrorr~   rh   r   rX   r   r   r{   r  r#   r   r   r   r  r*  r   rB   )r   	must_havedigraphrm  rM   rL   distrecordsorted_keysrf   r   s              r8   dependency_sortResolve.dependency_sort  s,    )T**9::"+//"3Lzz!;???4;P(Q;PR;P(Q% #4  6g(&/oo&7"-68,,*BSBS1S)--g6 '8
 w'NN$	 1<Pi?O$)--$Pi&&()7 )R0 Qs   E)$	E.1E.c           
        [         R                  S5        U(       d  S / 4$ 0 n/ nU HV  nXBU R                  U5      '   UR                  [	        UR
                   SUR                   SUR                   35      5        MX     [        U Vs0 s H  oDU_M     snSU R                  S9nUR                  5       nUR                  Xc5      nUR                  U5      n[        U5      $ s  snf )N1Checking if the current environment is consistentrN  Tri   )r>   r?   r  rs   r&   rX   r  r  rR   ri   r!  r$  r2   bool)	r   	installedsat_name_mapr   rM   r2r  constraintsr7   s	            r8   environment_is_consistent!Resolve.environment_is_consistent  s    		EF8OD37))$/0LLdii[$,,q#MNO  Y7YTDjY7VNN221<55%H~	 8s   
C$c                  ^^	 U(       d  g[        U5      [        U5      -  nU R                  U5      nSUU	4S jjnU(       a/  [        USU R                  S9m	T	R	                  5       mU" US5      nOS nU(       a  SnU$ [
        R                  (       aD  [        U R                  SU R                  S9m	T	R	                  5       m[        [        XUS95      nU$ S nU$ )Nr   c                J   > TR                  TU 5      nTR                  X!5      $ rV   r$  r2   r   add_ifrk  r  rj  s      r8   mysat,Resolve.get_conflicting_specs.<locals>.mysat  $    66q%@K55--r;   Trf  )r2   r  F)
r1   r{  rR   ri   r!  r   r  rh   r   r   )
r   r   r  	all_specsreduced_indexrs  r7   final_unsat_specsr  rj  s
           @@r8   get_conflicting_specsResolve.get_conflicting_specs  s    J^!44	..y9	. 	. t}}EB AY-HH " !  ((TDMMBB A %,^! !  !%  r;   c           
     6  ^ ^^^ [         R                  S5        U(       d  S / 4$ 0 m/ nU HW  nUTT R                  U5      '   UR                  [	        UR
                   SUR                   SUR                   35      5        MY     TR                  5        Vs0 s H  oDU_M     nnU Vs0 s H  ofR
                  U_M     nnSU;   aF  SU;  a@  XWS      nSUR                  ;   a)  UR                   V	s/ s H  oS:w  d  M
  U	PM     n
n	Xl	        [        UST R                  S9nUR                  5       mUR                  TU5      nTR                  U5      nS =pU(       a  U(       a  UU 4S jm[        5       nUR!                  TU5      nTR#                  UTR                  5       5      u  nnUR%                  U4S jU4S	 jU 5        5       5        U H  nT" [	        U5      R
                  U5        M!     ['        U5      ['        T5      :  aW  UnTR)                  5        VVs/ s H  u  nnUS
   U;  d  M  UPM     nnn[         R                  SSR+                  U5      5        U(       a  [         R                  SU5        X4$ s  snf s  snf s  sn	f s  snnf )Nre  rN  r   pipTrf  c                   > X;  a`  UR                  U 5        TR                  R                  U / 5       H.  nTR                  U5       H  nT" UR                  U5        M     M0     g g rV   )r   rt   r   r   rX   )rX   r  fnrL   get_r   s       r8   r  #Resolve.bad_installed.<locals>.get_!  sT    %JJt$"kkoodB7"&//""5B &1 #6 8 &r;   c              3  l   >#    U  H)  nU(       d  M  US    S:w  d  M  SU;  d  M  TU   S   v   M+     g7f)r   r
  r   rX   Nr   )ra   r  ri  s     r8   rb   (Resolve.bad_installed.<locals>.<genexpr>.  sE       CH / (s 2 /7:(7J /X&v. Cs   4444c              3  F   >#    U  H  nTR                  U5      v   M     g 7frV   
from_indexra   rK  r  s     r8   rb   r  0  s      C(Qa(   !rX   z-Limiting solver to the following packages: %s, zPackages to be preserved: %s)r>   r?   r  rs   r&   rX   r  r  rB   rJ   rR   ri   r!  r$  r2   r1   r8  minimizer   r  r~   rW  )r   rh  r  r   rM   	new_indexr6  name_mappython_precr  new_depsrj  rk  r7   limitxtrar  eq_optional_cr   r   r  r  r  r  ri  s   `                     @@@r8   bad_installedResolve.bad_installed	  sb   		EF8OD37L))$/0LLdii[$,,q#MNO  -9,?,?,AB,AD4Z,A	B'01y!FFAIy1xE$9#X$67K+++'2':':I':!5jA':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;{a C1
 J@s$   J*J3	J J$J8Jc                   ^ U(       a9  U Vs0 s H  o3R                   U_M     snmUR                  U4S jU 5       5        g g s  snf )Nc              3  J   >#    U  H  oR                   T;  d  M  Uv   M     g 7frV   rW   )ra   r6  rN  s     r8   rb   &Resolve.restore_bad.<locals>.<genexpr>G  s     C8avvU/B8rM  )rX   r   )r   rP  preserverM   rN  s       @r8   restore_badResolve.restore_badD  s:    156YY_6EKKC8CC 6s   Ac                   [        [        [        U5      5      nU Vs1 s H  oDR                  iM     nn[        R                  S5        U R                  X!5      u  pgU H  nXR                  ;  a  M  UR                  UR                  UR                  pn	UR                  R                  nX;   d  Ub  X;  a  M\  U(       a  [        XR                  5       S9nO
[        XXS9nUR                  SU5        M     [        U5      U4$ s  snf )Nz*Checking satisfiability of current install)rX   r   )rX   r  r  r  r   )rq   mapr&   rX   r>   r?   r  rh   r  r  r  canonical_namer  r  r   )r   r   rh  update_depsrK  r  r  r  rM   rX   r  r  schannelr   s                 r8   install_specsResolve.install_specsI  s    SE*+"'(%Q&&%(		>?,,Y>D::%#'99dllDJJ5D||22H~!2t7H  d==?C e LLD!# $ U|X%%+ )s   Dc                    U R                  X=(       d    / U5      u  p/ nU(       a  U R                  XSS9nU R                  Xe5        U$ )NF)	returnall_remove)r  solver  )r   r   rh  r  r  r  rP  s          r8   installResolve.installb  sG    ,,UO[Q::e%:HD(r;   c           
     B   / n[        [        U5       HM  nUR                  5       (       a  UR                  [        USSS95        M4  UR                  [        USS95        MO     U Vs1 s H!  oDR                  (       d  M  UR                  iM#     nnU R                  X#5      u  pg/ nU Hl  n	U	R                  U	R                  pX;   a  M!  Ub  UR                  U	5        M7  UR                  [        U
U(       a  SU-   OS SU	R                  5       S95        Mn     X84$ s  snf )Nr   T)r  r   r  z>=)rX   r  r   r   )r  r&   r  rs   rX   r  r  r  )r   r   rh  nspecsrK  r  r  r   r  rM   r  vers               r8   remove_specsResolve.remove_specsj  s     Y&A ||~~i3FGiD9: ' #)3&QFF&!&&&3%%i8Dii|"% .1s
t!%#}}	   ' 4s   (D Dc                n    U R                  X5      u  pU R                  USS9nU R                  XC5        U$ )NT)r  )r  r  r  )r   r   rh  r  rP  s        r8   removeResolve.remove  s9    ++E=zz%z.(r;   c           	     B  ^<^=^>^? U(       a*  [        US   [        5      (       d  [        S U 5       5      n[        U5      n[        R                  [        5      (       a1  [        S [        U5       5       5      n[        R                  SU5        U(       d  g[        R                  S5        [        U5      nU R                  U[        R                  (       + S9n	U	(       d  [        5       n
[        5       nU HY  nU R                  U5      (       a  M  UR                  U R                   ;   a  UR#                  U5        MH  U
R#                  U5        M[     U
(       a  [%        U
5      eU(       a  ['        U Vs/ s H  o/PM     snSS	9eU(       a  ['        0 5      eU R)                  XU5        [        R                  S
5        S<U<U?4S jjnU<4S jm=U<U=4S jn[+        U	SU R,                  S9m?T?R/                  5       m<U" US5      nU(       d$  U(       a  ['        0 5      eU R)                  XU5        / n/ n/ n[        T?R                   5      n[        U5       H  u  nnUR                  U;   a  UR1                  UR                  5        UR2                  (       d,  UR4                  (       d  UU:  a  UOUR7                  U5        Mn  [9        T?R                  U5      5      (       d  M  [        UR                  SUR4                  S9nUR7                  U5        UR7                  U5        M     UR;                  S U 5       5        [        R                  [        5      (       a  [        R                  S[        [=        S U 5       5      5      5        [        R                  S[        [=        S U 5       5      5      5        [        R                  S[        [=        S U 5       5      5      5        [        R                  S[        [=        S U 5       5      5      5        [        R                  S5        U(       a=  T?R?                  T<U5      nT<RA                  UU5      u  nn[        R                  SU5        [        R                  S5        T?RC                  T<U5      u  nnnnnT<RA                  UU5      u  nnT<RA                  UU5      u  nn[        R                  SUU5        [        R                  S5        T?RE                  T<5      nT<RA                  UU5      u  nn [        R                  SU 5        T?RG                  T<5      n!T<RA                  U!U5      u  nn"[        R                  S U"5        [        R                  S!5        T<RA                  UU5      u  nn#[        R                  S"U#5        [        R                  S#5        T<RA                  UU5      u  nn$[        R                  S$U$5        U(       dR  [        R                  S%5        T?RI                  T<U5      n%T<RA                  U%U5      u  nn&[        R                  S&U&5        [        R                  S'5        T?RK                  T<U5      n'T<RA                  U'U5      u  nn([        R                  S(U(5        [        R                  S)5        T?RC                  T<U5      u  n)n*n+n,n-T<RA                  U)U5      u  nn.T<RA                  U*U5      u  nn/T<RA                  U+U5      u  nn0T<RA                  U,U5      u  nn1[        R                  S*U.U/U0U15        [        R                  S+5        T?RM                  T<U5      n)T<RA                  U)USS,9u  nn[        R                  S-U5        U" U5      (       d<  U-RO                  U5        T<RA                  U-U5      u  nn2[        R                  S.U25        [        R                  S/5        S0n3/ n4T=" U5      n5U4R7                  U55         [        U<4S1 jU5 5       5      n6T<RQ                  U64S5      nUc  O<U3S0-  n3U3S2:  a  [        R                  S35        OT=" U5      n5U4R7                  U55        Mh  U3S0:  a  [S        [U        [        U45      5      n7[        RV                  " U76 n8U7 V9s/ s H  n9[=        [        U95      U8-
  5      PM     n:n9[        RX                  (       dF  [Z        R]                  S4R_                  U3S2:  a  S5OU3[        S6 U: 5       5      U3S2:  a  S7OS85      5        U R`                  Rc                  5        V;s0 s H  n;U Re                  U;5      U;_M     sn;m>U(       a  [        U45      S0:  a
  [g        5       e[=        U>4S9 jU4S    5       S: S;9$ s  snf s  sn9f s  sn;f )=Nr   c              3  8   #    U  H  n[        U5      v   M     g 7frV   r%   r   s     r8   rb    Resolve.solve.<locals>.<genexpr>  s     61)A,,rP  c              3  p   #    U  H,  u  p[        S XUR                  UR                  4-  5      v   M.     g7f)z%i: %s target=%s optional=%sN)r  r   r   )ra   rA  rK  s      r8   rb   r    s6      ,DA 2aAHHajj5QQRR,s   46zSolving for: %sr   z2Solve: Getting reduced index of compliant packages)r  F)r^  z!Solve: determining satisfiabilityc                J   > TR                  TU 5      nTR                  X!5      $ rV   rp  rq  s      r8   rs  Resolve.solve.<locals>.mysat  ru  r;   c                   > U4S jU  5        Vs/ s H!  nU(       d  M  US   S:w  d  M  SU;  d  M  UPM#     sn$ s  snf )Nc              3  F   >#    U  H  nTR                  U5      v   M     g 7frV   r  r  s     r8   rb   /Resolve.solve.<locals>.clean.<locals>.<genexpr>  s     73a!,,q//3r  r   r
  r   r   )solqr  s     r8   cleanResolve.solve.<locals>.clean  sN     8377A 1 ),A 7  s   ;;;;c                f   > T" U 5      n[        U4S jU 5       5      nTR                  U4SS9c  gg)a=  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  d   >#    U  H%  nTR                  TR                  U5      5      v   M'     g 7frV   r  r  ra   r  r  s     r8   rb   6Resolve.solve.<locals>.is_converged.<locals>.<genexpr>  %     E9aAEE!++a.119r  F)	includeIfT)r   r2   )r7   	psolutionnclauser  r  s      r8   is_converged#Resolve.solve.<locals>.is_converged  s9     hIE9EEGuugZ5u19r;   Trf  )r   r   c              3  8   #    U  H  n[        U5      v   M     g 7frV   r%   r  s     r8   rb   r     s     15aYq\\5rP  zRequested specs: %sc              3  8   #    U  H  n[        U5      v   M     g 7frV   r  r  s     r8   rb   r         <SUSVVUrP  zOptional specs: %sc              3  8   #    U  H  n[        U5      v   M     g 7frV   r  r  s     r8   rb   r    s     ;REqCFFErP  zAll other specs: %sc              3  8   #    U  H  n[        U5      v   M     g 7frV   r  r  s     r8   rb   r    r  rP  zmissing specs: %sc              3  8   #    U  H  n[        U5      v   M     g 7frV   r  r  s     r8   rb   r    s     :Q5a3q665rP  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  d   >#    U  H%  nTR                  TR                  U5      5      v   M'     g 7frV   r  r  s     r8   rb   r  d  r  r  
   zToo many solutions; terminatingzP
Warning: {} possible package resolutions (only showing differing packages):{}{}z>10c              3  D   #    U  H  nS R                  U5      v   M     g7f)r  N)rW  )ra   diffs     r8   rb   r  x  s      CUT4Us    z
  ... and othersr  c              3  .   >#    U  H
  nTU   v   M     g 7frV   r   )ra   r  r  s     r8   rb   r    s     ?XYx rE  c                    U R                   $ rV   rW   rY   s    r8   r[   Resolve.solve.<locals>.<lambda>  s    qvvr;   r  rv  )4r   r&   r   r1   r>   r  r   r   r  r?   r  r{  r   r  rI   rX   rt   r   r    r!   r$  rR   ri   r!  r  r   r   rs   r   r   r   r8  r  rW  r'  r5  r<  r,  r@  r   r2   rq   r  rX  r   	stdoutloginforV  rh   rB   r  r4   )@r   r   r  r  r  r	  should_retry_solvedlistlen0rx  not_found_packageswrong_version_packagesrK  r  rs  r  r7   specospecrspecaspecmr   r  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
psolutionsr  r  psols2commonr  diffsrM   r  r  r  rj  s@                                                               @@@@r8   r  Resolve.solve  s    E!Hi88666EE
E"" %e, E II'/ 			FG5z..(C(C$C / 
  "%%(U"((++vv,.2215*..q1  ",-?@@'("89"8QS"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   7f!!f;f)rv   rk   rm   ry   rx   ro   rz   r}   ri   rt   rh   rw   ru   )Fr   )NN)T)r   )TF)r   r&   returnztuple[PackageRecord])rM   r'   r  zlist[MatchSpec]rV   )ri   zIterable[Channel | str]r  zdict[str, int]rv  )r]  zdict[str, PackageRecord]r  list[PackageRecord])NTF)FFNNF)r   rq   r  rg  r  r  )6__name__
__module____qualname____firstlineno__r   r   r   r   r   r   r   r  r  r$  r:  rC  r"  r  r   rv  rT  r   r{  r  rI   r   r   staticmethodrj   r  r  r  r  r!  r$  r'  r,  r5  r8  r<  r@  rW  rb  rl  rz  r  r  r  r  r  r  r  __static_attributes____classcell__)r   s   @r8   rR   rR   w   s   .R`

(T&B&$P2:BHWK >?'R#.BH* ; ;	 x(GLk )kZ1((  :3 ( ( - -)V x( )8


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