
    DIe                       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 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"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/m0Z0m1Z1 d	dl2m3Z3m4Z4 d	dl5m6Z6 d	dl7m8Z8 d	dl9m:Z:  ee;          Z< ed          Z=e.Z>e-Z-ej?        e$ej@        e%ejA        e&iZB e	d          ej?        fd            ZCd ZD G d d          ZEdS )zuLow-level SAT solver wrapper/interface for the classic solver.

See conda.core.solver.Solver for the high-level API.
    )annotationsN)defaultdictdeque)	lru_cache)DEBUG	getLogger)tqdm)groupby_to_dict   )FrozenOrderedDictmemoizemethod)MAX_CHANNEL_PRIORITYChannelPrioritySatSolverChoice)context)on_win)dashlisttime_recorder)TRUEClausesPycoSatSolverPyCryptoSatSolverPySatSolverminimal_unsatisfiable_subset)toposort)CondaDependencyErrorInvalidSpecResolvePackageNotFoundUnsatisfiableError)ChannelMultiChannel)
NoarchTypePackageType	MatchSpec)PackageRecord)VersionOrderzconda.stdoutlog)maxsizec                "   d }t           |          }	  ||           t                              d|            |S # t          $ rB}t                              d|            t                              d|d           Y d }~nd }~ww xY wt                                           D ]_}	  ||           t                              d|            |c S # t          $ r&}t                              d| |           Y d }~Xd }~ww xY wt          d	          )
Nc                2   t          |           }|                                |                                h} |j        |j        g|R   t	          |                                          }|                    |          st          d| d|           d S )N
sat_solverzWrong SAT solution: z. Required: )r   new_varRequireAndsetsatissubsetRuntimeError)r-   crequiredsolutions       -lib/python3.11/site-packages/conda/resolve.pytry_out_solverz+_get_sat_solver_cls.<locals>.try_out_solver>   s    z***IIKK-	!%#(####quuww<<  ** 	XVhVVHVVWWW	X 	X    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 X X /0J	z""" 			46GHHH  F F F>@Q	
 	
 	
 			2A	EEEEEEEE	F #))++  

	N:&&& IIBDUVVV  	 	 	III!       	 J  s-   : 
B8BB%C
C?C::C?c                    |j         dk    rA|                     |          }d}|r'|d         j        D ]}|t          |          j         z  }n|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   b   sh     
}''++ 	3Aw 3 3322Lr:   c                      e Zd ZdBdZ fdZdCdZdDdZdDd	ZdDd
Zd Z	d Z
d ZdCdZ	 dEdZd ZdCdZd Zed             Zd Z ee           	 dFd            Zd ZdGdZdHd!ZdId"Zed#             ZdJd$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'dJd0Z(dKd4Z)d5 Z*d6 Z+d7 Z,d8 Z-dDd9Z.dLd:Z/d; Z0d< Z1 ee           	 	 	 	 	 dMdNdA            Z2 xZ3S )OResolveF c                   || _         || _        |r|                     |          ni | _        t          j        | _        t          j        | _        t          d |
                                          }t          t                    }|D ]r}d ||         D             }|r t                              d|           |||<   d ||         D             }|D ]'}	|	j        D ]}
||
                             |	           (s|| _        || _        i | _        i | _        i | _        i | _        i | _        d |D             | _        | j                                        D ]$\  }}t5          || j        d          | j        |<   %d S )Nc                    | j         S Nnamexs    r8   <lambda>z"Resolve.__init__.<locals>.<lambda>~   s    16 r:   c                     g | ]}|j         	|S rR   )is_unmanageable.0rL   s     r8   
<listcomp>z$Resolve.__init__.<locals>.<listcomp>   s     !X!X!X44CW!X$!X!X!Xr:   z(restricting to unmanageable packages: %sc              3  (   K   | ]}|j         	|V  d S rU   track_featuresr]   s     r8   	<genexpr>z#Resolve.__init__.<locals>.<genexpr>   s*      MM9LMMMMMMMr:   c                \    h | ])}t          |d           r|j        t          j        k    '|*S )package_type)hasattrre   r$   VIRTUAL_SYSTEMr^   _s     r8   	<setcomp>z#Resolve.__init__.<locals>.<setcomp>   sI     
 
 
>**	

 Nk&@@@	  A@@r:   Tkeyreverse)indexchannels_make_channel_priorities_channel_priorities_mapr   channel_priority_channel_prioritysolver_ignore_timestamps_solver_ignore_timestampsgroupbyrA   r   listr=   r>   rb   appendgroupstrackers_cached_find_matchesms_depends__reduced_index_cache_pool_cache_strict_channel_cache_system_precsitemssortedversion_key)selfrn   	processedro   ry   rz   rW   unmanageable_precstf_precsrL   feature_namegroups               r8   __init__zResolve.__init__t   s   
 7?GD))(333R 	$ ")!9)0)I&))5<<>>::t$$ 	8 	8D!X!X6$<!X!X!X! 2		DdKKK1tMMMMMH  8 8$($7 8 8L\*11$777788  $&!$&!%'"
 

 
 
  ;,,.. 	R 	RKD% &u$2BD Q Q QDK	R 	Rr:   c                   t                                                      t          t          | j                            z  t          t          | j                            z  t          | j                  z  t          | j                  z  t          t          d | j	        
                                D                                 z  t          t          d | j        
                                D                                 z  t          t          d | j        
                                D                                 z  S )Nc              3  >   K   | ]\  }}|t          |          fV  d S rU   tupler^   kvs      r8   rc   z#Resolve.__hash__.<locals>.<genexpr>   s0      LL1q%((mLLLLLLr:   c              3  >   K   | ]\  }}|t          |          fV  d S rU   r   r   s      r8   rc   z#Resolve.__hash__.<locals>.<genexpr>   s0      NN1q%((mNNNNNNr:   c              3  >   K   | ]\  }}|t          |          fV  d S rU   r   r   s      r8   rc   z#Resolve.__hash__.<locals>.<genexpr>   s0      QQ1q%((mQQQQQQr:   )super__hash__hash	frozensetro   
frozendictrq   rs   ru   ry   r   rz   r|   )r   	__class__s    r8   r   zResolve.__hash__   s#   GG9T]++,,-:d:;;<<= 4)**+ 4122	3
 :LL8I8I8K8KLLLLLMMN :NN8K8K8M8MNNNNNOOP :QQ8H8N8N8P8PQQQQQRRS		
r:   Nc                    ddl m |i }n|                                 |                    fd| j                                        D                        |r!|                    fd|D                        |S )Nr   make_feature_recordc                (    i | ]} |          d S FrR   r^   fstrr   s     r8   
<dictcomp>z*Resolve.default_filter.<locals>.<dictcomp>   s'    OOO$  &&OOOr:   c                (    i | ]} |          d S TrR   r   s     r8   r   z*Resolve.default_filter.<locals>.<dictcomp>   s'    PPPt..t44dPPPr:   )core.subdir_datar   clearupdaterz   keys)r   featuresfilterr   s      @r8   default_filterzResolve.default_filter   s    999999>FFLLNNNOOOO$-:L:L:N:NOOO	
 	
 	
  	RMMPPPPxPPPQQQr:   Tc                N     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                Z    t          | t                    r |           n
 |           S rU   
