
    	ef"                        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 Z	d Z
d Zd Zdg d	g d
ddggcZZddgdggcZZdddgddgddggcZZg Z G d dej                  Ze                    e            G d dej                  Ze                    e           ddZedk    r= ee j                  dk    r e             dS e j        dd         D ]Z ee           dS dS )    N)basename)solve	itersolvec                    g }t          |           D ]}|                                }|r|d         dk    r%|d         dk    r;t          |          dk    sJ |d         dk    sJ d |dd         D             \  }}l|d         d	k    r n6|d
         dk    sJ |                    d |dd
         D                        t          |          |k    sJ ||fS )zj
    read a DIMACS cnf formatted file from `path`, and return the clauses
    and number of variables
    r   cp      cnfc                 ,    g | ]}t          |          S  int).0ns     ,lib/python3.11/site-packages/test_pycosat.py
<listcomp>zread_cnf.<locals>.<listcomp>   s     < < <AQ < < <       %0c                 ,    g | ]}t          |          S r   r   r   lits     r   r   zread_cnf.<locals>.<listcomp>   s    777SC777r   N)opensplitlenappend)pathclauseslinepartsn_vars	n_clausess         r   read_cnfr&      s   
 GT

 9 9

 	aC8s??u::????8u$$$$ < <qs < < <FI8s??ERyC77E#2#J7778888w<<9$$$$F?r   c                     i |D ]%}t          |dk              t          |          <   &t          fd| D                       S )z0
    evaluate the clauses with the solution
    r   c              3   N   K   | ]}t          fd |D                       V   dS )c              3   j   K   | ]-}t          |                   t          |d k               z  V  .dS )r   N)absbool)r   isol_varss     r   	<genexpr>z%evaluate.<locals>.<genexpr>.<genexpr>)   s=      BBa8CFF#d1q5kk1BBBBBBr   N)any)r   clauser-   s     r   r.   zevaluate.<locals>.<genexpr>)   sT       & & BBBB6BBBBB & & & & & &r   )r+   r*   all)r!   solr,   r-   s      @r   evaluater3   "   sn     H ' 'A;;Q & & & &$& & & & & &r   c              #      K   	 t          j        |           }t          |t                    r$|V  |                     d |D                        nd S P)NTc                     g | ]}| S r   r   r   xs     r   r   z py_itersolve.<locals>.<listcomp>1   s    ,,,1QB,,,r   )pycosatr   
isinstancelistr   )r!   r2   s     r   py_itersolver;   ,   sc      mG$$c4   	IIINN,,,,,----Fr   c                    t           j                            dt          |           z             t           j                                         t          |           \  }}t           j                            d|t          |          fz             t           j                                         d}t          ||          D ]V}t           j                            d           t           j                                         t          ||          sJ |dz  }Wt           j                            d|z             t           j                                         |S )Nz%30s:  zvars: %6d   cls: %6d   r   .r
   z%d
)	sysstdoutwriter   flushr&   r   r   r3   )r    r!   r$   n_solr2   s        r   process_cnf_filerC   5   s   JY$/000JtnnOGVJ.&#g,,1GGHHHJE&))  

%%%%%
JVe^$$$JLr      )r
   r	   )r   rD      r	   r   r   r
   c                   h    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd ZdS )	TestSolvec                    |                      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   rG   Ag      ?arF   rD   r   )assertRaises	TypeErrorr   object
