+
    :1j6k                     f   ^ RI t ^ RIHt ^ RIHt ^ RIHtHt ^RIHt ]! ]	4      t
] P                  t]) t ! R R4      t ! R R	4      t ! R
 R4      t ! R R]4      t ! R R]4      t ! R R]4      tR]R]R]/t]P+                  4        U Uu/ uF  w  rWbK	  	  upp t ! R R4      tR# u upp i )    N)array)combinations)DEBUG	getLogger)TRACEc                   H   a  ] tR t^t o RtR tR tR tR tR t	R t
RtV tR	# )
_ClauseListzEStorage for the CNF clauses, represented as a list of tuples of ints.c                    . V n         V P                   P                  V n        V P                   P                  V n        R # N_clause_listappendextendselfs   &3lib/python3.14/site-packages/conda/common/_logic.py__init___ClauseList.__init__   s2     ''..''..    c                ,    \        V P                  4      # )z Return number of stored clauses.lenr   r   s   &r   get_clause_count_ClauseList.get_clause_count   s    4$$%%r   c                ,    \        V P                  4      # )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                (    Tp. V P                   VR% R# )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                    V P                   # )+Return clauses as a list of tuples of ints.r    r   s   &r   as_list_ClauseList.as_list.   s       r   c                    \        R4      pV P                   F%  pVP                  V4       VP                  ^ 4       K'  	  V# )FReturn clauses as a flat int array, each clause being terminated by 0.i)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'   r.   __static_attributes____classdictcell____classdict__s   @r   r	   r	      s+     O/&&-! r   r	   c                   T   a  ] tR t^;t o RtR tR tR tR tR t	R t
R tR	 tR
tV tR# )_ClauseArrayzd
Storage for the CNF clauses, represented as a flat int array.
Each clause is terminated by int(0).
c                    \        R 4      V n        V P                  P                  V n        V P                  P                  V n        R# )r+   N)r   _clause_arrayr   _array_appendr   _array_extendr   s   &r   r   _ClauseArray.__init__A   s8    "3Z "//66!//66r   c                :    V F  pV P                  V4       K  	  R # r   )r   )r   clausesclauses   && r   r   _ClauseArray.extendH   s    FKK r   c                J    V P                  V4       V P                  ^ 4       R# r   N)r>   r=   )r   rB   s   &&r   r   _ClauseArray.appendL   s    6"1r   c                8    V P                   P                  ^ 4      # )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<   countr   s   &r   r   _ClauseArray.get_clause_countP   s     !!''**r   c                ,    \        V P                  4      # )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                :    Tp\        R4      V P                  VR% R# )r   r+   N)r   r<   )r   r!   len_clause_arrays   && r   r#   _ClauseArray.restore_statea   s"    
 '05c
+,-r   c              #     "   . pV P                    F:  pV^ 8X  d    \        V4      x  VP                  4        K)  VP                  V4       K<  	  R# 5i)r&   N)r<   tupleclearr   )r   rB   vs   &  r   r'   _ClauseArray.as_listi   s@     ##AAvFm#a  $s   AAc                    V P                   # )r*   )r<   r   s   &r   r.   _ClauseArray.as_arrays   s    !!!r   )r=   r>   r<   N)r0   r1   r2   r3   r4   r   r   r   r   r   r#   r'   r.   r5   r6   r7   s   @r   r:   r:   ;   s7     
7 +';!" "r   r:   c                   Z   a  ] tR t^xt o RtR tR tR tR tR t	R t
R tR	 tR
 tRtV tR# )
_SatSolverzNSimple wrapper to call a SAT solver given a _ClauseList/_ClauseArray instance.c                    T;'       g    / V n         \        4       V n        V P                  P                  V n        V P                  P
                  V n        R # r   )_run_kwargsr	   _clausesr   
