B
    qY>[f"                 @   sB  d dl Z d dlZd dlZd dlmZ d dlZd dlZd dlmZmZ dd Z	dd Z
dd	 Zd
d Zddddgddddgddgg ZZddgdgg ZZdddgddgddgg ZZg ZG dd dejZee G dd dejZee dddZedkr>ee jdkre  n"x e jdd D ]Zee q,W dS )    N)basename)solve	itersolvec             C   s   g }xt | D ]}| }|r|d dkr,q|d dkrtt|dksHt|d dksXtdd |d	d D \}}q|d d
krP |d dkst|dd |dd D  qW t||kst||fS )zj
    read a DIMACS cnf formatted file from `path`, and return the clauses
    and number of variables
    r   cp      cnfc             S   s   g | ]}t |qS  )int).0nr
   r
   +lib/python3.7/site-packages/test_pycosat.py
<listcomp>   s    zread_cnf.<locals>.<listcomp>   %0c             S   s   g | ]}t |qS r
   )r   )r   litr
   r
   r   r      s    N)opensplitlenAssertionErrorappend)pathclauseslinepartsn_varsZ	n_clausesr
   r
   r   read_cnf   s      r   c                s<   i  x |D ]}t |dk t|< q
W t fdd| D S )z0
    evaluate the clauses with the solution
    r   c             3   s$   | ]}t  fd d|D V  qdS )c             3   s&   | ]} t | t|d k A V  qdS )r   N)absbool)r   i)sol_varsr
   r   	<genexpr>)   s    z%evaluate.<locals>.<genexpr>.<genexpr>N)any)r   clause)r#   r
   r   r$   )   s   zevaluate.<locals>.<genexpr>)r!   r    all)r   solr"   r
   )r#   r   evaluate"   s
    
r)   c             c   s>   x8t | }t|tr2|V  | dd |D  qd S qW d S )Nc             S   s   g | ]
}| qS r
   r
   )r   xr
   r
   r   r   1   s    z py_itersolve.<locals>.<listcomp>)pycosatr   
isinstancelistr   )r   r(   r
   r
   r   py_itersolve,   s    

r.   c             C   s   t jdt|   t j  t| \}}t jd|t|f  t j  d}x>t||D ]0}t jd t j  t||st	|d7 }q\W t jd|  t j  |S )Nz%30s:  zvars: %6d   cls: %6d   r   .r   z%d
)
sysstdoutwriter   flushr   r   r   r)   r   )r   r   r   Zn_solr(   r
   r
   r   process_cnf_file5   s    



r4      r   r   r      r   c               @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd ZdS ) 	TestSolvec             C   s   |  ttddgdggd |  ttd |  ttd |  ttt  |  ttdg |  ttddgdd ggd |  ttddgdd	gg d S )
Nr   r   r8   Ag      ?ar7   r5   r   )assertRaises	TypeErrorr   object
ValueError)selfr
   r
   r   test_wrong_args_   s    zTestSolve.test_wrong_argsc          	   C   s<   x6t dD ]*}| tg |dd t d|d D  q
W d S )N   c             S   s   g | ]
}| qS r
   r
   )r   r"   r
   r
   r   r   j   s    z-TestSolve.test_no_clauses.<locals>.<listcomp>r   )rangeassertEqualr   )rB   r   r
   r
   r   test_no_clausesh   s    zTestSolve.test_no_clausesc             C   sT   |  ttdddddg tjd dkrPdd	 tD }|  t|dddddg d S )