isinstancer&   )specv_fkey_v_ms_s    r8   v_zResolve.valid.<locals>.v_   s,    ",T9"="=P55;;;774==Pr:   c                r    r| j         p-t          fd                    |           D                       S )Nc              3  .   K   | ]} |          V  d S rU   rR   )r^   fkeyr   s     r8   rc   z/Resolve.valid.<locals>.v_ms_.<locals>.<genexpr>   s+      GGwwt}}GGGGGGr:   optionalanyrH   )rK   r   r   r   s    r8   r   zResolve.valid.<locals>.v_ms_   sI      KHGGGG1B1B21F1FGGGGGr:   c                                         |           }|Sd| <   	                     |           }t          fd|D                       x}| <   n# t          $ r
 dx}| <   Y nw xY w|S )NTc              3  .   K   | ]} |          V  d S rU   rR   )r^   rK   r   s     r8   rc   z1Resolve.valid.<locals>.v_fkey_.<locals>.<genexpr>   s+      ,I,I2UU2YY,I,I,I,I,I,Ir:   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33G *-,I,I,I,I,I,I,I)I)IIC&,, # / / /)..C&,,,/ Js   A A)(A)rR   )r   spec_or_precr   r   r   resultr   r   s   ` ``  @@r8   validzResolve.valid   s    "	Q 	Q 	Q 	Q 	Q 	Q	 	 	 	 	 	 	
	 
	 
	 
	 
	 
	 
	 L!!r:   c                d     fd}t            fd             fd ||          S )Nc                Z    t          | t                    r |           S  |           S rU   r   )_spec_or_precis_valid_precis_valid_specs    r8   is_validz Resolve.valid2.<locals>.is_valid   s5    -33 4$}]333$}]333r:   c                r    r| j         p-t          fd                    |           D                       S )Nc              3  .   K   | ]} |          V  d S rU   rR   )r^   _precr   s     r8   rc   z8Resolve.valid2.<locals>.is_valid_spec.<locals>.<genexpr>   s-      RR}}U++RRRRRRr:   r   )_specr   r   r   s    r8   r   z%Resolve.valid2.<locals>.is_valid_spec   sK      #NSRRRR9J9J59Q9QRRRRRr:   c                                         |           }|Wd| <   	 t          fd                    |           D                       }|rdndx}| <   n# t          $ r
 dx}| <   Y nw xY w| S )NFc              3  .   K   | ]} |          V  d S rU   rR   )r^   rK   r   s     r8   rc   z8Resolve.valid2.<locals>.is_valid_prec.<locals>.<genexpr>   s>       ) ).0b))) ) ) ) ) )r:   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 	%( ) ) ) )48OOD4I4I) ) ) & &N "0L5LC*T** # A A A-@@C*T***A 7Ns   .A A-,A-r   )r   r   r   r   r   r   r   s   ` `` @@r8   valid2zResolve.valid2   s    	4 	4 	4 	4 	4 	4 
	 	 	 	 	 	 
		 	 	 	 	 	 	  x%%%r:   c                J      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d S |                    | j                                        |           rd S                     |           }d}t	                      }|D ]H}                    |          D ]0} 
||          D ]}d}| f|z   V  |                    |           1I|sBt          d |          }|                                D ]}	| ft          j	        |	          z   V  d S d S )NFTc                    | j         S rU   rV   rX   s    r8   rZ   z9Resolve.invalid_chains.<locals>.chains_.<locals>.<lambda>-  s    AF r:   )
rW   addr   rH   r1   r   rv   rA   r&   union)r   namesprecsfoundconflict_depsrL   m2rY   conflict_groupsr   chains_r   r   r   s             r8   r   z'Resolve.invalid_chains.<locals>.chains_  sR     yE!!IIdi   zz$11 %%d++EEEEM . .//$// . .B$WR// . . $#gk))))%))"----.  ;")*:*:M"J"J,3355 ; ;E'IOE$:$::::::; ;; ;r:   r1   )r   r   r   r   r   s   ` ``@r8   invalid_chainszResolve.invalid_chains  sF     	; 	; 	; 	; 	; 	; 	; 	;, wtSUU###r:   c                <    g }g }t                      }|D ]D}|                    d          }|r|                    |           /|                    |           E|                     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.
        rb   c              3  V   K   | ]#}|j         	                    |          |fV  $d S rU   )r   rH   )r^   r   r   s     r8   rc   z'Resolve.verify_specs.<locals>.<genexpr>G  sY       
 
M
 +/*;*;D*A*A
G
 
 
 
 
 
r:   )r1   get_exact_valuer   rx   extendr   r   )r   specsnon_tf_specsbad_depsfeature_namesrK   _feature_namess   `      r8   verify_specszResolve.verify_specs3  s      	( 	(B//0@AAN ($$^4444##B'''' 
 
 
 
$
 
 
 	
 	
 	

  	3(222\""M11r:   c                b   t                      t                      t                      t                      d}d |pg D             }d |pg D             }|D ]t                    dk    rd         j        dk    rt          d |D                       st          d |D                       rd	 |D             }|r|d
         }t          |                     |                    t          |                     d                             z  sT|d                             t          d
         d         g          t          t          |d                     f           d         j        	                    d          rPfd| j
        D             }|r|d
         j        nd}	|d                             t                    |	f           d
         |v rd}
|D ]`}|j        d         j        k    rH|d                             t                    t          t          |d                     f           d}
a|
sL|d                             t                    t          t          d
         d                     f           ?t                    dk    st          fd|D                       rL|d                             t                    t          t          d
         d                     f           |d         rd |d         D             |d<   |S )N)pythonrequest_conflict_with_historydirectvirtual_packagec                ,    h | ]}t          |          S rR   r%   rh   s     r8   rj   z-Resolve._classify_bad_deps.<locals>.<setcomp>Y  s    AAA	!AAAr:   c                ,    h | ]}t          |          S rR   r%   rh   s     r8   rj   z-Resolve._classify_bad_deps.<locals>.<setcomp>Z  s    CCC!1CCCr:   r   r   c              3  ,   K   | ]}|j         d k    V  dS )r   NrV   rh   s     r8   rc   z-Resolve._classify_bad_deps.<locals>.<genexpr>`  s)      EE1AFh.EEEEEEr:   c              3  H   K   | ]}|d          j         dk    |d          V  dS )r   r   NrV   rh   s     r8   rc   z-Resolve._classify_bad_deps.<locals>.<genexpr>a  s6      HH!A$)x2G2G!2G2G2G2GHHr:   c                @    g | ]}|d          j         dk    |d          S )r   r   rV   rh   s     r8   r_   z.Resolve._classify_bad_deps.<locals>.<listcomp>c  s,    %V%V%Vq!	X@U@Uad@U@U@Ur:   r   )target__c                @    g | ]}|j         d          j         k    |S )r   rV   )r^   ri   chains     r8   r_   z.Resolve._classify_bad_deps.<locals>.<listcomp>q  s+    UUUAFeBin<T<T1<T<T<Tr:   znot availabler   Fr   Tr   c              3  b   K   | ])}t          |          d k    o|d         d         k    V  *dS )r   r   Nlen)r^   r5   r   s     r8   rc   z-Resolve._classify_bad_deps.<locals>.<genexpr>  sP       ) )9:CFFaK4AaDE!H$4) ) ) ) ) )r:   c                z    g | ]8}|d                               d          st          |d                   d k    6|9S )r   zpython r   )
startswithr   rh   s     r8   r_   z.Resolve._classify_bad_deps.<locals>.<listcomp>  sM     ! ! !Q4??9--! 25QqTQ 1>r:   )r1   r   rW   r   rH   r   r   strr&   r   r   version)r   r   specs_to_addhistory_specsstrict_channel_priorityclassespython_first_specspython_specr   virtual_package_versionmatchr   r   s               @r8   _classify_bad_depszResolve._classify_bad_depsP  s    ee-0UUee"uu	
 
 BAl.@bAAACC}/BCCC .	 .	E E

Q"INh..EEEEEEE /HHhHHHHH / &W%VH%V%V%V"% "4Q"7KD--k::;;d//b	::;;<	  )-- %uQxr&; < < #Ik$$G$G$G H H   r**400 UUUUd&8UUU*1FGAJ&& ( )*..e>U/VWWWWq\))) % %DyE"IN22 ?@DD"5\\3yd/K/K/K+L+LM   !% H%))us9U1Xd+K+K+K'L'LM   u::>>S ) ) ) )>F) ) ) & &> H%))us9U1Xd+K+K+K'L'LM   8 	! ! *! ! !GH
 r:   c                    |                      |          }|s|S |                     |j                  t          fd|D                       S )Nc              3  <   K   | ]}|j         j        k    |V  d S rU   channelrW   )r^   fsole_source_channel_names     r8   rc   z3Resolve.find_matches_with_strict.<locals>.<genexpr>  s2      VV119>=U+U+UQ+U+U+U+UVVr:   )rH   _get_strict_channelrW   r   )r   rK   r  matchesr  s       @r8   find_matches_with_strictz Resolve.find_matches_with_strict  s\    ##B''& 	N#'#;#;BG#D#D VVVVVVVVVVr:   c                    t           j        r3t           j        st          d           |                     |||          }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_maprr   r   STRICTr    )r   r   r   r   r   r  s         r8   find_conflictszResolve.find_conflicts  st    & 	< M   ..ulMRRHHH")":o>T"T 2IJJJJr:   r   c                   g }|                     |g           g }g }|r|                    d          d         }||v r%|                     |           |j        |k    rt          |          dk    r|                                t          |d                   t                    k    r:t	          j        d         |d         d         f          d         }	|	|d         d<   n|                                t          |          |k    ot          fd|D                       }
