U
    ZÊ¹jþW  ã                   @   sœ  d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dlZd dl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mZmZmZmZmZmZmZmZ d dl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& edƒ\Z'Z(Z)G dd„ deƒZ*e j+ej,e* dœdd„ƒZ-dd„ Z.dd„ Z/dd„ Z0dd„ Z1dd„ Z2dd„ Z3dd„ Z4dd „ Z5d!d"„ Z6d#d$„ Z7d%d&„ Z8d'd(„ Z9d)d*„ Z:d+d,„ Z;d-d.„ Z<d/d0„ Z=dS )1é    N)ÚEnum)ÚCallable)ÚAddÚImpliesÚsqrt)ÚMulÚPow)ÚSÚpiÚsymbolsÚFunctionÚRationalÚIntegerÚSymbolÚEqÚNeÚLeÚLtÚGtÚGe)Ú	PiecewiseÚexpÚsinÚcos)ÚQ©Úsmtlib_code)ÚraisesÚFailedzx,y,zc                   @   s6   e Zd Ze dej¡Ze dej¡Ze dej¡ZdS )Ú_Wz2Could not infer type of `.+`. Defaulting to float.z.Non-Symbol/Function `.+` will not be declared.zPNon-Boolean expression `.+` will not be asserted. Converting to SMTLib verbatim.N)	Ú__name__Ú