Nr   r:   r8   r9   r5   r   r   c             S   s   g | ]}d d |D qS )c             S   s   g | ]}t |qS r
   )Zlong)r   r   r
   r
   r   r   o   s    z2TestSolve.test_cnf1.<locals>.<listcomp>.<listcomp>r
   )r   r&   r
   r
   r   r   o   s    z'TestSolve.test_cnf1.<locals>.<listcomp>)rF   r   clauses1r0   version_info)rB   clsr
   r
   r   	test_cnf1l   s    zTestSolve.test_cnf1c             C   s"   |  tttdddddg d S )Nr   r:   r8   r9   r5   )rF   r   iterrH   )rB   r
   r
   r   test_iter_clausesr   s    zTestSolve.test_iter_clausesc             C   s(   |  tdd tD dddddg d S )Nc             S   s   g | ]}t |qS r
   )rL   )r   r&   r
   r
   r   r   v   s    z3TestSolve.test_each_clause_iter.<locals>.<listcomp>r   r:   r8   r9   r5   )rF   r   rH   )rB   r
   r
   r   test_each_clause_iteru   s    zTestSolve.test_each_clause_iterc             C   s"   |  tttdddddg d S )Nr   r:   r8   r9   r5   )rF   r   tuplerH   )rB   r
   r
   r   test_tuple_calusesy   s    zTestSolve.test_tuple_calusesc             C   s(   |  tdd tD dddddg d S )Nc             S   s   g | ]}t |qS r
   )rO   )r   r&   r
   r
   r   r   }   s    z5TestSolve.test_each_clause_tuples.<locals>.<listcomp>r   r:   r8   r9   r5   )rF   r   rH   )rB   r
   r
   r   test_each_clause_tuples|   s    z!TestSolve.test_each_clause_tuplesc             C   s(   dd }|  t| dddddg d S )Nc              s   s   xt D ]
} | V  qW d S )N)rH   )r&   r
   r
   r   gen_clauses   s    
z/TestSolve.test_gen_clauses.<locals>.gen_clausesr   r:   r8   r9   r5   )rF   r   )rB   rR   r
   r
   r   test_gen_clauses   s    zTestSolve.test_gen_clausesc             C   s(   |  tdd tD dddddg d S )Nc             S   s   g | ]}d d |D qS )c             s   s   | ]
}|V  qd S )Nr
   )r   r*   r
   r
   r   r$      s    z<TestSolve.test_each_clause_gen.<locals>.<listcomp>.<genexpr>r
   )r   r&   r
   r
   r   r      s    z2TestSolve.test_each_clause_gen.<locals>.<listcomp>r   r:   r8   r9   r5   )rF   r   rH   )rB   r
   r
   r   test_each_clause_gen   s    zTestSolve.test_each_clause_genc             C   s"   G dd d}|  tt|  d S )Nc               @   s   e Zd Zdd ZdS )z%TestSolve.test_bad_iter.<locals>.Liarc             S   s   d S )Nr
   )rB   r
   r
   r   __iter__   s    z.TestSolve.test_bad_iter.<locals>.Liar.__iter__N)__name__
__module____qualname__rU   r
   r
   r
   r   Liar   s   rY   )r>   r?   r   )rB   rY   r
   r
   r   test_bad_iter   s    zTestSolve.test_bad_iterc             C   s   |  ttd d S )NZUNSAT)rF   r   clauses2)rB   r
   r
   r   	test_cnf2   s    zTestSolve.test_cnf2c             C   s   |  ttddg d S )Nr   r:   )rF   r   clauses3)rB   r
   r
   r   	test_cnf3   s    zTestSolve.test_cnf3c             C   s   |  ttdddddg d S )Nr7   )varsr   r:   r8   )rF   r   r]   )rB   r
   r
   r   test_cnf3_3vars   s    zTestSolve.test_cnf3_3varsc          	   C   sB   x<t ddD ].}| tt|d|dk r*dnddddd	g qW d S )
Nr      )
prop_limit   ZUNKNOWNr:   r8   r9   r5   )rE   rF   r   rH   )rB   Zlimr
   r
   r   test_cnf1_prop_limit   s    zTestSolve.test_cnf1_prop_limitc          
   C   s&   |  ttddddddddd	g d S )
