
    Rie3                     "   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 Z4dS ) 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 d S )NzA,BTF)r   r
   ABs     @lib/python3.11/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 d S )NA,B,CTNNF)r   r   r   r   Cs      r   test_find_pure_symbolr%      st   gGAq!QC!%%!T2222QFaR!VaR!V$455EEEEQ1IaR!qb!a%'@AAaYNNNNQ1IQQBA'>??At9LLLLQ1IaR!qb!a%'@AAaZO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 d S )N   r'   T   r"   r'   r)      r-   r)   Tr)   F)r    r   r   test_find_pure_symbol_int_reprr2   #   sg   $aSA3%00I====$aVa2q'"$ $'34 4 4 4$YYYR2r(QF+- -09: : : :$YYYa1b'Aq6*, ,/89 9 9 9$YYYbB8aV,. .1;< < < <$YYY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 d S Nr!   TF)r   r   r#   s      r   test_unit_clauser5   1   so   gGAq!QC$$D	1111QGR((QI5555QUGaY//At9<<<<QUGaY//At9<<<<	
QAFAF#aY0 045u:> > > >QUQYQBA6D	BBq$iOOOOQUQYQB3R88QIEEEEEEr   c            	      b   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 d S )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99YFFFF$SsRDk%:%:B??9LLLL$q!fX4y99YFFFF$q!fX4y99YFFFF$S	QGaW%&' &')*D	3 36@A A A A$S	QGaV$&& &&()4y2 25>? ? ? ? gGAq!QUQYQB3R88QIEEEEEEr   c                      t          d          \  } }}t          | |z  g|           g k    sJ t          | |z  |  |z  | |z  | g|           || |z  | gk    sJ d S )Nr!   )r   r   r#   s      r   test_unit_propagater;   K   s|    gGAq!1q5'1%%++++1q51"q&1"q&!4a88QQNJJJ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 d S )Nr'   r)   r*   r-   r.   )r   r7   r8   r1   r   r   test_unit_propagate_int_reprr=   Q   s    "QF8Q//25555"3s
Q"a2q'A3'$) $)*+- -23r1g? ? ? ? ? ?r   c                  v    t          d          \  } }}t          | |z  g| |g| d|di          | d|dik    sJ dS )z"This is also tested in test_dimacsr!   TN)r   r   r#   s      r   	test_dpllr?   W   sT    gGAq!Q!Q!T1d!344D!T8JJJJ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 d S 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 La!eQ/11q$56IaD!T 264 4 4 4 4QUQY))aq$4-HHHHHa!eQ/11aY>>>>Z1--1334D7IIIIIZ1--244E1e8LLLLLLLr   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|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 d S 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 Lq1u!a0224E1d7S	
D!T1d#7% % % % %a!eai**q$4D.IIIIIq1ua0224E7J	
D!T7    jA..244D!T8JJJJJjA..!355!UAu9MMMMMMMr   c            
         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 d S )Nr!   c                 $    t          | d          S )N	minisat22	algorithmr   )exprs    r   <lambda>z,test_minisat22_satisfiable.<locals>.<lambda>   s    T[)Q)Q)Q r   FT)r   r   )r   r   r$   minisat22_satisfiables       r   test_minisat22_satisfiablerO   ~   s   gGAq!QQ  !qb&**e3333  !qb&**q$5.AAAAA  	A I5zAua+>D!T@RUVX\^_afTghi i i i  
