
    si6k                     b   S SK r S SKJr  S SKJr  S SKJrJr  SSKJr  \" \	5      r
\ R                  r\* r " S S5      r " S	 S
5      r " S S5      r " S S\5      r " S S\5      r " S S\5      r\\\S.r\R+                  5        V Vs0 s H  u  pX_M	     snn r " S S5      rgs  snn f )    N)array)combinations)DEBUG	getLogger   )TRACEc                   <    \ rS rSrSrS rS rS rS rS r	S r
S	rg
)_ClauseList   zEStorage for the CNF clauses, represented as a list of tuples of ints.c                 ~    / U l         U R                   R                  U l        U R                   R                  U l        g N_clause_listappendextendselfs    3lib/python3.13/site-packages/conda/common/_logic.py__init___ClauseList.__init__   s2     ''..''..    c                 ,    [        U R                  5      $ )z Return number of stored clauses.lenr   r   s    r   get_clause_count_ClauseList.get_clause_count   s    4$$%%r   c                 ,    [        U R                  5      $ )z
Get state information to be able to revert temporary additions of
supplementary clauses.  _ClauseList: state is simply the number of clauses.
r   r   s    r   
save_state_ClauseList.save_state   s    
 4$$%%r   c                 &    Un/ U R                   US& g)g
Restore state saved via `save_state`.
Removes clauses that were added after the state has been saved.
Nr   )r   saved_statelen_clausess      r   restore_state_ClauseList.restore_state&   s    
 "*,+,'r   c                     U R                   $ )+Return clauses as a list of tuples of ints.r"   r   s    r   as_list_ClauseList.as_list.   s       r   c                     [        S5      nU R                   H%  nUR                  U5        UR                  S5        M'     U$ )FReturn clauses as a flat int array, each clause being terminated by 0.ir   )r   r   r   r   )r   clause_arraycs      r   as_array_ClauseList.as_array2   s?    Sz""A"" # r   r   N)__name__
__module____qualname____firstlineno____doc__r   r   r   r%   r)   r0   __static_attributes__ r   r   r
   r
      s#    O/&&-!r   r
   c                   H    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rSrg)_ClauseArray;   zd
Storage for the CNF clauses, represented as a flat int array.
Each clause is terminated by int(0).
c                     [        S5      U l        U R                  R                  U l        U R                  R                  U l        g )Nr-   )r   _clause_arrayr   _array_appendr   _array_extendr   s    r   r   _ClauseArray.__init__A   s8    "3Z "//66!//66r   c                 8    U H  nU R                  U5        M     g r   )r   )r   clausesclauses      r   r   _ClauseArray.extendH   s    FKK r   c                 H    U R                  U5        U R                  S5        g )Nr   )r?   r>   )r   rC   s     r   r   _ClauseArray.appendL   s    6"1r   c                 8    U R                   R                  S5      $ )z
Return number of stored clauses.
This is an O(n) operation since we don't store the number of clauses
explicitly due to performance reasons (Python interpreter overhead in
self.append).
r   )r=   countr   s    r   r   _ClauseArray.get_clause_countP   s     !!''**r   c                 ,    [        U R                  5      $ )z
Get state information to be able to revert temporary additions of
supplementary clauses. _ClauseArray: state is the length of the int
array, NOT number of clauses.
)r   r=   r   s    r   r   _ClauseArray.save_stateY   s     4%%&&r   c                 8    Un[        S5      U R                  US& g)r!   r-   N)r   r=   )r   r#   len_clause_arrays      r   r%   _ClauseArray.restore_statea   s"    
 '05c