t          |          dk    s|
r|S |}dd         D ]
}||         }d |                    |i           D             }|b|D ]N}t          |          |k     r9t                    }|                     |           |                     |           O||S )z1Return shorted path from root_spec to target_namer   r   c              3  X   K   | ]$}t          |          t                    k    V  %d S rU   r   )r^   ri   paths     r8   rc   z=Resolve.breadth_first_search_for_dep_graph.<locals>.<genexpr>  sM       M M,-CFFc$ii'M M M M M Mr:   c                    g | ]}|S rR   rR   rh   s     r8   r_   z>Resolve.breadth_first_search_for_dep_graph.<locals>.<listcomp>  s    ;;;a;;;r:   )	rx   poprW   r   r&   r   r   r   rw   )r   	root_spectarget_name	dep_graphnum_targetsqueuevisitedtarget_pathsnode	last_specfound_all_targets	sub_graphp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   yK''|$$)) ''---|B'((CII55 )b<;KB;O0P Q QRS TI+4L$R(( ''---$'$5$5$D % M M M M16M M M J J! u::??&7?''!I!B$Z ) )%aL		;;9==r#:#:;;;H + +|$${22#DzzHOOC(((LL***=  	+> r:   c                0   |i i}t                      }|gg}|r|                    d          }|}|D ]
}||         }|d         }|                     |          }	|	D ]}
t          |
j                  dk    r|
j        D ]}t          |          }|                    |i i           |                    |           t          |          }|	                    |           t          |          t          j        k    r|	                    |           |||fS )Nr   r   )r1   r  rH   r   rI   r&   r   r   rw   rx   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  s5   2J	55 	399Q<<D!I ) )%aL		r(K''44G 	3 	3s{##a'' [ 3 3#,Q<<!(((B888 X...#':: 111x==G,SSS!LL222!  	3" (""r:   c           
     
   t           j        t          j        k    }t	          |          |pt	                      z  }d |D             }t          |          dk    rj|                     t          t          |                              }t          |          dk    r(t	          | 	                    |d                             }|
                    d | j        D                        |D ]}|                     |f           i }i }t          t          |          ddt           j                  5 }	|D ]}|	                    d|            |	
                                 |                     |          \  }
}|
                    |
           |                    |j                  r!||j                                     |           n|g||j        <   |D ]H}|                    |j                  r!||j                                     |           =|g||j        <   I	 d	d	d	           n# 1 swxY w Y   g }i }|                                D ]\  }t+          |          }t          |          dk    r8|                    |          g||<   C||                                        _                    d
          r!t/          fd|D                       rg||<   t          t          |          ddt           j                  5 }	|                                D ]\  }}|	                    d                    d                    d |D                                            |	
                                 d |D             }g }d	}t+          |                              d |D                       r|                    fd|D                        |d         d         }|D ]c}||d         d         k    rO|j        }||                             |          }|                     ||||          }|                    |           d4|D ]}||                             |d                   }|                     |d         |||          }|                    |           t          |          dk    s t          |          t          |          k     r|}|}|dd	         D ]J}||                             |          }|                     ||||          }|                    |           K	 d	d	d	           n# 1 swxY w Y   |                     ||||          }|S )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.
        c                F    h | ]}|j                             d           |S )r   )rW   r   )r^   r   s     r8   rj   z-Resolve.build_conflict_map.<locals>.<setcomp>
  s-    JJJ$ty/C/CD/I/IJJJJr:   r   r   c                6    h | ]}|                                 S rR   )to_match_specrh   s     r8   rj   z-Resolve.build_conflict_map.<locals>.<setcomp>  s"    DDDAaoo''DDDr:   zBuilding graph of depsF)totaldescleavedisablez
Examining Nr   c              3  2   K   | ]}|j         k    |V  d S rU   rV   )r^   sr   s     r8   rc   z-Resolve.build_conflict_map.<locals>.<genexpr>5  s)      +L+L!!A+L+Lr:   zDetermining conflictszExamining conflict for {} c              3  $   K   | ]}|j         V  d S rU   rV   rh   s     r8   rc   z-Resolve.build_conflict_map.<locals>.<genexpr>@  s$      ?V?V1?V?V?V?V?V?Vr:   c                    g | ]}|S rR   rR   rh   s     r8   r_   z.Resolve.build_conflict_map.<locals>.<listcomp>C  s    +++!+++r:   c                    h | ]	}|j         
S rR   rV   rh   s     r8   rj   z-Resolve.build_conflict_map.<locals>.<setcomp>G  s    +++QV+++r:   c                &    g | ]}|j         v |S rR   rV   )r^   ri   requested_spec_unsats     r8   r_   z.Resolve.build_conflict_map.<locals>.<listcomp>J  s&    "V"V"VqvAU7U7U17U7U7Ur:   r   )r   rr   r   r  r1   r   rH   nextiterr   r   r   _get_package_poolr	   r  set_descriptionr5  r   rW   rx   r   r   r   r   formatjoinintersectioncountr-  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rootsearch_nodenum_occurancesr5   r%  r   r   r   rE  s                                @@r8   r  zResolve.build_conflict_map  s   < #*":o>T"TE

l3cee4JJ%JJJu::??''T%[[(9(9::G7||q  DOOGAJ7788DD1CDDDEEE 	, 	,D""D7++++	e**)L	
 
 
 	4
  4 4!!"5t"5"5666


8<8P8PQU8V8V5"$5  !3444<<	** 1TY'..t4444+/&HTY', 4 4C||CH-- 4 *11$7777.2V**	44	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4*  "NN$$ 
	3 
	3DAqaLLE5zzA~~(,,U33;453)%00)%077::::d## 3+L+L+L+Lu+L+L+L(L(L 301s%e,e**(L	
 
 
 -	)
  5 ; ; = = ') ')u!!/66sxx?V?VPU?V?V?V7V7VWW   


