
    sg;                        d Z ddlmZ ddlmZ ddlmZ ddlmZm	Z	m
Z
mZmZmZ ddlmZmZmZmZmZmZ ddlmZmZmZmZmZmZmZmZ ddlmZ dd	l m!Z! dd
l"m#Z#m$Z$ ddl%m&Z& ddl'm(Z( ddl)m*Z*m+Z+ ddl,m-Z- d Z.d Z/d Z0d Z1d Z2d Z3d Z4d Z5d Z6d Z7d Z8d Z9d Z:d Z;d Z<d Z=d Z>d  Z?d! Z@d" ZAd# ZBd$ ZCd% ZDd& ZEy')(z1For more tests on satisfiability, see test_dimacs    )Q)symbols)
Unequality)AndOrImplies
Equivalenttruefalse)literal_symbolpl_truesatisfiablevalidentailsPropKB)dplldpll_satisfiablefind_pure_symbolfind_unit_clauseunit_propagatefind_pure_symbol_int_reprfind_unit_clause_int_reprunit_propagate_int_repr)r   )z3_satisfiable)CNF
EncodedCNF)make_random_problem)randint)raisesskip)import_modulec                      t        d      \  } }t        d      du sJ t        d      du sJ t        |       | u sJ t        |        | u sJ y )NzA,BTF)r   r   ABs     S/var/www/html/venv/lib/python3.12/site-packages/sympy/logic/tests/test_inference.pytest_literalr'      s]    5>DAq$4'''% E)))!!!!1""""    c                     t        d      \  } }}t        | g| g      | dfk(  sJ t        | |g|  |z  | | z  g      dk(  sJ t        | ||g| | z  | | z  || z  g      | dfk(  sJ t        | ||g|  |z  || z  || z  g      |dfk(  sJ t        | ||g|  | z  | | z  || z  g      |dfk(  sJ t        | ||g|  |z  | | z  || z  g      dk(  sJ y )NA,B,CTNNF)r   r   r$   r%   Cs      r&   test_find_pure_symbolr.       s?   gGAq!QC!%!T222QFaR!VaR!V$45EEEQ1IaR!qb!a%'@AaYNNNQ1IQQBA'>?At9LLLQ1IaR!qb!a%'@AaZOOO	
Aq	QBFQB!GQU+-0<= = =r(   c                  >   t        dgdhg      dk(  sJ t        ddgddhddhg      dk(  sJ t        g dddhddhd	dhg      dk(  sJ t        g dddhddhd	dhg      d
k(  sJ t        g dddhddhd	dhg      dk(  sJ t        g dddhddhd	dhg      dk(  sJ y )N   r0   T   r+   r0   r2      r6   r2   Tr2   F)r    r(   r&   test_find_pure_symbol_int_reprr;   +   s   $aSA3%0I===$aVa2q'"$'34 4 4$YR2r(QF+-09: : :$Ya1b'Aq6*,/89 9 9$YbB8aV,.1;< < <$Ya2r(QF+-0<= = =r(   c                     t        d      \  } }}t        | gi       | dfk(  sJ t        | |  gi       | dfk(  sJ t        | |z  g| di      |dfk(  sJ t        | |z  g|di      | dfk(  sJ t        | |z  |z  || z  | | z  g| di      |dfk(  sJ t        | |z  |z  || z  | |z  g| di      |dfk(  sJ t        | |z  |z  || z  | gi       | dfk(  sJ y Nr*   TF)r   r   r,   s      r&   test_unit_clauser>   9   s8   gGAq!QC$D	111QGR(QI555QUGaY/At9<<<QUGaY/At9<<<	
QAFAF#aY045u:> > >QUQYQBA6D	Bq$iOOOQUQYQB3R8QIEEEr(   c            	         t        t        t        dgg      i       dk(  sJ t        t        t        dgdgg      i       dk(  sJ t        ddhgddi      dk(  sJ t        ddhgddi      dk(  sJ t        t        t        g dddgdd	gg      ddi      d
k(  sJ t        t        t        g dddgddgg      ddi      dk(  sJ t        d      \  } }}t	        | |z  |z  || z  | gi       | dfk(  sJ y )Nr0   r1   r3   r2   Tr8   r5   r7   r4   r9   r6   r*   )r   mapsetr   r   r,   s      r&   test_unit_clause_int_reprrB   E   s>   $Sse_b9YFFF$SsRDk%:B?9LLL$q!fX4y9YFFF$q!fX4y9YFFF$S	QGaW%&')*D	36@A A A$S	QGaV$&&()4y25>? ? ? gGAq!QUQYQB3R8QIEEEr(   c                      t        d      \  } }}t        | |z  g|       g k(  sJ t        | |z  |  |z  | |z  | g|       || |z  | gk(  sJ y )Nr*   )r   r   r,   s      r&   test_unit_propagaterD   S   sg    gGAq!1q5'1%+++1q51"q&1"q&!4a8QQNJJJr(   c            	          t        ddhgd      g k(  sJ t        t        t        ddgddgddgdgg      d      dhddhgk(  sJ y )Nr0   r2   r3   r6   r7   )r   r@   rA   r:   r(   r&   test_unit_propagate_int_reprrF   Y   sg    "QF8Q/2555"3s
Q"a2q'A3'$)*+-23r1g? ? ?r(   c                  b    t        d      \  } }}t        | |z  g| |g| d|di      | d|dik(  sJ y)z"This is also tested in test_dimacsr*   TN)r   r   r,   s      r&   	test_dpllrH   _   sE    gGAq!Q!Q!T1d!34D!T8JJJJr(   c                  >   t        d      \  } }}t        | |  z        du sJ t        | | z        | d|dik(  sJ t        | |z        | di|di| d|difv sJ t        |  |z  | | z  z        | d|di| d|difv sJ t        | |z  | |z  z        | d|di| d|di|d|difv sJ t        | |z  |z        | d|d|dik(  sJ t        | |z  | |z	  z        |dik(  sJ t        t        | |      | z        | d|dik(  sJ t        t        | |      |  z        | d|dik(  sJ y Nr*   FT)r   r   r	   r,   s      r&   test_dpll_satisfiablerK   e   s   gGAq!Q!V%...Q!V%!T1e)<<<<	AI4y1dAt*<=> > >
aQBF#$dAt"4q%E6J!KL L La!eQ/1q$56IaD!T 264 4 4 4QUQY)aq$4-HHHHa!eQ/1aY>>>Z1-134D7IIIIZ1-24E1e8LLLLr(   c                  J   t        d      \  } }}t        | |  z        du sJ t        | | z        | d|dik(  sJ t        | |z        | di|di| d|difv sJ t        |  |z  | | z  z        | d|di| d|difv sJ t        | |z  | |z  z        | d|d|di| d|d|difv sJ t        | |z  |z        | d|d|dik(  sJ t        | |z  | |z	  z        |d| di|d| difv sJ t        t        | |      | z        | d|dik(  sJ t        t        | |      |  z        | d|dik(  sJ y rJ   )r   dpll2_satisfiabler	   r,   s      r&   test_dpll2_satisfiablerN   u   s   gGAq!a1"f&%///a1"f&1dAu*====	AI4y1dAt*<=> > >
aQBF#$dAt"4q%E6J!KL L Lq1u!a024E1d7S	
D!T1d#7% % % %a!eai*q$4D.IIIIq1ua024E7J	
D!T7   jA.24D!T8JJJJjA.!35!UAu9MMMMr(   c            
      J   t        d      \  } }}d } || |  z        du sJ  || | z        | d|dik(  sJ  || |z        | di|di| d|di| d|di| d|difv sJ  ||  |z  | | z  z        | d|di| d|difv sJ  || |z  | |z  z        | d|d|di| d|d|di| d|d|di| d|d|difv sJ  || |z  |z        | d|d|dik(  sJ  || |z  | |z	  z        |d| di|d| difv sJ  |t        | |      | z        | d|dik(  sJ  |t        | |      |  z        | d|dik(  sJ y )Nr*   c                     t        | d      S )N	minisat22	algorithmr   )exprs    r&   <lambda>z,test_minisat22_satisfiable.<locals>.<lambda>   s    T[)Q r(   FT)r   r	   )r$   r%   r-   minisat22_satisfiables       r&   test_minisat22_satisfiablerX      s   gGAq!Q !qb&*e333 !qb&*q$5.AAAA 	AI5zAua+>D!T@RUVX\^_afTghi i i 
aQBF#$dAt"4q%E6J!KL L L 1q5aR!V"46AtQqRV;W	
D!T1d#a4D%AAtQPUWXZ_C`;b b b b !a%!).1dAtQ2MMMM 1q5Q!V"46AtQ;N	
D!T;    *Q"2Q"68Qa<NNNN *Q"2aR"79a5=QQQQr(   c            
         t        d      \  } }}dd} || |  z        du sJ  || | z        | d|dik(  sJ  || |z        | di|di| d|di| d|di| d|difv sJ  ||  |z  | | z  z        | d|di| d|difv sJ  || |z  | |z  z        | d|d|di| d|d|di| d|d|di| d|d|difv sJ  || |z  |z        | d|d|dik(  sJ  || |z  | |z	  z        |d| di|d| difv sJ  |t        | |      | z        | d|dik(  sJ  |t        | |      |  z        | d|dik(  sJ t        | |z  |z  ddd      }t        |      }|j	                         D ch c]
  \  }}|s	| }}}t        |      }|j	                         D ch c]
  \  }}|s	| }	}}t        |      }|j	                         D ch c]
  \  }}|s	| }
}}||	k  rJ |	|
k  rJ ||
k  rJ y c c}}w c c}}w c c}}w )Nr*   Tc                     t        | dd      S )NrQ   T)rS   minimalrT   )rU   r[   s     r&   rV   z4test_minisat22_minimal_satisfiable.<locals>.<lambda>   s    {4S^hl7m r(   FrQ   )rS   r[   
all_models)T)r   r	   r   nextitems)r$   r%   r-   rW   gsolkeyvaluefirst_solutionsecond_solutionthird_solutions              r&   "test_minisat22_minimal_satisfiablerf      s   gGAq!m !qb&*e333 !qb&*q$5.AAAA 	AI5zAua+>D!T@RUVX\^_afTghi i i 
aQBF#$dAt"4q%E6J!KL L L 1q5aR!V"46AtQqRV;W	
D!T1d#a4D%AAtQPUWXZ_C`;b b b b !a%!).1dAtQ2MMMM 1q5Q!V"46AtQ;N	
D!T;    *Q"2Q"68Qa<NNNN *Q"2aR"79a5=QQQQQUQY+ddSA
q'C,/IIKAjc55cANAQC-0YY[BzsEEsBOBQC,/IIKAjc55cANA000.000//// BBAs$   
G #G 
G&G&8
G,G,c                  T    t        d      \  } }}t        | | |z	  z  | z        du sJ y )Nr*   F)r   r   r,   s      r&   test_satisfiablerh      s4    gGAq!qAF|qb()U222r(   c                     t        d      \  } }}t        | || z	  z	        du sJ t        | ||z	  z	  | |z	  | |z	  z	  z	        du sJ t        | |  z	  | |z	  z	        du sJ t        | |z  |z        du sJ t        | |z	        du sJ y r=   )r   r   r,   s      r&   
test_validrj      s    gGAq!qAv4'''!Q-a1f!q&%9:;tCCC1"(Q'(D000Qu$$$a=E!!!r(   c            	      @   t        d      \  } }}t        d      du sJ t        | |z  | d|di      du sJ t        | |z  | di      du sJ t        | |z  |di      du sJ t        | |z  | d |di      du sJ t        | |z	  | di      du sJ t        | |z  | z  | d|d|di      du sJ t        t        | |      | d|di      du sJ t        d      du sJ t        | |z  | d|di      du sJ t        | |z  | di      du sJ t        | |z  |di      du sJ t        | |z  | d|di      du sJ t        ||d i      J t        | |z  | d|d i      J t        | |z	  | d|d i      J t        t        | |      | d i      J t        t        | |      | d|d i      J t        | |z  | did      J t        |  | z  | did      J t        | |z  | d|did      du sJ t        | |z  |  | z  z  | did      du sJ t        || z	  || z	  z	  |did      du sJ y )Nr*   TF)deep)r   r   r	   r,   s      r&   test_pl_truerm      s   gGAq!4=D   AEAtQ-.$666AEAt9%---AEAt9%---AEAtQ-.$666AFQJ'4///AEQBJE1dAt <=EEE:a#a5%9:dBBB 5>U"""AEAua/0E999AEAu:&%///AEAu:&%///AEAua/0E999 1q$i (((AEAtQ-.666AFQa./777:a#aY/777:a#aq$%78@@@ 1q51e*40888A27QJT2:::1q51eQ.T:eCCC1q5QB!G$q$id;uDDDAFQ'!T>$FFFr(   c                  |     ddl m  t        t        d        t        t         fd       t        t        d        y )Nr   pic                      t        d      S )NzJohn Cleeser   r:   r(   r&   rV   z*test_pl_true_wrong_input.<locals>.<lambda>   s    w}5 r(   c                  ,    t        d z    dz  z         S )N*   r2   rr   ro   s   r&   rV   z*test_pl_true_wrong_input.<locals>.<lambda>   s    wrBwq'89 r(   c                      t        d      S )Nrt   rr   r:   r(   r&   rV   z*test_pl_true_wrong_input.<locals>.<lambda>   s
    wr{ r(   )sympy.core.numbersrp   r   
ValueErrorro   s   @r&   test_pl_true_wrong_inputrx      s'    %
:56
:9:
:*+r(   c                      t        d      \  } }}t        | | |z	  | g      du sJ t        |t        | |      | g      du sJ t        | |z	  |  | z	  z	        du sJ t        | |z	  | |  z	  z	        du sJ y )NzA, B, CFT)r   r   r	   r,   s      r&   test_entailsrz      s    i GAq!1qAvrl#u,,,1z!Q'+,444AFqb)*e333AFqb)*d222r(   c                  6   t        d      \  } }}t               }|j                  | |z	        du sJ |j                  | || z	  z	        du sJ |j                  | |z	         |j                  ||z	         |j                  |       du sJ |j                  |      du sJ |j                  |      du sJ |j                  |        du sJ |j                  |       du sJ |j                  |       du sJ |j                  | |z	        du sJ |j                  |        |j                  |       du sJ |j                  |      du sJ |j                  |      du sJ |j                  |       du sJ |j	                  |        |j                  |      du sJ y rJ   )r   r   asktellretract)r$   r%   r-   kbs       r&   test_PropKBr      s   gGAq!	B66!q&>U"""66!Q- D(((GGAFOGGAFO66!966!966!9661":661":661":66!q&>T!!!GGAJ66!966!966!9661":JJqM66!9r(   c                  `    t               } t        d      \  }}}| j                  |      du sJ y)z"tolerant to bad inputr*   FN)r   r   r|   )r   r$   r%   r-   s       r&   test_propKB_tolerantr     s/    	BgGAq!66!9r(   c                  j   t        d      \  } }t        j                  | |z        }t        t        j                  | |z        t        j                  |       t        j                  |      z        }t        j                  |        t        j                  |       z  }t        j                  |       dt        j                  | |z        dit        j                  |      dt        j                  | |z        dit        j                  |       dt        j                  |      dt        j                  | |z        dit        j                  |       dt        j                  |      dt        j                  | |z        dit        j                  |       dt        j                  |      dt        j                  | |z        dig}t	        t        |||      d      rJ t	        t        |||       d      |v sJ t	        t        |||      d      rJ t	        t        |||       d      |v sJ y )Nzx yTFr   rR   dpll2)r   r   zeror   r   r   )xyassumptionsfactsqueryrefutationss         r&   test_satisfiable_non_symbolsr     s   5>DAq&&1+KAFF1Q3KQVVAY!67EVVAYJ!&&)#E	
D!&&1+t,	
D!&&1+t,	
D!&&)T166!A#;=	
D!&&)UAFF1Q3K>	
E166!9dAFF1Q3K>@K 3{E59VLLLs;v6&I[XXX3{E59WMMMs;v6'JkYYYr(   c                      ddl m}  t        t              t        t        ik(  sJ t        | j                        t        t        ik(  sJ t        t              du sJ t        | j                        du sJ y )Nr   SF)sympy.core.singletonr   r   r
   r   r   s    r&   test_satisfiable_boolr     sa    &tt,,,qvv4,...u&&&qww5(((r(   c                  J  	 ddl m} m} t        t	        dd            du sJ t        t	        | |  z	  | z  d            dgk(  sJ t        t	        dd            t        t        igk(  sJ | d|di| d|dig}t	        | |z  d      	|j                  t        	             |j                  t        	             t        t        	fd       |rJ t        t	        t        | |      d            | d|di| d|digk(  sJ | d|di| d|di| d|dig}t	        | |z	  d      D ]  }|j                  |        |rJ ddlm} ddlm}  |       }t        d	      D cg c]  }t        |       }}t	         || d      	t        d
      D ]  }t        	      rJ  y c c}w )Nr   r#   FT)r\   c                      t               S N)r]   )results   r&   rV   z-test_satisfiable_all_models.<locals>.<lambda>/  s    $v, r(   )numbered_symbols)r   d   
   )	sympy.abcr$   r%   r]   r   listr
   remover   StopIterationr	   sympy.utilities.iterablesr   sympy.logic.boolalgr   range)
