
    ͂g"                        S SK r S SKrS SKrS SKJr  S SKrS SKrS SKJrJr  S r	S r
S rS rS/ S	Q/ S
QSS//srrSS/S//srrSSS/SS/SS//srr/ r " S S\R(                  5      r\R-                  \5         " S S\R(                  5      r\R-                  \5        SS jr\S:X  a=  \" \ R6                  5      S:X  a  \" 5         g\ R6                  SS  H  r\" \5        M     gg)    N)basename)solve	itersolvec           	         / n[        U 5       H  nUR                  5       nU(       a	  US   S:X  a  M%  US   S:X  a?  [        U5      S:X  d   eUS   S:X  d   eUSS  Vs/ s H  n[        U5      PM     snu  pVMm  US   S:X  a    O=US	   S
:X  d   eUR	                  USS	  Vs/ s H  n[        U5      PM     sn5        M     [        U5      W:X  d   eUW4$ s  snf s  snf )z^
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.13/site-packages/test_pycosat.pyread_cnfr      s    
 GT


aC8s?u:?"?8u$$$16q <AQ <F8s?RyCE#2J7JSCJ78  w<9$$$F? !=
 8s   C#C
c                 x   ^ 0 mU H  n[        US:  5      T[        U5      '   M     [        U4S jU  5       5      $ )z(
evaluate the clauses with the solution
r   c              3   N   >#    U  H  n[        U4S  jU 5       5      v   M     g7f)c              3   ^   >#    U  H"  nT[        U5         [        US :  5      -  v   M$     g7f)r   N)absbool).0isol_varss     r   	<genexpr>%evaluate.<locals>.<genexpr>.<genexpr>)   s'     B6a8CF#d1q5k16s   *-N)any)r$   clauser&   s     r   r'   evaluate.<locals>.<genexpr>)   s&      &$6 B6BBB$s   "%)r#   r"   all)r   solr%   r&   s      @r   evaluater.   "   sD     HA;Q  &$& & &    c              #      #     [         R                  " U 5      n[        U[        5      (       a'  Uv   U R	                  U Vs/ s H  o"* PM     sn5        Og MU  s  snf 7fN)pycosatr   
isinstancelistr   )r   r-   xs      r   py_itersolver6   ,   sP     
mmG$c4  INN,1B,-  -s   A AAAc                    [         R                  R                  S[        U 5      -  5        [         R                  R	                  5         [        U 5      u  p[         R                  R                  SU[        U5      4-  5        [         R                  R	                  5         Sn[        X5       HW  n[         R                  R                  S5        [         R                  R	                  5         [        X5      (       d   eUS-  nMY     [         R                  R                  SU-  5        [         R                  R	                  5         U$ )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tnOGJJ.&#g,1GGHJJE)



%%%%
	 *
 JJVe^$JJLr/      )r
   r	   )r   r?      r	   r   r   r
   c                   n    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rSrg)	TestSolve]   c                    U R                  [        [        SS/S//S5        U R                  [        [        S5        U R                  [        [        S5        U R                  [        [        [        5       5        U R                  [        [        S/5        U R                  [        [        SS/SS //S5        U R                  [        [        SS/SS	//5        g 
Nr
   r   rB   Ag      ?arA   r?   r   )assertRaises	TypeErrorr   object
ValueErrorselfs    r   test_wrong_argsTestSolve.test_wrong_args_   s    )UaVbTNC@)UA.)UC0)UFH5)USE2)UaVaY,?C*eq!fq!f-=>r/   c           	          [        S5       H=  nU R                  [        / U5      [        SUS-   5       Vs/ s H  o"* PM     sn5        M?     g s  snf )N   r
   )rangeassertEqualr   )rQ   r   r%   s      r   test_no_clausesTestSolve.test_no_clausesh   sB    qAU2q\aQ+H1B+HI +Hs   Ac           
      (   U R                  [        [        5      / SQ5        [        R                  S   S:X  aO  [         VVs/ s H  o Vs/ s H  n[        U5      PM     snPM      nnnU R                  [        U5      / SQ5        g g s  snf s  snnf )Nr
   rD   rB   rC   r?   r   r   )rW   r   clauses1r9   version_infolong)rQ   r*   r   clss       r   	test_cnf1TestSolve.test_cnf1l   sq    x*<=A!#?GHxV0#DI0xCHU3Z);< $0Hs   	BB	 B	Bc                 X    U R                  [        [        [        5      5      / SQ5        g Nr[   )rW   r   iterr\   rP   s    r   test_iter_clausesTestSolve.test_iter_clausesr   s    tH~.0BCr/   c           
          U R                  [        [         Vs/ s H  n[        U5      PM     sn5      / SQ5        g s  snf rc   )rW   r   r\   rd   rQ   r*   s     r   test_each_clause_iterTestSolve.test_each_clause_iteru   s0    8D8V8DE+	-D   =c                 X    U R                  [        [        [        5      5      / SQ5        g rc   )rW   r   tupler\   rP   s    r   test_tuple_calusesTestSolve.test_tuple_calusesy   s    uX/1CDr/   c           
          U R                  [        [         Vs/ s H  n[        U5      PM     sn5      / SQ5        g s  snf rc   )rW   r   r\   rm   rh   s     r   test_each_clause_tuples!TestSolve.test_each_clause_tuples|   s0    HEH&fHEF+	-Erk   c                 N    S nU R                  [        U" 5       5      / SQ5        g )Nc               3   .   #    [          H  n U v   M	     g 7fr1   r\   r*   s    r   gen_clauses/TestSolve.test_gen_clauses.<locals>.gen_clauses        " #   r[   )rW   r   rQ   rw   s     r   test_gen_clausesTestSolve.test_gen_clauses   s!    	 	{}-/ABr/   c           	          U R                  [        [         Vs/ s H  nS U 5       PM     sn5      / SQ5        g s  snf )Nc              3   $   #    U  H  ov   M     g 7fr1    r$   r5   s     r   r'   1TestSolve.test_each_clause_gen.<locals>.<genexpr>   s      3FqF   r[   rW   r   r\   rh   s     r   test_each_clause_genTestSolve.test_each_clause_gen   s2    (K( 3F 3(KL+	-Ks   ;c                 X     " S S5      nU R                  [        [        U" 5       5        g )Nc                       \ rS rSrS rSrg)%TestSolve.test_bad_iter.<locals>.Liar   c                     g r1   r   rP   s    r   __iter__.TestSolve.test_bad_iter.<locals>.Liar.__iter__       tr/   r   N__name__
__module____qualname____firstlineno__r   __static_attributes__r   r/   r   Liarr          +r/   r   )rL   rM   r   rQ   r   s     r   test_bad_iterTestSolve.test_bad_iter   s     	, 	,)UDF3r/   c                 B    U R                  [        [        5      S5        g )NUNSAT)rW   r   clauses2rP   s    r   	test_cnf2TestSolve.test_cnf2   s    x'2r/   c                 F    U R                  [        [        5      SS/5        g )Nr   rD   rW   r   clauses3rP   s    r   	test_cnf3TestSolve.test_cnf3   s    x2r(3r/   c                 D    U R                  [        [        SS9/ SQ5        g )NrA   varsr   rD   rB   r   rP   s    r   test_cnf3_3varsTestSolve.test_cnf3_3vars   s    xa0,?r/   c                 z    [        SS5       H+  nU R                  [        [        US9US:  a  SO/ SQ5        M-     g )Nr
      
prop_limit   UNKNOWNr[   )rV   rW   r   r\   )rQ   lims     r   test_cnf1_prop_limitTestSolve.test_cnf1_prop_limit   s6    B<CU8<*-'Y7IK  r/   c                 D    U R                  [        [        SS9/ SQ5        g )NrU   r   )r
   rD   rB   rC   r?   iir   rP   s    r   test_cnf1_varsTestSolve.test_cnf1_vars   s    xa03	5r/   r   N)r   r   r   r   rR   rX   r`   re   ri   rn   rq   r|   r   r   r   r   r   r   r   r   r   r/   r   rF   rF   ]   sS    ?J=D-E-C-4
34@K
5r/   rF   c                   n    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rSrg)TestIterSolve   c                    U R                  [        [        SS/S//S5        U R                  [        [        S5        U R                  [        [        S5        U R                  [        [        [        5       5        U R                  [        [        S/5        U R                  [        [        SS/SS //S5        U R                  [        [        SS/SS	//5        g rI   )rL   rM   r   rN   rO   rP   s    r   rR   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                     [        S5       H2  nU R                  [        [        [	        / US95      5      SU-  5        M4     g )NrU   r   r   )rV   rW   r   r4   r   )rQ   r   s     r   rX   TestIterSolve.test_no_clauses   s5    qASi&;!<=qAvF r/   c           
      r    U R                  [        S [        [        [        5      5       5       5      5        g )Nc              3   B   #    U  H  n[        [        U5      v   M     g 7fr1   r.   r\   r$   r-   s     r   r'   2TestIterSolve.test_iter_clauses.<locals>.<genexpr>   s!      75 9<HXs335   )
assertTruer,   r   rd   r\   rP   s    r   re   TestIterSolve.test_iter_clauses   s+     7%d8n57 7 	8r/   c                     U R                  [        S [        [         Vs/ s H  n[	        U5      PM     sn5       5       5      5        g s  snf )Nc              3   B   #    U  H  n[        [        U5      v   M     g 7fr1   r   r   s     r   r'   6TestIterSolve.test_each_clause_iter.<locals>.<genexpr>   s"      NL 9<HXs33Lr   )r   r,   r   r\   rd   rh   s     r   ri   #TestIterSolve.test_each_clause_iter   sA     N%(&K(tF|(&KLN N 	O&K   A
c           
      r    U R                  [        S [        [        [        5      5       5       5      5        g )Nc              3   B   #    U  H  n[        [        U5      v   M     g 7fr1   r   r   s     r   r'   3TestIterSolve.test_tuple_caluses.<locals>.<genexpr>   s!      86 9<HXs336r   )r   r,   r   rm   r\   rP   s    r   rn    TestIterSolve.test_tuple_caluses   s+     8%eHo68 8 	9r/   c                     U R                  [        S [        [         Vs/ s H  n[	        U5      PM     sn5       5       5      5        g s  snf )Nc              3   B   #    U  H  n[        [        U5      v   M     g 7fr1   r   r   s     r   r'   8TestIterSolve.test_each_clause_tuples.<locals>.<genexpr>   s"      OM 9<HXs33Mr   )r   r,   r   r\   rm   rh   s     r   rq   %TestIterSolve.test_each_clause_tuples   sA     O%8&L8uV}8&LMO O 	P&Lr   c           	      h    S nU R                  [        S [        U" 5       5       5       5      5        g )Nc               3   .   #    [          H  n U v   M	     g 7fr1   ru   rv   s    r   rw   3TestIterSolve.test_gen_clauses.<locals>.gen_clauses   ry   rz   c              3   B   #    U  H  n[        [        U5      v   M     g 7fr1   r   r   s     r   r'   1TestIterSolve.test_gen_clauses.<locals>.<genexpr>   s!      64 9<HXs334r   )r   r,   r   r{   s     r   r|   TestIterSolve.test_gen_clauses   s0    	 	 6%km46 6 	7r/   c                     U R                  [        S [        [         Vs/ s H  nS U 5       PM     sn5       5       5      5        g s  snf )Nc              3   B   #    U  H  n[        [        U5      v   M     g 7fr1   r   r   s     r   r'   5TestIterSolve.test_each_clause_gen.<locals>.<genexpr>   s%      32 9<HXs332r   c              3   $   #    U  H  ov   M     g 7fr1   r   r   s     r   r'   r      s     ':6a6r   )r   r,   r   r\   rh   s     r   r   "TestIterSolve.test_each_clause_gen   sO     3%'/'1'/ @F':6':'/'1 23 3 	4'1s   Ac                 X     " S S5      nU R                  [        [        U" 5       5        g )Nc                       \ rS rSrS rSrg))TestIterSolve.test_bad_iter.<locals>.Liar   c                     g r1   r   rP   s    r   r   2TestIterSolve.test_bad_iter.<locals>.Liar.__iter__   r   r/   r   Nr   r   r/   r   r   r      r   r/   r   )rL   rM   r   r   s     r   r   TestIterSolve.test_bad_iter   s     	, 	,)Y7r/   c                 :   [        [        [        5       H"  nU R                  [	        [        U5      5        M$     [        [        [        [        S95      nU R                  [        U5      S5        U R                  [        [        S U 5       5      5      S5        g )Nr      c              3   8   #    U  H  n[        U5      v   M     g 7fr1   rm   r   s     r   r'   *TestIterSolve.test_cnf1.<locals>.<genexpr>   s      <tst   )	r   r\   nvars1r   r.   r4   rW   r   set)rQ   r-   solss      r   r`   TestIterSolve.test_cnf1   sm    Xv.COOHXs34 / IhV45TB'S <t <<=rBr/   c           	         [        S [        [        5       5       5      n[        S5       H^  n[        R
                  " [        5      n[        R                  " U5        U R                  [        S [        U5       5       5      U5        M`     g )Nc              3   8   #    U  H  n[        U5      v   M     g 7fr1   r   r   s     r   r'   5TestIterSolve.test_shuffle_clauses.<locals>.<genexpr>        A-@cuSzz-@r   
   c              3   8   #    U  H  n[        U5      v   M     g 7fr1   r   r   s     r   r'   r      s      F~s~r   )	r   r   r\   rV   copydeepcopyrandomshufflerW   )rQ   ref_sols_r   s       r   test_shuffle_clauses"TestIterSolve.test_shuffle_clauses   sa    AYx-@AArA--)CNN3S Fy~ FF%'	 r/   c                     [        S [        [        5       5       5      nS[        R                  " [        5      -  nU R                  [        S [        U5       5       5      U5        g )Nc              3   8   #    U  H  n[        U5      v   M     g 7fr1   r   r   s     r   r'   2TestIterSolve.test_many_clauses.<locals>.<genexpr>   r   r   d   c              3   8   #    U  H  n[        U5      v   M     g 7fr1   r   r   s     r   r'   r      s     B>CU3ZZ>r   )r   r   r\   r   r   rW   )rQ   r   r   s      r   test_many_clausesTestIterSolve.test_many_clauses   sL    AYx-@AADMM(++B9S>BB!	#r/   c                 ^    U R                  [        [        [        [        5      5      / 5        g r1   )rW   r4   r   r   nvars2rP   s    r   r   TestIterSolve.test_cnf2   s    i&9:B?r/   c                 b    U R                  [        [        [        S5      5      / SQ/ SQ/5        g )NrA   r   )r   rD   rA   )rW   r4   r   r   rP   s    r   r   TestIterSolve.test_cnf3_3vars   s&    i!45&4	6r/   c           	      R    U R                  [        [        [        SS95      / 5        g )Nr   r   )rW   r4   r   r\   rP   s    r   r   "TestIterSolve.test_cnf1_prop_limit   s    iQ?@"Er/   r   N)r   r   r   r   rR   rX   re   ri   rn   rq   r|   r   r   r`   r   r  r   r   r   r   r   r/   r   r   r      sT    CG8O9P74
8
C'#@6Fr/   r   c                    [        S[        R                  -  5        [        S[        R                  -  5        [        S[        R
                  -  5        [        R                  " 5       n[         HC  n[        U5       H1  nUR                  [        R                  R                  U5      5        M3     ME     [        R                  " U S9nUR                  U5      $ )Nzsys.prefix: %szsys.version: %szpycosat version: %r)	verbosity)printr9   prefixversionr2   __version__unittest	TestSuitetestsrV   addTestdefaultTestLoaderloadTestsFromTestCaseTextTestRunnerrun)r  repeatsuiter_   r   runners         r   r  r     s    	
SZZ
'(	
ckk
)*	
'"5"5
56 EvAMM(44JJ3OP   $$y9F::er/   __main__)r
   r
   )r9   r   r   os.pathr   r  r2   r   r   r   r.   r6   r>   r   r\   r  r   nvars3r   r  TestCaserF   r   r   r  r   r   argvr   r   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}HHQRLDT" !	 r/   