++U+++)+& $'0'7'7'D'D++U+++( ($ ( )MM"V"V"V"Ve"V"V"VWWW$*2JqMM % - -6!9Q<//*7*<K-5k-B-H-H-N-NN $ G G $k9n! !A #MM!,,,- !& 
1 
1)1$)=)=fQi)H)H $ G G"1ItY! ! e,,,566!;;s5zzC2M M @ @ 6;2,0M &qrr
 ) ))1-)@)F)Ft)L)L CC -N  a(((()E')-	) -	) -	) -	) -	) -	) -	) -	) -	) -	) -	) -	) -	) -	) -	)^ **L-1H
 
 s&   3C0H00H47H4H0UUUc                     d }	  j         |         }ne# t          $ rX | j        v rLd  j        |         D             } fd|D             }t          |          d         }||         x} j         |<   Y nw xY w|S )Nc                &    h | ]}|j         j        S rR   r
  r]   s     r8   rj   z.Resolve._get_strict_channel.<locals>.<setcomp>r  s*     % % %*.DL%% % %r:   c                H    i | ]}j                             |d           |S r   )rq   r   )r^   cnr   s     r8   r   z/Resolve._get_strict_channel.<locals>.<dictcomp>u  s>        044R;;R  r:   r   )r   KeyErrorry   r   )r   package_namechannel_nameall_channel_namesby_cphighest_prioritys   `     r8   r  zResolve._get_strict_channell  s    	5lCLL 	 	 	t{**% %26+l2K% % %!   /   $*%==$  KP$K t9,G	 s    AA54A5c                6    |sdS |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&      	5}}Q/:::r:   c                    t          |          }|| j        v r| j        |         }nN|                     |          }t          d |          }d |                                D             }|| j        |<   |S )Nc                    | j         S rU   rV   rX   s    r8   rZ   z+Resolve._get_package_pool.<locals>.<lambda>  s    QV r:   c                4    i | ]\  }}|t          |          S rR   r   r   s      r8   r   z-Resolve._get_package_pool.<locals>.<dictcomp>  s$    ???$!QAs1vv???r:   )r   r~   get_reduced_indexrv   r   )r   r   poolgrouped_pools       r8   rH  zResolve._get_package_pool  s    %  D$$$#E*DD))%00D"#3#3T::L??,*<*<*>*>???D&*DU#r:   )module_namec                &
     ddl m t          j        t          j        k    t          |          f}| j        v r j        |         S t          	                    t                    r?t                              dt          t          d |D                                                                 |          \  }}d                      |                                          D             t#                      d  t#                      |r"t          t%          |           fdd          }t          |          }i |D ]T}                    |j        t#                                t#                               |                    z  |j        <   U  fd	t#                      }t-          d
          D ]t}                                 t1          |          }	|	rM|	                                } |g          r|	                    |           n|                    |           |	Mu|r|ri S d fd|D             D             i }
|D ])}|
                    |j        g           |gz   |
|j        <   *|D ]f}t           fd                     |          D                       }r=|r;                     |d         j                  t          fd|D                       }                    d |D                        |D ]}t#                      }t=          j        |
          }t#                                |                    }|D ]Y}|                    |j        g           }||vr.|r|j!        |d         j!        k    r|"                    d|           |||j        <   Z|r+|#                                }|                    |           fd                     |          D             D ]} $                    |          sr(                     |j                  |j%        j        k    r||<   t#                                |                    |z
  }|D ]m}d|vrR &                    |t          |                    |j        d                              s|                    |           X|                    |           n|+ӐhtO                     j        |<   S )Nr   r   zRetrieving packages for: %sc              3  4   K   | ]}t          |          V  d S rU   r   r^   r?  s     r8   rc   z,Resolve.get_reduced_index.<locals>.<genexpr>  s(      ??1A??????r:   c                "    i | ]\  }}||rd ndS )Fzfeature not enabledrR   )r^   rL   r   s      r8   r   z-Resolve.get_reduced_index.<locals>.<dictcomp>  s8     
 
 
c 39%%$9
 
 
r:   c                L    t          |           |                                 fS rU   )rO   dist_str)rY   r   s    r8   rZ   z+Resolve.get_reduced_index.<locals>.<lambda>  s    ;D!DDajjllS r:   Trk   c                   t          t          |                     j        }j                            |d          }|rJrH|vrD                    |          }|D ]}|j        j        |k    rd|<                       |           dx}}|D ]}                    |d          s|dz  }	                    | |          r                    |          r||         vr	dz  |<   [t                      }                    |          D ]L}|j        sCt          fd                    |          D                       s|                    |           M|r&dd	                    d
 |D                       z  |<   d|<   |dz  }||k     }	|	r t                               d|||fz             t          d | D                       r|	S |dk    rd S |	s|vr                    |           t%          d fd|D                       }
|
                    dd            t)          |
                                d           D ]:\  }}t-          |          |k    r" t          |                    }|rd}	5| d S ;|	S )NrR   z&removed due to strict channel priorityr   Fr   z"incompatible with required spec %sc              3  H   K   | ]}                     |d           |V  dS FN)r   )r^   recr   s     r8   rc   zBResolve.get_reduced_index.<locals>.filter_group.<locals>.<genexpr>  sK       7 7 ##->>#u#=#=77 7 7 7 7 7r:   zunsatisfiable dependencies %sr@  c              3  4   K   | ]}t          |          V  d S rU   rt  ru  s     r8   rc   zBResolve.get_reduced_index.<locals>.filter_group.<locals>.<genexpr>  sA       V V'(CFFV V V V V Vr:   z%s: pruned from %d -> %dc              3  $   K   | ]}|j         V  d S rU   r   r^   rK   s     r8   rc   zBResolve.get_reduced_index.<locals>.filter_group.<locals>.<genexpr>  s$      0022;000000r:   c                    | j         S rU   rV   )r?  s    r8   rZ   zAResolve.get_reduced_index.<locals>.filter_group.<locals>.<lambda>  s    af r:   c              3     K   | ];}                     |d                               |          D ]}|j        	|V  <dS r{  )r   r   r   )r^   rL   dep_specr   r   s      r8   rc   zBResolve.get_reduced_index.<locals>.filter_group.<locals>.<genexpr>  s{         )~~dE:: )-(=(=	  %'0       r:   *c                @    t          d | d         D                       S )Nc              3  $   K   | ]}|j         V  d S rU   r  rh   s     r8   rc   zTResolve.get_reduced_index.<locals>.filter_group.<locals>.<lambda>.<locals>.<genexpr>  s$      9S9S!*9S9S9S9S9S9Sr:   r   r   rX   s    r8   rZ   zAResolve.get_reduced_index.<locals>.filter_group.<locals>.<lambda>  s"    c9S9SaPQd9S9S9S6S6S r:   rl   T)rF  rG  rW   ry   r   r  r  r   
setdefault	match_anyr1   r   r   r   rH   rK  r=   r>   rv   r  r   r   r   )_specsrW   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  s   V%%*DKOOD"--E  ,0 ,TAR5R5R+/+C+CD+I+I(! T TD|(,DDD+S
4(!%%d+++ OD4  !,,T599 AID NN6488 !266t<<! (B4(HHH A>Q #4( !.1ee+"ood33 < <!{ <3 7 7 7 7'+'8'8'<'<7 7 7 4 4 <
 477;;;. !+JSXX V V,CV V V N N ,
4( !',Jt$AIDTkG K		4dD7IIJJJ0000000 t  ($f,,

4   $$$    $)  	 	
 sD)))'-$$&&,S,S( ( ( 	( 	(OIt 4yyD((*l3t9955 (&*GG [#'44Nr:      c                    i | ]}||S rR   rR   r]   s     r8   r   z-Resolve.get_reduced_index.<locals>.<dictcomp>(  s'     
 
 
D$
 
 
r:   c              3  .   K   | ]} |          V  d S rU   rR   r   s     r8   rc   z,Resolve.get_reduced_index.<locals>.<genexpr>)  s/      #S#S$$7$7$=$=#S#S#S#S#S#Sr:   c              3  P   K   | ] }|v                     |          |V  !d S rU   )r   )r^   rL   r   reduced_index2r   s     r8   rc   z,Resolve.get_reduced_index.<locals>.<genexpr>/  sM       % %~--$++dJ2O2O- ----% %r:   r   c              3  <   K   | ]}|j         j        k    |V  d S rU   r
  )r^   rL   strict_channel_names     r8   rc   z,Resolve.get_reduced_index.<locals>.<genexpr>8  s@       ) )|(,??? ????) )r:   c              3     K   | ]}||fV  	d S rU   rR   r]   s     r8   rc   z,Resolve.get_reduced_index.<locals>.<genexpr>=  s&      !L!L44,!L!L!L!L!L!Lr:   c              3  $   K   | ]
}|v|V  d S rU   rR   )r^   ri   r  s     r8   rc   z,Resolve.get_reduced_index.<locals>.<genexpr>V  s6       $ $A^<S<S<S<S<S<S$ $r:   rb   rR   )(r   r   r   rr   r   r  r   r}   r=   isEnabledForr   r>   r   r   r   r   r   r1   rw   r   rW   rH   ranger   r   popleftrx   r   r  r   copydeepcopyr   rG   insertr  r   r  rj  r   )!r   explicit_specssort_by_exactnessexit_on_conflict	cache_keyr   r?  pruned_to_zerori   slistspecs_by_name_seedexplicit_specadd_these_precs2pkg
seen_specsri  	dep_specsrN   r   rK   dep_pkg	new_specsnew_msr  r  r  r   r   r  r  r  r  r  s!   `                      @@@@@@@@@@r8   rn  zResolve.get_reduced_index  s\   
 	:99999")":o>T"T+U>-B-BB	111,Y77E"" 	II-???????@@  
 $(#4#4^#D#D 
 
!00::@@BB
 
 

 EE 	 $^$$SSSS  N ~..%'" 	* 	*A1K1O1O2 2D%%a(())2*&qv..S	 S	 S	 S	 S	 S	 S	 S	 S	 S	 S	 S	t q 	* 	*ALLNNN.))E *MMOO<$$ *LLOOOO"&&q)))  *  	. 	I
 
#S#S#S#S(#S#S#S
 
 
   	R 	RA);)?)?)K)Kqc)Qqv&&+ L	; L	;M$ % % % % % % --m<<% % %     ' +; &*&>&>?OPQ?R?W&X&X##( ) ) ) ) 0) ) ) $ $ 
 !!!L!L;K!L!L!LLLL' ;; ;;
 !UU
 $.@ A A 4 455	$ 4 4C)--ch;;E%''! (%(^uQx7J%J%JQ,,,.3M#(++ *; #BNN2&&&$ $ $ $#'#4#4R#8#8$ $ $ $; $;  ${{7J?? %$  7 ; 44W\BB&34 4 7>N73 ),DOOG,D,D(E(E
(RI*3 ; ; %5F$B$B,0MM(.(-m.?.?R.P.P(Q(Q-& -& %C %.MM&$9$9$9$9 %/NN6$:$:$:$:U   *;#;;H $N33/=!),r:   c                :    t          fd|D                       S )Nc              3  B   K   | ]}|                               V  d S rU   r  )r^   rK   rL   s     r8   rc   z$Resolve.match_any.<locals>.<genexpr>  s-      00b288D>>000000r:   r  )r   mssrL   s     `r8   r  zResolve.match_any  s&    0000C000000r:   r   r&   returntuple[PackageRecord]c                     j                             d           }||S                     d          }|r j                            |d          }no                    d          rA                    d          }t          j                             fd|D                       }n j                                        }t          fd|D                       }| j         <   |S )NrW   rR   rb   c              3  N   K   | ]}j                             |d           V   dS )rR   N)rz   r   )r^   r   r   s     r8   rc   z'Resolve.find_matches.<locals>.<genexpr>  sF       < <8D!!,33< < < < < <r:   c              3  F   K   | ]}                     |          |V  d S rU   r  )r^   r)  r   s     r8   rc   z'Resolve.find_matches.<locals>.<genexpr>  s2      @@!$**Q--@A@@@@@@r:   )
r{   r   r   ry   	itertoolsr   from_iterablern   rA   r   )r   r   r  	spec_namecandidate_precsr   s   ``    r8   rH   zResolve.find_matches  s   '++D$77?J((00	 	2"kooi<<OO!!"233 	2 001ABBM'o;; < < < <HU< < <  OO #j//11O@@@@@@@@@*-!$'
r:   rL   r'   list[MatchSpec]c                    | j                             |          }|?d |j        D             }|                    d |j        D                        || j         |<   |S )Nc                ,    g | ]}t          |          S rR   r%   r^   ds     r8   r_   z&Resolve.ms_depends.<locals>.<listcomp>  s    @@@QIaLL@@@r:   c              3  6   K   | ]}t          |           V  dS )ra   Nr%   )r^   feats     r8   rc   z%Resolve.ms_depends.<locals>.<genexpr>  s-      QQ4	666QQQQQQr:   )r|   r   combined_dependsr   r   )r   rL   r  s      r8   r   zResolve.ms_depends  sh    ##D))<@@$*?@@@DKKQQ4=QQQQQQ%)DT"r:   c                   |j         }| j                            |j        d          }|t          k     rdnd}t          |                    dd                    }|                    dd          }|                    d          }t          |j        dk               }	| j        t          j
        k    r	|| |||	g}
n||| ||	g}
| j        r|
                    |           n+|
                    |                    dd          |f           |
S )	Nr   r   r    build_numberbuildnoarch	timestamp)r  rq   r   rW   r   r(   intsubdirrs   r   DISABLEDru   rx   r   )r   rL   vtyper  rr   r   version_comparatorr  build_stringr  vkeys              r8   r   zResolve.version_key  s    ,7;;L!
 
 &(<<<!)$((9b*A*ABBxx22xx((dkX-...!_%===,,.@,PVWDD-0@/@,PVWD) 	BKK%%%%KK+q11<@AAAr:   c                    i }t          t          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V  .dS )c              3  4   K   | ]}t          |          V  d S rU   r!   )r^   ccs     r8   rc   z=Resolve._make_channel_priorities.<locals>.<genexpr>.<genexpr>  s(      33333333r:   N)r   r"   	_channelsr^   r5   s     r8   rc   z3Resolve._make_channel_priorities.<locals>.<genexpr>  sb       * *  a..33q{3333T* * * * * *r:   c              3  4   K   | ]}t          |          V  d S rU   r  r  s     r8   rc   z3Resolve._make_channel_priorities.<locals>.<genexpr>  s(      77'!**777777r:   r   )	enumerater  r   r  rW   minr   )ro   priorities_mappriority_counterchnrd  s        r8   rp   z Resolve._make_channel_priorities  s    %.O)) * * 87h777	* * *  &
 &
 	 	!c 8L~--+. "6":, ,N<(( r:   c                    t          |          }|                     |          }|s|st          |fg          t          || j                  S )Nr  )r&   rH   r   r   r   )r   rK   emptyokr   s       r8   get_pkgszResolve.get_pkgs  sW    r]]!!"%% 	2W 	2(2%111e!12222r:   c                    t          | t                    r|                                 S t          | t                    rdt	          |           z   | j        rdndz   S t                      )Nz@s@?r  )r   r'   rx  r&   r   r   NotImplementedError)r   s    r8   to_sat_namezResolve.to_sat_name  sc     c=)) 	(<<>>!Y'' 	(3s88#cl'BssCC%'''r:   c                    d|  d| S )Nz@fm@@rR   )prec_dist_strr  s     r8   to_feature_metric_idzResolve.to_feature_metric_id  s    ,m,,d,,,r:   c                    t                                                   }|                    |          }||S                                 }                    d          }t          d d                     d          pdD             D                       }|r j                            |g           x}}	nn|rOt          |          dk    sJ t          t          |                    }
 j                            |