r$   r%   modelsmodelr   r   symiXr   s
            @r&   test_satisfiable_all_modelsr   %  s   Ed34===Q1"WMd;<GGGDT23t~EEE$5!Aua#67FQ40F
MM$v,
MM$v,
=./:Jq!,>?5AtQ-./ / / %E"Qq$$7!T1d9KLFQ!V5 e:
 ;&

C!#J'qc'A'QD1F2Y F|| 	(s   F c                  b   t        d      } | st        d       t        d      \  }}}t        d      \  }}}t        |dk\  |dk  z        du sJ t        || z        du sJ t        || |z  |z  z        }t	        |      du sJ ||   du sJ t        |dz  dk\  |dk  z  |d	kD  z        du sJ y )
Nz3z3 not installed.r*   zx,y,zr2   r0   FTr3   )r!   r    r   r   bool)r   r$   r%   r-   r   r   zr   s           r&   test_z3r   F  s    	t	B !gGAq!gGAq!16a!e,-6661r6#u,,,1Q
+,E;$8t 16Q;1q51QV<=FFFr(   c                      t        d      } | t        d       d dfd	}d }t        d      D ]*  } |dd	d
      }	 t        |      } ||      du}||k(  r*J  y # | j                  j
                  $ r Y Iw xY w)Nr   r   c                 f    t        j                  |       }t               }|j                  |       |S r   )r   	from_propr   from_cnf)bfcnfencs      r&   boolean_formula_to_encoded_cnfz<test_z3_vs_lra_dpll2.<locals>.boolean_formula_to_encoded_cnf]  s(    mmBlS
r(   r   r2   c                 2   | |k  sJ t        ||d      }|d |  D cg c]  }|g }}|| d  D ]8  }t        |t              r| }t        d| dz
        }||   j	                  |       : |D cg c]
  }t        |  }}t        | } 	|      S c c}w c c}w )NF)num_variablesnum_constraintsrationalr   r0   )r   
