o
    g                     @   s  d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
 d dl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mZmZmZ d dlmZmZ d dlm Z m!Z!m"Z"m#Z#m$Z$ d dl%m&Z& d)ddZ'dd Z(dd Z)dd Z*i e	de
dededededede$ de# de" de! de  dededed ed!ed"ed#ed$ed%ed&ed'iZ+d(S )*    )smtlib_code)AppliedPredicate)
EncodedCNF)Q)AddMul)EqualityLessThanGreaterThanStrictLessThanStrictGreaterThan)Abs)Pow)MinMax)AndOrXorImplies)NotITE)StrictGreaterThanPredicateStrictLessThanPredicateGreaterThanPredicateLessThanPredicateEqualityPredicate)import_moduleFc                 C   sr   t | tst }||  |} td}|d u rtdt| |}t| }|dkr,dS |dkr7t|	 | S d S )Nz3zz3 is not installedunsatFsat)

isinstancer   add_propr   ImportErrorencoded_cnf_to_z3_solverstrcheckz3_model_to_sympy_modelmodel)expr
all_modelsexprsr   sres r-   X/var/www/visachat/venv/lib/python3.10/site-packages/sympy/logic/algorithms/z3_wrapper.pyz3_satisfiable   s   


r/   c                    s(   dd |j  D   fddD S )Nc                 S   s   i | ]\}}||qS r-   r-   ).0keyvaluer-   r-   r.   
<dictcomp>&   s    z+z3_model_to_sympy_model.<locals>.<dictcomp>c                    s.   i | ]} t | d d  t| qS )   N)intnameboolr0   varrev_encz3_modelr-   r.   r3   '   s   . )encodingitems)r<   enc_cnfr-   r:   r.   r&   %   s   r&   c                 C   s    dd | D }dd | d S )Nc                 S   s2   g | ]}|d krdt | ndt | dqS )r   dz(not d))abs)r0   litr-   r-   r.   
<listcomp>+   s   2 z'clause_to_assertion.<locals>.<listcomp>z(assert (or  z)))join)clauseclause_stringsr-   r-   r.   clause_to_assertion*   s   rI   c                 C   s4  dd }|  }dd | jD }dd | jD }t }| j D ]U\}}t|ts*q |jt	j
t	jt	jt	jt	jt	jt	jt	jt	jt	jt	jt	jt	jt	jt	jt	jt	jfvrRq t|ddtd}	||jO }|	}d| d	| d
}
d|
 d
 }|| q |D ]}|d| d qxd|}d|}| | | | |S )Nc                 S   s   dS )NF)r    r   functionr   positivenegativezero)predr-   r-   r.   dummify_bool0   s   z.encoded_cnf_to_z3_solver.<locals>.dummify_boolc                 S   s   g | ]}d | dqS )z(declare-const dz Bool)r-   r8   r-   r-   r.   rD   ;   s    z,encoded_cnf_to_z3_solver.<locals>.<listcomp>c                 S   s   g | ]}t |qS r-   )rI   )r0   rG   r-   r-   r.   rD   <   s    F)auto_declareauto_assertknown_functionsz
(implies drE   rA   z(assert z(declare-const z Real)
)!Solver	variablesdatasetr=   r>   r    r   rJ   r   gtltgeleneeqrK   rL   extended_negativeextended_positiverM   nonzerononnegativenonpositiveextended_nonzeroextended_nonnegativeextended_nonpositiver   rR   free_symbolsappendrF   from_string)r?   r   rO   r+   declarations
assertionssymbolsrN   encpred_strrG   	assertionsymr-   r-   r.   r#   /   s.   	
N




r#   +*=z<=z>=<>rB   minmax^andorxornotitez=>N)F),sympy.printing.smtlibr   sympy.assumptions.assumer   sympy.assumptions.cnfr   sympy.assumptions.askr   
sympy.corer   r   sympy.core.relationalr   r	   r
   r   r   $sympy.functions.elementary.complexesr   &sympy.functions.elementary.exponentialr   (sympy.functions.elementary.miscellaneousr   r   sympy.logic.boolalgr   r   r   r   r   r   #sympy.assumptions.relation.equalityr   r   r   r   r   sympy.externalr   r/   r&   rI   r#   rR   r-   r-   r-   r.   <module>   st    
)