__module__Ú__qualname__ÚreÚcompileÚIÚDEFAULTING_TO_FLOATZWILL_NOT_DECLAREÚWILL_NOT_ASSERT© r(   r(   ú_/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/printing/tests/test_smtlib.pyr      s   r   )Úexpectedc              	   c   s²   g }|j }|V  g }tt || ¡ƒD ]v\}\}}|sN|d|› d|› d�g7 }q$|sn|d|› d|j› d�g7 }q$|j |¡s$|d|› d|› d|j› d�g7 }q$|r®td |¡ƒ‚d S )	Nú[z] Received unexpected warning `z`.z$] Did not receive expected warning `z] Warning `z` does not match expected Ú.Ú
)	ÚappendÚ	enumerateÚ	itertoolsÚzip_longestÚnameÚvalueÚmatchr   Újoin)r*   ZwarnsÚlog_warnÚerrorsÚiÚwÚer(   r(   r)   Ú_check_warns   s    " r;   c               	   C   sŒ   t tjgd ƒ�6} ttdƒ| d�dks*t‚ttdƒ| d�dksBt‚W 5 Q R X t g ƒ�.} ttdƒƒdksjt‚ttdƒƒdks~t‚W 5 Q R X d S )Né   éC   ©r6   Z67éÿÿÿÿz-1)r;   r   r'   r   r   ÚAssertionError©r9   r(   r(   r)   Útest_Integer-   s    "
rB   c               	   C   sæ   t tjgd ƒ�n} ttddƒ| d�dks,t‚ttddƒ| d�dksFt‚ttdd	ƒ| d�d
ks`t‚ttdd	ƒ| d�dkszt‚W 5 Q R X t tjtjgd ƒ�D} tttddƒ d| d�dksºt‚ttddƒt | d�dksØt‚W 5 Q R X d S )Né   é   é   r>   z(/ 3 7)é   é	   Ú2iùÿÿÿz(/ -3 7)éýÿÿÿr<   F©Zauto_declarer6   z(+ (/ 3 7) x)z$(declare-const x Real)
(* (/ 3 7) x))r;   r   r'   r   r   r@   r&   ÚxrA   r(   r(   r)   Útest_Rational6   s    $ rL   c               	   C   sÈ   t tjgd ƒ�®} ttttƒd| d�dks.t‚ttttƒd| d�dksJt‚tt	ttƒd| d�dksft‚tt
ttƒd| d�dks‚t‚ttttƒd| d�dksžt‚ttttƒd| d�d	ksºt‚W 5 Q R X d S )
Né   FrJ   ú(assert (= x y))ú(assert (not (= x y)))ú(assert (<= x y))ú(assert (< x y))ú(assert (> x y))ú(assert (>= x y)))r;   r   r&   r   r   rK   Úyr@   r   r   r   r   r   rA   r(   r(   r)   Útest_RelationalC   s    rU   c                	      sæ   t tjgd ƒ�º‰ tt tt¡dˆ d�dks0t‚tt 	tt¡dˆ d�dksNt‚tt 
tt¡dˆ d�dkslt‚tt tt¡dˆ d�dksŠt‚tt tt¡dˆ d�dks¨t‚tt tt¡dˆ d�d	ksÆt‚W 5 Q R X tt‡ fd
d„ƒ d S )NrM   FrJ   rN   rO   rQ   rP   rR   rS   c                      s   t t t¡ˆ d�S ©Nr>   )r   r   ÚcomplexrK   r(   rA   r(   r)   Ú<lambda>V   ó    z,test_AppliedBinaryRelation.<locals>.<lambda>)r;   r   r&   r   r   ÚeqrK   rT   r@   ÚneÚltÚleÚgtÚger   Ú
ValueErrorr(   r(   rA   r)   Útest_AppliedBinaryRelationM   s    (ra   c               	   C   sÈ   t tjgd ƒ�®} tt t¡d| d�dks.t‚tt t¡d| d�dksJt‚tt 	t¡d| d�dksft‚tt 
t¡d| d�dks‚t‚tt t¡d| d�dksžt‚tt t¡d| d�d	ksºt‚W 5 Q R X d S )
Né   FrJ   z(assert (> x 0))z(assert (< x 0))z(assert (= x 0))z(assert (<= x 0))z(assert (>= x 0))z(assert (not (= x 0))))r;   r   r&   r   r   ZpositiverK   r@   ÚnegativeÚzeroÚnonpositiveZnonnegativeZnonzerorA   r(   r(   r)   Útest_AppliedPredicateY   s    rf   c               	   C   sÊ  t tjtjgƒ�(} tttƒttƒ d| d�dks4t‚W 5 Q R X t tjgƒ�6} tt	tƒtt
ttit
ditjdi| d�dks|t‚W 5 Q R X tdƒ}t tjgƒ�.} t|tƒ|ttgtf i| d	�d
ksÄt‚W 5 Q R X t g ƒ�¢} t|tƒ|ttgtf i| d	�dk�st‚tt|ttƒtƒ|tt
tgtf i| d	�dk�s6t‚tt|ttƒtƒ|tt
tgtf i|dtdi| d�dk�stt‚W 5 Q R X t tjgd ƒ�2} tt|ttƒtƒ|dtdi| d�dk�s¼t‚W 5 Q R X d S )NFrJ   z(pow (sin x) (cos x))ZINTEGER_TYPEZABSOLUTE_VALUE_OF)Úsymbol_tableZknown_typesÚknown_functionsr6   z4(declare-const x INTEGER_TYPE)
(ABSOLUTE_VALUE_OF x)Úf1©rg   r6   z:(declare-const x Bool)
(declare-fun f1 (Bool) Real)
(f1 x)zC(declare-const x Bool)
(declare-fun f1 (Bool) Bool)
(assert (f1 x))z|(declare-const x Int)
(declare-const y Bool)
(declare-const z Bool)
(declare-fun f1 (Int Bool) Bool)
(assert (= (f1 x z) y))ZMY_KNOWN_FUNz==)rg   rh   r6   zf(declare-const x Int)
(declare-const y Bool)
(declare-const z Bool)
(assert (== (MY_KNOWN_FUN x z) y))rD   )rh   r6   zg(declare-const x Real)
(declare-const y Real)
(declare-const z Real)
(assert (== (MY_KNOWN_FUN x z) y)))r;   r   r&   r'   r   r   rK   r   r@   ÚabsÚintrT   ÚboolÚsympyZAbsr   r   Úfloatr   Úz)r9   Zmy_fun1r(   r(   r)   Útest_Functionb   sh    ,
ûú	ýü
ýü
ýü


