U
    iVef"                     @   s>  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e jdd D ]Zee q*dS )    N)basename)solve	itersolvec                 C   s   g }t | D ]}| }|r|d dkr*q|d dkrrt|dksFt|d dksVtdd |d	d D \}}q|d d
kr q|d dkst|dd |dd D  q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.8/site-packages/test_pycosat.py
<listcomp>   s     zread_cnf.<locals>.<listcomp>   %0c                 S   s   g | ]}t |qS r
   r   r   Z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                    s8   i  |D ]}t |dk t|< q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Zsol_varsr
   r   	<genexpr>)   s     z%evaluate.<locals>.<genexpr>.<genexpr>N)anyr   clauser%   r
   r   r&   )   s   zevaluate.<locals>.<genexpr>)r"   r!   all)r   solr$   r
   r%   r   evaluate"   s    r,   c                 c   s:   t | }t|tr0|V  | dd |D  q d S q 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
    

r2   c                 C   s   t jdt|   t j  t| \}}t jd|t|f  t j  d}t||D ]0}t jd t j  t||st	|d7 }qZt 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    




r8      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   r<   Ag      ?ar;   r9   r   )assertRaises	TypeErrorr   object
ValueErrorselfr
   r
   r   test_wrong_args_   s    zTestSolve.test_wrong_argsc              	   C   s8   t dD ]*}| tg |dd t d|d D  qd S )N   c                 S   s   g | ]
}| qS r
   r
   r#   r
   r
   r   r   j   s     z-TestSolve.test_no_clauses.<locals>.<listcomp>r   )rangeassertEqualr   rH   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>   r<   r=   r9   r   r   c                 S   s   g | ]}d d |D qS )c                 S   s   g | ]}t |qS r
   )Zlongr   r
   r
   r   r   o   s     z2TestSolve.test_cnf1.<locals>.<listcomp>.<listcomp>r
   r(   r
   r
   r   r   o   s     z'TestSolve.test_cnf1.<locals>.<listcomp>)rL   r   clauses1r4   version_info)rH   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>   r<   r=   r9   )rL   r   iterrO   rG   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
   rT   r(   r
   r
   r   r   v   s     z3TestSolve.test_each_clause_iter.<locals>.<listcomp>r   r>   r<   r=   r9   rL   r   rO   rG   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 rS   )rL   r   tuplerO   rG   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
   rY   r(   r
   r
   r   r   }   s     z5TestSolve.test_each_clause_tuples.<locals>.<listcomp>r   r>   r<   r=   r9   rW   rG   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   t D ]
} | V  qd S NrO   r)   r
   r
   r   gen_clauses   s    z/TestSolve.test_gen_clauses.<locals>.gen_clausesr   r>   r<   r=   r9   )rL   r   rH   r`   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 r]   r
   r-   r
   r
   r   r&      s     z<TestSolve.test_each_clause_gen.<locals>.<listcomp>.<genexpr>r
   r(   r
   r
   r   r      s     z2TestSolve.test_each_clause_gen.<locals>.<listcomp>r   r>   r<   r=   r9   rW   rG   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 r]   r
   rG   r
   r
   r   __iter__       z.TestSolve.test_bad_iter.<locals>.Liar.__iter__N__name__
__module____qualname__rd   r
   r
   r
   r   Liar   s   rj   )rC   rD   r   rH   rj   r
   r
   r   test_bad_iter   s    zTestSolve.test_bad_iterc                 C   s   |  ttd d S )NZUNSAT)rL   r   clauses2rG   r
   r
   r   	test_cnf2   s    zTestSolve.test_cnf2c                 C   s   |  ttddg d S )Nr   r>   rL   r   clauses3rG   r
   r
   r   	test_cnf3   s    zTestSolve.test_cnf3c                 C   s   |  ttdddddg d S )Nr;   varsr   r>   r<   ro   rG   r
   r
   r   test_cnf3_3vars   s    zTestSolve.test_cnf3_3varsc              	   C   s>   t ddD ].}| tt|d|dk r(dnddddd	g q
d S )
Nr      Z
prop_limit   ZUNKNOWNr>   r<   r=   r9   )rK   rL   r   rO   )rH   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 )
NrJ   rr   r   r>   r<   r=   r9   iirW   rG   r
   r
   r   test_cnf1_vars   s    zTestSolve.test_cnf1_varsN)rg   rh   ri   rI   rN   rR   rU   rX   rZ   r\   rb   rc   rl   rn   rq   rt   rx   ry   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 r@   )rC   rD   r   rE   rF   rG   r
   r
   r   rI      s    zTestIterSolve.test_wrong_argsc              	   C   s2   t dD ]$}| tttg |dd|  qd S )NrJ   rr   r   )rK   rL   r   r1   r   rM   r
   r
   r   rN      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 r]   r,   rO   r   r+   r
   r
   r   r&      s     z2TestIterSolve.test_iter_clauses.<locals>.<genexpr>)
assertTruer*   r   rT   rO   rG   r
   r
   r   rU      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 r]   r{   r|   r
   r
   r   r&      s     z6TestIterSolve.test_each_clause_iter.<locals>.<genexpr>c                 S   s   g | ]}t |qS r
   rV   r(   r
   r
   r   r      s     z7TestIterSolve.test_each_clause_iter.<locals>.<listcomp>r}   r*   r   rO   rG   r
   r
   r   rX      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 r]   r{   r|   r
   r
   r   r&      s     z3TestIterSolve.test_tuple_caluses.<locals>.<genexpr>)r}   r*   r   rY   rO   rG   r
   r
   r   rZ      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 r]   r{   r|   r
   r
   r   r&      s     z8TestIterSolve.test_each_clause_tuples.<locals>.<genexpr>c                 S   s   g | ]}t |qS r
   r[   r(   r
   r
   r   r      s     z9TestIterSolve.test_each_clause_tuples.<locals>.<listcomp>r~   rG   r
   r
   r   r\      s    z%TestIterSolve.test_each_clause_tuplesc                 C   s*   dd }|  tdd t| D  d S )Nc                  s   s   t D ]
} | V  qd S r]   r^   r_   r
   r
   r   r`      s    z3TestIterSolve.test_gen_clauses.<locals>.gen_clausesc                 s   s   | ]}t t|V  qd S r]   r{   r|   r
   r
   r   r&      s     z1TestIterSolve.test_gen_clauses.<locals>.<genexpr>)r}   r*   r   ra   r
   r
   r   rb      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 r]   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 r]   r
   r-   r
   r
   r   r&      s     z@TestIterSolve.test_each_clause_gen.<locals>.<listcomp>.<genexpr>r
   r(   r
   r
   r   r      s     z6TestIterSolve.test_each_clause_gen.<locals>.<listcomp>r~   rG   r
   r
   r   rc      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 r]   r
   rG   r
   r
   r   rd      re   z2TestIterSolve.test_bad_iter.<locals>.Liar.__iter__Nrf   r
   r
   r
   r   rj      s   rj   )rC   rD   r   rk   r
   r
   r   rl      s    zTestIterSolve.test_bad_iterc                 C   sb   t ttD ]}| tt| q