aQBF #$dAt"4q%E6J!KL L L L  1q5aR!V"466AtQqRV;W	
D!T1d#a4D%AAtQPUWXZ_C`;b b b b b  !a%!)..1dAtQ2MMMMM  1q5Q!V"466AtQ;N	
D!T;      *Q"2"2Q"688Qa<NNNNN  *Q"2"2aR"799a5=QQQ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          |          }d |                                D             }t          |          }d |                                D             }t          |          }d	 |                                D             }||k    rJ ||k    rJ ||k    rJ d S )Nr!   Tc                 &    t          | dd          S )NrH   T)rJ   minimalrK   )rL   rR   s     r   rM   z4test_minisat22_minimal_satisfiable.<locals>.<lambda>   s    {4S^hl7m7m7m r   FrH   )rJ   rR   
all_modelsc                     h | ]	\  }}||
S r1   r1   .0keyvalues      r   	<setcomp>z5test_minisat22_minimal_satisfiable.<locals>.<setcomp>   !    AAAjc55AcAAAr   c                     h | ]	\  }}||
S r1   r1   rU   s      r   rY   z5test_minisat22_minimal_satisfiable.<locals>.<setcomp>   s!    BBBzsEEBsBBBr   c                     h | ]	\  }}||
S r1   r1   rU   s      r   rY   z5test_minisat22_minimal_satisfiable.<locals>.<setcomp>   rZ   r   )T)r   r   r   nextitems)	r   r   r$   rN   gsolfirst_solutionsecond_solutionthird_solutions	            r   "test_minisat22_minimal_satisfiablerd      sS   gGAq!mmm  !qb&**e3333  !qb&**q$5.AAAAA  	A I5zAua+>D!T@RUVX\^_afTghi i i i  
aQBF #$dAt"4q%E6J!KL L L L  1q5aR!V"466AtQqRV;W	
D!T1d#a4D%AAtQPUWXZ_C`;b b b b b  !a%!)..1dAtQ2MMMMM  1q5Q!V"466AtQ;N	
D!T;      *Q"2"2Q"688Qa<NNNNN  *Q"2"2aR"799a5=QQQQQQUQY+ddSSSA
q''CAACIIKKAAANQCBBSYY[[BBBOQCAACIIKKAAAN0000.0000//////r   c                  f    t          d          \  } }}t          | | |z	  z  | z            du sJ d S )Nr!   F)r   r   r#   s      r   test_satisfiablerf      sC    gGAq!qAF|qb())U222222r   c                  B   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 d S r4   )r   r   r#   s      r   
test_validrh      s    gGAq!qAv4''''!Q-a1f!q&%9:;;tCCCC1"(Q'((D0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 d S )Nr!   TF)deep)r   r   r   r#   s      r   test_pl_truerk      s   gGAq!4==D    AEAtQ-..$6666AEAt9%%----AEAt9%%----AEAtQ-..$6666AFQJ''4////AEQBJE1dAt <==EEEE:a##a5%9::dBBBB 5>>U""""AEAua/00E9999AEAu:&&%////AEAu:&&%////AEAua/00E9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8@@@ 1q51e*4000888A27QJT222:::1q51eQ.T:::eCCCC1q5QB!G$q$id;;;uDDDDAFQ'!T>>>$FFFFFFr   c                       ddl m  t          t          d            t          t           fd           t          t          d            d S )Nr   pic                       t          d          S )NzJohn Cleeser   r1   r   r   rM   z*test_pl_true_wrong_input.<locals>.<lambda>   s    w}55 r   c                  4    t          d z    dz  z             S )N*   r)   rp   rm   s   r   rM   z*test_pl_true_wrong_input.<locals>.<lambda>   s    wrBwq'899 r   c                       t          d          S )Nrr   rp   r1   r   r   rM   z*test_pl_true_wrong_input.<locals>.<lambda>   s    wr{{ r   )sympy.core.numbersrn   r   
ValueErrorrm   s   @r   test_pl_true_wrong_inputrv      s]    %%%%%%
:55666
:999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 d S )NzA, B, CFT)r   r   r   r#   s      r   test_entailsrx      s    i  GAq!1qAvrl##u,,,,1z!Q''+,,4444AFqb)**e3333AFqb)**d222222r   c                     t          d          \  } }}t                      }|                    | |z	            du sJ |                    | || z	  z	            du sJ |                    | |z	             |                    ||z	             |                    |           du sJ |                    |          du sJ |                    |          du sJ |                    |            du sJ |                    |           du sJ |                    |           du sJ |                    | |z	            du sJ |                    |            |                    |           du sJ |                    |          du sJ |                    |          du sJ |                    |           du sJ |                    |            |                    |          du sJ d S rA   )r   r   asktellretract)r   r   r$   kbs       r   test_PropKBr~      s   gGAq!	B66!q&>>U""""66!Q-  D((((GGAFOOOGGAFOOO66!9966!9966!99661"::661"::661"::66!q&>>T!!!!GGAJJJ66!9966!9966!99661"::JJqMMM66!99r   c                  z    t                      } t          d          \  }}}|                     |          du sJ dS )z"tolerant to bad inputr!   FN)r   r   rz   )r}   r   r   r$   s       r   test_propKB_tolerantr      s?    	BgGAq!66!99r   c                     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 d S )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AF1Q3KKQVAYY!677EVAYYJ!&))#E	
D!&1++t,	
D!&1++t,	
D!&))T16!A#;;=	
D!&))UAF1Q3KK>	
E16!99dAF1Q3KK>@K 3{E599VLLLLLLs;v66&III[XXXX3{E599WMMMMMMs;v66'JJJkYYY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 d S )Nr   SF)sympy.core.singletonr   r   r   r	   r   s    r   test_satisfiable_boolr     s    &&&&&&tt,,,,qv4,....u&&&&qw5((((((r   c                    	 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          |                    t                               |                    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 ]}|                    |           |rJ ddlm} ddlm}  |            		fd	t          d
          D             }t	           || d          t          d          D ]}t                    sJ d S )Nr   r   FT)rS   c                  "    t                     S )Nr]   )results   r   rM   z-test_satisfiable_all_models.<locals>.<lambda>'  s    $v,, r   )numbered_symbols)Orc                 .    g | ]}t                    S r1   r   )rV   isyms     r   
<listcomp>z/test_satisfiable_all_models.<locals>.<listcomp>8  s    '''qc'''r   d   
   )	sympy.abcr   r   r]   r   listr   remover   StopIterationr   sympy.utilities.iterablesr   sympy.logic.boolalgr   range)
r   r   modelsmodelr   r   Xr   r   r   s
           @@r   test_satisfiable_all_modelsr     s   Ed33344====Q1"WMd;;;<<GGGGDT22233t~EEEE$5!Aua#67FQ4000F
MM$v,,
MM$v,,
=....///Jq!,,>>>??5AtQ-./ / / / %E"Qq$$7!T1d9KLFQ!V555  e
 ;:::::&&&&&&



C''''E#JJ'''AQD111F2YY  F|| r   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   rd   rf   rh   rk   rv   rx   r~   r   r   r   r   r1   r   r   <module>r      s   7 7 # # # # # # % % % % % % E E E E E E E E E E E E E E2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2                    O N N N N N ' ' ' ' ' '# # #= = == = =	F 	F 	FF F FK K K? ? ?K K KM M M N N N"R R R"0 0 063 3 3
" " "G G GB, , ,3 3 3  .  Z Z Z ) ) )    r   