üû

ýürq   c                  C   s°  t tjtjgƒ� } ttd d| d�dks,t‚W 5 Q R X t tjtjtjgƒ�$} tttd  d| d�dksjt‚W 5 Q R X t tjtjgƒ�v} tttddƒ d| d�dks¦t‚t	dd	d
�}t	dd	d�}t	dƒ}dd„ }d||ƒd |||    |d |  }W 5 Q R X t g ƒ�L} tt
|dk |ƒt
||k|ƒ|d	@ t
|dtddƒ ƒg| d�dk�sPt‚W 5 Q R X t tjtjgƒ�<} ttd|tt||dd�ddd�dd�| d�dk�s¢t‚W 5 Q R X d S )NrD   FrJ   z	(pow x 3)z(pow x (pow y 3))r<   z(pow x (/ 2 3))ÚaT©ÚintegerÚb©ÚrealÚcc                 S   s   d|  S )Nr<   r(   )rK   r(   r(   r)   Úg®   rY   ztest_Pow.<locals>.gé   g      @r>   zÕ(declare-const a Int)
(declare-const b Real)
(declare-const c Bool)
(assert (= (< a 2) c))
(assert (= (> b a) c))
(assert c)
(assert (= (* (pow (* 7.0 a) (+ (pow b a) (* -1 a))) (pow (+ b (pow a 2)) -1)) (/ 7 3)))éþÿÿÿ©Úevaluater?   zG(declare-const b Real)
(declare-const c Real)
(* -2 c (pow (* b b) -1)))r;   r   r&   r'   r   rK   r@   rT   r   r   r   r   r   )r9   rr   ru   rx   ry   Úexprr(   r(   r)   Útest_Pow¢   s:    $( 2
üùø"þýr   c               	   C   s¬   t tjtjtjgƒ� } ttt d| d�dks0t‚W 5 Q R X t tjtjtjgƒ� } ttt d| d�dksjt‚W 5 Q R X t tjtjgƒ�} tt d| d�dksžt‚W 5 Q R X d S )NFrJ   z(* x y)z(+ x y)z(* -1 x))r;   r   r&   r'   r   rK   rT   r@   rA   r(   r(   r)   Útest_basic_opsÐ   s    $$r€   c                     s„  ddl m‰  ddlm‰m‰m‰ G ‡ ‡‡‡‡fdd„dˆ ƒ‰tdƒ} ttj	gƒ�D}t
ˆtddft| tƒ| tƒƒƒ| ttgtf i|d	�d
ks�t‚W 5 Q R X ttj	gd ƒ�X}t
ˆtddftddfttttƒt| tƒ| tƒƒƒƒ| ttgtf i|d	�dksþt‚W 5 Q R X tddd�}tddd�}tdƒ}tg ƒ�J}t
ˆ|ddfˆ|ddft||k t|ƒ|k ƒ|B ƒƒ|d�dk�svt‚W 5 Q R X d S )Nr   )ÚBoolean)ÚIntervalÚTupleÚsympifyc                       sB   e Zd Z‡fdd„Zedd„ ƒZedd„ ƒZ‡ ‡‡‡fdd„Zd	S )
z*test_quantifier_extensions.<locals>.ForAllc                    s0   ‡‡ fdd„| j D ƒ}ˆ  dˆ  d|¡| jg¡S )Nc              	      s6   g | ].\}}}ˆ  |jˆjˆj|  ˆ ||ƒg¡‘qS r(   )Ú_s_exprr2   Z_known_typesrg   )Ú.0ÚsymÚstartÚend)r‚   Úprinterr(   r)   Ú
<listcomp>æ   s
   ýþzFtest_quantifier_extensions.<locals>.ForAll._smtlib.<locals>.<listcomp>ÚforallÚ )Úlimitsr…   Úfunction)ÚselfrŠ   Zbound_symbol_declarations)r‚   )rŠ   r)   Ú_smtlibå   s    ü