ValueErrorselfs    r   test_wrong_argszTestSolve.test_wrong_args_   s    )UaVbTNC@@@)UA...)UC000)UFHH555)USE222)UaVaY,?CCC*eq!fq!f-=>>>>>r   c           
          t          d          D ]A}|                     t          g |          d t          d|dz             D                        Bd S )N   c                     g | ]}| S r   r   )r   r,   s     r   r   z-TestSolve.test_no_clauses.<locals>.<listcomp>j   s    +H+H+H1QB+H+H+Hr   r
   )rangeassertEqualr   rU   r   s     r   test_no_clauseszTestSolve.test_no_clausesh   sa    q 	J 	JAU2q\\+H+HaQ+H+H+HIIII	J 	Jr   c                     |                      t          t                    g d           t          j        d         dk    r8d t          D             }|                      t          |          g d           d S d S )Nr
   rI   rG   rH   rD   r   r   c                 &    g | ]}d  |D             S )c                 ,    g | ]}t          |          S r   )longr   s     r   r   z2TestSolve.test_cnf1.<locals>.<listcomp>.<listcomp>o   s    000#DII000r   r   r   r0   s     r   r   z'TestSolve.test_cnf1.<locals>.<listcomp>o   s'    HHHV00000HHHr   )r[   r   clauses1r>   version_info)rU   clss     r   	test_cnf1zTestSolve.test_cnf1l   s|    x*<*<*<===A!##HHxHHHCU3ZZ);););<<<<< $#r   c                 t    |                      t          t          t                              g d           d S Nr_   )r[   r   iterrd   rT   s    r   test_iter_clauseszTestSolve.test_iter_clausesr   s3    tH~~..0B0B0BCCCCCr   c                 n    |                      t          d t          D                       g d           d S )Nc                 ,    g | ]}t          |          S r   rj   rc   s     r   r   z3TestSolve.test_each_clause_iter.<locals>.<listcomp>v   s    DDDVDDDr   r_   r[   r   rd   rT   s    r   test_each_clause_iterzTestSolve.test_each_clause_iteru   sF    DD8DDDEE+++	- 	- 	- 	- 	-r   c                 t    |                      t          t          t                              g d           d S ri   )r[   r   tuplerd   rT   s    r   test_tuple_caluseszTestSolve.test_tuple_calusesy   s3    uX//1C1C1CDDDDDr   c                 n    |                      t          d t          D                       g d           d S )Nc                 ,    g | ]}t          |          S r   rr   rc   s     r   r   z5TestSolve.test_each_clause_tuples.<locals>.<listcomp>}   s    EEE&fEEEr   r_   ro   rT   s    r   test_each_clause_tuplesz!TestSolve.test_each_clause_tuples|   sF    EEHEEEFF+++	- 	- 	- 	- 	-r   c                 f    d }|                      t           |                      g d           d S )Nc               3   &   K   t           D ]} | V  d S Nrd   r0   s    r   gen_clausesz/TestSolve.test_gen_clauses.<locals>.gen_clauses   *      "   r   r_   )r[   r   rU   r}   s     r   test_gen_clauseszTestSolve.test_gen_clauses   sD    	 	 	 	{{}}--/A/A/ABBBBBr   c                 n    |                      t          d t          D                       g d           d S )Nc                 &    g | ]}d  |D             S )c              3      K   | ]}|V  d S rz   r   r6   s     r   r.   z<TestSolve.test_each_clause_gen.<locals>.<listcomp>.<genexpr>   s"       3 3q 3 3 3 3 3 3r   r   rc   s     r   r   z2TestSolve.test_each_clause_gen.<locals>.<listcomp>   s'    KKK 3 3F 3 3 3KKKr   r_   ro   rT   s    r   test_each_clause_genzTestSolve.test_each_clause_gen   sF    KK(KKKLL+++	- 	- 	- 	- 	-r   c                 r     G d d          }|                      t          t           |                       d S )Nc                       e Zd Zd ZdS )%TestSolve.test_bad_iter.<locals>.Liarc                     d S rz   r   rT   s    r   __iter__z.TestSolve.test_bad_iter.<locals>.Liar.__iter__       ttr   N__name__
__module____qualname__r   r   r   r   Liarr              +++++r   r   )rP   rQ   r   rU   r   s     r   test_bad_iterzTestSolve.test_bad_iter   sN    	, 	, 	, 	, 	, 	, 	, 	,)UDDFF33333r   c                 V    |                      t          t                    d           d S )NUNSAT)r[   r   clauses2rT   s    r   	test_cnf2zTestSolve.test_cnf2   s$    x'22222r   c                 Z    |                      t          t                    ddg           d S )Nr   rI   r[   r   clauses3rT   s    r   	test_cnf3zTestSolve.test_cnf3   s(    x2r(33333r   c                 ^    |                      t          t          d          g d           d S )NrF   varsr   rI   rG   r   rT   s    r   test_cnf3_3varszTestSolve.test_cnf3_3vars   s/    xa000,,,?????r   c                     t          dd          D ]6}|                     t          t          |          |dk     rdng d           7d S )Nr
      
prop_limit   UNKNOWNr_   )rZ   r[   r   rd   )rU   lims     r   test_cnf1_prop_limitzTestSolve.test_cnf1_prop_limit   sm    B<< 	K 	KCU8<<<*-''YY7I7I7IK K K K	K 	Kr   c                 ^    |                      t          t          d          g d           d S )NrX   r   )r
   rI   rG   rH   rD   iiro   rT   s    r   test_cnf1_varszTestSolve.test_cnf1_vars   s<    xa000333	5 	5 	5 	5 	5r   N)r   r   r   rV   r]   rg   rk   rp   rs   rw   r   r   r   r   r   r   r   r   r   r   r   rK   rK   ]   s       ? ? ?J J J= = =D D D- - -E E E- - -C C C- - -4 4 4
