U
    -e3                     @   sL  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	d
 Zdd Z dd Z!dd Z"dd Z#dd Z$dd Z%dd Z&dd Z'dd Z(dd Z)dd  Z*d!d" Z+d#d$ Z,d%d& Z-d'd( Z.d)d* Z/d+d, Z0d-d. Z1d/d0 Z2d1d2 Z3d3d4 Z4d5S )6z1For 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                  C   sR   t d\} }tddksttddks,tt| | ks<tt|  | ksNtd S )NzA,BTF)r   r	   AssertionErrorAB r   a/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/sympy/logic/tests/test_inference.pytest_literal   s
    r   c                  C   s   t d\} }}t| g| g| dfks(tt| |g|  |B | | B gdksNtt| ||g| | B | | B || B g| dfkstt| ||g|  |B || B || B g|dfkstt| ||g|  | B | | B || B g|dfkstt| ||g|  |B | | B || B gdkstd S )NA,B,CTNNF)r   r   r   r   r   Cr   r   r   test_find_pure_symbol   s    &426 r#   c                   C   s   t dgdhgdkstt ddgddhddhgdks:tt dddgddhddhddhgdksdtt dddgddhddhddhgd	kstt dddgddhddhddhgd
kstt dddgddhddhddhgdkstd S )N   r$   T   r       r&   Tr&   F)r   r   r   r   r   r   test_find_pure_symbol_int_repr#   s4    



r-   c                  C   s  t d\} }}t| gi | dfks&tt| |  gi | dfksBtt| |B g| di|dfksbtt| |B g|di| dfkstt| |B |B || B | | B g| di|dfkstt| |B |B || B | |B g| di|dfkstt| |B |B || B | gi | dfkstd S Nr   TF)r   r   r   r!   r   r   r   test_unit_clause1   s       2r/   c                  C   s  t ttdggi dkstt ttdgdggi dks<tt ddhgddidksXtt ddhgddidksttt ttdddgddgdd	ggddid
kstt ttdddgddgddggddidksttd\} }}t| |B |B || B | gi | dfkstd S )Nr$   r%   r'   r&   Tr+   r)   r*   r(   r,   r   )r   mapsetr   r   r   r!   r   r   r   test_unit_clause_int_repr=   s(     r2   c                  C   s`   t d\} }}t| |B g| g ks&tt| |B |  |B | |B | g| || |B | gks\td S )Nr   )r   r   r   r!   r   r   r   test_unit_propagateK   s    r3   c                   C   sT   t ddhgdg kstt ttddgddgddgdggddhddhgksPtd S )Nr$   r&   r'   r)   r*   )r   r   r0   r1   r   r   r   r   test_unit_propagate_int_reprQ   s    r4   c                  C   s@   t d\} }}t| |B g| |g| d|di| d|diks<tdS )z"This is also tested in test_dimacsr   TN)r   r   r   r!   r   r   r   	test_dpllW   s    r5   c                  C   sr  t d\} }}t| |  @ dks$tt| | @ | d|diksBtt| |B | di|di| d|difksltt|  |B | | B @ | d|di| d|difkstt| |B | |B @ | d|di| d|di|d|difkstt| |@ |@ | d|d|dikstt| |B | |? @ |diks$ttt| || @ | d|diksHttt| ||  @ | d|diksntd S Nr   FT)r   r   r   r   r!   r   r   r   test_dpll_satisfiable]   s*    
 

&"$r7   c                  C   s~  t d\} }}t| |  @ dks$tt| | @ | d|diksBtt| |B | di|di| d|difksltt|  |B | | B @ | d|di| d|difkstt| |B | |B @ | d|d|di| d|d|difkstt| |@ |@ | d|d|dikstt| |B | |? @ |d| di|d| difks0ttt| || @ | d|diksTttt| ||  @ | d|diksztd S r6   )r   dpll2_satisfiabler   r   r!   r   r   r   test_dpll2_satisfiablem   s,    "
$
$r9   c               
   C   s  t d\} }}dd }|| |  @ dks,t|| | @ | d|diksJt|| |B | di|di| d|di| d|di| d|difkst||  |B | | B @ | d|di| d|difkst|| |B | |B @ | d|d|di| d|d|di| d|d|di| d|d|difkst|| |@ |@ | d|d|diks:t|| |B | |? @ |d| di|d| difkslt|t| || @ | d|dikst|t| ||  @ | d|dikstd S )Nr   c                 S   s   t | ddS )N	minisat22	algorithmr   )exprr   r   r   <lambda>       z,test_minisat22_satisfiable.<locals>.<lambda>FT)r   r   r   )r   r   r"   minisat22_satisfiabler   r   r   test_minisat22_satisfiable~   s2    ,"  &
$rB   c            	   
   C   sL  t d\} }}ddd}|| |  @ dks.t|| | @ | d|diksLt|| |B | di|di| d|di| d|di| d|difkst||  |B | | B @ | d|di| d|difkst|| |B | |B @ | d|d|di| d|d|di| d|d|di| d|d|difkst|| |@ |@ | d|d|diks<t|| |B | |? @ |d| di|d| difksnt|t| || @ | d|dikst|t| ||  @ | d|dikstt| |B |B dddd}t|}dd	 | D }t|}d
