a
    {d3                     @   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u sJ tddu s,J t| | u s<J t|  | u sNJ d S )NzA,BTF)r   r	   AB r   i/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/sympy/logic/tests/test_inference.pytest_literal   s
    r   c                  C   s   t d\} }}t| g| g| dfks(J t| |g|  |B | | B gdksNJ t| ||g| | B | | B || B g| dfksJ t| ||g|  |B || B || B g|dfksJ t| ||g|  | B | | B || B g|dfksJ t| ||g|  |B | | B || B gdksJ d S )NA,B,CTNNF)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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sbJ t g dddhddhd	dhgd
ksJ t g dddhddhd	dhgdksJ t g dddhddhd	dhgdksJ d S )N   r#   T   r   r#   r%      r)   r%   Tr%   F)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&J t| |  gi | dfksBJ t| |B g| di|dfksbJ t| |B g|di| dfksJ t| |B |B || B | | B g| di|dfksJ t| |B |B || B | |B g| di|dfksJ t| |B |B || B | gi | dfksJ d S Nr   TF)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J t ttdgdggi dks<J t ddhgddidksXJ t ddhgddidkstJ t ttg dddgdd	ggddid
ksJ t ttg dddgddggddidksJ td\} }}t| |B |B || B | gi | dfks
J d S )Nr#   r$   r&   r%   Tr+   r(   r*   r'   r,   r)   r   )r   mapsetr   r   r    r   r   r   test_unit_clause_int_repr=   s(     r2   c                  C   s`   t d\} }}t| |B g| g ks&J t| |B |  |B | |B | g| || |B | gks\J d S )Nr   )r   r   r    r   r   r   test_unit_propagateK   s    r3   c                   C   sT   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sPJ d S )Nr#   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<J dS )z"This is also tested in test_dimacsr   TN)r   r   r    r   r   r   	test_dpllW   s    r5   c                  C   sr  t d\} }}t| |  @ du s$J t| | @ | d|diksBJ t| |B | di|di| d|difv slJ t|  |B | | B @ | d|di| d|difv sJ t| |B | |B @ | d|di| d|di|d|difv sJ t| |@ |@ | d|d|diksJ t| |B | |? @ |diks$J tt| || @ | d|diksHJ tt| ||  @ | d|diksnJ d S Nr   FT)r   r   r   r    r   r   r   test_dpll_satisfiable]   s(    
&"$r7   c                  C   s~  t d\} }}t| |  @ du s$J t| | @ | d|diksBJ t| |B | di|di| d|difv slJ t|  |B | | B @ | d|di| d|difv sJ t| |B | |B @ | d|d|di| d|d|difv sJ t| |@ |@ | d|d|diksJ t| |B | |? @ |d| di|d| difv s0J tt| || @ | d|diksTJ tt| ||  @ | d|dikszJ d S r6   )r   dpll2_satisfiabler   r    r   r   r   test_dpll2_satisfiablem   s,    "
$
$r9   c               
   C   s  t d\} }}dd }|| |  @ du s,J || | @ | d|diksJJ || |B | di|di| d|di| d|di| d|difv sJ ||  |B | | B @ | d|di| d|difv sJ || |B | |B @ | d|d|di| d|d|di| d|d|di| d|d|difv sJ || |@ |@ | d|d|diks:J || |B | |? @ |d| di|d| difv slJ |t| || @ | d|diksJ |t| ||  @ | d|diksJ 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!   minisat22_satisfiabler   r   r   test_minisat22_satisfiable~   s.    ,"*&
$rB   c            	   
   C   sL  t d\} }}ddd}|| |  @ du s.J || | @ | d|diksLJ || |B | di|di| d|di| d|di| d|difv sJ ||  |B | | B @ | d|di| d|difv sJ || |B | |B @ | d|d|di| d|d|di| d|d|di| d|d|difv sJ || |@ |@ | d|d|diks<J || |B | |? @ |d| di|d| difv snJ |t| || @ | d|diksJ |t| ||  @ | d|diksJ t| |B |B dddd}t|}dd	 | D }t|}d