tt ttd}| t|d | ttdd |D d d S )Nrr      c                 s   s   | ]}t |V  qd S r]   r[   r|   r
   r
   r   r&      s     z*TestIterSolve.test_cnf1.<locals>.<genexpr>)	r   rO   nvars1r}   r,   r1   rL   r   set)rH   r+   Zsolsr
   r
   r   rR      s
    zTestIterSolve.test_cnf1c                 C   sZ   t dd ttD }tdD ]6}tt}t| | t dd t|D | qd S )Nc                 s   s   | ]}t |V  qd S r]   r[   r|   r
   r
   r   r&      s     z5TestIterSolve.test_shuffle_clauses.<locals>.<genexpr>
   c                 s   s   | ]}t |V  qd S r]   r[   r|   r
   r
   r   r&      s     )	r   r   rO   rK   copydeepcopyrandomZshufflerL   )rH   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 r]   r[   r|   r
   r
   r   r&      s     z2TestIterSolve.test_many_clauses.<locals>.<genexpr>d   c                 s   s   | ]}t |V  qd S r]   r[   r|   r
   r
   r   r&      s     )r   r   rO   r   r   rL   )rH   r   r	   r
   r
   r   test_many_clauses   s
    zTestIterSolve.test_many_clausesc                 C   s   |  ttttg  d S r]   )rL   r1   r   rm   nvars2rG   r
   r
   r   rn      s    zTestIterSolve.test_cnf2c                 C   s*   |  tttddddgdddgg d S )Nr;   r   r>   r<   )rL   r1   r   rp   rG   r
   r
   r   rt      s    zTestIterSolve.test_cnf3_3varsc                 C   s   |  tttddg  d S )Nr   rv   )rL   r1   r   rO   rG   r
   r
   r   rx      s    z"TestIterSolve.test_cnf1_prop_limitN)rg   rh   ri   rI   rN   rU   rX   rZ   r\   rb   rc   rl   rR   r   r   rn   rt   rx   r
   r
   r
   r   rz      s   	
	rz   c                 C   sp   t dtj  t dtj  t dtj  t }tD ]"}t	|D ]}|
t| qBq6tj| d}||S )Nzsys.prefix: %szsys.version: %szpycosat version: %r)	verbosity)printr4   prefixversionr/   __version__unittestZ	TestSuitetestsrK   ZaddTestZ	makeSuiteZTextTestRunnerrun)r   repeatZsuiterQ   r   Zrunnerr
   r
   r   r      s    r   __main__)r   r   )r4   r   r   os.pathr   r   r/   r   r   r    r,   r2   r8   r   rO   r   rm   Znvars3rp   r   ZTestCaser?   r   rz   r   rg   r   argvr   r
   r
   r
   r   <module>   s0   
	"D
T