þz2test_quantifier_extensions.<locals>.ForAll._smtlibc                 S   s   dd„ | j D ƒS )Nc                 S   s   h | ]\}}}|’qS r(   r(   )r†   ÚsÚ_r(   r(   r)   Ú	<setcomp>ó   s     zKtest_quantifier_extensions.<locals>.ForAll.bound_symbols.<locals>.<setcomp>)rŽ   ©r�   r(   r(   r)   Úbound_symbolsñ   s    z8test_quantifier_extensions.<locals>.ForAll.bound_symbolsc                    s&   dd„ | j D ƒ‰ ‡ fdd„| jjD ƒS )Nc                 S   s   h | ]
}|j ’qS r(   ©r2   ©r†   r’   r(   r(   r)   r”   ÷   s     zJtest_quantifier_extensions.<locals>.ForAll.free_symbols.<locals>.<setcomp>c                    s   h | ]}|j ˆ kr|’qS r(   r—   r˜   ©Zbound_symbol_namesr(   r)   r”   ø   s   
ÿ)r–   r�   Úfree_symbolsr•   r(   r™   r)   rš   õ   s    
ÿz7test_quantifier_extensions.<locals>.ForAll.free_symbolsc                    s¬   ‡‡fdd„|D ƒ}‡ ‡fdd„|D ƒ}t |ƒt |ƒ t |ƒksDt‚t |ƒdksTt‚|d }t|ˆƒr‚ˆjˆf||j |jfžŽ S ˆ  | ¡}t||g ƒ|_||_||_|S )Nc                    s"   g | ]}t |tˆ fƒrˆ|ƒ‘qS r(   )Ú
isinstanceÚtuple©r†   rr   )rƒ   r„   r(   r)   r‹   þ   s      zFtest_quantifier_extensions.<locals>.ForAll.__new__.<locals>.<listcomp>c                    s   g | ]}t |ˆ ƒrˆ|ƒ‘qS r(   )r›   r�   )r�   r„   r(   r)   r‹   ÿ   s     
 rz   r   )Úlenr@   r›   Ú__new__rŽ   r�   rœ   Ú_args)ÚclsÚargsrŽ   r�   Úinst)r�   ÚForAllrƒ   r„   r(   r)   rŸ   ý   s"    
 ÿ ÿ
z2test_quantifier_extensions.<locals>.ForAll.__new__N)r    r!   r"   r‘   Úpropertyr–   rš   rŸ   r(   ©r�   r¤   r‚   rƒ   r„   r(   r)   r¤   ä   s   

r¤   ÚfiÖÿÿÿé   rj   z,(assert (forall ( (x Real [-42, 21])) true))r<   iœÿÿÿrD   zs(declare-fun f (Real) Real)
(assert (forall ( (x Real [-42, 21]) (y Real [-100, 3])) (=> (= x y) (= (f x) (f y)))))rr   Trs   ru   rv   rx   éd   r>   zx(declare-const c Bool)
(assert (forall ( (a Int [2, 100]) (b Real [2, 100])) (or c (=> (< a b) (< (pow a (/ 1 2)) b))))))Zsympy.logic.boolalgr�   rn   r‚   rƒ   r„   r   r;   r   r&   r   rK   r   r   ro   r@   rT   r   r   r   )r§   r9   rr   ru   rx   r(   r¦   r)   Útest_quantifier_extensionsß   sP    +ýü þúù
 þÿúùrª   c                  C   s  t tjgƒ�$} tdt tdi| d�dks,t‚W 5 Q R X t tjgƒ�2} tttddd�dt gtdi| d�dkspt‚W 5 Q R X t tjgƒ�\} tttj	tj