d	 | D }t|}dd	 | D }||kr,J ||kr:J ||krHJ 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>   r@   z5test_minisat22_minimal_satisfiable.<locals>.<setcomp>c                 S   s   h | ]\}}|r|qS r   r   rE   r   r   r   rI      r@   c                 S   s   h | ]\}}|r|qS r   r   rE   r   r   r   rI      r@   )T)r   r   r   nextitems)	r   r   r!   rA   gZsolZfirst_solutionZsecond_solutionZthird_solutionr   r   r   "test_minisat22_minimal_satisfiable   sB    
,"*&
$&rM   c                  C   s0   t d\} }}t| | |? @ | @ du s,J d S )Nr   F)r   r   r    r   r   r   test_satisfiable   s    rN   c                  C   s   t d\} }}t| || ? ? du s&J t| ||? ? | |? | |? ? ? du sNJ t| |  ? | |? ? du snJ t| |B |B du sJ t| |? du sJ d S r.   )r   r   r    r   r   r   
test_valid   s    ( rO   c                  C   s  t d\} }}tddu sJ t| |@ | d|didu s<J t| |B | didu sVJ t| |B |didu spJ t| |B | d |didu sJ t| |? | didu sJ t| |B | B | d|d|didu sJ tt| || d|didu sJ tddu sJ t| |@ | d|didu s"J t| |@ | didu s>J t| |@ |didu sZJ t| |B | d|didu szJ t||d id u sJ t| |@ | d|d id u sJ t| |? | d|d id u sJ tt| || d id u sJ tt| || d|d id u sJ t| |B | diddd u s2J t|  | @ | diddd u sVJ t| |B | d|didddu szJ t| |@ |  | B @ | didddu sJ t|| ? || ? ? |didddu sJ d S )Nr   TF)deep)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u s*J t|t| || gdu sFJ t| |? |  | ? ? du sfJ t| |? | |  ? ? du sJ d S )NzA, B, CFT)r   r   r   r    r   r   r   test_entails   s
     rX   c                  C   sf  t d\} }}t }|| |? du s*J || || ? ? du sDJ || |?  |||?  || du srJ ||du sJ ||du sJ ||  du sJ || du sJ || du sJ || |? du sJ ||  || du sJ ||du sJ ||du s.J || du sDJ ||  ||du sbJ d S r6   )r   r   asktellZretract)r   r   r!   kbr   r   r   test_PropKB   s(    

r\   c                  C   s*   t  } td\}}}| |du s&J dS )z"tolerant to bad inputr   FN)r   r   rY   )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J tt||| dd|v s4J tt|||ddrNJ tt||| dd|v snJ d S )Nzx yTFr   r;   Zdpll2)r   r   Zzeror   r   r   )xyZassumptionsZfactsqueryZrefutationsr   r   r   test_satisfiable_non_symbols  s    $$$$ ra   c                  C   s\   ddl m}  ttttiks J t| jttiks6J ttdu sFJ t| jdu sXJ d S )Nr   SF)Zsympy.core.singletonrc   r   r   r   rb   r   r   r   test_satisfiable_bool  s
    rd   c                     s  ddl m} m} ttddddu s(J tt| |  ? | @ dddgksLJ ttdddttigksjJ | d|di| d|dig}t| |A dd |t  |t  tt	 fdd |rJ ttt
| |dd| d|di| d|digksJ | d|di| d|di| d|dig}t| |? ddD ]}|| q,|rHJ ddlm} dd	lm} | fd
dtdD }t|| dd tdD ]}t sJ 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   re   )rF   i)symr   r   
<listcomp>8  r@   z/test_satisfiable_all_models.<locals>.<listcomp>d   
   )Z	sympy.abcr   r   rJ   r   listr   remover   StopIterationr   Zsympy.utilities.iterablesrg   sympy.logic.boolalgrh   range)r   r   modelsmodelrg   rh   Xri   r   )rf   rj   r   test_satisfiable_all_models  s0    $"
rv   N)5__doc__Zsympy.assumptions.askr   Zsympy.core.symbolr   rq   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]   ra   rd   rv   r   r   r   r   <module>   s:    (	!