g           x}}	n j                                        x}}	d}|sfd|D             }	t          |	          t          |          k    r[j        rt          }nL|sJ|rt          |	          nt          |          }|                                         ||                    }|v fd
|	D             }j        rL|rt          |	          nt          |          }|                    d                     |          z              |                    |          }|                    ||           |S )NrW   c              3     K   | ]}||V  	d S rU   rR   )r^   _tfs     r8   rc   z)Resolve.push_MatchSpec.<locals>.<genexpr>  s<       
 


 
 
 
 
 
r:   c              3  >   K   | ]}|                                 V  d S rU   )strip)r^   r  s     r8   rc   z)Resolve.push_MatchSpec.<locals>.<genexpr>  s*      XXa		XXXXXXr:   rb   rR   r   Fc                >    g | ]}                     |          |S rR   r  )r^   r   r   s     r8   r_   z*Resolve.push_MatchSpec.<locals>.<listcomp>  s*    @@@Ttzz$/?/?@D@@@r:   ra   c                :    g | ]}                     |          S rR   r  r^   rL   r   s     r8   r_   z*Resolve.push_MatchSpec.<locals>.<listcomp>  s'    AAAD))$//AAAr:   !)r&   r  	from_name
_is_singler   r   ry   r   r   rF  rG  rz   rn   r   r   r   push_MatchSpecrx   Anyname_var)r   Cr   sat_namemsimplenmtftgrouplibsr   ms2	sat_namess   ` `          r8   r  zResolve.push_MatchSpec  sd   ##D))KK!!=O""!!&)) 
 
XX4+?+?@P+Q+Q+WUWXXX
 
 
 
 
  	 KOOB333FTT 	r77a<<<<T"XXA M--a444FTT JOO---FTF 	A@@@@V@@@Dt99F##} = =68Kir2222immKK 3 3As ; ;<<9AAAADAAAI} >68Kir2222imm  t'7'7'<'<!<===i  A	

1hr:   c           
         t          t          t          j                            } j                                        D ]\  }} fd|D             }|D ]}|                    |           |                                         t          |                              }|	                    |j
        ||                    |          gz               j                                        D ]}|                                         |                    }                     |          D ]L}|j                            d          s0|	                    |j        |                     ||                     Mt&                              t*                    r-t&                              d|                                           |S )Nr,   c                :    g | ]}                     |          S rR   r  r  s     r8   r_   z'Resolve.gen_clauses.<locals>.<listcomp>  s'    >>>T%%d++>>>r:   r   z+gen_clauses returning with clause count: %d)r   rD   r   r-   ry   r   r.   r  r&   r/   
ExactlyOneNotrn   rA   r   rW   r   Orr  r=   r  r   r>   get_clause_count)	r   r   rW   r   r  r  rL   nkeyrK   s	   `        r8   gen_clauseszResolve.gen_clauses  s   273EFFGGG;,,.. 
	8 
	8KD%>>>>>>>E! $ $		(####		$**9T??;;<<A IIalEQUU1XXJ$67777 J%%'' 	F 	FD55))$//00Dood++ F Fw))$// FIIadD$*=*=a*D*DEEEF
 E"" 	II=q?Q?Q?S?S   r:   c                      fd|D             }t                               t                    r-t                               d                                           |S )Nc                >    g | ]}                     |          fS rR   r  r^   rK   r   r   s     r8   r_   z5Resolve.generate_spec_constraints.<locals>.<listcomp>+  s,    @@@B4&&q"--/@@@r:   z9generate_spec_constraints returning with clause count: %d)r=   r  r   r>   r  )r   r   r   r   s   ``  r8   generate_spec_constraintsz!Resolve.generate_spec_constraints*  se    @@@@@%@@@E"" 	IIK""$$   r:   c                      fd j                                         D             }t                              t                    r-t                              d                                           |S )Nc                Z    i | ]'}                     t          |                     d(S )ra   r   )r  r&   )r^   rW   r   r   s     r8   r   z2Resolve.generate_feature_count.<locals>.<dictcomp>4  sF     
 
 
 9D#A#A#ABBA
 
 
r:   z6generate_feature_count returning with clause count: %d)rz   r   r=   r  r   r>   r  )r   r   r   s   `` r8   generate_feature_countzResolve.generate_feature_count3  s    
 
 
 
 
**,,
 
 
 E"" 	IIH""$$   r:   c                     fd|D             S )Nc                h    i | ].}|j         	                    |j                   #d |j         z   d/S r  r   )r   r  )r^   rK   r   s     r8   r   z1Resolve.generate_update_count.<locals>.<dictcomp>@  sN     
 
 
#%")
@ABI@V@V
")OQ
 
 
r:   rR   r   r   r   s    ` r8   generate_update_countzResolve.generate_update_count?  s.    
 
 
 
).
 
 
 	
