ó
 !+Tc           @  sk   d  d l  m Z d  d l  m Z d  d l m Z d  d l m Z d Z d Z d   Z	 d   Z
 d	   Z d
 S(   i˙˙˙˙(   t   division(   t   print_function(   t   deque(   t   stderrs   Sahand Sabas   sahands@gmail.comc           s{   t  d d t xd t |  D]V \ } }   j |  } d j   f d   | D  } t  d j | |  d t q Wd  S(   Ns   Current watchlist:t   files   , c         3  s   |  ] }   j  |  Vq d  S(   N(   t   clause_to_string(   t   .0t   c(   t   instance(    s8   /home/tch/tmp/simple-sat-master/src/solvers/watchlist.pys	   <genexpr>   s    s   {}: {}(   t   printR   t	   enumeratet   literal_to_stringt   joint   format(   R   t	   watchlistt   lt   wt   literal_stringt   clauses_string(    (   R   s8   /home/tch/tmp/simple-sat-master/src/solvers/watchlist.pyt   dump_watchlist   s
    c         C  s\   g  t  d t |  j   D] } t   ^ q } x& |  j D] } | | d j |  q9 W| S(   Ni   i    (   t   ranget   lent	   variablesR   t   clausest   append(   R   t   __R   t   clause(    (    s8   /home/tch/tmp/simple-sat-master/src/solvers/watchlist.pyt   setup_watchlist   s    /c   
      C  sü   xő | | r÷ | | d } t  } xl | D]d } | d ?} | d @}	 | | d k sf | | |	 d Ak r( t } | | d =| | j |  Pq( q( W| s | rđ t |  |  t d j |  j |   d t t d j |  j	 |   d t n  t  Sq Wt S(   s
  
    Updates the watch list after literal 'false_literal' was just assigned
    False, by making any clause watching false_literal watch something else.
    Returns False it is impossible to do so, meaning a clause is contradicted
    by the current assignment.
    i    i   s   Current assignment: {}R   s   Clause {} contradicted.N(
   t   Falset   Nonet   TrueR   R   R	   R   t   assignment_to_stringR   R   (
   R   R   t   false_literalt
   assignmentt   verboseR   t   found_alternativet   alternativet   vt   a(    (    s8   /home/tch/tmp/simple-sat-master/src/solvers/watchlist.pyt   update_watchlist   s,    

$		
N(   t
   __future__R    R   t   collectionsR   t   sysR   t
   __author__t	   __email__R   R   R'   (    (    (    s8   /home/tch/tmp/simple-sat-master/src/solvers/watchlist.pyt   <module>   s   		