add_clauser   add_clauses)r   
run_kwargss   &,r   r   _SatSolver.__init__{   s>    %++#--..==//r   c                6    V P                   P                  4       # r   )rZ   r   r   s   &r   r   _SatSolver.get_clause_count   s    }}--//r   c                6    V P                   P                  4       # r   )rZ   r'   r   s   &r   r'   _SatSolver.as_list   s    }}$$&&r   c                6    V P                   P                  4       # r   )rZ   r   r   s   &r   r   _SatSolver.save_state   s    }}''))r   c                8    V P                   P                  V4      # r   )rZ   r#   )r   r!   s   &&r   r#   _SatSolver.restore_state   s    }}**;77r   c                    V P                   P                  4       pVP                  V4       V P                  ! V3/ VB pV P	                  V4      pV P                  V4      pV# r   )rY   copyupdatesetupinvokeprocess_solution)r   mkwargsr]   solversat_solutionsolutions   &&,    r   run_SatSolver.run   sZ    %%**,
&!A,,{{6*((6r   c                    \        4       h)z?Create a solver instance, add the clauses to it, and return it.NotImplementedError)r   rm   rn   s   &&,r   rj   _SatSolver.setup       !##r   c                    \        4       h)z@Start the actual SAT solving and return the calculated solution.ru   )r   ro   s   &&r   rk   _SatSolver.invoke   rx   r   c                    \        4       h)zv
Process the solution returned by self.invoke.
Returns a list of satisfied variables or None if no solution is found.
ru   r   rp   s   &&r   rl   _SatSolver.process_solution   s    
 "##r   )rZ   rY   r[   r\   N)r0   r1   r2   r3   r4   r   r   r'   r   r#   rr   rj   rk   rl   r5   r6   r7   s   @r   rW   rW   x   s:     X00'*8$$$ $r   rW   c                   6   a  ] tR t^t o RR ltR tR tRtV tR# )_PycoSatSolverc                R    ^ RI Hp V! V P                  P                  4       WR7      # )r   )	itersolve)vars
prop_limit)pycosatr   rZ   r'   )r   rm   limitrn   r   s   &&&, r   rj   _PycoSatSolver.setup   s!    % ..0qKKr   c                J     \        V4      p?V#   \         d    R p ?T# i ; i)UNSAT)nextStopIteration)r   iter_solrp   s   && r   rk   _PycoSatSolver.invoke   s:    	#>L   	#"L	#s    ""c                    VR9   d   R# V# )r   N)r   UNKNOWN r|   s   &&r   rl   _PycoSatSolver.process_solution   s    //r   r   Nr   	r0   r1   r2   r3   rj   rk   rl   r5   r6   r7   s   @r   r   r      s     L r   r   c                   6   a  ] tR t^t o RR ltR tR tRtV tR# )_PyCryptoSatSolverc                v    ^ RI Hp V! VR7      pVP                  V P                  P	                  4       4       V# )r   )Solver)threads)pycryptosatr   r\   rZ   r'   )r   rm   r   rn   r   ro   s   &&&,  r   rj   _PyCryptoSatSolver.setup   s/    &(4==0023r   c                >    VP                  4       w  r#V'       g   R pV# r   )solve)r   ro   satrp   s   &&  r   rk   _PyCryptoSatSolver.invoke   s    "LLNLr   c                v    V'       g   R # \        V4       UUu. uF  w  r#V'       g   K  VNK  	  pppV# u uppi r   )	enumerate)r   rq   r+   bs   &&  r   rl   #_PyCryptoSatSolver.process_solution   s3    "+H"5;"5$!AA"5; <s   55r   N   r   r7   s   @r   r   r      s      r   r   c                   2   a  ] tR t^t o R tR tR tRtV tR# )_PySatSolverc                r    ^ RI Hp V! 4       pVP                  V P                  P	                  4       4       V# )r   )Glucose4)pysat.solversr   append_formularZ   r'   )r   rm   rn   r   ro   s   &&,  r   rj   _PySatSolver.setup   s,    *dmm3356r   c                x    VP                  4       '       g   R pMVP                  4       pVP                  4        V# r   )r   	get_modeldelete)r   ro   rp   s   && r   rk   _PySatSolver.invoke   s/    ||~~L!++-Lr   c                    Vf   R pV# TpV# r   r   )r   rp   rq   s   && r   rl   _PySatSolver.process_solution   s     H  $Hr   r   Nr   r7   s   @r   r   r      s      r   r   r   r   pysatc                      a  ] tR t^t o ^ ]],          3R ltR tR tR t	R t
R tR tR tR	 tRR ltRR ltRR ltRR ltRR ltRR ltR tR tRR ltR tR tR tR tR tR R ltR!R ltRR ltRt V t!R
# )"Clausesc                    R V n         Wn         \        V,          pT! 4       T n        T P
                  P                  T n        T P
                  P                  T n        R#   \         d    \	        RT 24      hi ; i)FzUnknown SAT solver: N)unsatrm   _sat_solver_str_to_clsKeyErrorrv   _sat_solverr[   r\   )r   rm   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   A:c                6    V P                   P                  4       # r   )r   r   r   s   &r   r   Clauses.get_clause_count	  s    0022r   c                6    V P                   P                  4       # r   )r   r'   r   s   &r   r'   Clauses.as_list  s    ''))r   c                8    V P                   ^,           pWn         V# r   )rm   )r   rm   s   & r   new_varClauses.new_var  s    FFQJr   c                   a \        V\        4      '       dW   V P                  4       oV P                  V3R  lV^ ,           4       4       V P                  V3R lV^,           4       4       S# V# )c              3   :   <"   T F  pS) 3V,           x  K  	  R # 5ir   r   .0yxs   & r   	<genexpr>!Clauses.assign.<locals>.<genexpr>  s     81qbUQYYs   c              3   8   <"   T F  pS3V,           x  K  	  R # 5ir   r   r   s   & r   r   r     s     7w!aTAXXws   )
isinstancerP   r   r\   )r   valsr   s   &&@r   assignClauses.assign  sU    dE""A8Q887tAw77Hr   c                "   \         ;QJ d    R  V 4       F  '       g   K   RM	  RM! R  V 4       4      '       d   \        # V Uu. uF  q3\        8w  g   K  VNK  	  pp\        V4      pV^ 8X  d   \        # V^8X  d
   V^ ,          # \        ;QJ d    R V 4       F  '       d   K   RM	  RM! R V 4       4      '       d'   \        R V 4       . 4      \        R V 4       . 4      3# V P                  \        V P                  V4      V4      # u upi )c              3   2   "   T F  q\         8H  x  K  	  R # 5ir   )FALSEr   rR   s   & r   r   "Clauses.Combine.<locals>.<genexpr>  s     (4aEz4   TFc              3   B   "   T F  p\        V\        4      x  K  	  R # 5ir   )r   rP   r   s   & r   r   r   %  s     2Tz!U##Ts   c              3   2   "   T F  q^ ,          x  K  	  R# 5irE   r   r   s   & r   r   r   &  s     ,t!1tr   c              3   2   "   T F  q^,          x  K  	  R# 5i)r   Nr   r   s   & r   r   r   &  s     7Kd!dr   )	anyr   TRUEr   allsumAllmapr   )r   argspolarityrR   nvs   &&&  r   CombineClauses.Combine  s    3(4(333(4(((L-4a94-Y7K77N32T23332T222,t,b137Kd7KR3PQQ88CT2H== .s   DDc                   V P                   P                  4       pV! VR V/ p\        V\        4      '       d3   V P	                  V^ ,          4       V P	                  V^,          4       R# V\
        \        09  d    T P                  V'       d   TMV) 34       R# V P                   P                  V4       V P                  ;'       g    V\
        8H  V8g  V n	        R# )r   N)
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A'ADJr   c                ,    V P                  WR R7       R# )Fr   Nr   r   r   r   s   &&*r   PreventClauses.Prevent7  s    		$u	-r   c                ,    V P                  WR R7       R# )Tr   Nr   r   s   &&*r   RequireClauses.Require:  s    		$t	,r   Nc                    V) # r   r   )r   r   r   add_new_clausess   &&&&r   NotClauses.Not=  s	    r	r   c                   V\         8X  g   V\         8X  d   \         # V\        8X  d   V# V\        8X  d   V# W8X  d   V# W) 8X  d   \         # W!8  d   Y!r!V'       dP   V P                  4       pVR9   d   V P                  V) V3V) V3.4       VR9   d   V P                  WQ) V) 3.4       V# VR9   d   V3V3.M. pVR9   d   V) V) 3.M. pWg3# T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                   V\         8X  g   V\         8X  d   \         # V\        8X  d   V# V\        8X  d   V# W8X  d   V# W) 8X  d   \         # W!8  d   Y!r!V'       dO   V P                  4       pVR9   d   V P                  V) W3.4       VR9   d   V P                  VV) 3VV) 3.4       V# VR9   d   W3.M. pVR9   d	   V) 3V) 3.M. pWg3# 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                   V\         8X  d   V# V\        8X  d   V P                  W#VR 7      # V\         8X  d   V# V\        8X  d   V) # W8X  d   \         # W) 8X  d   \        # W!8  d   Y!r!V'       dV   V P                  4       pVR9   d   V P	                  V) W3V) V) V) 3.4       VR9   d   V P	                  WQ) V3WQV) 3.4       V# VR9   d
   W3V) V) 3.M. pVR9   d
   V) V3W) 3.M. pWg3# 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                   V\         8X  d   V# V\        8X  d   V# V\         8X  d   V P                  WWER 7      # V\        8X  d   V P                  V) W4VR 7      # V\        8X  d   V P                  WWER 7      # V\         8X  d   V P                  W!) WER 7      # W!8X  d   V P                  WWER 7      # W!) 8X  d   V P                  V) W4VR 7      # W18X  d   V P                  WWER 7      # W1) 8X  d   V P                  W!) WER 7      # W#8X  d   V# W#) 8X  d   V P	                  WWER 7      # W#8  d   Y2V) rpV'       d_   V P                  4       pVR9   d    V P                  V) V) V3V) W3V) W#3.4       VR9   d    V P                  Wa) V) 3WaV) 3Wb) V) 3.4       V# VR9   d   V) V3W3W#3.M. pVR9   d   V) V) 3W) 3V) V) 3.M. pWx3# 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                   \        4       pV F<  pV\        8X  d   K  V\        8X  g	   V) V9   d	   \        u # VP                  V4       K>  	  \	        V4      pV^ 8X  d   \        # V^8X  d   \        R V 4       4      # VR9   d   V Uu. uF  qD3NK  	  upM. pVR9   d.   \        ;QJ d    . R V 4       F  NK  	  5M! R V 4       4      .M. pWg3# u upi )r   c              3   $   "   T F  qx  K  	  R # 5ir   r   r   s   & r   r   Clauses.All.<locals>.<genexpr>       (4a4   c              3   &   "   T F  q) x  K	  	  R # 5ir   r   r   s   & r   r   r    s     '$Qb$s   r   r   )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   	Cc                n   \        4       pV F<  pV\        8X  d   K  V\        8X  g	   V) V9   d	   \        u # VP                  V4       K>  	  \	        V4      pV^ 8X  d   \        # V^8X  d   \        R V 4       4      # VR9   d   \        V4      .M. pVR9   d   V Uu. uF  qD) 3NK  	  upM. pWg3# u upi )r   c              3   $   "   T F  qx  K  	  R # 5ir   r   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   B2c                    . p\        \        V P                  V4      ^4       F&  w  rEVP                  V P	                  WEV4      4       K(  	  V P                  W24      # )   )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                h    \        V4      p^.\        V4      ,          pV P                  W4^ ^RV4      # r   Tlistr   LinearBoundr   r   r   literalscoeffss   &&&  r   AtMostOne_BDDClauses.AtMostOne_BDD  4    :s8}$!QhGGr   c                    \        V4      pV P                  W4      pV P                  W4      pV P                  W43V4      # r   )r&  r!  r  r   )r   r   r   r  r   s   &&&  r   ExactlyOne_NSQClauses.ExactlyOne_NSQ  s<    Dz/XXd%||RHh//r   c                h    \        V4      p^.\        V4      ,          pV P                  W4^^RV4      # r$  r%  r(  s   &&&  r   ExactlyOne_BDDClauses.ExactlyOne_BDD   r-  r   c                &   . p^ p\        W!4       FT  w  rVV\        8X  d   WE,          pK  V\        8X  g   V^ 8X  d   K.  V^ 8  d   WE,          pV) V) reVP                  WV34       KV  	  \	        \        \        V4      !  4      ;'       g    Rw  r!WV3# )r   )r   r   )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DDH''r   c                   \        R  VRV  4       4      pV^,
          ^ V3pV.p	/ p