d	 | D }t|}dd	 | D }||kr,t||kr:t||krHtd S )Nr   Tc                 S   s   t | dddS )Nr:   T)r<   minimalr=   )r>   rC   r   r   r   r?      r@   z4test_minisat22_minimal_satisfiable.<locals>.<lambda>Fr:   )r<   rC   
all_modelsc                 S   s   h | ]\}}|r|qS r   r   .0keyvaluer   r   r   	<setcomp>   s      z5test_minisat22_minimal_satisfiable.<locals>.<setcomp>c                 S   s   h | ]\}}|r|qS r   r   rE   r   r   r   rI      s      c                 S   s   h | ]\}}|r|qS r   r   rE   r   r   r   rI      s      )T)r   r   r   r   nextitems)	r   r   r"   rA   gZsolZfirst_solutionZsecond_solutionZthird_solutionr   r   r   "test_minisat22_minimal_satisfiable   sF    
,"  &
$&rM   c                  C   s0   t d\} }}t| | |? @ | @ dks,td S )Nr   F)r   r   r   r!   r   r   r   test_satisfiable   s    rN   c                  C   s   t d\} }}t| || ? ? dks&tt| ||? ? | |? | |? ? ? dksNtt| |  ? | |? ? dksntt| |B |B dkstt| |? dkstd S r.   )r   r   r   r!   r   r   r   
test_valid   s    ( rO   c                  C   s  t d\} }}tddkstt| |@ | d|didks<tt| |B | didksVtt| |B |didksptt| |B | d |didkstt| |? | didkstt| |B | B | d|d|didksttt| || d|didksttddkstt| |@ | d|didks"tt| |@ | didks>tt| |@ |didksZtt| |B | d|didksztt||d id kstt| |@ | d|d id kstt| |? | d|d id ksttt| || d id ksttt| || d|d id kstt| |B | diddd ks2tt|  | @ | diddd ksVtt| |B | d|didddksztt| |@ |  | B @ | didddkstt|| ? || ? ? |didddkstd S )Nr   TF)deep)r   r
   r   r   r!   r   r   r   test_pl_true   s0    (     " $$,rQ   c                      s>   ddl m  ttdd  tt fdd ttdd  d S )Nr   pic                   S   s   t dS )NzJohn Cleeser
   r   r   r   r   r?      r@   z*test_pl_true_wrong_input.<locals>.<lambda>c                      s   t d   d  S )N*   r&   rT   r   rR   r   r   r?      r@   c                   S   s   t dS )NrU   rT   r   r   r   r   r?      r@   )Zsympy.core.numbersrS   r   
ValueErrorr   r   rR   r   test_pl_true_wrong_input   s    rW   c                  C   s   t d\} }}t| | |? | gdks*tt|t| || gdksFtt| |? |  | ? ? dksftt| |? | |  ? ? dkstd S )NzA, B, CFT)r   r   r   r   r!   r   r   r   test_entails   s
     rX   c                  C   sf  t d\} }}t }|| |? dks*t|| || ? ? dksDt|| |?  |||?  || dksrt||dkst||dkst||  dkst|| dkst|| dkst|| |? dkst||  || dkst||dkst||dks.t|| dksDt||  ||dksbtd S r6   )r   r   askr   tellZretract)r   r   r"   kbr   r   r   test_PropKB   s(    

r\   c                  C   s*   t  } td\}}}| |dks&tdS )z"tolerant to bad inputr   FN)r   r   rY   r   )r[   r   r   r"   r   r   r   test_propKB_tolerant   s    r]   c                  C   sr  t d\} }t| | }tt| | t| t|B }t|  t| @ }t| dt| | dit|dt| | dit| dt|dt| | dit| dt|dt| | dit| dt|dt| | dig}tt|||ddrttt||| dd|ks4ttt|||ddrNttt||| dd|ksntd S )Nzx yTFr   r;   Zdpll2)r   r   zeror   r   r   r   )xyZassumptionsZfactsqueryZrefutationsr   r   r   test_satisfiable_non_symbols  s    $$$$ rb   c                  C   s\   ddl m}  ttttiks tt| jttiks6tttdksFtt| jdksXtd S )Nr   SF)Zsympy.core.singletonrd   r   r   r   r   rc   r   r   r   test_satisfiable_bool  s
    re   c                     s  ddl m} m} ttddddks(ttt| |  ? | @ dddgksLtttdddttigksjt| d|di| d|dig}t| |A dd |t  |t  t	t
 fdd |rtttt| |dd| d|di| d|digkst| d|di| d|di| d|dig}t| |? ddD ]}|| q,|rHtddlm} dd	lm} | fd
dtdD }t|| dd tdD ]}t stqd S )Nr   r   FT)rD   c                      s   t  S )NrJ   r   )resultr   r   r?   '  r@   z-test_satisfiable_all_models.<locals>.<lambda>)numbered_symbols)Orc                    s   g | ]}t  qS r   rf   )rF   i)symr   r   
<listcomp>8  s     z/test_satisfiable_all_models.<locals>.<listcomp>d   
   )Z	sympy.abcr   r   rJ   r   r   listr   remover   StopIterationr   Zsympy.utilities.iterablesrh   sympy.logic.boolalgri   range)r   r   modelsmodelrh   ri   Xrj   r   )rg   rk   r   test_satisfiable_all_models  s0    $"
rw   N)5__doc__Zsympy.assumptions.askr   Zsympy.core.symbolr   rr   r   r   r   r   r   Zsympy.logic.inferencer	   r
   r   r   r   r   Zsympy.logic.algorithms.dpllr   r   r   r   r   r   r   r   Zsympy.logic.algorithms.dpll2r8   Zsympy.testing.pytestr   r   r#   r-   r/   r2   r3   r4   r5   r7   r9   rB   rM   rN   rO   rQ   rW   rX   r\   r]   rb   re   rw   r   r   r   r   <module>   s:    (	!