r:   c           	         i } j                                         D ]\  }} fd|D             }t          j        |                                                      j                  }|D ]}                     |t          |                    }|                                D ]N\  }	}
||
vrE 	                    |	|          }|
                    |                    |	|          |           d||<   O|S )Nc                `    i | ]*}                     |          t          |j                  +S rR   )r  r1   r   r  s     r8   r   z3Resolve.generate_feature_metric.<locals>.<dictcomp>L  s3    WWW$**400#dm2D2DWWWr:   ra   r   )ry   r   r1   r   rA   rL  rz   r  r&   r  r  r0   )r   r   eqrW   r   
prec_featsactive_featsr  clause_id_for_featureprec_sat_namer   feature_metric_ids   `           r8   generate_feature_metriczResolve.generate_feature_metricD  s6     ;,,.. 	2 	2KD%WWWWQVWWWJ9j&7&7&9&9:GGVVL$ 2 2(,(;(;y555) )% 0:/?/?/A/A 	2 	2+M88++,0,E,E)4- -) 

EE-1FGG-   12,-	2	2 	r:   c                $      fd|D             S )Nc                N    i | ]!}d                      |j                  z   d"S r  )r  rW   r  s     r8   r   z2Resolve.generate_removal_count.<locals>.<dictcomp>_  s2    IIIRd))!RW555qIIIr:   rR   r  s   `` r8   generate_removal_countzResolve.generate_removal_count^  s!    IIIII5IIIIr:   c                $      fd|D             S )Nc                V    i | ]%}|j         	                    |j                  d &S r`  )r   r  rW   r  s     r8   r   z2Resolve.generate_install_count.<locals>.<dictcomp>b  s4    RRRrbkR##Arw//RRRr:   rR   r  s   `` r8   generate_install_countzResolve.generate_install_counta  s!    RRRRRURRRRr:   c                $      fd|D             S )Nc                >    i | ]}                     |          d S r`  r  )r^   r  r   r   s     r8   r   z2Resolve.generate_package_count.<locals>.<dictcomp>e  s+    @@@"##Ar**A@@@r:   rR   )r   r   missings   `` r8   generate_package_countzResolve.generate_package_countd  s!    @@@@@@@@@r:   c                N    i }i }i }i }i }i }	|D ],}
t          |
          }
|	                    |
j        g            -|	                                D ]L\  }} fd j                            |g           D             }d }|D ]\  }|rt          fd|D                       r$|dx}x}x}x}}n|d         |d         k    s|d         |d         k    r|dz  }dx}x}x}}nr|d         |d         k    r|dz  }dx}x}}nT|d         |d         k    r
|dz  }dx}}n8|d         |d         k    r|dz  }d}n j        s|d         |d         k    r|dz  }                               }|s|r|||<   |s|r|||<   |s|r|||<   |s|r|||<   |s|r|||<   |}N|||||fS )	Nc                >    g | ]}                     |          |fS rR   )r   )r^   r)  r   s     r8   r_   z4Resolve.generate_version_metrics.<locals>.<listcomp>~  s,    PPPT%%a((!,PPPr:   c              3  $   K   | ]
}|k    V  d S rU   rR   )r^   rO  rL   s     r8   rc   z3Resolve.generate_version_metrics.<locals>.<genexpr>  s'      ">">419">">">">">">r:   r   r   r  rF         )	r&   r  rW   r   ry   r   r   ru   r  )r   r   r   include0eqceqveqbeqaeqtsdictr?  rW   targetspkgspkeyr   icivibitiar%  rL   s   `                     @r8   generate_version_metricsz Resolve.generate_version_metricsg  s     	) 	)A!AQVR(((( #[[]] )	# )	#MD'PPPPdkoodB6O6OPPPDD &* ## ##!T s">">">">g">">">>> <-..B..b.2!WA..$q'[^2K2K!GB())B))b22!WA..!GB#$$B$bb!WA..!GBKB!WA..!GBBB7 DG{ST~<U<U!GB $ 0 0 6 6 , ,)+C& , ,)+C& , ,)+C& , ,)+C& , ,)+C&"G##J Cc3&&r:   	must_havedict[str, PackageRecord]list[PackageRecord]c                r   t          t                    sJ i }                                D ]0\  }}|| j        v r"d |                     |          D             ||<   1t
          rxd|v rt                                D ]_\  }}| j                            |          }t          |d          r0|j        t          j
        k    r||                             d           `t          |          }                                fd|D             }|                                                               |S )Nc                    h | ]	}|j         
S rR   rV   r  s     r8   rj   z*Resolve.dependency_sort.<locals>.<setcomp>  s    (Q(Q(QR(Q(Q(Qr:   condar  c                B    g | ]}|v                      |          S rR   )r  )r^   rl   rG  s     r8   r_   z+Resolve.dependency_sort.<locals>.<listcomp>  s/    PPPsi?O?O)--$$?O?O?Or:   )r   dictr   rn   r   r   r   rf   r  r#   r   r   r   r  r   rA   )	r   rG  digraphrc  rL   distrecordsorted_keysr   s	    `       r8   dependency_sortzResolve.dependency_sort  sM    )T*****"+//"3"3 	R 	RL$tz!!(Q(Q4??4;P;P(Q(Q(Q%  	7g((&/oo&7&7 7 7"d--68,, 7*BS1S1SL)--g666w''NN$$	 QPPPPPPi&&(()))r:   c           
        t                               d           |sd g fS i }g }|D ]S}|||                     |          <   |                    t	          |j         d|j         d|j                              Tt          d |D             d| j	                  }|
                                }|                    ||          }|                    |          }t          |          S )N1Checking if the current environment is consistentr@  c                    i | ]}||S rR   rR   r]   s     r8   r   z5Resolve.environment_is_consistent.<locals>.<dictcomp>  s    777TdD777r:   Tro   )r=   r>   r  rx   r&   rW   r   r  rQ   ro   r  r  r2   bool)	r   	installedsat_name_mapr   rL   r2r   constraintsr7   s	            r8   environment_is_consistentz!Resolve.environment_is_consistent  s    		EFFF 	8O 	P 	PD37L))$//0LLdi#M#M$,#M#M#M#MNNOOOO77Y777VVVNN221e<<55%%H~~r:   c                  	 |sdS t          |          t          |          z  }|                     |          }d	fd	}|r8t          |d| j                  		                                 ||d          }nd }|rd}n^t
          j        rPt          | j        d| j                  		                                t          t          |||                    }nd }|S )NrR   Fc                \                         |           }                    ||          S rU   r  r2   r   add_ifr\  r   r[  s      r8   mysatz,Resolve.get_conflicting_specs.<locals>.mysat  ,    66q%@@K55f---r:   TrW  )r2   r  r   )
r1   rn  rQ   ro   r  r   r  rn   r   r   )
r   r   r  	all_specsreduced_indexrc  r7   final_unsat_specsr   r[  s
           @@r8   get_conflicting_specszResolve.get_conflicting_specs  s#    	2JJ^!4!44	..y99	. 	. 	. 	. 	. 	. 	.  	t}EEEB  AuY--HHH 	% "( 
	%TDMBBBB  A %,u^  ! ! !%  r:   c           
         t                               d           |sd g fS i g }|D ]S}|                     |          <   |                    t	          |j         d|j         d|j                              Td                                 D             }d |D             }d|v r3d|vr/||d                  }d|j	        v rd |j	        D             }||_	        t          |d j        	          }	|	                                |	                    |          }
                    |
          }d x}}|r|r fd
