
    MZd3                         d Z ddlmZ ddlmZ ddl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	 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 Z0d Z1d Z2d Z3d Z4y) z1For more tests on satisfiability, see test_dimacs    )Q)symbols)And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   )raisesc                      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     B/usr/lib/python3/dist-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   r'   T   r"   r'   r)      r-   r)   Tr)   F)r    r   r   test_find_pure_symbol_int_reprr2   #   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_clauser5   1   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 )Nr'   r(   r*   r)   Tr/   r,   r.   r+   r0   r-   r!   )r   mapsetr   r   r#   s      r   test_unit_clause_int_reprr9   =   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_propagater;   K   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 )Nr'   r)   r*   r-   r.   )r   r7   r8   r1   r   r   test_unit_propagate_int_reprr=   Q   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_dpllr?   W   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_satisfiablerB   ]   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 rA   )r   dpll2_satisfiabler   r#   s      r   test_dpll2_satisfiablerE   m   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_satisfiablerO   ~   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 )NrH   T)rJ   minimalrK   )rL   rR   s     r   rM   z4test_minisat22_minimal_satisfiable.<locals>.<lambda>   s    {4S^hl7m r   FrH   )rJ   rR   
all_models)T)r   r   r   nextitems)r   r   r$   rN   gsolkeyvaluefirst_solutionsecond_solutionthird_solutions              r   "test_minisat22_minimal_satisfiabler]      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_satisfiabler_      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 r4   )r   r   r#   s      r   
test_validra      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_truerd      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   r1   r   r   rM   z*test_pl_true_wrong_input.<locals>.<lambda>   s    w}5 r   c                  ,    t        d z    dz  z         S )N*   r)   ri   rf   s   r   rM   z*test_pl_true_wrong_input.<locals>.<lambda>   s    wrBwq'89 r   c                      t        d      S )Nrk   ri   r1   r   r   rM   z*test_pl_true_wrong_input.<locals>.<lambda>   s
    wr{ r   )sympy.core.numbersrg   r   
ValueErrorrf   s   @r   test_pl_true_wrong_inputro      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_entailsrq      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 rA   )r   r   asktellretract)r   r   r$   kbs       r   test_PropKBrw      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   rs   )rv   r   r   r$   s       r   test_propKB_tolerantry      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   rI   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)rS   c                      t               S )N)rT   )results   r   rM   z-test_satisfiable_all_models.<locals>.<lambda>'  s    $v, r   )numbered_symbols)Ord   
   )	sympy.abcr   r   rT   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 N)5__doc__sympy.assumptions.askr   sympy.core.symbolr   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.dpll2rD   sympy.testing.pytestr   r   r%   r2   r5   r9   r;   r=   r?   rB   rE   rO   r]   r_   ra   rd   ro   rq   rw   ry   r   r   r   r1   r   r   <module>r      s    7 # % E E2 2   O '#==	FFK?KM N"R"063
"GB,3.Z )r   