
    ?[1ff"                        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j-                  e        G d dej(                        Zej-                  e       ddZedk(  r: ee j6                        dk(  r e        ye j6                  dd D ]
  Z ee        yy)    N)basename)solve	itersolvec           	         g }t        |       D ]  }|j                         }|r|d   dk(  r|d   dk(  r:t        |      dk(  sJ |d   dk(  sJ |dd D cg c]  }t        |       c}\  }}`|d   dk(  r n7|d	   d
k(  sJ |j	                  |dd	 D cg c]  }t        |       c}        t        |      k(  sJ |fS c c}w c c}w )zj
    read a DIMACS cnf formatted file from `path`, and return the clauses
    and number of variables
    r   cp      cnf   %0N)opensplitlenintappend)pathclauseslinepartsnn_vars	n_clauseslits           +lib/python3.8/site-packages/test_pycosat.pyread_cnfr      s    
 GT
 9

aC8s?u:?"?8u$$$16q <AQ <FI8s?RyCE#2J7SC789 w<9$$$F? !=
 8s   CC
c                 r    i |D ]  }t        |dkD        t        |      <    t        fd| D              S )z0
    evaluate the clauses with the solution
    r   c              3   F   K   | ]  }t        fd |D                yw)c              3   X   K   | ]!  }t        |         t        |d k        z   # yw)r   N)absbool).0isol_varss     r   	<genexpr>z%evaluate.<locals>.<genexpr>.<genexpr>)   s'     Ba8CF#d1q5k1Bs   '*N)any)r$   clauser&   s     r   r'   zevaluate.<locals>.<genexpr>)   s$      & B6BB &s   !)r#   r"   all)r   solr%   r&   s      @r   evaluater,   "   sI     H 'A;Q' &$& & &    c              #      K   	 t        j                  |       }t        |t              r%| | j	                  |D cg c]  }|  c}       ny Lc c}w wN)pycosatr   
isinstancelistr   )r   r+   xs      r   py_itersolver4   ,   sL     
mmG$c4 INN,1QB,-  -s   :A
AAc                    t         j                  j                  dt        |       z         t         j                  j	                          t        |       \  }}t         j                  j                  d|t        |      fz         t         j                  j	                          d}t        ||      D ]R  }t         j                  j                  d       t         j                  j	                          t        ||      sJ |dz  }T t         j                  j                  d|z         t         j                  j	                          |S )Nz%30s:  zvars: %6d   cls: %6d   r   .r
   z%d
)	sysstdoutwriter   flushr   r   r   r,   )r   r   r   n_solr+   s        r   process_cnf_filer<   5   s    JJY$/0JJtnOGVJJ.&#g,1GGHJJE&) 



%%%
	
 JJVe^$JJLr-      )r
   r	   )r   r=      r	   r   r   r
   c                   f    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y)	TestSolvec                    | j                  t        t        ddgdggd       | j                  t        t        d       | j                  t        t        d       | j                  t        t        t                      | j                  t        t        dg       | j                  t        t        ddgdd ggd       | j                  t        t        ddgdd	gg       y 
Nr
   r   r@   Ag      ?ar?   r=   r   )assertRaises	TypeErrorr   object
ValueErrorselfs    r   test_wrong_argszTestSolve.test_wrong_args_   s    )UaVbTNC@)UA.)UC0)UFH5)USE2)UaVaY,?C*eq!fq!f-=>r-   c           	          t        d      D ]:  }| j                  t        g |      t        d|dz         D cg c]  }|  c}       < y c c}w )N   r
   )rangeassertEqualr   )rN   r   r%   s      r   test_no_clauseszTestSolve.test_no_clausesh   sG    q 	JAU2q\aQ+H1QB+HI	J+Hs   
A
c           
         | j                  t        t              g d       t        j                  d   dk(  rJt        D cg c]  }|D cg c]  }t        |       c} }}}| j                  t        |      g d       y y c c}w c c}}w )Nr
   rB   r@   rA   r=   r   r   )rS   r   clauses1r7   version_infolong)rN   r)   r   clss       r   	test_cnf1zTestSolve.test_cnf1l   sl    x*<=A!#?GHV0#DI0HCHU3Z);< $0Hs   	B
BBBc                 X    | j                  t        t        t                    g d       y NrV   )rS   r   iterrW   rM   s    r   test_iter_clauseszTestSolve.test_iter_clausesr   s    tH~.0BCr-   c           
      ~    | j                  t        t        D cg c]  }t        |       c}      g d       y c c}w r]   )rS   r   rW   r^   rN   r)   s     r   test_each_clause_iterzTestSolve.test_each_clause_iteru   s,    8DVDE+	-D   :c                 X    | j                  t        t        t                    g d       y r]   )rS   r   tuplerW   rM   s    r   test_tuple_caluseszTestSolve.test_tuple_calusesy   s    uX/1CDr-   c           
      ~    | j                  t        t        D cg c]  }t        |       c}      g d       y c c}w r]   )rS   r   rW   re   ra   s     r   test_each_clause_tuplesz!TestSolve.test_each_clause_tuples|   s,    HE&fEF+	-Erc   c                 N    d }| j                  t         |             g d       y )Nc               3   *   K   t         D ]  } |   y wr/   rW   r)   s    r   gen_clausesz/TestSolve.test_gen_clauses.<locals>.gen_clauses        "    rV   )rS   r   rN   rm   s     r   test_gen_clauseszTestSolve.test_gen_clauses   s!    	 	{}-/ABr-   c           	      z    | j                  t        t        D cg c]  }d |D         c}      g d       y c c}w )Nc              3       K   | ]  }|  y wr/    r$   r3   s     r   r'   z1TestSolve.test_each_clause_gen.<locals>.<genexpr>   s      3q 3   rV   rS   r   rW   ra   s     r   test_each_clause_genzTestSolve.test_each_clause_gen   s.    (K 3F 3KL+	-Ks   8c                 X     G d d      }| j                  t        t         |              y )Nc                       e Zd Zd Zy)%TestSolve.test_bad_iter.<locals>.Liarc                      y r/   rt   rM   s    r   __iter__z.TestSolve.test_bad_iter.<locals>.Liar.__iter__       tr-   N__name__
__module____qualname__r}   rt   r-   r   Liarr{          +r-   r   )rI   rJ   r   rN   r   s     r   test_bad_iterzTestSolve.test_bad_iter   s     	, 	,)UDF3r-   c                 B    | j                  t        t              d       y )NUNSAT)rS   r   clauses2rM   s    r   	test_cnf2zTestSolve.test_cnf2   s    x'2r-   c                 F    | j                  t        t              ddg       y )Nr   rB   rS   r   clauses3rM   s    r   	test_cnf3zTestSolve.test_cnf3   s    x2r(3r-   c                 J    | j                  t        t        d      g d       y )Nr?   varsr   rB   r@   r   rM   s    r   test_cnf3_3varszTestSolve.test_cnf3_3vars   s    xa0,?r-   c                 z    t        dd      D ],  }| j                  t        t        |      |dk  rdng d       . y )Nr
      
prop_limit   UNKNOWNrV   )rR   rS   r   rW   )rN   lims     r   test_cnf1_prop_limitzTestSolve.test_cnf1_prop_limit   s=    B< 	KCU8<*-'Y7IK	Kr-   c                 J    | j                  t        t        d      g d       y )NrQ   r   )r
   rB   r@   rA   r=   iirw   rM   s    r   test_cnf1_varszTestSolve.test_cnf1_vars   s    xa03	5r-   N)r   r   r   rO   rT   r[   r_   rb   rf   rh   rq   rx   r   r   r   r   r   r   rt   r-   r   rD   rD   ]   sS    ?J=D-E-C-4
34@K
5r-   rD   c                   f    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y)TestIterSolvec                    | j                  t        t        ddgdggd       | j                  t        t        d       | j                  t        t        d       | j                  t        t        t                      | j                  t        t        dg       | j                  t        t        ddgdd ggd       | j                  t        t        ddgdd	gg       y rF   )rI   rJ   r   rK   rL   rM   s    r   rO   zTestIterSolve.test_wrong_args   s    )Y!Q"D)Y2)Y4)Y9)Y6)Y!Q!T0CQG*i1a&1a&1ABr-   c                     t        d      D ]4  }| j                  t        t        t	        g |                  d|z         6 y )NrQ   r   r   )rR   rS   r   r2   r   )rN   r   s     r   rT   zTestIterSolve.test_no_clauses   s<    q 	GASi&;!<=qAvF	Gr-   c           
      r    | j                  t        d t        t        t                    D                     y )Nc              3   <   K   | ]  }t        t        |        y wr/   r,   rW   r$   r+   s     r   r'   z2TestIterSolve.test_iter_clauses.<locals>.<genexpr>   s      7HXs3 7   )
assertTruer*   r   r^   rW   rM   s    r   r_   zTestIterSolve.test_iter_clauses   s+     7%d8n57 7 	8r-   c                     | j                  t        d t        t        D cg c]  }t	        |       c}      D                     y c c}w )Nc              3   <   K   | ]  }t        t        |        y wr/   r   r   s     r   r'   z6TestIterSolve.test_each_clause_iter.<locals>.<genexpr>   s      NHXs3 Nr   )r   r*   r   rW   r^   ra   s     r   rb   z#TestIterSolve.test_each_clause_iter   s=     N%(&KtF|&KLN N 	O&K   Ac           
      r    | j                  t        d t        t        t                    D                     y )Nc              3   <   K   | ]  }t        t        |        y wr/   r   r   s     r   r'   z3TestIterSolve.test_tuple_caluses.<locals>.<genexpr>   s      8HXs3 8r   )r   r*   r   re   rW   rM   s    r   rf   z TestIterSolve.test_tuple_caluses   s+     8%eHo68 8 	9r-   c                     | j                  t        d t        t        D cg c]  }t	        |       c}      D                     y c c}w )Nc              3   <   K   | ]  }t        t        |        y wr/   r   r   s     r   r'   z8TestIterSolve.test_each_clause_tuples.<locals>.<genexpr>   s      OHXs3 Or   )r   r*   r   rW   re   ra   s     r   rh   z%TestIterSolve.test_each_clause_tuples   s=     O%8&LuV}&LMO O 	P&Lr   c           	      h    d }| j                  t        d t         |             D                     y )Nc               3   *   K   t         D ]  } |   y wr/   rk   rl   s    r   rm   z3TestIterSolve.test_gen_clauses.<locals>.gen_clauses   rn   ro   c              3   <   K   | ]  }t        t        |        y wr/   r   r   s     r   r'   z1TestIterSolve.test_gen_clauses.<locals>.<genexpr>   s      6HXs3 6r   )r   r*   r   rp   s     r   rq   zTestIterSolve.test_gen_clauses   s0    	 	 6%km46 6 	7r-   c                     | j                  t        d t        t        D cg c]  }d |D         c}      D                     y c c}w )Nc              3   <   K   | ]  }t        t        |        y wr/   r   r   s     r   r'   z5TestIterSolve.test_each_clause_gen.<locals>.<genexpr>   s      3HXs3 3r   c              3       K   | ]  }|  y wr/   rt   ru   s     r   r'   z5TestIterSolve.test_each_clause_gen.<locals>.<genexpr>   s     ':a':rv   )r   r*   r   rW   ra   s     r   rx   z"TestIterSolve.test_each_clause_gen   sD     3%'/'1v':6': '1 23 3 	4'1s   Ac                 X     G d d      }| j                  t        t         |              y )Nc                       e Zd Zd Zy))TestIterSolve.test_bad_iter.<locals>.Liarc                      y r/   rt   rM   s    r   r}   z2TestIterSolve.test_bad_iter.<locals>.Liar.__iter__   r~   r-   Nr   rt   r-   r   r   r      r   r-   r   )rI   rJ   r   r   s     r   r   zTestIterSolve.test_bad_iter   s     	, 	,)Y7r-   c                 <   t        t        t              D ]!  }| j                  t	        t        |             # t        t        t        t                    }| j                  t        |      d       | j                  t        t        d |D                    d       y )Nr      c              3   2   K   | ]  }t        |        y wr/   re   r   s     r   r'   z*TestIterSolve.test_cnf1.<locals>.<genexpr>   s      <s <   )	r   rW   nvars1r   r,   r2   rS   r   set)rN   r+   solss      r   r[   zTestIterSolve.test_cnf1   sr    Xv. 	5COOHXs34	5 IhV45TB'S <t <<=rBr-   c           	         t        d t        t              D              }t        d      D ][  }t	        j
                  t              }t        j                  |       | j                  t        d t        |      D              |       ] y )Nc              3   2   K   | ]  }t        |        y wr/   r   r   s     r   r'   z5TestIterSolve.test_shuffle_clauses.<locals>.<genexpr>        AcuSzAr   
   c              3   2   K   | ]  }t        |        y wr/   r   r   s     r   r'   z5TestIterSolve.test_shuffle_clauses.<locals>.<genexpr>   s      Fs Fr   )	r   r   rW   rR   copydeepcopyrandomshufflerS   )rN   ref_sols_r   s       r   test_shuffle_clausesz"TestIterSolve.test_shuffle_clauses   sf    AYx-@AAr 	'A--)CNN3S Fy~ FF%'		'r-   c                     t        d t        t              D              }dt        j                  t              z  }| j                  t        d t        |      D              |       y )Nc              3   2   K   | ]  }t        |        y wr/   r   r   s     r   r'   z2TestIterSolve.test_many_clauses.<locals>.<genexpr>   r   r   d   c              3   2   K   | ]  }t        |        y wr/   r   r   s     r   r'   z2TestIterSolve.test_many_clauses.<locals>.<genexpr>   s     BCU3ZBr   )r   r   rW   r   r   rS   )rN   r   r   s      r   test_many_clauseszTestIterSolve.test_many_clauses   sL    AYx-@AADMM(++B9S>BB!	#r-   c                 ^    | j                  t        t        t        t                    g        y r/   )rS   r2   r   r   nvars2rM   s    r   r   zTestIterSolve.test_cnf2   s    i&9:B?r-   c                 b    | j                  t        t        t        d            g dg dg       y )Nr?   r   )r   rB   r?   )rS   r2   r   r   rM   s    r   r   zTestIterSolve.test_cnf3_3vars   s&    i!45&4	6r-   c                 X    | j                  t        t        t        d            g        y )Nr   r   )rS   r2   r   rW   rM   s    r   r   z"TestIterSolve.test_cnf1_prop_limit   s    iQ?@"Er-   N)r   r   r   rO   rT   r_   rb   rf   rh   rq   rx   r   r[   r   r   r   r   r   rt   r-   r   r   r      sT    CG8O9P74
8
C'#@6Fr-   r   c                    t        dt        j                  z         t        dt        j                  z         t        dt        j
                  z         t        j                         }t        D ]6  }t        |      D ]&  }|j                  t        j                  |             ( 8 t        j                  |       }|j                  |      S )Nzsys.prefix: %szsys.version: %szpycosat version: %r)	verbosity)printr7   prefixversionr0   __version__unittest	TestSuitetestsrR   addTest	makeSuiteTextTestRunnerrun)r   repeatsuiterZ   r   runners         r   r   r      s    	
SZZ
'(	
ckk
)*	
'"5"5
56 E 3v 	3AMM(,,S12	33 $$y9F::er-   __main__)r
   r
   )r7   r   r   os.pathr   r   r0   r   r   r   r,   r4   r<   r   rW   r   r   nvars3r   r   TestCaserD   r   r   r   r   r   argvr   rt   r-   r   <module>r      s   
      $,&. z=2r(; 
 taSk  AwR1b'2  	B5!! B5H Y RFH%% RFh ]  z
388}HHQRL 	#DT"	#	 r-   