
    \h>                        S r SSKJr  SSKJr  SSKJr  SSKJrJ	r	J
r
JrJrJr  SSKJrJrJrJrJrJr  SSKJrJrJrJrJrJrJrJr  SSKJr  SS	K J!r!  SS
K"J#r#J$r$  SSK%J&r&  SSK'J(r(  SSK)J*r*J+r+  SSK,J-r-  S r.S r/S r0S r1S r2S r3S r4S r5S r6S r7S r8S r9S r:S r;S r<S r=S r>S  r?S! r@S" rAS# rBS$ rCS% rDS& rES' rFg())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                      [        S5      u  p[        S5      SL d   e[        S5      SL d   e[        U 5      U L d   e[        U ) 5      U L d   eg )NzA,BTF)r   r   ABs     X/var/www/auris/envauris/lib/python3.13/site-packages/sympy/logic/tests/test_inference.pytest_literalr'      s[    5>DA$4'''% E)))!!!!1""""    c                     [        S5      u  pn[        U /U /5      U S4:X  d   e[        X/U ) U-  U) U -  /5      S:X  d   e[        XU/X) -  U) U) -  X -  /5      U S4:X  d   e[        XU/U ) U-  X) -  X -  /5      US4:X  d   e[        XU/U ) U) -  U) U) -  X -  /5      US4:X  d   e[        XU/U ) U-  U) U) -  X -  /5      S:X  d   eg )NA,B,CTNNF)r   r   r$   r%   Cs      r&   test_find_pure_symbolr.       s'   gGA!QC!%!T222QFaR!VaR!V$45EEEQ1IR!qb!%'@AaYNNNQ1IQB'>?At9LLLQ1IaR!qb!%'@AaZOOO	
q	QBFQB!GQU+-0<= = =r(   c                  J   [        S/S1/5      S:X  d   e[        SS/SS1SS1/5      S:X  d   e[        / SQSS1SS1S	S1/5      S:X  d   e[        / SQSS1SS1S	S1/5      S
:X  d   e[        / SQSS1SS1S	S1/5      S:X  d   e[        / SQSS1SS1S	S1/5      S:X  d   eg )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                     [        S5      u  pn[        U /0 5      U S4:X  d   e[        X ) /0 5      U S4:X  d   e[        X-  /U S05      US4:X  d   e[        X-  /US05      U S4:X  d   e[        X-  U-  X) -  X) -  /U S05      US4:X  d   e[        X-  U-  X) -  X-  /U S05      US4:X  d   e[        X-  U-  X) -  U /0 5      U S4:X  d   eg Nr*   TF)r   r   r,   s      r&   test_unit_clauser>   9   s    gGA!QC$D	111QGR(QI555QUGaY/At9<<<QUGaY/At9<<<	
AFAF#aY045u:> > >QUQYB6D	Bq$iOOOQUQYB3R8QIEEEr(   c            	         [        [        [        S//5      0 5      S:X  d   e[        [        [        S/S//5      0 5      S:X  d   e[        SS1/SS05      S:X  d   e[        SS1/SS05      S:X  d   e[        [        [        / SQSS/SS	//5      SS05      S
:X  d   e[        [        [        / SQSS/SS//5      SS05      S:X  d   e[        S5      u  pn[	        X-  U-  X) -  U /0 5      U S4:X  d   eg )Nr0   r1   r3   r2   Tr8   r5   r7   r4   r9   r6   r*   )r   mapsetr   r   r,   s      r&   test_unit_clause_int_reprrB   E   s8   $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GA!QUQYB3R8QIEEEr(   c                      [        S5      u  pn[        X-  /U 5      / :X  d   e[        X-  U ) U-  U) U-  U /U 5      X") U-  U /:X  d   eg )Nr*   )r   r   r,   s      r&   test_unit_propagaterD   S   s_    gGA!15'1%+++151"q&1"q&!4a8QQNJJJr(   c            	          [        SS1/S5      / :X  d   e[        [        [        SS/SS/SS/S//5      S5      S1SS1/:X  d   eg )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                  ^    [        S5      u  pn[        X-  /X/U SUS05      U SUS0:X  d   eg)z"This is also tested in test_dimacsr*   TN)r   r   r,   s      r&   	test_dpllrH   _   s?    gGA!!!T1d!34D!T8JJJJr(   c                  B   [        S5      u  pn[        X ) -  5      SL d   e[        X) -  5      U SUS0:X  d   e[        X-  5      U S0US0U SUS04;   d   e[        U ) U-  U) U -  -  5      U SUS0U SUS04;   d   e[        X-  U) U-  -  5      U SUS0U SUS0USUS04;   d   e[        X-  U-  5      U SUSUS0:X  d   e[        X-  X-	  -  5      US0:X  d   e[        [        X5      U -  5      U SUS0:X  d   e[        [        X5      U ) -  5      U SUS0:X  d   eg Nr*   FT)r   r   r	   r,   s      r&   test_dpll_satisfiablerK   e   s   gGA!QV%...QV%!T1e)<<<<	I4y1dAt*<=> > >
aQBF#$dAt"4q%E6J!KL L LaeQ/1q$56IaD!T 264 4 4 4QUQY)aq$4-HHHHae/1aY>>>Z-134D7IIIIZ-24E1e8LLLLr(   c                  P   [        S5      u  pn[        X ) -  5      SL d   e[        X) -  5      U SUS0:X  d   e[        X-  5      U S0US0U SUS04;   d   e[        U ) U-  U) U -  -  5      U SUS0U SUS04;   d   e[        X-  U) U-  -  5      U SUSUS0U SUSUS04;   d   e[        X-  U-  5      U SUSUS0:X  d   e[        X-  X-	  -  5      USU S0USU S04;   d   e[        [        X5      U -  5      U SUS0:X  d   e[        [        X5      U ) -  5      U SUS0:X  d   eg rJ   )r   dpll2_satisfiabler	   r,   s      r&   test_dpll2_satisfiablerN   u   s   gGA!a"f&%///a"f&1dAu*====	I4y1dAt*<=> > >
aQBF#$dAt"4q%E6J!KL L Lqu!a024E1d7S	
D!T1d#7% % % %aeai*q$4D.IIIIqu024E7J	
D!T7   j.24D!T8JJJJj.!35!UAu9MMMMr(   c            
      P   [        S5      u  pnS nU" X ) -  5      SL d   eU" X) -  5      U SUS0:X  d   eU" X-  5      U S0US0U SUS0U SUS0U SUS04;   d   eU" U ) U-  U) U -  -  5      U SUS0U SUS04;   d   eU" X-  U) U-  -  5      U SUSUS0U SUSUS0U SUSUS0U SUSUS04;   d   eU" X-  U-  5      U SUSUS0:X  d   eU" X-  X-	  -  5      USU S0USU S04;   d   eU" [        X5      U -  5      U SUS0:X  d   eU" [        X5      U ) -  5      U SUS0:X  d   eg )Nr*   c                     [        U SS9$ )N	minisat22	algorithmr   )exprs    r&   <lambda>,test_minisat22_satisfiable.<locals>.<lambda>   s    T[)Qr(   FT)r   r	   )r$   r%   r-   minisat22_satisfiables       r&   test_minisat22_satisfiablerY      s   gGA!Q !b&*e333 !b&*q$5.AAAA 	I5zAua+>D!T@RUVX\^_afTghi i i 
aQBF#$dAt"4q%E6J!KL L L 15aR!V"46AtQqRV;W	
D!T1d#a4D%AAtQPUWXZ_C`;b b b b !%!).1dAtQ2MMMM 15QV"46AtQ;N	
D!T;    *Q"2Q"68Qa<NNNN *Q"2aR"79a5=QQQQr(   c            
         [        S5      u  pnSS jnU" X ) -  5      SL d   eU" X) -  5      U SUS0:X  d   eU" X-  5      U S0US0U SUS0U SUS0U SUS04;   d   eU" U ) U-  U) U -  -  5      U SUS0U SUS04;   d   eU" X-  U) U-  -  5      U SUSUS0U SUSUS0U SUSUS0U SUSUS04;   d   eU" X-  U-  5      U SUSUS0:X  d   eU" X-  X-	  -  5      USU S0USU S04;   d   eU" [        X5      U -  5      U SUS0:X  d   eU" [        X5      U ) -  5      U SUS0:X  d   e[        X-  U-  SSSS9n[        U5      nUR	                  5        VVs1 s H  u  pgU(       d  M  UiM     nnn[        U5      nUR	                  5        VVs1 s H  u  pgU(       d  M  UiM     n	nn[        U5      nUR	                  5        VVs1 s H  u  pgU(       d  M  UiM     n
nnX::  a   eX::  a   eX::  a   eg s  snnf s  snnf s  snnf )Nr*   Tc                     [        U SSS9$ )NrQ   T)rS   minimalrT   )rU   r\   s     r&   rV   4test_minisat22_minimal_satisfiable.<locals>.<lambda>   s    {4S^hl7mr(   FrQ   )rS   r\   
all_models)T)r   r	   r   nextitems)r$   r%   r-   rX   gsolkeyvaluefirst_solutionsecond_solutionthird_solutions              r&   "test_minisat22_minimal_satisfiablerh      s   gGA!m !b&*e333 !b&*q$5.AAAA 	I5zAua+>D!T@RUVX\^_afTghi i i 
aQBF#$dAt"4q%E6J!KL L L 15aR!V"46AtQqRV;W	
D!T1d#a4D%AAtQPUWXZ_C`;b b b b !%!).1dAtQ2MMMM 15QV"46AtQ;N	
D!T;    *Q"2Q"68Qa<NNNN *Q"2aR"79a5=QQQQQUQY+ddSA
q'C,/IIKAKjc5cKNAQC-0YY[B[zsEs[OBQC,/IIKAKjc5cKNA000000//// BBAs$   G8)G8G>!G>HHc                  R    [        S5      u  pn[        X U-	  -  U) -  5      SL d   eg )Nr*   F)r   r   r,   s      r&   test_satisfiablerj      s0    gGA!qF|qb()U222r(   c                  
   [        S5      u  pn[        XU -	  -	  5      SL d   e[        XU-	  -	  X-	  X-	  -	  -	  5      SL d   e[        U) U ) -	  X-	  -	  5      SL d   e[        X-  U-  5      SL d   e[        X-	  5      SL d   eg r=   )r   r   r,   s      r&   
test_validrl      s    gGA!Av4'''!Q-af!&%9:;tCCC1"('(D000u$$$=E!!!r(   c            	      $   [        S5      u  pn[        S5      SL d   e[        X-  U SUS05      SL d   e[        X-  U S05      SL d   e[        X-  US05      SL d   e[        X-  U S US05      SL d   e[        X-	  U S05      SL d   e[        X-  U) -  U SUSUS05      SL d   e[        [        X5      U SUS05      SL d   e[        S5      SL d   e[        X-  U SUS05      SL d   e[        X-  U S05      SL d   e[        X-  US05      SL d   e[        X-  U SUS05      SL d   e[        XS 05      b   e[        X-  U SUS 05      b   e[        X-	  U SUS 05      b   e[        [        X5      U S 05      b   e[        [        X5      U SUS 05      b   e[        X-  U S0SS9b   e[        U ) U) -  U S0SS9b   e[        X-  U SUS0SS9SL d   e[        X-  U ) U) -  -  U S0SS9SL d   e[        X -	  X-	  -	  US0SS9SL d   eg )Nr*   TF)deep)r   r   r	   r,   s      r&   test_pl_truero      s   gGA!4=D   AEAtQ-.$666AEAt9%---AEAt9%---AEAtQ-.$666AFQJ'4///AEQBJE1dAt <=EEE:a#a5%9:dBBB 5>U"""AEAua/0E999AEAu:&%///AEAu:&%///AEAua/0E999 1$i (((AEAtQ-.666AFQa./777:a#aY/777:a#aq$%78@@@ 151e*40888A27QJT2:::151eQ.T:eCCC15QB!G$q$id;uDDDAF'!T>$FFFr(   c                  ~   ^  SSK Jm   [        [        S 5        [        [        U 4S j5        [        [        S 5        g )Nr   pic                      [        S5      $ )NzJohn Cleeser   r:   r(   r&   rV   *test_pl_true_wrong_input.<locals>.<lambda>   s	    w}5r(   c                  ,   > [        ST -   T S-  -   5      $ )N*   r2   rt   rq   s   r&   rV   ru      s    wrBwq'89r(   c                      [        S5      $ )Nrw   rt   r:   r(   r&   rV   ru      s    wr{r(   )sympy.core.numbersrr   r   
ValueErrorrq   s   @r&   test_pl_true_wrong_inputr{      s'    %
:56
:9:
:*+r(   c                      [        S5      u  pn[        X U-	  U) /5      SL d   e[        U[        X5      U /5      SL d   e[        X-	  U ) U) -	  -	  5      SL d   e[        X-	  U) U ) -	  -	  5      SL d   eg )NzA, B, CFT)r   r   r	   r,   s      r&   test_entailsr}      s    i GA!1Avrl#u,,,1z!'+,444AFqb)*e333AFqb)*d222r(   c                  F   [        S5      u  pn[        5       nUR                  X-	  5      SL d   eUR                  XU -	  -	  5      SL d   eUR                  X-	  5        UR                  X-	  5        UR                  U 5      SL d   eUR                  U5      SL d   eUR                  U5      SL d   eUR                  U ) 5      SL d   eUR                  U) 5      SL d   eUR                  U) 5      SL d   eUR                  X-	  5      SL d   eUR                  U 5        UR                  U 5      SL d   eUR                  U5      SL d   eUR                  U5      SL d   eUR                  U) 5      SL d   eUR	                  U 5        UR                  U5      SL d   eg rJ   )r   r   asktellretract)r$   r%   r-   kbs       r&   test_PropKBr      s   gGA!	B66!&>U"""66!Q- D(((GGAFOGGAFO66!966!966!9661":661":661":66!&>T!!!GGAJ66!966!966!9661":JJqM66!9r(   c                  `    [        5       n [        S5      u  pnU R                  U5      SL d   eg)z"tolerant to bad inputr*   FN)r   r   r   )r   r$   r%   r-   s       r&   test_propKB_tolerantr     s-    	BgGA!66!9r(   c                  |   [        S5      u  p[        R                  " X-  5      n[        [        R                  " X-  5      [        R                  " U 5      [        R                  " U5      -  5      n[        R                  " U 5      ) [        R                  " U5      ) -  n[        R                  " U 5      S[        R                  " X-  5      S0[        R                  " U5      S[        R                  " X-  5      S0[        R                  " U 5      S[        R                  " U5      S[        R                  " X-  5      S0[        R                  " U 5      S[        R                  " U5      S[        R                  " X-  5      S0[        R                  " U 5      S[        R                  " U5      S[        R                  " X-  5      S0/n[	        [        X#U5      SS9(       a   e[	        [        X#U) 5      SS9U;   d   e[	        [        X#U5      SS9(       a   e[	        [        X#U) 5      SS9U;   d   eg )Nzx yTFr   rR   dpll2)r   r   zeror   r   r   )xyassumptionsfactsqueryrefutationss         r&   test_satisfiable_non_symbolsr     s   5>DA&&+KAFF13KQVVAY!67EVVAYJ!&&)#E	
D!&&+t,	
D!&&+t,	
D!&&)T166!#;=	
D!&&)UAFF13K>	
E166!9dAFF13K>@K 3{59VLLLs;v6&I[XXX3{59WMMMs;v6'JkYYYr(   c                      SSK Jn   [        [        5      [        [        0:X  d   e[        U R                  5      [        [        0:X  d   e[        [        5      SL d   e[        U R                  5      SL d   eg )Nr   SF)sympy.core.singletonr   r   r
   r   r   s    r&   test_satisfiable_boolr     sa    &tt,,,qvv4,...u&&&qww5(((r(   c                  N  ^	 SSK Jn Jn  [        [	        SSS95      SL d   e[        [	        X ) -	  U -  SS95      S/:X  d   e[        [	        SSS95      [        [        0/:X  d   eU SUS0U SUS0/n[	        X-  SS9m	UR                  [        T	5      5        UR                  [        T	5      5        [        [        U	4S j5        U(       a   e[        [	        [        X5      SS95      U SUS0U SUS0/:X  d   eU SUS0U SUS0U SUS0/n[	        X-	  SS9 H  nUR                  U5        M     U(       a   eSSKJn  SSKJn  U" 5       n[        S	5       Vs/ s H  n[        U5      PM     nn[	        U" U6 SS9m	[        S
5       H  n[        T	5      (       a  M   e   g s  snf )Nr   r#   FT)r^   c                     > [        T 5      $ N)r_   )results   r&   rV   -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===Q"WMd;<GGGDT23t~EEE$5!Aua#67F40F
MM$v,
MM$v,
=./:Jq,>?5AtQ-./ / / %E"Qq$$7!T1d9KLFQV5e 6:
 ;&

C!#J'JqcJA'QD1F2YF|||  	(s   F"c                  l   [        S5      n U (       d  [        S5        [        S5      u  pn[        S5      u  pEn[        US:  US:  -  5      SL d   e[        X) -  5      SL d   e[        X) U-  U-  -  5      n[	        U5      SL d   eXq   SL d   e[        US-  S:  US:  -  US	:  -  5      SL d   eg )
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GA!gGA!16a!e,-6661r6#u,,,1Q
+,E;$8t 16Q;1q51QV<=FFFr(   c                    ^ [        S5      n U c  [        S5        S mSU4S jjnS n[        S5       H(  nU" SS	SS
9n [        U5      nU" U5      SLnXV:X  a  M(   e   g ! U R                  R
                   a     MJ  f = f)Nr   r   c                 h    [         R                  " U 5      n[        5       nUR                  U5        U$ r   )r   	from_propr   from_cnf)bfcnfencs      r&   boolean_formula_to_encoded_cnf<test_z3_vs_lra_dpll2.<locals>.boolean_formula_to_encoded_cnf]  s(    mmBlS
r(   r   r2   c                 >  > X::  d   e[        X!SS9nUS U   Vs/ s H  oD/PM     nnX0S   H=  n[        U[        5      (       a  U) n[        SU S-
  5      nXV   R	                  U5        M?     U Vs/ s H  n[        U6 PM     nn[        U6 nT	" U5      $ s  snf s  snf )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_cnf-test_z3_vs_lra_dpll2.<locals>.make_random_cnfc  s    ---)kpq&1,;&?@&?d6&?@-D$
++u;q=)AJd#	 . .55W62v;W57m-c22 A 6s   B1Bc                     [        U SS9$ )NTuse_lra_theory)rM   )r   s    r&   rV   &test_z3_vs_lra_dpll2.<locals>.<lambda>q  s    &7$&Or(   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?c                     [        S5      u  p/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ S	Q/ S
QSS// SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQSS// SQ/ SQ/ SQ/ SQ/ SQS/S//n[        SS5       Vs0 s H)  o3S:w  d  M
  US:w  d  M  [        R                  " X5      U_M+     nnSU[        R                  " U S5      '   SU[        R                  " U S5      '   [        X$5      n[        US S!9S"L d   eg s  snf )#Nzx,y)r0   r7   r4   )r      i)r      r   )i      )r   	   r   r   r   )      i)r   r   r   r   )r   r   r   r   )r2   r7   r3   i   )r   r6   r   )ir      r   )r   r   r   r   r   )   r3   r4   )iii)r   r   r   r   )r   r   r   r   )   r   r   i)r   r   r   r   r   )   ii)r   r   ir   )r      ir   r   )ii   r   r0      r   r   Tr   F)r   r   r   gtltr   r   )r   r   r   r   encodingr   s         r&   test_issue_27733r     s    5>DA.0E}Vj&(8:JKZ]_aYbdq"$8,YjRy:NP^`s!>B4"	?G (-Q|K|!Bw17Q
A|HKHQTT!QZHQTT!QZ
W
'Cs40E999 Ls   *	C+7C+?C+N)G__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   rY   rh   rj   rl   ro   r{   r}   r   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$%'N:r(   