t                      |	                    |          }                    |                                          \  }}                    fdfd|D             D                        |D ] } t	          |          j                   !t'                    t'                    k     rP}fd                                D             }t                               dd                    |                     |rt                               d|           ||fS )NrU  r@  c                    i | ]}||S rR   rR   r]   s     r8   r   z)Resolve.bad_installed.<locals>.<dictcomp>
  s    BBBDT4BBBr:   c                    i | ]
}|j         |S rR   rV   )r^   r)  s     r8   r   z)Resolve.bad_installed.<locals>.<dictcomp>  s    111!AFA111r:   r   pipc                    g | ]
}|d k    |S )rl  rR   r  s     r8   r_   z)Resolve.bad_installed.<locals>.<listcomp>  s    III!a5jjAjjjr:   TrW  c                    | |vr\|                     |            j                            | g           D ]-}                    |          D ]} |j        |           ,d S d S rU   )r   ry   r   r   rW   )rW   r  fnrK   get_r   s       r8   rp  z#Resolve.bad_installed.<locals>.get_  s    v%%JJt$$$"koodB77 2 2"&//""5"5 2 2B D&11112 &%2 2r:   c              3  X   K   | ]$}|r |d          dk    d|v|         d         V  %dS )r   r  r  rW   NrR   )r^   r  rZ  s     r8   rc   z(Resolve.bad_installed.<locals>.<genexpr>&  s\         !)s 2 2s(7J7J X&v.7J7J7J7J r:   c              3  B   K   | ]}                     |          V  d S rU   
from_indexr^   r?  r   s     r8   rc   z(Resolve.bad_installed.<locals>.<genexpr>(  s-       C CQa C C C C C Cr:   c                .    g | ]\  }}|d          v|S rV   rR   )r^   r  r|  r  s      r8   r_   z)Resolve.bad_installed.<locals>.<listcomp>0  s6       %#6{&00 000r:   z-Limiting solver to the following packages: %s, zPackages to be preserved: %s)r=   r>   r  rx   r&   rW   r   r  rA   rI   rQ   ro   r  r  r2   r1   r*  minimizer   r   r   rK  )r   rY  r  r   rL   	new_indexname_mappython_precnew_depsr[  r\  r7   limitxtraeq_optional_cri   r   r   rp  rZ  r  s   `                @@@@r8   bad_installedzResolve.bad_installed  s   		EFFF 	8O 	P 	PD37L))$//0LLdi#M#M$,#M#M#M#MNNOOOOBBL,?,?,A,ABBB	11y111xE$9$9#HX$67K+++II{':III&.#Yt}===NN221e<<55%%  	4  	2 2 2 2 2 2 UUF55a??M**]AEEGG<<KHaMM     C C C C( C C C      " 3 3Yt__)622226{{S....   )5););)=)=  
 		CTYYuEUEU    	<II4d;;;d{r:   c                j    |r/d |D             |                     fd|D                        d S d S )Nc                    i | ]
}|j         |S rR   rV   r]   s     r8   r   z'Resolve.restore_bad.<locals>.<dictcomp>>  s    666TY666r:   c              3  .   K   | ]}|j         v|V  d S rU   rV   )r^   r)  r=  s     r8   rc   z&Resolve.restore_bad.<locals>.<genexpr>?  s/      CCaqvU/B/B/B/B/B/BCCr:   )r   )r   r?  preserver=  s      @r8   restore_badzResolve.restore_bad<  sX     	D66666EKKCCCC8CCCCCCCC	D 	Dr:   c                   t          t          t          |                    }d |D             }t                              d           |                     ||          \  }}|D ]}|| j        vr|j        |j        |j	        }
}	}|j
        j        }||v s|||vr8|r$t          ||                                          }nt          ||	|
|          }|                    d|           t          |          |fS )Nc                    h | ]	}|j         
S rR   rV   ru  s     r8   rj   z(Resolve.install_specs.<locals>.<setcomp>C  s    (((Q!&(((r:   z*Checking satisfiability of current install)rW   r   )rW   r   r  r  r   )rw   mapr&   r=   r>   r  rn   rW   r   r  r  canonical_namerx  r  r   )r   r   rY  update_depsr  r}  r  rL   rW   r   r  schannelr   s                r8   install_specszResolve.install_specsA  s   SE**++((%(((		>???,,Y>>x 	" 	"D4:%%#'9dlDJ5'D|2Hv~~!2t57H7H   d4==??CCC weX   LLD!!!!U||X%%r:   c                    |                      ||pg |          \  }}g }|r|                     ||d          }|                     ||           |S )NF)	returnall_remove)r  solver  )r   r   rY  r  r  r  r?  s          r8   installzResolve.installZ  sa    ,,UIO[QQx 	I::ey%:HHDx(((r:   c           
     &   g }t          t          |          D ]`}|                                r&|                    t          |dd                     <|                    t          |d                     ad |D             }|                     ||          \  }}g }|D ]l}	|	j        |	j        }}
|
|v r||                    |	           -|                    t          |
|rd|z   nd d|	                                                     m||fS )Nr  T)r   r   r  c                *    h | ]}|j         	|j         S rR   rV   ru  s     r8   rj   z'Resolve.remove_specs.<locals>.<setcomp>q  s!    333QAF3!&333r:   z>=)rW   r   r   r   )r  r&   r  rx   r  rW   r   rx  )r   r   rY  nspecsr?  r  r}  ri   r  rL   r  vers               r8   remove_specszResolve.remove_specsb  sK    Y&& 	; 	;A ||~~ ;i3FFFGGGGiD999::::33&333%%i88q 	 	DiBV||"%%%% .1 ;s

t!%#}}	      xr:   c                    |                      ||          \  }}|                     |d          }|                     ||           |S )NT)r  )r  r  r  )r   r   rY  r  r?  s        r8   removezResolve.remove  sK    ++E9==xzz%z..x(((r:   r   rw   r  rX  c           	     :   89:;< |r4t          |d         t                    st          d |D                       }t          |          }t                              t                    rAt          d t          |          D                       }t          	                    d|           |sdS t          	                    d           t          |          }                     |t          j                   }	|	st                      }
t                      }|D ]P}                     |          s9|j         j        v r|                    |           ;|
                    |           Q|
rt%          |
          |rt'          d |D             d	
          |rt'          i                                |||           t          	                    d           d@8<fd	}8fd989fd}t+          |	d j                  <<                                8 ||d          }|s(|rt'          i                                |||           g }g }g }t          <j                  }t          |          D ]\  }}|j        |v r|                    |j                   |j        s%|j        s||k    r|n|                    |           Tt9          <                    |                    rFt          |j        d|j                  }|                    |           |                    |           |                    d |D                        t                              t                    rt          	                    dt          t=          d |D                                            t          	                    dt          t=          d |D                                            t          	                    dt          t=          d |D                                            t          	                    dt          t=          d |D                                            t          	                    d           |rJ<                    8|          }8                     ||          \  }}t          	                    d|           t          	                    d           <!                    8|          \  }}}}}8                     ||          \  }}8                     ||          \  }}t          	                    d||           t          	                    d           <"                    8          }8                     ||          \  }}t          	                    d |           <#                    8          } 8                     | |          \  }}!t          	                    d!|!           t          	                    d"           8                     ||          \  }}"t          	                    d#|"           t          	                    d$           8                     ||          \  }}#t          	                    d%|#           |sdt          	                    d&           <$                    8|          }$8                     |$|          \  }}%t          	                    d'|%           t          	                    d(           <%                    8|          }&8                     |&|          \  }}'t          	                    d)|'           t          	                    d*           <!                    8|          \  }(})}*}+},8                     |(|          \  }}-8                     |)|          \  }}.8                     |*|          \  }}/8                     |+|          \  }}0t          	                    d+|-|.|/|0           t          	                    d,           <&                    8|          }(8                     |(|d-          \  }}t          	                    d.|            ||          sI|,'                    |           8                     |,|          \  }}1t          	                    d/|1           t          	                    d0           d1}2g }3 9|          }4|3                    |4           	 t          8fd2|4D                       }58(                    |5fd          }|nG|2d1z  }2|2d3k    rt          	                    d4           n! 9|          }4|3                    |4           ||2d1k    rtS          tU          t          |3                    }6t          j+        |6 ::fd5|6D             }7t          j,        sItZ          .                    d6|2d3k    rd7n|2d8t          d9 |7D                       |2d3k    rd:nd;            fd< j/        0                                D             ;|r!t          |3          d1k    rtc                      t=          ;fd=|3d         D             d> ?          S )ANr   c              3  4   K   | ]}t          |          V  d S rU   r%   rh   s     r8   rc   z Resolve.solve.<locals>.<genexpr>  s(      661)A,,666666r:   c              3  \   K   | ]'\  }}t          d |||j        |j        fz            V  (dS )z%i: %s target=%s optional=%sN)r   r   r   )r^   r3  r?  s      r8   rc   z Resolve.solve.<locals>.<genexpr>  sU        Aq 2aAHaj5QQRR     r:   zSolving for: %srR   z2Solve: Getting reduced index of compliant packages)r  c                    g | ]}|gS rR   rR   r  s     r8   r_   z!Resolve.solve.<locals>.<listcomp>  s    999QaS999r:   F)rR  z!Solve: determining satisfiabilityc                \                         |           }                    ||          S rU   r`  ra  s      r8   rc  zResolve.solve.<locals>.mysat  rd  r:   c                4    d fd| D             D             S )Nc                6    g | ]}|r|d          dk    d|v|S )r   r  r  rR   )r^   qs     r8   r_   z0Resolve.solve.<locals>.clean.<locals>.<listcomp>  s?        1A )5r:   c              3  B   K   | ]}                     |          V  d S rU   rs  ru  s     r8   rc   z/Resolve.solve.<locals>.clean.<locals>.<genexpr>  s-      77a!,,q//777777r:   rR   )solr   s    r8   cleanzResolve.solve.<locals>.clean  s8     77773777   r:   c                     |           }t          fd|D                       }                    |fd          dS dS )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  h   K   | ],}                                         |                    V  -d S rU   r  r  r^   r  r   s     r8   rc   z6Resolve.solve.<locals>.is_converged.<locals>.<genexpr>  9      EEaAEE!++a..11EEEEEEr:   F)	includeIfNT)r   r2   )r7   	psolutionnclauser   r  s      r8   is_convergedz#Resolve.solve.<locals>.is_converged  sV     hIEEEE9EEEEEGuugZ5u119t5r:   TrW  )r   r   c              3  4   K   | ]}t          |          V  d S rU   r%   ru  s     r8   rc   z Resolve.solve.<locals>.<genexpr>  s(      11aYq\\111111r:   zRequested specs: %sc              3  4   K   | ]}t          |          V  d S rU   rt  ru  s     r8   rc   z Resolve.solve.<locals>.<genexpr>  (      <S<SSVV<S<S<S<S<S<Sr:   zOptional specs: %sc              3  4   K   | ]}t          |          V  d S rU   rt  ru  s     r8   rc   z Resolve.solve.<locals>.<genexpr>  s(      ;R;RqCFF;R;R;R;R;R;Rr:   zAll other specs: %sc              3  4   K   | ]}t          |          V  d S rU   rt  ru  s     r8   rc   z Resolve.solve.<locals>.<genexpr>  r  r:   zmissing specs: %sc              3  4   K   | ]}t          |          V  d S rU   rt  ru  s     r8   rc   z Resolve.solve.<locals>.<genexpr>  s(      :Q:Qa3q66:Q:Q:Q:Q:Q:Qr:   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  h   K   | ],}                                         |                    V  -d S rU   r  r  s     r8   rc   z Resolve.solve.<locals>.<genexpr>\  r  r:   
   zToo many solutions; terminatingc                N    g | ]!}t          t          |          z
            "S rR   )r   r1   )r^   r  commons     r8   r_   z!Resolve.solve.<locals>.<listcomp>j  s,    AAA3VCHHv-..AAAr:   z