NrD   )r_   r   r:   r8   r9   r5   ii)rF   r   rH   )rB   r
   r
   r   test_cnf1_vars   s    zTestSolve.test_cnf1_varsN)rV   rW   rX   rC   rG   rK   rM   rN   rP   rQ   rS   rT   rZ   r\   r^   r`   rd   re   r
   r
   r
   r   r;   ]   s   	r;   c               @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd ZdS ) TestIterSolvec             C   s   |  ttddgdggd |  ttd |  ttd |  ttt  |  ttdg |  ttddgdd ggd |  ttddgdd	gg d S )
Nr   r   r8   r<   g      ?r=   r7   r5   r   )r>   r?   r   r@   rA   )rB   r
   r
   r   rC      s    zTestIterSolve.test_wrong_argsc          	   C   s6   x0t dD ]$}| tttg |dd|  q
W d S )NrD   )r_   r   )rE   rF   r   r-   r   )rB   r   r
   r
   r   rG      s    zTestIterSolve.test_no_clausesc             C   s$   |  tdd tttD  d S )Nc             s   s   | ]}t t|V  qd S )N)r)   rH   )r   r(   r
   r
   r   r$      s    z2TestIterSolve.test_iter_clauses.<locals>.<genexpr>)
assertTruer'   r   rL   rH   )rB   r
   r
   r   rM      s    zTestIterSolve.test_iter_clausesc             C   s*   |  tdd tdd tD D  d S )Nc             s   s   | ]}t t|V  qd S )N)r)   rH   )r   r(   r
   r
   r   r$      s    z6TestIterSolve.test_each_clause_iter.<locals>.<genexpr>c             S   s   g | ]}t |qS r
   )rL   )r   r&   r
   r
   r   r      s    z7TestIterSolve.test_each_clause_iter.<locals>.<listcomp>)rg   r'   r   rH   )rB   r
   r
   r   rN      s    z#TestIterSolve.test_each_clause_iterc             C   s$   |  tdd tttD  d S )Nc             s   s   | ]}t t|V  qd S )N)r)   rH   )r   r(   r
   r
   r   r$      s    z3TestIterSolve.test_tuple_caluses.<locals>.<genexpr>)rg   r'   r   rO   rH   )rB   r
   r
   r   rP      s    z TestIterSolve.test_tuple_calusesc             C   s*   |  tdd tdd tD D  d S )Nc             s   s   | ]}t t|V  qd S )N)r)   rH   )r   r(   r
   r
   r   r$      s    z8TestIterSolve.test_each_clause_tuples.<locals>.<genexpr>c             S   s   g | ]}t |qS r
   )rO   )r   r&   r
   r
   r   r      s    z9TestIterSolve.test_each_clause_tuples.<locals>.<listcomp>)rg   r'   r   rH   )rB   r
   r
   r   rQ      s    z%TestIterSolve.test_each_clause_tuplesc             C   s*   dd }|  tdd t| D  d S )Nc              s   s   xt D ]
} | V  qW d S )N)rH   )r&   r
   r
   r   rR      s    
z3TestIterSolve.test_gen_clauses.<locals>.gen_clausesc             s   s   | ]}t t|V  qd S )N)r)   rH   )r   r(   r
   r
   r   r$      s    z1TestIterSolve.test_gen_clauses.<locals>.<genexpr>)rg   r'   r   )rB   rR   r
   r
   r   rS      s    zTestIterSolve.test_gen_clausesc             C   s*   |  tdd tdd tD D  d S )Nc             s   s   | ]}t t|V  qd S )N)r)   rH   )r   r(   r
   r
   r   r$      s    z5TestIterSolve.test_each_clause_gen.<locals>.<genexpr>c             S   s   g | ]}d d |D qS )c             s   s   | ]
}|V  qd S )Nr
   )r   r*   r
   r
   r   r$      s    z@TestIterSolve.test_each_clause_gen.<locals>.<listcomp>.<genexpr>r
   )r   r&   r
   r
   r   r      s    z6TestIterSolve.test_each_clause_gen.<locals>.<listcomp>)rg   r'   r   rH   )rB   r
   r
   r   rT      s    z"TestIterSolve.test_each_clause_genc             C   s"   G dd d}|  tt|  d S )Nc               @   s   e Zd Zdd ZdS )z)TestIterSolve.test_bad_iter.<locals>.Liarc             S   s   d S )Nr
   )rB   r
   r
   r   rU      s    z2TestIterSolve.test_bad_iter.<locals>.Liar.__iter__N)rV   rW   rX   rU   r
   r
   r
   r   rY      s   rY   )r>   r?   r   )rB   rY   r
   r
   r   rZ      s    zTestIterSolve.test_bad_iterc             C   sf   x"t ttD ]}| tt| qW tt ttd}| t|d | ttdd |D d d S )N)r_      c             s   s   | ]}t |V  qd S )N)rO   )r   r(   r
   r
   r   r$      s    z*TestIterSolve.test_cnf1.<locals>.<genexpr>)	r   rH   nvars1rg   r)   r-   rF   r   set)rB   r(   Zsolsr
   r
   r   rK      s
    zTestIterSolve.test_cnf1c             C   s^   t dd ttD }xBtdD ]6}tt}t| | t dd t|D | q W d S )Nc             s   s   | ]}t |V  qd S )N)rO   )r   r(   r
   r
   r   r$      s    z5TestIterSolve.test_shuffle_clauses.<locals>.<genexpr>
   c             s   s   | ]}t |V  qd S )N)rO   )r   r(   r
   r
   r   r$      s    )	rj   r   rH   rE   copydeepcopyrandomZshufflerF   )rB   ref_sols_r	   r
   r
   r   test_shuffle_clauses   s    

z"TestIterSolve.test_shuffle_clausesc             C   sF   t dd ttD }dtt }| t dd t|D | d S )Nc             s   s   | ]}t |V  qd S )N)rO   )r   r(   r
   r
   r   r$      s    z2TestIterSolve.test_many_clauses.<locals>.<genexpr>d   c             s   s   | ]}t |V  qd S )N)rO   )r   r(   r
   r
   r   r$      s    )rj   r   rH   rl   rm   rF   )rB   ro   r	   r
   r
   r   test_many_clauses   s    zTestIterSolve.test_many_clausesc             C   s   |  ttttg  d S )N)rF   r-   r   r[   nvars2)rB   r
   r
   r   r\      s    zTestIterSolve.test_cnf2c             C   s*   |  tttddddgdddgg d S )Nr7   r   r:   r8   )rF   r-   r   r]   )rB   r
   r
   r   r`      s    zTestIterSolve.test_cnf3_3varsc             C   s   |  tttddg  d S )Nr   )rb   )rF   r-   r   rH   )rB   r
   r
   r   rd      s    z"TestIterSolve.test_cnf1_prop_limitN)rV   rW   rX   rC   rG   rM   rN   rP   rQ   rS   rT   rZ   rK   rq   rs   r\   r`   rd   r
   r
   r
   r   rf      s   	
	rf   c             C   sx   t dtj  t dtj  t dtj  t }x.tD ]&}x t	|D ]}|
t| qFW q8W tj| d}||S )Nzsys.prefix: %szsys.version: %szpycosat version: %r)	verbosity)printr0   prefixversionr+   __version__unittestZ	TestSuitetestsrE   ZaddTestZ	makeSuiteZTextTestRunnerrun)ru   repeatZsuiterJ   rp   Zrunnerr
   r
   r   r|      s    
r|   __main__)r   r   )r0   rl   rn   os.pathr   rz   r+   r   r   r   r)   r.   r4   ri   rH   rt   r[   Znvars3r]   r{   ZTestCaser;   r   rf   r|   rV   r   argvr   r
   r
   r
   r   <module>   s0   
	"D
T