tjtjtjtjtjdd�tjd	tjd
tjditdtdid| d�dksÞt‚W 5 Q R X t tjgƒ�R} tttj	tj
tjtjtjtjtjdd�tjd	itdtdid| d�dk�sBt‚W 5 Q R X t tjgƒ�F} tttj	tj
tjtjtjtjtjdd�tdid| d�dk�sšt‚W 5 Q R X t tjgƒ�N} tttj	tj
tjtjtjtjtjdd�tjditdid| d�dk�sút‚W 5 Q R X d S )Nrz   ZMY_PI)Úknown_constantsr6   z(pow MY_PI -1)g…ëQ¸	@Fr|   z&(assert (= MY_PI 3.14))
(pow MY_PI -1)Úpry   r:   Úplusr   rD   )r«   rh   Ú	precisionr6   z!(plus 0 1 -1 (/ 1 2) (exp 1) p g)z$(plus 0 1 -1 (/ 1 2) (exp 1) p 1.62))rh   r®   r6   z$(plus 0 1 -1 (/ 1 2) 2.72 3.14 1.62)z!(plus 0 1 -1 (/ 1 2) e 3.14 1.62))r;   r   r'   r   r
   r@   r   r   r	   ZZeroZOneZNegativeOneZHalfZExp1ÚPiZGoldenRatior   rA   r(   r(   r)   Útest_mix_number_mult_symbols7  sº    ýüþúù
   ÿ    þ  þôó   ÿ ÿ  þõô   ÿûú   ÿúùr°   c                  C   s  t g ƒ�h} ttt@ | d�dks"t‚tttB | d�dks:t‚tt | d�dksPt‚ttt@ t@ | d�dkslt‚W 5 Q R X t tjgƒ�(} ttt @ tdkB | d�dks¦t‚W 5 Q R X tdƒ}td	ƒ}td