Warning: z>10z@ possible package resolutions (only showing differing packages):c              3  @   K   | ]}d                      |          V  dS )rw  N)rK  )r^   diffs     r8   rc   z Resolve.solve.<locals>.<genexpr>q  s,       C CT4 C C C C C Cr:   z
  ... and othersr  c                <    i | ]}                     |          |S rR   r  r  s     r8   r   z!Resolve.solve.<locals>.<dictcomp>y  s)    RRRdT%%d++TRRRr:   c              3  (   K   | ]}|         V  d S rU   rR   )r^   r  ry  s     r8   rc   z Resolve.solve.<locals>.<genexpr>  s(      ??XYx ??????r:   c                    | j         S rU   rV   rX   s    r8   rZ   zResolve.solve.<locals>.<lambda>  s    qv r:   r  r   )2r   r&   r   r1   r=   r  r   r   r  r>   r   rn  r   r  rH   rW   ry   r   r   r    r  rQ   ro   r  r  r   r   rx   r   r   r   r*  rx  rF  r  r'  r-  r  r1  r   r2   rw   r  rL  r  	stdoutloginforn   rA   r4   )=r   r   r  r  r   r   should_retry_solvedlistlen0rf  not_found_packageswrong_version_packagesr?  rc  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diffsr   r  r  ry  r[  s=   `                                                       @@@@@r8   r  zResolve.solve  s
     	7E!Hi88 	76666666EE

E"" 	0  %e,,    E II'/// 	2 			FGGG5zz..(C$C / 
 
  	H "%%(UU" 2 2((++ 2v,,.2215555*..q111! ,-?@@@' (99"8999%    " H ),,,##E<GGG 			5666	. 	. 	. 	. 	. 	. 	.
	 	 	 	 		 	 	 	 	 	 ]D4=AAANN5%% 	H! H(,,,##E<GGGBIe$$ 	  	 DAqvQV$$$:  (:a4iiUBB1EEEER__Q''((  aftAHEEEQQ115111111E"" 	TII+Xf<S<SU<S<S<S6S6S-T-TUUUII*HV;R;RE;R;R;R5R5R,S,STTTII+Xf<S<SU<S<S<S6S6S-T-TUUUII)8F:Q:Q5:Q:Q:Q4Q4Q+R+RSSS 			4555 	:55a??MZZx@@NHdII2D999 			BCCC;=;V;Vu<
 <
8(Hh **Xx88%Hh77$		A5$OOO 			788844Q77$4h??$		+T222 66q99$5x@@$		0$777 			GHHHHh77$		4d;;; 			IJJJ zz(H==*		%z222  	DIIHIII"$";";Au"E"Ejj)<hGGOHeII;UCCC 			@AAA''511**T844%		/777 			8	
 	
 	
 (*'B'B1e'L'L$dD$**T844%D(33$D(33$**T844%		R	
 	
 	
 			5666((E22D(4@@$		-t444|H%% 	5KK!!!jjx88OHeII,e444		3444
E(OO	)$$$
	)EEEE9EEEEEGuugZ..HAIDbyy		;<<<hIi(((
	) !88#c:..//F%v.FAAAA&AAAE< 	 "&44  C CU C C CCCC04r		,,rA   SRRRdj>O>O>Q>QRRR	 	%:"""nn$ ????A???EUEU
 
 
 	
r:   )FrR   )NNr   r`  )TF)r   r&   r  r  )rL   r'   r  r  rU   r   )rG  rH  r  rI  )NTF)FFNNF)r   rw   r  rX  r  rI  )4__name__
__module____qualname__r   r   r   r   r   r   r   r  r  r  r-  r5  r  r  r   rj  rH  r   rn  r  rH   r   r   staticmethodrp   r  r  r  r  r  r  r  r  r'  r*  r-  r1  rF  rS  r]  rh  r  r  r  r  r  r  r  __classcell__)r   s   @r8   rQ   rQ   s   s       .R .R .R .R`

 

 

 

 

    ( ( ( (T& & & &B&$ &$ &$ &$P2 2 2:B B BHW W WK K K K >?' ' ' 'R# # #.B B B BH  * ; ; ];	 	 	 ]x(((GLq q q )(qf1 1 1   (      (   \$3 3 3 3 ( ( \( - - \-( ( (T ]x(((  )(8  
 
 

 
 

  4J J JS S SA A AA' A' A' A'F$ $ $ $L   !  !  !D9 9 9vD D D
& & & &2   "  "  " H   ]x(((   y
 y
 y
 y
 )(y
 y
 y
 y
 y
r:   rQ   )F__doc__
__future__r   r  r  collectionsr   r   	functoolsr   loggingr   r   r	   conda.common.iteratorsr
   rv   _vendor.frozendictr   r   auxlib.decoratorsr   base.constantsr   r   r   base.contextr   common.compatr   	common.ior   r   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  r=   r  UnsatisfiablePYCOSATPYCRYPTOSATPYSATr<   rD   rO   rQ   rR   r:   r8   <module>r     s    # " " " " "      * * * * * * * *       $ $ $ $ $ $ $ $       = = = = = = ? ? ? ? ? ? , , , , , , R R R R R R R R R R ! ! ! ! ! ! ! ! ! ! ! ! . . . . . . . .                & % % % % %            2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ( ( ( ( ( ( ) ) ) ) ) ) ( ( ( ( ( (iI'((	 #/  ]!2; 4*9*A " " " "J  "S
 S
 S
 S
 S
 S
 S
 S
 S
 S
r:   