U
    ZÊ¹j£  ã                ,   @   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*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   sv   t | tƒstƒ }| | ¡ |} tdƒ}|d kr6tdƒ‚t| |ƒ}t| ¡ ƒ}|dkrXdS |dkrnt| 	¡ | ƒS d S d S )NÚz3zz3 is not installedZunsatFÚsat)
Ú
isinstancer   Zadd_propr   ÚImportErrorÚencoded_cnf_to_z3_solverÚstrÚcheckÚz3_model_to_sympy_modelÚmodel)ÚexprZ
all_modelsZexprsr   ÚsÚres© r)   ú`/var/www/html/bwave/python/venv/lib/python3.8/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©r,   Úvar©Zrev_encÚz3_modelr)   r*   r/   '   s      )ÚencodingÚitems)r7   Úenc_cnfr)   r6   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)r,   Zlitr)   r)   r*   Ú
<listcomp>+   s     z'clause_to_assertion.<locals>.<listcomp>z(assert (or ú z)))Újoin)ÚclauseZclause_stringsr)   r)   r*   Úclause_to_assertion*   s    rB   c                 C   s4  dd„ }|  ¡ }dd„ | jD ƒ}dd„ | jD ƒ}tƒ }| j ¡ D ]ª\}}t|tƒsTq@|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kr¤q@t|ddtd�}	||jO }|	}d|› d	|› d
�}
d|
 d
 }| |¡ q@|D ]}| d|› d�¡ qðd |¡}d |¡}|  |¡ |  |¡ |S )Nc                 S   s&   dS | jtjtjtjfkr| S dS d S )NF)r   r   ÚAssertionErrorÚ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)   r4   r)   r)   r*   r>   ;   s     z,encoded_cnf_to_z3_solver.<locals>.<listcomp>c                 S   s   g | ]}t |ƒ‘qS r)   )rB   )r,   rA   r)   r)   r*   r>   <   s     F)Zauto_declareZauto_assertÚknown_functionsz
(implies dr?   r<   z(assert z(declare-const z Real)Ú
)!ZSolverÚ	variablesÚdataÚsetr8   r9   r   r   rD   r   ÚgtÚltÚgeÚleÚneÚeqrE   rF   Zextended_negativeZextended_positiverG   ZnonzeroZnonnegativeÚnonpositiveZextended_nonzeroZextended_nonnegativeZextended_nonpositiver   rJ   Zfree_symbolsÚappendr@   Zfrom_string)r:   r   rI   r'   ZdeclarationsZ
assertionsÚsymbolsrH   ÚencZpred_strrA   Z	assertionÚsymr)   r)   r*   r!   /   s.    	
N




r!   ú+Ú*ú=z<=z>=ú<ú>r=   ÚminÚmaxú^ÚandÚorÚxorÚnotZitez=>N)F),Zsympy.printing.smtlibr   Zsympy.assumptions.assumer   Zsympy.assumptions.cnfr   Zsympy.assumptions.askr   Z
sympy.corer   r   Zsympy.core.relationalr   r	   r
   r   r   Z$sympy.functions.elementary.complexesr   Z&sympy.functions.elementary.exponentialr   Z(sympy.functions.elementary.miscellaneousr   r   Zsympy.logic.boolalgr   r   r   r   r   r   Z#sympy.assumptions.relation.equalityr   r   r   r   r   Zsympy.externalr   r+   r$   rB   r!   rJ   r)   r)   r)   r*   Ú<module>   sz   
*                      æ