isinstancer   r   appendr   r   )
num_clausesr   num_varconstraintsconsclausesr   clauser   r   s
            r&   make_random_cnfz-test_z3_vs_lra_dpll2.<locals>.make_random_cnfc  s    o---)Q`kpq&1,;&?@dD6@@- 	$D$
+u;q=)AAJd#		$ .5562v;557m-c22 A 6s   
B.Bc                     t        | d      S )NT)use_lra_theory)rM   )r   s    r&   rV   z&test_z3_vs_lra_dpll2.<locals>.<lambda>q  s    &7$&O r(   2      )r   r   r   F)   r   r2   )r!   r    r   r   z3typesZ3Exception)r   r   lra_dpll2_satisfiable_r   z3_satlra_dpll2_satr   s          @r&   test_z3_vs_lra_dpll2r   X  s    	t	B	z !3 P2Y 
'"b!L	#C(F .c2%?&&&
'
 zz%% 		s    AA;:A;N)F__doc__sympy.assumptions.askr   sympy.core.symbolr   sympy.core.relationalr   r   r   r   r   r	   r
   r   sympy.logic.inferencer   r   r   r   r   r   sympy.logic.algorithms.dpllr   r   r   r   r   r   r   r   sympy.logic.algorithms.dpll2rM   !sympy.logic.algorithms.z3_wrapperr   sympy.assumptions.cnfr   r   !sympy.logic.tests.test_lra_theoryr   sympy.core.randomr   sympy.testing.pytestr   r    sympy.externalr!   r'   r.   r;   r>   rB   rD   rF   rH   rK   rN   rX   rf   rh   rj   rm   rx   rz   r   r   r   r   r   r   r   r:   r(   r&   <module>r      s    7 # % , I I2 2   O < 1 A % - (#==	FFK?KM N"R"063
"GB,3.Z )BG$%'r(   