3 3 34 4 4@ @ @K K K
5 5 5 5 5r   rK   c                   h    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd ZdS )TestIterSolvec                    |                      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 rM   )rP   rQ   r   rR   rS   rT   s    r   rV   zTestIterSolve.test_wrong_args   s    )Y!Q"DDD)Y222)Y444)Y999)Y666)Y!Q!T0CQGGG*i1a&1a&1ABBBBBr   c                     t          d          D ]D}|                     t          t          t	          g |                              d|z             Ed S )NrX   r   r   )rZ   r[   r   r:   r   r\   s     r   r]   zTestIterSolve.test_no_clauses   s_    q 	G 	GASi&;&;&;!<!<==qAvFFFF	G 	Gr   c           
          |                      t          d t          t          t                              D                                  d S )Nc              3   @   K   | ]}t          t          |          V  d S rz   r3   rd   r   r2   s     r   r.   z2TestIterSolve.test_iter_clauses.<locals>.<genexpr>   s<       7 7HXs33 7 7 7 7 7 7r   )
assertTruer1   r   rj   rd   rT   s    r   rk   zTestIterSolve.test_iter_clauses   sX     7 7%d8nn557 7 7 7 7 	8 	8 	8 	8 	8r   c           	          |                      t          d t          d t          D                       D                                  d S )Nc              3   @   K   | ]}t          t          |          V  d S rz   r   r   s     r   r.   z6TestIterSolve.test_each_clause_iter.<locals>.<genexpr>   sD       N NHXs33 N N N N N Nr   c                 ,    g | ]}t          |          S r   rn   rc   s     r   r   z7TestIterSolve.test_each_clause_iter.<locals>.<listcomp>   s    &K&K&KtF||&K&K&Kr   r   r1   r   rd   rT   s    r   rp   z#TestIterSolve.test_each_clause_iter   sm     N N%&K&K(&K&K&KLLN N N N N 	O 	O 	O 	O 	Or   c           
          |                      t          d t          t          t                              D                                  d S )Nc              3   @   K   | ]}t          t          |          V  d S rz   r   r   s     r   r.   z3TestIterSolve.test_tuple_caluses.<locals>.<genexpr>   s<       8 8HXs33 8 8 8 8 8 8r   )r   r1   r   rr   rd   rT   s    r   rs   z TestIterSolve.test_tuple_caluses   sX     8 8%eHoo668 8 8 8 8 	9 	9 	9 	9 	9r   c           	          |                      t          d t          d t          D                       D                                  d S )Nc              3   @   K   | ]}t          t          |          V  d S rz   r   r   s     r   r.   z8TestIterSolve.test_each_clause_tuples.<locals>.<genexpr>   sD       O OHXs33 O O O O O Or   c                 ,    g | ]}t          |          S r   rv   rc   s     r   r   z9TestIterSolve.test_each_clause_tuples.<locals>.<listcomp>   s    &L&L&LuV}}&L&L&Lr   r   rT   s    r   rw   z%TestIterSolve.test_each_clause_tuples   sm     O O%&L&L8&L&L&LMMO O O O O 	P 	P 	P 	P 	Pr   c           	          d }|                      t          d t           |                      D                                  d S )Nc               3   &   K   t           D ]} | V  d S rz   r{   r|   s    r   r}   z3TestIterSolve.test_gen_clauses.<locals>.gen_clauses   r~   r   c              3   @   K   | ]}t          t          |          V  d S rz   r   r   s     r   r.   z1TestIterSolve.test_gen_clauses.<locals>.<genexpr>   s<       6 6HXs33 6 6 6 6 6 6r   )r   r1   r   r   s     r   r   zTestIterSolve.test_gen_clauses   si    	 	 	 	 6 6%kkmm446 6 6 6 6 	7 	7 	7 	7 	7r   c           	          |                      t          d t          d t          D                       D                                  d S )Nc              3   @   K   | ]}t          t          |          V  d S rz   r   r   s     r   r.   z5TestIterSolve.test_each_clause_gen.<locals>.<genexpr>   s<       3 3HXs33 3 3 3 3 3 3r   c                 &    g | ]}d  |D             S )c              3      K   | ]}|V  d S rz   r   r6   s     r   r.   z@TestIterSolve.test_each_clause_gen.<locals>.<listcomp>.<genexpr>   s"      ':':a':':':':':':r   r   rc   s     r   r   z6TestIterSolve.test_each_clause_gen.<locals>.<listcomp>   s3     '1 '1 '1v':':6':':': '1 '1 '1r   r   rT   s    r   r   z"TestIterSolve.test_each_clause_gen   sp     3 3% '1 '1'/'1 '1 '1 2 23 3 3 3 3 	4 	4 	4 	4 	4r   c                 r     G d d          }|                      t          t           |                       d S )Nc                       e Zd Zd ZdS ))TestIterSolve.test_bad_iter.<locals>.Liarc                     d S rz   r   rT   s    r   r   z2TestIterSolve.test_bad_iter.<locals>.Liar.__iter__   r   r   Nr   r   r   r   r   r      r   r   r   )rP   rQ   r   r   s     r   r   zTestIterSolve.test_bad_iter   sN    	, 	, 	, 	, 	, 	, 	, 	,)Y77777r   c                    t          t          t                    D ]*}|                     t	          t          |                     +t          t          t          t                              }|                     t          |          d           |                     t          t          d |D                                 d           d S )Nr      c              3   4   K   | ]}t          |          V  d S rz   rv   r   s     r   r.   z*TestIterSolve.test_cnf1.<locals>.<genexpr>   s(       < <s < < < < < <r   )	r   rd   nvars1r   r3   r:   r[   r   set)rU   r2   solss      r   rg   zTestIterSolve.test_cnf1   s    Xv.. 	5 	5COOHXs334444IhV44455TB'''S < <t < < <<<==rBBBBBr   c           	      N   t          d t          t                    D                       }t          d          D ]i}t	          j        t                    }t          j        |           |                     t          d t          |          D                       |           jd S )Nc              3   4   K   | ]}t          |          V  d S rz   rv   r   s     r   r.   z5TestIterSolve.test_shuffle_clauses.<locals>.<genexpr>   (      AAcuSzzAAAAAAr   
   c              3   4   K   | ]}t          |          V  d S rz   rv   r   s     r   r.   z5TestIterSolve.test_shuffle_clauses.<locals>.<genexpr>   s(       F Fs F F F F F Fr   )	r   r   rd   rZ   copydeepcopyrandomshuffler[   )rU   ref_sols_r   s       r   test_shuffle_clausesz"TestIterSolve.test_shuffle_clauses   s    AAYx-@-@AAAAAr 	' 	'A-))CN3S F Fy~~ F F FFF%' ' ' '		' 	'r   c                    t          d t          t                    D                       }dt          j        t                    z  }|                     t          d t          |          D                       |           d S )Nc              3   4   K   | ]}t          |          V  d S rz   rv   r   s     r   r.   z2TestIterSolve.test_many_clauses.<locals>.<genexpr>   r   r   d   c              3   4   K   | ]}t          |          V  d S rz   rv   r   s     r   r.   z2TestIterSolve.test_many_clauses.<locals>.<genexpr>   s(      BBCU3ZZBBBBBBr   )r   r   rd   r   r   r[   )rU   r   r   s      r   test_many_clauseszTestIterSolve.test_many_clauses   s~    AAYx-@-@AAAAADM(+++BB9S>>BBBBB!	# 	# 	# 	# 	#r   c                 |    |                      t          t          t          t                              g            d S rz   )r[   r:   r   r   nvars2rT   s    r   r   zTestIterSolve.test_cnf2   s0    i&99::B?????r   c                 ~    |                      t          t          t          d                    g dg dg           d S )NrF   r   )r   rI   rF   )r[   r:   r   r   rT   s    r   r   zTestIterSolve.test_cnf3_3vars   sH    i!4455&,,4	6 	6 	6 	6 	6r   c                 t    |                      t          t          t          d                    g            d S )Nr   r   )r[   r:   r   rd   rT   s    r   r   z"TestIterSolve.test_cnf1_prop_limit   s3    iQ???@@"EEEEEr   N)r   r   r   rV   r]   rk   rp   rs   rw   r   r   r   rg   r   r   r   r   r   r   r   r   r   r      s       C C CG G G8 8 8O O O9 9 9P P P7 7 74 4 4
8 8 8
C C C' ' '# # #@ @ @6 6 6F F F F Fr   r   c                    t          dt          j        z             t          dt          j        z             t          dt          j        z             t          j                    }t          D ];}t          |          D ])}|
                    t          j        |                     *<t          j        |           }|                    |          S )Nzsys.prefix: %szsys.version: %szpycosat version: %r)	verbosity)printr>   prefixversionr8   __version__unittest	TestSuitetestsrZ   addTest	makeSuiteTextTestRunnerrun)r   repeatsuiterf   r   runners         r   r   r      s    	
SZ
'(((	
ck
)***	
'"5
5666  E 3 3v 	3 	3AMM(,S112222	3 $y999F::er   __main__)r
   r
   )r>   r   r   os.pathr   r   r8   r   r   r&   r3   r;   rC   r   rd   r   r   nvars3r   r   TestCaserK   r   r   r   r   r   argvr    r   r   r   <module>r      s   



           $ $ $ $ $ $ $ $  ,& & &    . zzz===2r(; 
 taSk  AwR1b'2  	B5 B5 B5 B5 B5! B5 B5 B5H Y   RF RF RF RF RFH% RF RF RFh ]       z
s38}}HQRRL 	# 	#DT"""" 	# 	#r   