V	P                  pV	P                  pV
P                  pV P                  p^ pV	'       d   V	R,          w  prWO,
          pW_,
          pV^ 8:  d   VV8  d   \
        W! 4       &   KA  VV8  g   V^ 8  d   \        W! 4       &   K^  VV,          pVV,          pV^,          pVV,          pTV^ 8  d   TMVV,           V3pV! V4      pVf   V! V4       K  TV^ 8  d
   VV,           MTV3pV! V4      pVf   V! V4       K  V! \        V4      VVVRR7      W! 4       &   K  W,          # )c              3   $   "   T F  qx  K  	  R # 5ir   r   r   r-   s   & r   r   Clauses.BDD.<locals>.<genexpr>       /!Ar  NTr  )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  sq    /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 ! {r   c                  a V'       d&   V P                  W4      w  rpW7,          pSV,          o\        V4      pV'       dH   VR,          S8  d:   \        V3R lV 4       4      p	\        P                  \        RW4       W,          pM^ p	\        R VRV  4       4      p
V'       d   \        V^ .4      p\        SV
.4      oVS8  d   \        # V^ 8X  d   V^ 8X  d   \        M\        pMV P                  WWSV4      pV	'       d8   T P                  WR  Uu. uF  q) NK  	  upV4      pV P                  W3V4      pV# u upi )r   c              3   ,   <"   T F	  qS8  x  K  	  R # 5ir   r   )r   r-   rH  s   & r   r   &Clauses.LinearBound.<locals>.<genexpr>P  s     0ARs   z+Eliminating %d/%d terms for bound violationc              3   $   "   T F  qx  K  	  R # 5ir   r   r?  s   & r   r   r^  X  rA  r  NrB  )r;  r   r   logr   maxminr   r   rZ  r   r   )r   r)  r*  rG  rH  
preprocessr   r8  rF  nprunerI  resaprunes   &&&&f&&       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                    \         P                  \        4      '       d%   \         P                  R V P	                  4       4       V P
                  P                  WR7      pV# )z"Invoking SAT with clause count: %sr   )r`  isEnabledForr   debugr   r   rr   )r   rm   r   rq   s   &&& r   _run_satClauses._run_satg  sI    E""II:D<Q<Q<ST##'''7r   c                   V P                   '       d   R# V P                  '       g   . # V P                  P                  4       pV'       d?   R p\	        V! V4      4      pV'       d#   VR,          '       g   R# V P                  V4       V P                  V P                  VR7      pV'       d(   Ve	   V'       g   V P                  P                  V4       V# )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      "   R  pV  F;  p\        V! V4      4      pV'       g   Vx   R# VR,          \        8w  g   K7  Vx  K=  	  R# 5i)c              3   ^   "   V  F"  pV\         8X  d   K  Vx  V\        8X  g   K!   R # 	  R # 5ir   )r   r   )ccr-   s   & r   preproc_.Clauses.sat.<locals>.preproc.<locals>.preproc_}  s(     :$9!  s   --NrB  )rP   r   )eqsrs  rr  s   &  r   preprocClauses.sat.<locals>.preproc|  s?     " Bx|,B "v~  s
   8A	