ƒ}t tjgƒ�R} tt	|tƒtƒt
t|tƒƒg|ttgtf |ttgtf i| d�dk�s"t‚W 5 Q R X t g ƒ�R} tt|tƒtƒt
t|tƒƒg|ttgtf |ttgtf i| d�dk�s‚t‚W 5 Q R X t g ƒ�x} tt|tƒtƒt||tƒƒtƒt|||tƒƒƒtƒg|ttgtf |ttgtf |ttgtf i| d�dk�st‚W 5 Q R X d S )Nr>   z@(declare-const x Bool)
(declare-const y Bool)
(assert (and x y))z?(declare-const x Bool)
(declare-const y Bool)
(assert (or x y))z'(declare-const x Bool)
(assert (not x))zY(declare-const x Bool)
(declare-const y Bool)
(declare-const z Bool)
(assert (and x y z))rD   zj(declare-const x Bool)
(declare-const y Bool)
(declare-const z Real)
(assert (or (> z 3) (and x (not y))))r§   ry   Úhrj   z¤(declare-const x Bool)
(declare-const y Real)
(declare-const z Bool)
(declare-fun f (Bool) Int)
(declare-fun g (Bool) Int)
(assert (> (f x) y))
(assert (< y (g z)))z£(declare-const x Bool)
(declare-const y Int)
(declare-const z Bool)
(declare-fun f (Bool) Int)
(declare-fun g (Bool) Int)
(assert (= (f x) y))
(assert (< y (g z)))zà(declare-const x Real)
(declare-const y Int)
(declare-const z Bool)
(declare-fun f (Real) Int)
(declare-fun g (Int) Bool)
(declare-fun h (Bool) Real)
(assert (= (f x) y))
(assert (= (g (f x)) z))
(assert (= (h (g (f x))) x)))r;   r   rK   rT   r@   rp   r   r&   r   r   r   r   rm   rl   r   ro   )r9   r§   ry   r±   r(   r(   r)   Útest_boolean}  sn    
&,ÿ   ÿûú
ÿ   ÿûú
þ   ý÷
ör²   c                	      s  t tjtjgƒ�2‰ttttdk ftd dfƒdˆd�dks>t‚W 5 Q R X t tjtjgƒ�R‰tttd tdk ftd tdk ftd tdk ftd	 dfƒdˆd�d
ks¦t‚W 5 Q R X tttdk ftd tdkfttƒtdkfƒ‰ t tjtjgƒ�‰t	t‡ ‡fdd„ƒ W 5 Q R X d S )Nrz   r<   TFrJ   z(ite (< x 1) x (pow x 2))rD   rC   é   zQ(ite (< x 1) (pow x 2) (ite (< x 2) (pow x 3) (ite (< x 3) (pow x 4) (pow x 5))))r   c                      s   t ˆ ˆd�S rV   r   r(   ©r~   r9   r(   r)   rX   î  rY   z'test_smtlib_piecewise.<locals>.<lambda>)
r;   r   r&   r'   r   r   rK   r@   r   r   r(   r(   r´   r)   Útest_smtlib_piecewiseÕ  s2    
ÿüû
ýúù,rµ   c               	   C   sö   t ttdk ftd dfƒ} ttjtjgƒ�}td|  |d�dksDt‚W 5 Q R X ttjtjgƒ�}t| t |d�dksxt‚W 5 Q R X ttjtjtjgƒ�"}t| tt  |d�dks´t‚W 5 Q R X ttjtjgƒ�}t| d |d�d	ksèt‚W 5 Q R X d S )
Nrz   r<   Tr>   z6(declare-const x Real)
(* 2 (ite (< x 1) x (pow x 2)))z?(declare-const x Real)
(* (pow x -1) (ite (< x 1) x (pow x 2)))za(declare-const x Real)
(declare-const y Real)
(* (pow x -1) (pow y -1) (ite (< x 1) x (pow x 2)))rD   z<(declare-const x Real)
(* (/ 1 3) (ite (< x 1) x (pow x 2))))	r   rK   r;   r   r&   r'   r   r@   rT   )Úpwr9   r(   r(   r)   Ú!test_smtlib_piecewise_times_constñ  s    ""&r·   c               	   C   s˜   t g ƒ�†} tdd| d�dks t‚td| d�dks4t‚ttj| d�dksJt‚ttj| d�dks`t‚td| d�dkstt‚tdd| d�dksŠt‚W 5 Q R X d S )	NTF)Zauto_assertr6   Útruer>   z(assert true)z(assert false)Úfalse)r;   r   r@   r	   r¸   r¹   rA   r(   r(   r)   Útest_smtlib_boolean  s    
rº   c                	      sf   t dƒ‰ ttjtjgƒ�‰tt‡ ‡fdd„ƒ W 5 Q R X ttjgƒ�‰tt‡fdd„ƒ W 5 Q R X d S )Nr§   c                      s&   t ˆ tƒ t¡ˆ ttgtf iˆd�S )Nrj   )r   rK   Údiffr   ro   r(   ©r§   r9   r(   r)   rX   !  rY   z$test_not_supported.<locals>.<lambda>c                      s   t tjˆ d�S rV   )r   r	   ZComplexInfinityr(   rA   r(   r)   rX   #  rY   )r   r;   r   r&   r'   r   ÚKeyErrorr(   r(   r¼   r)   Útest_not_supported  s
    r¾   c                   C   s4   t dƒdkst‚t dƒdks t‚t dƒdks0t‚d S )Ng        z0.0g�e»ºŒ«K<z(* 3.0 (pow 10 -18))g333333@z5.3)r   r@   r(   r(   r(   r)   Ú
test_Float&  s    r¿   )>Ú
contextlibr0   r#   ÚtypingÚenumr   r   rn   r   r   r   Z
sympy.corer   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   Zsympy.functionsr   r   r   r   Zsympy.assumptions.askr   Zsympy.printing.smtlibr   Zsympy.testing.pytestr   r   rK   rT   rp   r   ÚcontextmanagerÚIterabler;   rB   rL   rU   ra   rf   rq   r   r€   rª   r°   r²   rµ   r·   rº   r¾   r¿   r(   r(   r(   r)   Ú<module>   sB   <	
	@.XFX#
