a
    l_f"                     @   s8  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g dg d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r4e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sFJ |d dksVJ dd |d	d D \}}q|d d
kr q|d dksJ |dd |dd D  qt||ksJ ||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.9/site-packages/test_pycosat.py
<listcomp>       zread_cnf.<locals>.<listcomp>   %0c                 S   s   g | ]}t |qS r
   r   r   Zlitr
   r
   r   r      r   N)opensplitlen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>)   r   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   r   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||sJ |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   Zn_solr+   r
   r
   r   process_cnf_file5   s    




r8      )r   r   )r   r9      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   r   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   sH   |  ttg d tjd dkrDdd tD }|  t|g d d S )Nr   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   r   z2TestSolve.test_cnf1.<locals>.<listcomp>.<listcomp>r
   r(   r
   r
   r   r   o   r   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g d d S NrO   )rL   r   iterrP   rG   r
   r
   r   test_iter_clausesr   s    zTestSolve.test_iter_clausesc                 C   s"   |  tdd tD g d d S )Nc                 S   s   g | ]}t |qS r
   rU   r(   r
   r
   r   r   v   r   z3TestSolve.test_each_clause_iter.<locals>.<listcomp>rO   rL   r   rP   rG   r
   r
   r   test_each_clause_iteru   s    zTestSolve.test_each_clause_iterc                 C   s   |  tttg d d S rT   )rL   r   tuplerP   rG   r
   r
   r   test_tuple_calusesy   s    zTestSolve.test_tuple_calusesc                 C   s"   |  tdd tD g d d S )Nc                 S   s   g | ]}t |qS r
   rZ   r(   r
   r
   r   r   }   r   z5TestSolve.test_each_clause_tuples.<locals>.<listcomp>rO   rX   rG   r
   r
   r   test_each_clause_tuples|   s    z!TestSolve.test_each_clause_tuplesc                 C   s"   dd }|  t| g d d S )Nc                  s   s   t D ]
} | V  qd S NrP   r)   r
   r
   r   gen_clauses   s    z/TestSolve.test_gen_clauses.<locals>.gen_clausesrO   )rL   r   rH   ra   r
   r
   r   test_gen_clauses   s    zTestSolve.test_gen_clausesc                 C   s"   |  tdd tD g d 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&      r   z<TestSolve.test_each_clause_gen.<locals>.<listcomp>.<genexpr>r
   r(   r
   r
   r   r      r   z2TestSolve.test_each_clause_gen.<locals>.<listcomp>rO   rX   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__   r   z.TestSolve.test_bad_iter.<locals>.Liar.__iter__N__name__
__module____qualname__re   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g d d S )Nr;   varsr   r>   r<   ro   rG   r
   r
   r   test_cnf3_3vars   s    zTestSolve.test_cnf3_3varsc                 C   s8   t ddD ](}| tt|d|dk r(dng d q
d S )Nr      Z
prop_limit   ZUNKNOWNrO   )rK   rL   r   rP   )rH   Zlimr
   r
   r   test_cnf1_prop_limit   s    zTestSolve.test_cnf1_prop_limitc                 C   s   |  ttddg d d S )NrJ   rr   )r   r>   r<   r=   r9   iirX   rG   r
   r
   r   test_cnf1_vars   s    zTestSolve.test_cnf1_varsN)rg   rh   ri   rI   rN   rS   rV   rY   r[   r]   rc   rd   rl   rn   rq   ru   ry   rz   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,   rP   r   r+   r
   r
   r   r&      r   z2TestIterSolve.test_iter_clauses.<locals>.<genexpr>)
assertTruer*   r   rU   rP   rG   r
   r
   r   rV      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&      r   z6TestIterSolve.test_each_clause_iter.<locals>.<genexpr>c                 S   s   g | ]}t |qS r
   rW   r(   r
   r
   r   r      r   z7TestIterSolve.test_each_clause_iter.<locals>.<listcomp>r~   r*   r   rP   rG   r
   r
   r   rY      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&      r   z3TestIterSolve.test_tuple_caluses.<locals>.<genexpr>)r~   r*   r   rZ   rP   rG   r
   r
   r   r[      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&      r   z8TestIterSolve.test_each_clause_tuples.<locals>.<genexpr>c                 S   s   g | ]}t |qS r
   r\   r(   r
   r
   r   r      r   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   ra      s    z3TestIterSolve.test_gen_clauses.<locals>.gen_clausesc                 s   s   | ]}t t|V  qd S r^   r|   r}   r
   r
   r   r&      r   z1TestIterSolve.test_gen_clauses.<locals>.<genexpr>)r~   r*   r   rb   r
   r
   r   rc      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&      r   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&      r   z@TestIterSolve.test_each_clause_gen.<locals>.<listcomp>.<genexpr>r
   r(   r
   r
   r   r      r   z6TestIterSolve.test_each_clause_gen.<locals>.<listcomp>r   rG   r
   r
   r   rd      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   re      r   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&      r   z*TestIterSolve.test_cnf1.<locals>.<genexpr>)	r   rP   nvars1r~   r,   r1   rL   r   set)rH   r+   Zsolsr
   r
   r   rS      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&      r   z5TestIterSolve.test_shuffle_clauses.<locals>.<genexpr>
   c                 s   s   | ]}t |V  qd S r^   r\   r}   r
   r
   r   r&      r   )	r   r   rP   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&      r   z2TestIterSolve.test_many_clauses.<locals>.<genexpr>d   c                 s   s   | ]}t |V  qd S r^   r\   r}   r
   r
   r   r&      r   )r   r   rP   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g dg dg d S )Nr;   rt   )r   r>   r;   )rL   r1   r   rp   rG   r
   r
   r   ru      s    zTestIterSolve.test_cnf3_3varsc                 C   s   |  tttddg  d S )Nr   rw   )rL   r1   r   rP   rG   r
   r
   r   ry      s    z"TestIterSolve.test_cnf1_prop_limitN)rg   rh   ri   rI   rN   rV   rY   r[   r]   rc   rd   rl   rS   r   r   rn   ru   ry   r
   r
   r
   r   r{      s   	
	r{   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suiterR   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   rP   r   rm   Znvars3rp   r   ZTestCaser?   r   r{   r   rg   r   argvr   r
   r
   r
   r   <module>   s0   
	D
T


