3
 !+TD  ã               @   sT   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d„ Z	d	d
„ Z
dd„ ZdS )é    )Údivision)Úprint_function)Údeque)ÚstderrzSahand Sabazsahands@gmail.comc                s\   t dtd� xJt|ƒD ]>\}}ˆ j|ƒ}dj‡ fdd„|D ƒƒ}t dj||ƒtd� qW d S )NzCurrent watchlist:)Úfilez, c             3   s   | ]}ˆ j |ƒV  qd S )N)Úclause_to_string)Ú.0Úc)Úinstance© ú=C:\Users\user\Documents\MATLAB\CS4300\A3\solvers\watchlist.pyú	<genexpr>   s    z!dump_watchlist.<locals>.<genexpr>z{}: {})Úprintr   Ú	enumerateÚliteral_to_stringÚjoinÚformat)r
   Ú	watchlistÚlÚwZliteral_stringZclauses_stringr   )r
   r   Údump_watchlist   s
    
r   c             C   sB   dd„ t dt| jƒ ƒD ƒ}x | jD ]}||d  j|ƒ q$W |S )Nc             S   s   g | ]
}t ƒ ‘qS r   )r   )r   Ú__r   r   r   ú
<listcomp>   s    z#setup_watchlist.<locals>.<listcomp>é   r   )ÚrangeÚlenÚ	variablesÚclausesÚappend)r
   r   Úclauser   r   r   Úsetup_watchlist   s    r    c       
      C   sÀ   xº|| rº|| d }d}xV|D ]N}|d? }|d@ }	|| dksP|| |	dA kr d}|| d= || j |ƒ P q W |s|r´t| |ƒ tdj| j|ƒƒtd� tdj| j|ƒƒtd� dS qW dS )	a
  
    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.
    r   Fé   NTzCurrent assignment: {})r   zClause {} contradicted.)r   r   r   r   Úassignment_to_stringr   r   )
r
   r   Zfalse_literalÚ
assignmentÚverboser   Zfound_alternativeZalternativeÚvÚar   r   r   Úupdate_watchlist   s,    





r'   N)Ú
__future__r   r   Úcollectionsr   Úsysr   Ú
__author__Z	__email__r   r    r'   r   r   r   r   Ú<module>   s   