
    g;                        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& ZEd'S )(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 d S )NzA,BTF)r   r   ABs     \/var/www/html/ai-engine/env/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   r0   T   r+   r0   r2      r6   r2   Tr2   F)r    r(   r&   test_find_pure_symbol_int_reprr;   +   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_clauser>   9   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 )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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_propagaterD   S   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 )Nr0   r2   r3   r6   r7   )r   r@   rA   r:   r(   r&   test_unit_propagate_int_reprrF   Y   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_dpllrH   _   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_satisfiablerK   e   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 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 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_satisfiablerX      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 )NrQ   T)rS   minimalrT   )rU   r[   s     r&   rV   z4test_minisat22_minimal_satisfiable.<locals>.<lambda>   s    {4S^hl7m7m7m r(   FrQ   )rS   r[   
all_modelsc                     h | ]	\  }}||
S r:   r:   .0keyvalues      r&   	<setcomp>z5test_minisat22_minimal_satisfiable.<locals>.<setcomp>   !    AAAjc55AcAAAr(   c                     h | ]	\  }}||
S r:   r:   r^   s      r&   rb   z5test_minisat22_minimal_satisfiable.<locals>.<setcomp>   s!    BBBzsEEBsBBBr(   c                     h | ]	\  }}||
S r:   r:   r^   s      r&   rb   z5test_minisat22_minimal_satisfiable.<locals>.<setcomp>   rc   r(   )T)r   r	   r   nextitems)	r$   r%   r-   rW   gsolfirst_solutionsecond_solutionthird_solutions	            r&   "test_minisat22_minimal_satisfiablerm      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_satisfiablero      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 r=   )r   r   r,   s      r&   
test_validrq      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_truert      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   r:   r(   r&   rV   z*test_pl_true_wrong_input.<locals>.<lambda>   s    w}55 r(   c                  4    t          d z    dz  z             S )N*   r2   ry   rv   s   r&   rV   z*test_pl_true_wrong_input.<locals>.<lambda>   s    wrBwq'899 r(   c                       t          d          S )Nr{   ry   r:   r(   r&   rV   z*test_pl_true_wrong_input.<locals>.<lambda>   s    wr{{ r(   )sympy.core.numbersrw   r   
ValueErrorrv   s   @r&   test_pl_true_wrong_inputr      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_entailsr      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 rJ   )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   r   )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   rR   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)r\   c                  "    t                     S Nrf   )results   r&   rV   z-test_satisfiable_all_models.<locals>.<lambda>/  s    $v,, r(   )numbered_symbolsr   c                 .    g | ]}t                    S r:   r   )r_   isyms     r&   
<listcomp>z/test_satisfiable_all_models.<locals>.<listcomp>@  s    '''qc'''r(   d   
   )	sympy.abcr$   r%   rf   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(   c                     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	k    z            du sJ d S )
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61r6##u,,,,1Q
+,,E;;$8t 16Q;1q51QV<==FFFFFFr(   c                     t          d          } | t          d           d dfd	}d }t          d	          D ]K} |dd
d          }	 t          |          }n# | j        j        $ r Y 2w xY w ||          du}||k    sJ Ld S )Nr   r   c                 t    t          j        |           }t                      }|                    |           |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]  s1    mBllS
r(      r   r2   c                 F   | |k    sJ t          ||d          }d |d |          D             }|| d          D ]H}t          |t                    r| }t          d| dz
            }||                             |           Id |D             }t          | } |          S )NF)num_variablesnum_constraintsrationalc                     g | ]}|gS r:   r:   )r_   conss     r&   r   zAtest_z3_vs_lra_dpll2.<locals>.make_random_cnf.<locals>.<listcomp>f  s    @@@dD6@@@r(   r   r0   c                      g | ]}t          | S r:   r   )r_   clauses     r&   r   zAtest_z3_vs_lra_dpll2.<locals>.make_random_cnf.<locals>.<listcomp>m  s    55562v;555r(   )r   
isinstancer   r   appendr   )	num_clausesr   num_varconstraintsclausesr   r   r   r   s	           r&   make_random_cnfz-test_z3_vs_lra_dpll2.<locals>.make_random_cnfc  s    o----)Q`kpqqq@@k,;,&?@@@- 	$ 	$D$
++ u;q=))AAJd####55W5557m--c222r(   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&O&O r(   2      )r   r   r   F)r   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 3 3 3 3 3 PO2YY 
' 
'o"b!LLL	#C((FFz% 	 	 	H	 .-c22%?&&&&&
' 
's   AA0/A0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   rm   ro   rq   rt   r   r   r   r   r   r   r   r   r   r:   r(   r&   <module>r      sD   7 7 # # # # # # % % % % % % , , , , , , I I I I I I I I I I I I I I I I2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2                    O N N N N N < < < < < < 1 1 1 1 1 1 1 1 A A A A A A % % % % % % - - - - - - - - ( ( ( ( ( (# # #= = == = =	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 ) ) )  BG G G$%' %' %' %' %'r(   