+,-r   c              #      #    / nU R                    H9  nUS:X  a  [        U5      v   UR                  5         M(  UR                  U5        M;     g7f)r(   r   N)r=   tupleclearr   )r   rC   vs      r   r)   _ClauseArray.as_listi   s@     ##AAvFm#a  $s   AAc                     U R                   $ )r,   )r=   r   s    r   r0   _ClauseArray.as_arrays   s    !!!r   )r>   r?   r=   N)r2   r3   r4   r5   r6   r   r   r   r   r   r%   r)   r0   r7   r8   r   r   r:   r:   ;   s/    
7 +';!"r   r:   c                   N    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rSrg)
_SatSolverx   zNSimple wrapper to call a SAT solver given a _ClauseList/_ClauseArray instance.c                     U=(       d    0 U l         [        5       U l        U R                  R                  U l        U R                  R
                  U l        g r   )_run_kwargsr
   _clausesr   
add_clauser   add_clauses)r   
run_kwargss     r   r   _SatSolver.__init__{   s;    %+#--..==//r   c                 6    U R                   R                  5       $ r   )r[   r   r   s    r   r   _SatSolver.get_clause_count   s    }}--//r   c                 6    U R                   R                  5       $ r   )r[   r)   r   s    r   r)   _SatSolver.as_list   s    }}$$&&r   c                 6    U R                   R                  5       $ r   )r[   r   r   s    r   r   _SatSolver.save_state   s    }}''))r   c                 8    U R                   R                  U5      $ r   )r[   r%   )r   r#   s     r   r%   _SatSolver.restore_state   s    }}**;77r   c                     U R                   R                  5       nUR                  U5        U R                  " U40 UD6nU R	                  U5      nU R                  U5      nU$ r   )rZ   copyupdatesetupinvokeprocess_solution)r   mkwargsr^   solversat_solutionsolutions          r   run_SatSolver.run   sZ    %%**,
&!A,,{{6*((6r   c                     [        5       e)z?Create a solver instance, add the clauses to it, and return it.NotImplementedError)r   rn   ro   s      r   rk   _SatSolver.setup       !##r   c                     [        5       e)z@Start the actual SAT solving and return the calculated solution.rv   )r   rp   s     r   rl   _SatSolver.invoke   ry   r   c                     [        5       e)zv
Process the solution returned by self.invoke.
Returns a list of satisfied variables or None if no solution is found.
rv   r   rq   s     r   rm   _SatSolver.process_solution   s    
 "##r   )r[   rZ   r\   r]   N)r2   r3   r4   r5   r6   r   r   r)   r   r%   rs   rk   rl   rm   r7   r8   r   r   rW   rW   x   s2    X00'*8$$$r   rW   c                   *    \ rS rSrSS jrS rS rSrg)_PycoSatSolver   c                 L    SSK Jn  U" U R                  R                  5       XS9$ )Nr   )	itersolve)vars
prop_limit)pycosatr   r[   r)   )r   rn   limitro   r   s        r   rk   _PycoSatSolver.setup   s!    % ..0qKKr   c                 H     [        U5      nAU$ ! [         a    Sn AU$ f = f)NUNSAT)nextStopIteration)r   iter_solrq   s      r   rl   _PycoSatSolver.invoke   s:    	#>L   	#"L	#s    !!c                     US;   a  g U$ )N)r   UNKNOWNr8   r}   s     r   rm   _PycoSatSolver.process_solution   s    //r   r8   Nr   r2   r3   r4   r5   rk   rl   rm   r7   r8   r   r   r   r      s    Lr   r   c                   *    \ rS rSrSS jrS rS rSrg)_PyCryptoSatSolver   c                 p    SSK Jn  U" US9nUR                  U R                  R	                  5       5        U$ )Nr   )Solver)threads)pycryptosatr   r]   r[   r)   )r   rn   r   ro   r   rp   s         r   rk   _PyCryptoSatSolver.setup   s/    &(4==0023r   c                 <    UR                  5       u  p#U(       d  S nU$ r   )solve)r   rp   satrq   s       r   rl   _PyCryptoSatSolver.invoke   s    "LLNLr   c                 r    U(       d  g [        U5       VVs/ s H  u  p#U(       d  M  UPM     nnnU$ s  snnf r   )	enumerate)r   rr   r-   bs       r   rm   #_PyCryptoSatSolver.process_solution   s1    "+H"5;"5$!A"5; <s   33r8   N)r   r   r8   r   r   r   r      s    r   r   c                   &    \ rS rSrS rS rS rSrg)_PySatSolver   c                 r    SSK Jn  U" 5       nUR                  U R                  R	                  5       5        U$ )Nr   )Glucose4)pysat.solversr   append_formular[   r)   )r   rn   ro   r   rp   s        r   rk   _PySatSolver.setup   s,    *dmm3356r   c                 v    UR                  5       (       d  S nOUR                  5       nUR                  5         U$ r   )r   	get_modeldelete)r   rp   rq   s      r   rl   _PySatSolver.invoke   s/    ||~~L!++-Lr   c                     Uc  S nU$ UnU$ r   r8   )r   rq   rr   s      r   rm   _PySatSolver.process_solution   s     H  $Hr   r8   Nr   r8   r   r   r   r      s    r   r   )r   r   pysatc                       \ rS rSrS\\   4S jrS rS rS r	S r
S rS	 rS
 rS rSS jrS S jrS S jrS S jrS S jrS!S jrS rS rS!S jrS rS rS rS rS rS"S jrS#S jrSS jrSr g)$Clauses   r   c                     SU l         Xl         [        U   nU" 5       U l        U R
                  R                  U l        U R
                  R                  U l        g ! [         a    [	        SU 35      ef = f)NFzUnknown SAT solver: )unsatrn   _sat_solver_str_to_clsKeyErrorrw   _sat_solverr\   r]   )r   rn   sat_solver_strsat_solver_clss       r   r   Clauses.__init__   s{    
	O3NCN *+ **55++77  	O%(<^<L&MNN	Os   	A A4c                 6    U R                   R                  5       $ r   )r   r   r   s    r   r   Clauses.get_clause_count	  s    0022r   c                 6    U R                   R                  5       $ r   )r   r)   r   s    r   r)   Clauses.as_list  s    ''))r   c                 0    U R                   S-   nXl         U$ )Nr   )rn   )r   rn   s     r   new_varClauses.new_var  s    FFQJr   c                    ^ [        U[        5      (       aN  U R                  5       mU R                  U4S jUS    5       5        U R                  U4S jUS    5       5        T$ U$ )Nc              3   2   >#    U  H  nT* 4U-   v   M     g 7fr   r8   .0yxs     r   	<genexpr>!Clauses.assign.<locals>.<genexpr>  s     81qbUQYs   r   c              3   0   >#    U  H  nT4U-   v   M     g 7fr   r8   r   s     r   r   r     s     7w!aTAXws   r   )
isinstancerP   r   r]   )r   valsr   s     @r   assignClauses.assign  sU    dE""A8Q887tAw77Hr   c                    [        S U 5       5      (       a  [        $ U Vs/ s H  o3[        :w  d  M  UPM     nn[        U5      nUS:X  a  [        $ US:X  a  US   $ [	        S U 5       5      (       a&  [        S U 5       / 5      [        S U 5       / 5      4$ U R                  [        U R                  U5      U5      $ s  snf )Nc              3   2   #    U  H  o[         :H  v   M     g 7fr   )FALSEr   rR   s     r   r   "Clauses.Combine.<locals>.<genexpr>  s     (4aEz4s   r   r   c              3   B   #    U  H  n[        U[        5      v   M     g 7fr   )r   rP   r   s     r   r   r   %  s     2Tz!U##Ts   c              3   *   #    U  H	  oS    v   M     g7fr   Nr8   r   s     r   r   r   &  s     ,t!1t   c              3   *   #    U  H	  oS    v   M     g7f)r   Nr8   r   s     r   r   r   &  s     7Kd!dr   )	anyr   TRUEr   allsumAllmapr   )r   argspolarityrR   nvs        r   CombineClauses.Combine  s    (4(((L-4a94-Y7K77N2T222,t,b137Kd7KR3PQQ88CT2H== .s
   C C c                    U R                   R                  5       nU" USU06n[        U[        5      (       a)  U R	                  US   5        U R	                  US   5        g U[
        [        1;  a  U R                  U(       a  UOU* 45        g U R                   R                  U5        U R                  =(       d    U[
        :H  U:g  U l	        g )Nr   r   r   )
r   r   r   rP   r]   r   r   r\   r%   r   )r   funcr   r   r#   r   s         r   EvalClauses.Eval*  s    &&113T-H-dE""T!W%T!W%$&OOXTD5:;**;7A'ADJr   c                 $    U R                  XSS9  g )NFr   r   r   r   r   s      r   PreventClauses.Prevent7  s    		$u	-r   c                 $    U R                  XSS9  g )NTr   r   r   s      r   RequireClauses.Require:  s    		$t	,r   Nc                     U* $ r   r8   )r   r   r   add_new_clausess       r   NotClauses.Not=  s	    r	r   c                    U[         :X  d
  U[         :X  a  [         $ U[        :X  a  U$ U[        :X  a  U$ X:X  a  U$ X* :X  a  [         $ X!:  a  X!p!U(       aM  U R                  5       nUS;   a  U R                  U* U4U* U4/5        US;   a  U R                  XQ* U* 4/5        U$ US;   a  U4U4/O/ nUS;   a  U* U* 4/O/ nXg4$ NTNFN)r   r   r   r]   r   fgr   r   r   pvalnvals           r   AndClauses.And@  s    :eL9H9H6H7L5q
 A<'   B
 B	 =(  1b1"+/H'<7qd|R%6!aRzBzr   c                 ~   U[         :X  d
  U[         :X  a  [         $ U[        :X  a  U$ U[        :X  a  U$ X:X  a  U$ X* :X  a  [         $ X!:  a  X!p!U(       aL  U R                  5       nUS;   a  U R                  U* X4/5        US;   a  U R                  UU* 4UU* 4/5        U$ US;   a  X4/O/ nUS;   a  U* 4U* 4/O/ nXg4$ r   )r   r   r   r]   r   s           r   Or
Clauses.Org  s    9T	K:H:H6H7K5qA<'  A2q*.=(   B
 B	 H#|3x!)]!:!u~zr   c                    U[         :X  a  U$ U[        :X  a  U R                  X#US9$ U[         :X  a  U$ U[        :X  a  U* $ X:X  a  [         $ X* :X  a  [        $ X!:  a  X!p!U(       aS  U R                  5       nUS;   a  U R	                  U* X4U* U* U* 4/5        US;   a  U R	                  XQ* U4XQU* 4/5        U$ US;   a	  X4U* U* 4/O/ nUS;   a	  U* U4X* 4/O/ nXg4$ Nr   r   r   )r   r   r   r   r]   r   s           r   XorClauses.Xor  s   :H988A8II:H92I6L7K5qA<'  A2q*rA2rl!;<=(  1b!*qaRj!9:H%-%=!aR!2%-%>!Q!R!Bzr   c                 &   U[         :X  a  U$ U[        :X  a  U$ U[         :X  a  U R                  XXES9$ U[        :X  a  U R                  U* X4US9$ U[        :X  a  U R                  XXES9$ U[         :X  a  U R                  X!* XES9$ X!:X  a  U R                  XXES9$ X!* :X  a  U R                  U* X4US9$ X1:X  a  U R                  XXES9$ X1* :X  a  U R                  X!* XES9$ X#:X  a  U$ X#* :X  a  U R	                  XXES9$ X#:  a  X2U* pnU(       a\  U R                  5       nUS;   a  U R                  U* U* U4U* X4U* X#4/5        US;   a  U R                  Xa* U* 4XaU* 4Xb* U* 4/5        U$ US;   a
  U* U4X4X#4/O/ nUS;   a  U* U* 4X* 4U* U* 4/O/ nXx4$ r  )r   r   r  r  r	  r   r]   )	r   r/   tr   r   r   r   r   r   s	            r   ITEClauses.ITE  s   9H:H97717KK:88QB_8MM:88A(8LL9771b(7LL67717KK788QB_8MM688A(8LL7771b(7LL6H788A(8LL5QB!A A<'  A2r1+AzQB:!FG=(  1b1"+qbzArA2;!GHH,4,D!Q!!("08M0I!aR1b'QB8,rzr   c                 n   [        5       nU H9  nU[        :X  a  M  U[        :X  d  U* U;   a  [        s  $ UR                  U5        M;     [	        U5      nUS:X  a  [        $ US:X  a  [        S U 5       5      $ US;   a  U Vs/ s H  oD4PM     snO/ nUS;   a  [        S U 5       5      /O/ nXg4$ s  snf )Nr   r   c              3   $   #    U  H  ov   M     g 7fr   r8   r   s     r   r   Clauses.All.<locals>.<genexpr>       (4a4   r   r   c              3   &   #    U  H  o* v   M	     g 7fr   r8   r   s     r   r   r    s     '$Qb$s   )setr   r   addr   r   rP   r   iterr   r   rR   r   r   r   s           r   r   Clauses.All  s    uADyEzaR4ZHHQK  Y7K1W(4((('/<'?d#dd#R,4,E'$''(2z $s   B2c                 b   [        5       nU H9  nU[        :X  a  M  U[        :X  d  U* U;   a  [        s  $ UR                  U5        M;     [	        U5      nUS:X  a  [        $ US:X  a  [        S U 5       5      $ US;   a  [        U5      /O/ nUS;   a  U Vs/ s H  oD* 4PM     snO/ nXg4$ s  snf )Nr   r   c              3   $   #    U  H  ov   M     g 7fr   r8   r   s     r   r   Clauses.Any.<locals>.<genexpr>  r  r  r   r   )r  r   r   r  r   r   rP   r  s           r   AnyClauses.Any  s    uAEzdqbDjHHQK  Y7L1W(4((( (L 8d}b(0M(At$t!t$rz %s   B,c                     / n[        [        U R                  U5      S5       H&  u  pEUR                  U R	                  XEU5      5        M(     U R                  X25      $ )N   )r   r   r   r   r  r   )r   r   r   combosv1v2s         r   AtMostOne_NSQClauses.AtMostOne_NSQ  sK    "3txx#6:FBMM$''"(34 ;||F--r   c                 `    [        U5      nS/[        U5      -  nU R                  X4SSSU5      $ )Nr   r   Tlistr   LinearBoundr   r   r   literalscoeffss        r   AtMostOne_BDDClauses.AtMostOne_BDD  4    :s8}$!QhGGr   c                     [        U5      nU R                  X5      nU R                  X5      nU R                  X44U5      $ r   )r(  r$  r  r   )r   r   r   r"  r#  s        r   ExactlyOne_NSQClauses.ExactlyOne_NSQ  s<    Dz/XXd%||RHh//r   c                 `    [        U5      nS/[        U5      -  nU R                  X4SSSU5      $ )Nr   Tr'  r*  s        r   ExactlyOne_BDDClauses.ExactlyOne_BDD   r/  r   c                 
   / nSn[        X!5       HH  u  pVU[        :X  a  XE-  nM  U[        :X  d  US:X  a  M'  US:  a	  XE-  nU* U* peUR                  XV45        MJ     [	        [        [        U5      6 5      =(       d    Su  p!XU4$ )Nr   )r8   r8   )zipr   r   r   rP   sorted)r   r+  r,  equationoffsetcoeffliterals          r   LB_PreprocessClauses.LB_Preprocess  s    !&3NE$%5A:qy"''wOOU,- 4 !fX&6!78DH''r   c                 N   [        S US U  5       5      nUS-
  SU4nU/n	0 n
U	R                  nU	R                  nU
R                  nU R                  nSnU	(       a  U	S   u  npXO-
  nX_-
  nUS::  a  UU:  a  [
        X" 5       '   M2  UU:  d  US:  a  [        X" 5       '   MM  UU   nUU   nUS-  nUU-  nUUS:  a  UOUU-   U4nU" U5      nUc
  U" U5        M  UUS:  a  UU-   OUU4nU" U5      nUc
  U" U5        M  U" [        U5      UUUSS9X" 5       '   U	(       a  M  X   $ )Nc              3   $   #    U  H  ov   M     g 7fr   r8   r   r/   s     r   r   Clauses.BDD.<locals>.<genexpr>       /!Ar  r   r   Tr  )r   r   popgetr  r   r   abs)r   r+  r,  ntermslohir   totaltarget
call_stackretcall_stack_appendcall_stack_popret_getr  csumndxlower_limitupper_limitLALChi_keythilo_keytlos                            r   BDDClauses.BDD  sy    /vgv//1*a'X
&--#''hh)"~C)K)KaK5$8(,N$%U"kAo(-N$%#BB1HCRKE264tby%@F&/C{!&)Q4"9D%@F&/C{!&) %(Bc8T%C !; j@ {r   c                 Z  ^ U(       a  U R                  X5      u  pnX7-  nTU-  m[        U5      nU(       a>  US   T:  a5  [        U4S jU 5       5      n	[        R                  [        SX5        X-  nOSn	[        S US U  5       5      n
U(       a  [        US/5      n[        TU
/5      mUT:  a  [        $ US:X  a  US:X  a  [        O[        nOU R                  XXTU5      nU	(       a8  U R                  XS   Vs/ s H  o* PM     snU5      nU R                  X4U5      nU$ s  snf )NrD  c              3   ,   >#    U  H	  oT:  v   M     g 7fr   r8   )r   r/   rJ  s     r   r   &Clauses.LinearBound.<locals>.<genexpr>P  s     0ARs   z+Eliminating %d/%d terms for bound violationr   c              3   $   #    U  H  ov   M     g 7fr   r8   rA  s     r   r   r`  X  rC  r  )r=  r   r   logr   maxminr   r   r\  r   r   )r   r+  r,  rI  rJ  
preprocessr   r:  rH  nprunerK  resaprunes       `         r   r)  Clauses.LinearBoundI  s!   '+'9'9('K$HfLB&LBVfRj2o000FGGDf FF/vgv//b!WBb%[!B7LQ;'$uC((8VXFCHH(7*;<*;Qb*;<hGE,,|X6C
 =s   ?D(c                     [         R                  [        5      (       a$  [         R                  SU R	                  5       5        U R
                  R                  XS9nU$ )Nz"Invoking SAT with clause count: %sr   )rb  isEnabledForr   debugr   r   rs   )r   rn   r   rr   s       r   _run_satClauses._run_satg  sI    E""II:D<Q<Q<ST##'''7r   c                    U R                   (       a  gU R                  (       d  / $ U R                  R                  5       nU(       a7  S n[	        U" U5      5      nU(       a  US   (       d  gU R                  U5        U R                  U R                  US9nU(       a%  Ub  U(       d  U R                  R                  U5        U$ )z
Calculate a SAT solution for the current clause set.

Returned is the list of those solutions.  When the clauses are
unsatisfiable, an empty list is returned.

Nc              3      #    S nU  H4  n[        U" U5      5      nU(       d  Uv     g US   [        :w  d  M0  Uv   M6     g 7f)Nc              3   V   #    U  H  nU[         :X  a  M  Uv   U[        :X  d  M    g    g 7fr   )r   r   )ccr/   s     r   preproc_.Clauses.sat.<locals>.preproc.<locals>.preproc_}  s(     :$9!  s   ))rD  )rP   r   )eqsru  rt  s      r   preprocClauses.sat.<locals>.preproc|  s?     " Bx|,B "v~  s
   2A	ArD  rl  )r   rn   r   r   r(  r]   ro  r%   )r   
additional	includeIfr   r#   rx  rr   s          r   r   Clauses.satm  s     ::vvI&&113!" gj12J!"~  ,==u=58+9**;7r   c           
        ^^ Ub  [        U5      U R                  :  a%  [        R                  S5        U R	                  5       nUb  U R
                  (       a5  [        R                  S5        X2(       a  [        S U 5       5      S-   4$ S4$ U(       d  [        R                  S5        US4$ U R                  X5      u  pn[        U5      nS nS	 nSmSn	US:  a  S
OS GHK  n
U
(       a  [        R                  [        S5        UnO[        R                  [        S5        Un[        X!5       VVs0 s H  u  pX_M	     nnnU" X>5      nUnU R                  n[        R                  [        5      (       a  U R                  5       nU R                  R                  5       nU(       a  U
(       d  US-
  n	[        R                  [        STU5         U	c	  TU-   S-  mOU	mU
(       a}  [!        U4S j[        X!5       5       5      n[!        UU4S j[        X!5       5       5      nU R#                  U R$                  U5        U(       a  U R'                  U R$                  U5        OU R'                  U R(                  XTTS5        [        R                  [        5      (       a/  [        R                  [        STTWU R                  5       U-
  5        U R	                  5       nUc)  TS-   m[        R                  [        STU5        TU:  a  OO6TT:H  nUnU" UU5      nUn[        R                  [        STU5        U(       a  OLUU l        U R                  R                  5       U:w  a  U R                  R+                  U5        SU l        Sn	GM  [        R                  SU
(       a  SOSU4-  5        US:X  a    X?4$ U
(       aL  [        X!5       VVs/ s H  u  pX::  d  M  UPM     nnnU Vs/ s H  oU::  d  M
  UPM     nnU" X>5      n	UmGM-  [        R                  SU" X>5      -  5        GMN     UW4$ s  snnf s  snnf s  snf )z
Minimize the objective function given by (coeff, integer) pairs in
zip(coeffs, literals).
The actual minimization is multiobjective: first, we minimize the
largest active coefficient value, then we minimize the sum.
Nz#Clauses added, recomputing solutionzConstraints are unsatisfiablec              3   8   #    U  H  n[        U5      v   M     g 7fr   )rG  rA  s     r   r   #Clauses.minimize.<locals>.<genexpr>  s     71As   r   z!Empty objective, trivial solutionr   c                 .   ^ [        U4S jU  5       5      $ )Nc              3   H   >#    U  H  nTR                  US 5      v   M     g7fr   rF  r   sobjective_dicts     r   r   5Clauses.minimize.<locals>.peak_val.<locals>.<genexpr>  !     =A~))!Q//   ")rc  solr  s    `r   peak_val"Clauses.minimize.<locals>.peak_val      ====r   c                 .   ^ [        U4S jU  5       5      $ )Nc              3   H   >#    U  H  nTR                  US 5      v   M     g7fr   r  r  s     r   r   4Clauses.minimize.<locals>.sum_val.<locals>.<genexpr>  r  r  )r   r  s    `r   sum_val!Clauses.minimize.<locals>.sum_val  r  r   )TFFzBeginning peak minimizationzBeginning sum minimizationzInitial range (%d,%d)r   c              3   <   >#    U  H  u  pUT:  d  M  Uv   M     g 7fr   r8   )r   r/   rh  mids      r   r   r    s     #S2G$!1s7AA2Gs   	c              3   R   >#    U  H  u  pTUs=::  a  T::  d  M  O  M  Uv   M     g 7fr   r8   )r   r/   rh  rI  r  s      r   r   r    s%      $&;darQ~#~~&;s   ''	'Fz+Bisection attempt: (%d,%d), (%d+%d) clausesz$Bisection failure, new range=(%d,%d)z$Bisection success, new range=(%d,%d)zFinal %s objective: %dpeakr   zNew peak objective: %d)r   rn   rb  rn  r   r   r   r=  rc  r   r7  rm  r   r   r   r   rP   r   r  r   r)  r%   )r   r+  r,  bestsoltrymaxr:  maxvalr  r  try0r  objvalr/   rh  r  bestvalrJ  m_orignzr#   preventrequirenewsoldonerI  r  s                           @@r   minimizeClauses.minimize  s    ?c'lTVV3II;<hhjG?djjII56vC777!;LL1LLII9:A:#'#5#5h#G &V	>	> %+aZMX=D<=!;< /26/DE/Dtqad/DNEW5G BVVF&&**,**557KdAvGGE2B;<7q.CC##S#f2G#SSG# $&)&&;$ G LL73TXXw7LL!1!18ReT##E**GGE--/"4 >qBGGE#I2rRBw   9D$G$V^<G BGGE#I2rR ##..0K?$$22;?"
e h II.D&eW1UUV!|  
 +.f*?P*?$!1<A*?P%+<VG|!V<w7		2Xg5VVWq >t e FV Q<s   2P4P:P:+	Q 8Q )r   r\   r]   rn   r   )NFr  r   r   )NFr   )!r2   r3   r4   r5   _sat_solver_cls_to_strr   r   r   r)   r   r   r   r   r   r   r   r  r  r	  r  r   r  r$  r-  r1  r4  r=  r\  r)  ro  r   r  r7   r8   r   r   r   r      s    +A.+Q 83*
>B.-%N!F4'R"".H
0H
( 2h<(Tv r   r   )sysr   	itertoolsr   loggingr   r   	constantsr   r2   rb  maxsizer   r   r
   r:   rW   r   r   r   r   itemsr  r   )stringclss   00r   <module>r     s      " $  {{	' 'T:" :"z+$ +$\Z 2 ,: 2 %  :P9U9U9WX9W+&#+9WX S  S  Ys   B+