A	rj  rB  )r   rm   r   r   r&  r\   rm  r#   )r   
additional	includeIfr   r!   rv  rq   s   &&&&   r   r   Clauses.satm  s     :::vvvI&&113!" gj12J!"~~  ,==u=58+9**;7r   c           
     	  aa Ve   \        V4      V P                  8  d&   \        P                  R4       V P	                  4       pVe   V P
                  '       d;   \        P                  R4       Y2'       d   \        R V 4       4      ^,           3# ^3# V'       g   \        P                  R4       V^ 3# V P                  W4      w  rp\        V4      pR pR p^ o^ p	V^8  d   RMR EF  p
V
'       d   \        P                  \        R	4       TpM\        P                  \        R
4       Tp\        W!4       UUu/ uF  w  rWbK	  	  pppV! W>4      pTpV P                  p\        P                  \        4      '       d   V P                  4       pV P                  P                  4       pV'       d   V
'       g
   V^,
          p	\        P                  \        RSV4        V	f   SV,           ^,          oMV	oV
'       d   \         ;QJ d     . V3R l\        W!4       4       F  NK  	  5M! V3R l\        W!4       4       4      p\         ;QJ d!    . VV3R l\        W!4       4       F  NK  	  5M! VV3R l\        W!4       4       4      pV P#                  V P$                  V4       V'       d   V P'                  V P$                  V4       MV P'                  V P(                  WSSR4       \        P                  \        4      '       d4   \        P                  \        RSSXV P                  4       V,
          4       V P	                  4       pVf/   S^,           o\        P                  \        RSV4       SV8  d   MM7SS8H  pTpV! VV4      pTp\        P                  \        RSV4       V'       d   MMVV n        V P                  P                  4       V8w  d   V P                  P+                  V4       RV n        Rp	EK"  \        P                  RV
'       d   RMRV3,          4       V^ 8X  d    W?3# V
'       dM   \        W!4       UUu. uF  w  rW8:  g   K  VNK  	  pppV Uu. uF  qV8:  g   K  VNK  	  ppV! W>4      p	VoEK  \        P                  RV! W>4      ,          4       EK  	  VX3# u uppi u uppi u upi )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   "   T F  p\        V4      x  K  	  R # 5ir   )rE  r?  s   & r   r   #Clauses.minimize.<locals>.<genexpr>  s     71As   z!Empty objective, trivial solutionc                 .   a \        V3R  lV  4       4      # )c              3   H   <"   T F  pSP                  V^ 4      x  K  	  R# 5irE   rD  r   sobjective_dicts   & r   r   5Clauses.minimize.<locals>.peak_val.<locals>.<genexpr>  !     =A~))!Q//   ")ra  solr  s   &fr   peak_val"Clauses.minimize.<locals>.peak_val      ====r   c                 .   a \        V3R  lV  4       4      # )c              3   H   <"   T F  pSP                  V^ 4      x  K  	  R# 5irE   r  r  s   & r   r   4Clauses.minimize.<locals>.sum_val.<locals>.<genexpr>  r  r  )r   r  s   &fr   sum_val!Clauses.minimize.<locals>.sum_val  r  r   FzBeginning peak minimizationzBeginning sum minimizationzInitial range (%d,%d)c              3   >   <"   T F  w  rVS8  g   K  Vx  K  	  R # 5ir   r   )r   r-   rf  mids   &  r   r   r}    s     #S2G$!1s7AA2Gs   
c              3   V   <"   T F  w  rSTu;8:  d
   S8:  g   K  M K  Vx  K   	  R # 5ir   r   )r   r-   rf  rG  r  s   &  r   r   r}    s%      $&;darQ~#~~&;s   ))
)z+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)TFF)r   rm   r`  rl  r   r   r   r;  ra  r   r5  rk  r   r   r   r   rP   r   r  r   r'  r#   )r   r)  r*  bestsoltrymaxr8  maxvalr  r  try0r  objvalr-   rf  r  bestvalrH  m_orignzr!   preventrequirenewsoldonerG  r  s   &&&&&                   @@r   minimizeClauses.minimize  s    ?c'lTVV3II;<hhjG?djjj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#e#S#f2G#See#S#f2G#SSG#e $&)&&;$ee $&)&&;$ 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;?"
II.D&eW1UUV!|  
 +.f*?P*?$!1<AA*?P%+<VG|!!V<w7		2Xg5VVWq >t e FV Q<s   >R6
R<R<)S6S)r   r[   r\   rm   r   )NFr  r   r   )NFr   )"r0   r1   r2   r3   _sat_solver_cls_to_strr   r   r   r'   r   r   r   r   r   r   r   r   r  r  r
  r   r  r!  r+  r/  r2  r;  rZ  r'  rm  r   r  r5   r6   r7   s   @r   r   r      s     +A.+Q 83*
>B.-%N!F4'R"".H
0H
( 2h<(Tv  v r   r   )sysr   	itertoolsr   loggingr   r   	constantsr   r0   r`  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-