§
    OŠtjøT  ã                   óh  — d dl Z d dlZd dl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 d dlmZmZmZmZmZmZmZ d dlmZ d dlmZmZmZ d dlmZmZmZ d d	l m!Z!m"Z" d d
l#m$Z$ d dl%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z, d dl-m.Z.m/Z/m0Z0m1Z1m2Z2 d dl-m3Z3m4Z4m5Z5m6Z6m7Z7 d dl8m9Z9 d dl:m;Z; d dl<m=Z=m>Z? d dl@mAZA d dlBmCZC d dlDmEZE d dlFmGZGmHZHmIZImJZJmKZK  G d„ de9¦  «        ZL	 	 	 	 	 	 d$d„ZMde jN        eef         deLde jO        ePgdf         fd„ZQdedeLde jO        ePgdf         fd„ZRddœd e
d!e jS        eT         d"eTfd#„ZUdS )%é    N)ÚAddÚMul)ÚSymbolÚExprÚFloatÚRationalÚIntegerÚBasic)ÚUndefinedFunctionÚFunction)Ú
RelationalÚ
UnequalityÚEqualityÚLessThanÚGreaterThanÚStrictLessThanÚStrictGreaterThan)ÚAbs)ÚexpÚlogÚPow)ÚsinhÚcoshÚtanh)ÚMinÚMax)Ú	Piecewise)ÚsinÚcosÚtanÚasinÚacosÚatanÚatan2)ÚAndÚOrÚXorÚImpliesÚBoolean)ÚBooleanTrueÚBooleanFalseÚBooleanFunctionÚNotÚITE)ÚPrinter)ÚInterval)Úprec_to_dpsÚto_str)ÚAppliedPredicate)ÚAppliedBinaryRelation)ÚQ)ÚStrictGreaterThanPredicateÚStrictLessThanPredicateÚGreaterThanPredicateÚLessThanPredicateÚEqualityPredicatec                   ó¢  — e Zd ZU dZdedededii 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“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"“¥d#œZ)e*e+d$<   e*e+d%<   	 	 dEd&e,j-        e*         fd'„Z.d(e/fd)„Z0d*e/d+e,j1        e2e3f         d,e/fd-„Z4d.„ Z5d/e6fd0„Z7d/e8fd1„Z9d/e:fd2„Z;d/e<fd3„Z=d/e>fd4„Z?d/e@fd5„ZAd/eBfd6„ZCd/eBfd7„ZDd8eEfd9„ZFd8eGfd:„ZHd8eIfd;„ZJd8efd<„ZKd8eLfd=„ZMd8eNfd>„ZOd8efd?„ZPd8eQfd@„ZRdA„ ZSdB„ ZTdC„ ZUdD„ ZVdS )FÚSMTLibPrinterÚ_smtlibNÚBoolÚIntÚRealú+Ú*ú=z<=z>=ú<ú>r   r   Úabsr   r   r    ÚarcsinÚarccosÚarctanÚarctan2r   r   r   ÚminÚmaxÚpowÚandÚorÚxorÚnotÚitez=>)Ú	precisionÚknown_typesÚknown_constantsÚknown_functionsÚ_default_settingsÚsymbol_tableÚsettingsc                 óô  — |pi }|pi | _         t          j        | |¦  «         | j        d         | _        t          | j        d         ¦  «        | _        t          | j        d         ¦  «        | _        t          | j        d         ¦  «        | _        | j         	                    ¦   «         D ]}|  
                    |¦  «        sJ ‚Œ| j         	                    ¦   «         D ]}|  
                    |¦  «        sJ ‚Œd S )NrS   rT   rU   rV   )rX   r/   Ú__init__Ú	_settingsÚ
_precisionÚdictÚ_known_typesÚ_known_constantsÚ_known_functionsÚvaluesÚ_is_legal_name)ÚselfrY   rX   Ú_s       úS/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/printing/smtlib.pyr[   zSMTLibPrinter.__init__T   sò   € à�>˜rˆØ(Ð.¨BˆÔÝÔ˜˜xÑ(Ô(Ð(Øœ.¨Ô5ˆŒÝ  ¤°Ô!>Ñ?Ô?ˆÔÝ $ T¤^Ð4EÔ%FÑ GÔ GˆÔÝ $ T¤^Ð4EÔ%FÑ GÔ GˆÔàÔ"×)Ò)Ñ+Ô+ÐJÐJˆA°D×4GÒ4GÈÑ4JÔ4JÐ-JÐ-JÐ4JÐ-JØÔ&×-Ò-Ñ/Ô/ÐNÐNˆA¸×8KÒ8KÈAÑ8NÔ8NÐ1NÐ1NÐ8NÐ1NÐNÐNó    Úsc                 ót   — |sdS |d                               ¦   «         rdS t          d„ |D ¦   «         ¦  «        S )NFr   c              3   óJ   K  — | ]}|                      ¦   «         p|d k    V — ŒdS )re   N)Úisalnum©Ú.0re   s     rf   ú	<genexpr>z/SMTLibPrinter._is_legal_name.<locals>.<genexpr>e   s3   è è € Ð6Ð6¨q�1—9’9‘;”;Ð* ! s¢(Ð6Ð6Ð6Ð6Ð6Ð6rg   )Ú	isnumericÚall)rd   rh   s     rf   rc   zSMTLibPrinter._is_legal_nameb   sA   € ØÐ˜˜ØˆQŒ4�>Š>ÑÔÐ) E EÝÐ6Ð6°AÐ6Ñ6Ô6Ñ6Ô6Ð6rg   ÚopÚargsÚreturnc                 óX   ‡ — d                      ˆ fd„|D ¦   «         ¦  «        }d|› d|› d�S )Nú c              3   óp   •K  — | ]0}t          |t          ¦  «        r|n‰                     |¦  «        V — Œ1d S ©N)Ú
isinstanceÚstrÚ_print)rm   Úard   s     €rf   rn   z(SMTLibPrinter._s_expr.<locals>.<genexpr>h   sY   øè è € ð 
ð 
ð õ ˜A�sÑ#Ô#ð  ˆAˆAØ—’˜Q‘”ð
ð 
ð 
ð 
ð 
ð 
rg   ú(ú))Újoin)rd   rq   rr   Úargs_strs   `   rf   Ú_s_exprzSMTLibPrinter._s_exprg   sY   ø€ Ø—8’8ð 
ð 
ð 
ð 
ð ð
ñ 
ô 
ñ 
ô 
ˆð
 $�2Ð#Ð#˜Ð#Ð#Ð#Ð#rg   c                 óÜ  — || j         v r| j         |         }n»t          |¦  «        | j         v r| j         t          |¦  «                 }nŠt          t          |¦  «        ¦  «        t          k    r|j        }n]t	          |t
          ¦  «        r;|j        | j         v r-| j         |j                 }|                      ||j        ¦  «        S | j         |         }|                      ||j	        ¦  «        S rw   )
ra   Útyper   Únamerx   r4   Úfunctionr€   Ú	argumentsrr   )rd   Úerq   s      rf   Ú_print_FunctionzSMTLibPrinter._print_Functiono   sÓ   € Ø�Ô%Ð%Ð%ØÔ& qÔ)ˆBˆBÝ�!‰WŒW˜Ô-Ð-Ð-ØÔ&¥t¨A¡w¤wÔ/ˆBˆBÝ•$�q‘'”'‰]Œ]Õ/Ò/Ð/Ø”ˆBˆBÝ˜Õ0Ñ1Ô1ð 	*°a´jÀDÔDYÐ6YÐ6YØÔ& q¤zÔ2ˆBØ—<’<  A¤KÑ0Ô0Ð0àÔ& qÔ)ˆBà�|Š|˜B ¤Ñ'Ô'Ð'rg   r†   c                 ó,   — |                       |¦  «        S rw   ©r‡   ©rd   r†   s     rf   Ú_print_RelationalzSMTLibPrinter._print_Relational~   ó   € Ø×#Ò# AÑ&Ô&Ð&rg   c                 ó,   — |                       |¦  «        S rw   r‰   rŠ   s     rf   Ú_print_BooleanFunctionz$SMTLibPrinter._print_BooleanFunction�   rŒ   rg   c                 ó,   — |                       |¦  «        S rw   r‰   rŠ   s     rf   Ú_print_ExprzSMTLibPrinter._print_Expr„   rŒ   rg   c                 ó   — t          |¦  «        | j        v r|                      |¦  «        S | j        t                   }| j        t                   }|                      ||                      ||j        ¦  «        g¦  «        S rw   )r‚   ra   r‹   r   r-   r€   rr   )rd   r†   Úeq_opÚnot_ops       rf   Ú_print_UnequalityzSMTLibPrinter._print_Unequality‡   sk   € Ý�‰7Œ7�dÔ+Ð+Ð+Ø×)Ò)¨!Ñ,Ô,Ð,àÔ)­(Ô3ˆEØÔ*­3Ô/ˆFØ—<’< ¨¯ª°e¸Q¼VÑ)DÔ)DÐ(EÑFÔFÐFrg   c                 óp   ‡ ‡— dt           j        t          t          f         fˆˆ fd„Š ‰|j        ¦  «        S )Nrr   c           
      ó  •— | d         \  }}t          | ¦  «        dk    r0|du st          |t          ¦  «        sJ ‚‰                     |¦  «        S ‰j        t
                   }‰                     ||| ‰| dd …         ¦  «        g¦  «        S )Nr   é   T)Úlenrx   r*   rz   ra   r.   r€   )rr   r†   ÚcrR   Ú_print_Piecewise_recursiverd   s       €€rf   rš   zBSMTLibPrinter._print_Piecewise.<locals>._print_Piecewise_recursive�   s�   ø€ Ø˜”7‰DˆAˆqÝ�4‰yŒy˜AŠ~ˆ~Ø˜T˜	˜	¥j°µKÑ&@Ô&@˜	˜	Ð@Ø—{’{ 1‘~”~Ð%àÔ+­CÔ0�Ø—|’| CØ�qÐ4Ð4°T¸!¸"¸"´XÑ>Ô>ð*ñ ô ð rg   )ÚtypingÚUnionÚlistÚtuplerr   )rd   r†   rš   s   ` @rf   Ú_print_PiecewisezSMTLibPrinter._print_Piecewise�   sN   øø€ ð		­V¬\½$Å¸+Ô-Fð 		ð 		ð 		ð 		ð 		ð 		ð 		ð *Ð)¨!¬&Ñ1Ô1Ð1rg   c                 ó¶   — |j         j        r|j        j        rdS |j         j        |j        j        k    rt          d|› d�¦  «        ‚d|j         › d|j        › d�S )NÚ zOne-sided intervals (`z`) are not supported in SMT.ú[z, ú])ÚstartÚis_infiniteÚendÚ
ValueErrorrŠ   s     rf   Ú_print_IntervalzSMTLibPrinter._print_Interval�   sl   € ØŒ7Ôð 	+ 1¤5Ô#4ð 	+Ø�2ØŒWÔ  A¤EÔ$5Ò5Ð5ÝÐU°aÐUÐUÐUÑVÔVÐVà*�q”wÐ*Ð* !¤%Ð*Ð*Ð*Ð*rg   c                 óÜ  — |j         t          j        k    r"t          j        |j        d         d¦  «        }�n!|j         t          j        k    r!t          j        |j        d         d¦  «        }në|j         t          j        k    r!t          j        |j        d         d¦  «        }nµ|j         t          j	        k    r!t          j
        |j        d         d¦  «        }n|j         t          j        k    r!t          j        |j        d         d¦  «        }nI|j         t          j        k    r!t          j        |j        d         d¦  «        }nt          d|› d�¦  «        ‚|                      |¦  «        S )Nr   zPredicate (`z`) is not handled.)r„   r5   ÚpositiveÚgtr…   ÚnegativeÚltÚzeroÚeqÚnonpositiveÚleÚnonnegativeÚgeÚnonzeroÚner§   Ú_print_AppliedBinaryRelation)rd   r†   Úrels      rf   Ú_print_AppliedPredicatez%SMTLibPrinter._print_AppliedPredicate¥   s   € ØŒ:�œÒ#Ð#Ý”$�q”{ 1”~ aÑ(Ô(ˆC‰CØŒZ�1œ:Ò%Ð%Ý”$�q”{ 1”~ qÑ)Ô)ˆCˆCØŒZ�1œ6Ò!Ð!Ý”$�q”{ 1”~ qÑ)Ô)ˆCˆCØŒZ�1œ=Ò(Ð(Ý”$�q”{ 1”~ qÑ)Ô)ˆCˆCØŒZ�1œ=Ò(Ð(Ý”$�q”{ 1”~ qÑ)Ô)ˆCˆCØŒZ�1œ9Ò$Ð$Ý”$�q”{ 1”~ qÑ)Ô)ˆCˆCåÐA¨AÐAÐAÐAÑBÔBÐBà×0Ò0°Ñ5Ô5Ð5rg   c                 ó˜   — |j         t          j        k    r!|                      t	          |j        Ž ¦  «        S |                      |¦  «        S rw   )r„   r5   rµ   r”   r   r…   r‡   rŠ   s     rf   r¶   z*SMTLibPrinter._print_AppliedBinaryRelation·   s@   € ØŒ:�œÒÐØ×)Ò)­*°a´kÐ*BÑCÔCÐCà×'Ò'¨Ñ*Ô*Ð*rg   Úxc                 ó   — dS )NÚtrue© ©rd   rº   s     rf   Ú_print_BooleanTruez SMTLibPrinter._print_BooleanTrueÊ   s   € Øˆvrg   c                 ó   — dS )NÚfalser½   r¾   s     rf   Ú_print_BooleanFalsez!SMTLibPrinter._print_BooleanFalseÍ   s   € Øˆwrg   c           	      óP  — t          |j        ¦  «        }t          |j        |dd d ¬¦  «        }d|v ra|                     d¦  «        \  }}|d         dk    r
|dd …         }| j        t                   }| j        t                   }d|›d|›d	|›d
|›d�	S |dv rt          d¦  «        ‚|S )NT)Ústrip_zerosÚ	min_fixedÚ	max_fixedr†   r   rA   r—   r|   ru   z (z 10 z)))z+infz-infz)Infinite values are not supported in SMT.)	r1   Ú_precÚmlib_to_strÚ_mpf_Úsplitra   r   r   r§   )rd   rº   ÚdpsÚstr_realÚmantr   ÚmulrM   s           rf   Ú_print_FloatzSMTLibPrinter._print_FloatÐ   s¿   € Ý˜!œ'Ñ"Ô"ˆÝ˜qœw¨¸ÈÐY]Ð^Ñ^Ô^ˆà�(ˆ?ˆ?Ø"Ÿ.š.¨Ñ-Ô-‰KˆT�3à�1Œv˜Š}ˆ}Ø˜!˜"˜"”g�àÔ'­Ô,ˆCØÔ'­Ô,ˆCˆCà,/¨C¨C°°°°s°s°s¸C¸C¸CÐ@Ð@ØÐ)Ð)Ð)ÝÐHÑIÔIÐIàˆOrg   c                 óF   — |                       t          |¦  «        ¦  «        S rw   )rz   r   r¾   s     rf   Ú_print_floatzSMTLibPrinter._print_floatã   s   € Ø�{Š{�5 ™8œ8Ñ$Ô$Ð$rg   c                 óF   — |                       d|j        |j        g¦  «        S )Nú/)r€   ÚpÚqr¾   s     rf   Ú_print_RationalzSMTLibPrinter._print_Rationalæ   s   € Ø�|Š|˜C !¤# q¤s Ñ,Ô,Ð,rg   c                 óD   — |j         dk    sJ ‚t          |j        ¦  «        S )Nr—   )rÕ   ry   rÔ   r¾   s     rf   Ú_print_IntegerzSMTLibPrinter._print_Integeré   s   € ØŒs�aŠxˆxˆxˆxÝ�1”3‰xŒxˆrg   c                 ó    — t          |¦  «        S rw   )ry   r¾   s     rf   Ú
_print_intzSMTLibPrinter._print_intí   s   € Ý�1‰vŒvˆrg   c                 óH   — |                       |j        ¦  «        sJ ‚|j        S rw   ©rc   rƒ   r¾   s     rf   Ú_print_SymbolzSMTLibPrinter._print_Symbolð   ó%   € Ø×"Ò" 1¤6Ñ*Ô*Ð*Ð*Ð*ØŒvˆrg   c                 óÒ   — | j                              |¦  «        }|r|S | j        r|                     | j        ¦  «        n|                     ¦   «         }|                      |¦  «        S rw   )r`   Úgetr]   ÚevalfrÏ   )rd   rº   rƒ   Úfs       rf   Ú_print_NumberSymbolz!SMTLibPrinter._print_NumberSymbolô   s`   € ØÔ$×(Ò(¨Ñ+Ô+ˆØð 	(ØˆKà,0¬OÐJ�—’˜œÑ(Ô(Ð(ÀÇÂÁÄˆAØ×$Ò$ QÑ'Ô'Ð'rg   c                 óH   — |                       |j        ¦  «        sJ ‚|j        S rw   rÜ   r¾   s     rf   Ú_print_UndefinedFunctionz&SMTLibPrinter._print_UndefinedFunctionü   rÞ   rg   c                 ó�   — t           | j        v r$|                      t          dd¬¦  «        ¦  «        n|                      |¦  «        S )Nr—   F)Úevaluate)r   ra   r‡   rã   r¾   s     rf   Ú_print_Exp1zSMTLibPrinter._print_Exp1   sK   € õ �dÔ+Ð+Ð+ð × Ò ¥ Q°Ð!7Ñ!7Ô!7Ñ8Ô8Ð8à×$Ò$ QÑ'Ô'ð	
rg   c                 ób   — t          dt          |¦  «        › dt          |¦  «        › d�¦  «        ‚)NzCannot convert `z` of type `z	` to SMT.)ÚNotImplementedErrorÚreprr‚   )rd   Úexprs     rf   ÚemptyPrinterzSMTLibPrinter.emptyPrinter  s1   € Ý!Ð"aµT¸$±Z´ZÐ"aÐ"aÍDÐQUÉJÌJÐ"aÐ"aÐ"aÑbÔbÐbrg   )NN)WÚ__name__Ú
__module__Ú__qualname__ÚprintmethodÚboolÚintÚfloatr   r   r   r   r   r   r   r:   r9   r8   r7   r6   r   r   r   r   r   r    r!   r"   r#   r$   r   r   r   r   r   r   r%   r&   r'   r-   r.   r(   rW   r^   Ú__annotations__r›   ÚOptionalr[   ry   rc   rœ   r�   rž   r€   r‡   r   r‹   r,   rŽ   r   r�   r   r”   r   rŸ   r0   r¨   r3   r¸   r¶   r*   r¿   r+   rÂ   r   rÏ   rÑ   r   rÖ   r	   rØ   rÚ   r   rÝ   rã   rå   rè   rí   r½   rg   rf   r<   r<      sË  € € € € € € Ø€Kð
 à�&Ø�Ø�6ð
ð

ð'
Ø�ð'
à�ð'
ð �cð	'
ð
 �dð'
ð ˜ð'
ð ˜Cð'
ð ˜sð'
ð ÐÑÔ ð'
ð ÐÑÔ ð'
ð !Ð Ñ"Ô" Dð'
ð $Ð#Ñ%Ô% sð'
ð 'Ð&Ñ(Ô(¨#ð'
ð  �ð!'
ð" �ð#'
ð$ �ð%'
ð& �ð''
ð( �ð)'
ð '
ð* �ð+'
ð, �(ð-'
ð. �(ð/'
ð0 �(ð1'
ð2 �9ð3'
ð4 �&ð5'
ð6 �&ð7'
ð8 �&ð9'
ð: �ð;'
ð< �ð='
ð> �ð?'
ðB �ðC'
ðD �ðE'
ðF �ðG'
ðH �ðI'
ðJ �ðK'
ðL �TðM'
ð '
ð2ð 2Ð�tð 2ð 2ñ 2ðh ÐÐÑà9=Ø"ðOð O ¤°Ô!6ð Oð Oð Oð Oð7 ð 7ð 7ð 7ð 7ð
$˜#ð $ V¤\°$¸°+Ô%>ð $À3ð $ð $ð $ð $ð(ð (ð (ð' :ð 'ð 'ð 'ð 'ð'¨ð 'ð 'ð 'ð 'ð'˜Tð 'ð 'ð 'ð 'ðG :ð Gð Gð Gð Gð2 )ð 2ð 2ð 2ð 2ð+ ð +ð +ð +ð +ð6Ð)9ð 6ð 6ð 6ð 6ð$+Ð.>ð +ð +ð +ð +ð& Kð ð ð ð ð \ð ð ð ð ð˜eð ð ð ð ð&%˜eð %ð %ð %ð %ð- ð -ð -ð -ð -ð ð ð ð ð ð˜Cð ð ð ð ð˜vð ð ð ð ð(ð (ð (ðð ð ð
ð 
ð 
ðcð cð cð cð crg   r<   Tc                 óö  ‡
‡— ‰
pd„ Š
t          | t          ¦  «        s| g} d„ | D ¦   «         } |si }t          | d|iŽ}i }|r||d<   ~|r||d<   ~|r||d<   ~|r||d<   ~|sg }|	sg }	t          ||¦  «        Š~| D ]©}|                     t
          t          ¦  «        D ]†}|j        r0|‰j        vr'|‰j	        vr ‰
d|› d	�¦  «         t          ‰j	        |<   |j        rFt          |¦  «        ‰j        vr0t          |¦  «        ‰j	        vr|j        st          d
|› d�¦  «        ‚Œ‡Œªg }|rkˆfd„| D ¦   «         }ˆfd„| D ¦   «         }ˆ
ˆfd„|                     ¦   «         D ¦   «         ˆ
ˆfd„|                     ¦   «         D ¦   «         z   }d„ |D ¦   «         }|rˆ
ˆfd„| D ¦   «         } d                     g ˆfd„|D ¦   «         ¢t%          d„ |D ¦   «         ¦  «        ¢ˆfd„| D ¦   «         ¢ˆfd„|	D ¦   «         ¢¦  «        S )aß  Converts ``expr`` to a string of smtlib code.

    Parameters
    ==========

    expr : Expr | List[Expr]
        A SymPy expression or system to be converted.
    auto_assert : bool, optional
        If false, do not modify expr and produce only the S-Expression equivalent of expr.
        If true, assume expr is a system and assert each boolean element.
    auto_declare : bool, optional
        If false, do not produce declarations for the symbols used in expr.
        If true, prepend all necessary declarations for variables used in expr based on symbol_table.
    precision : integer, optional
        The ``evalf(..)`` precision for numbers such as pi.
    symbol_table : dict, optional
        A dictionary where keys are ``Symbol`` or ``Function`` instances and values are their Python type i.e. ``bool``, ``int``, ``float``, or ``Callable[...]``.
        If incomplete, an attempt will be made to infer types from ``expr``.
    known_types: dict, optional
        A dictionary where keys are ``bool``, ``int``, ``float`` etc. and values are their corresponding SMT type names.
        If not given, a partial listing compatible with several solvers will be used.
    known_functions : dict, optional
        A dictionary where keys are ``Function``, ``Relational``, ``BooleanFunction``, or ``Expr`` instances and values are their SMT string representations.
        If not given, a partial listing optimized for dReal solver (but compatible with others) will be used.
    known_constants: dict, optional
        A dictionary where keys are ``NumberSymbol`` instances and values are their SMT variable names.
        When using this feature, extra caution must be taken to avoid naming collisions between user symbols and listed constants.
        If not given, constants will be expanded inline i.e. ``3.14159`` instead of ``MY_SMT_VARIABLE_FOR_PI``.
    prefix_expressions: list, optional
        A list of lists of ``str`` and/or expressions to convert into SMTLib and prefix to the output.
    suffix_expressions: list, optional
        A list of lists of ``str`` and/or expressions to convert into SMTLib and postfix to the output.
    log_warn: lambda function, optional
        A function to record all warnings during potentially risky operations.
        Soundness is a core value in SMT solving, so it is good to log all assumptions made.

    Examples
    ========
    >>> from sympy import smtlib_code, symbols, sin, Eq
    >>> x = symbols('x')
    >>> smtlib_code(sin(x).series(x).removeO(), log_warn=print)
    Could not infer type of `x`. Defaulting to float.
    Non-Boolean expression `x**5/120 - x**3/6 + x` will not be asserted. Converting to SMTLib verbatim.
    '(declare-const x Real)\n(+ x (* (/ -1 6) (pow x 3)) (* (/ 1 120) (pow x 5)))'

    >>> from sympy import Rational
    >>> x, y, tau = symbols("x, y, tau")
    >>> smtlib_code((2*tau)**Rational(7, 2), log_warn=print)
    Could not infer type of `tau`. Defaulting to float.
    Non-Boolean expression `8*sqrt(2)*tau**(7/2)` will not be asserted. Converting to SMTLib verbatim.
    '(declare-const tau Real)\n(* 8 (pow 2 (/ 1 2)) (pow tau (/ 7 2)))'

    ``Piecewise`` expressions are implemented with ``ite`` expressions by default.
    Note that if the ``Piecewise`` lacks a default term, represented by
    ``(expr, True)`` then an error will be thrown.  This is to prevent
    generating an expression that may not evaluate to anything.

    >>> from sympy import Piecewise
    >>> pw = Piecewise((x + 1, x > 0), (x, True))
    >>> smtlib_code(Eq(pw, 3), symbol_table={x: float}, log_warn=print)
    '(declare-const x Real)\n(assert (= (ite (> x 0) (+ 1 x) x) 3))'

    Custom printing can be defined for certain types by passing a dictionary of
    PythonType : "SMT Name" to the ``known_types``, ``known_constants``, and ``known_functions`` kwargs.

    >>> from typing import Callable
    >>> from sympy import Function, Add
    >>> f = Function('f')
    >>> g = Function('g')
    >>> smt_builtin_funcs = {  # functions our SMT solver will understand
    ...   f: "existing_smtlib_fcn",
    ...   Add: "sum",
    ... }
    >>> user_def_funcs = {  # functions defined by the user must have their types specified explicitly
    ...   g: Callable[[int], float],
    ... }
    >>> smtlib_code(f(x) + g(x), symbol_table=user_def_funcs, known_functions=smt_builtin_funcs, log_warn=print)
    Non-Boolean expression `f(x) + g(x)` will not be asserted. Converting to SMTLib verbatim.
    '(declare-const x Int)\n(declare-fun g (Int) Real)\n(sum (existing_smtlib_fcn x) (g x))'
    c                 ó   — d S rw   r½   )re   s    rf   ú<lambda>zsmtlib_code.<locals>.<lambda>d  s   €  d€ rg   c                 ó>   — g | ]}t          j        |d dd¬¦  «        ‘ŒS )TF)Ústrictrç   Úconvert_xor)ÚsympyÚsympifyrl   s     rf   ú
<listcomp>zsmtlib_code.<locals>.<listcomp>g  s;   € ð ð ð àõ 	Œ�a ¨uÀ%ÐHÑHÔHðð ð rg   rX   rS   rT   rV   rU   úCould not infer type of `z`. Defaulting to float.z$Unknown type of undefined function `z^`. Must be mapped to ``str`` in known_functions or mapped to ``Callable[..]`` in symbol_table.c                 óF   •— i | ]}|j         D ]}|‰j        v¯|j        |“ŒŒS r½   )Úfree_symbolsr`   rƒ   )rm   r†   ÚsymrÔ   s      €rf   ú
<dictcomp>zsmtlib_code.<locals>.<dictcomp>œ  sG   ø€ ð 7ð 7ð 7 q¸A¼Nð 7ð 7°SØ 1Ô#5Ð5Ð5ð ”X˜sØ5Ð5Ð5Ð5rg   c                 ó”   •— i | ]D}|                      t          ¦  «        D ]'}t          |¦  «        ‰j        v¯|j        °|j        |“Œ(ŒES r½   )Úatomsr   r‚   ra   Úis_Piecewiserƒ   )rm   r†   ÚfncrÔ   s      €rf   r  zsmtlib_code.<locals>.<dictcomp>ž  sd   ø€ ð Vð Vð V q¸A¿GºGÅHÑ<MÔ<Mð Vð V°SÝ˜S™	œ	¨Ô);Ð;Ð;ÀCÔDTÐ;ð ”X˜sØ;Ð;Ð;Ð;rg   c                 ó2   •— g | ]}t          |‰‰¦  «        ‘ŒS r½   ©Ú_auto_declare_smtlib)rm   r  Úlog_warnrÔ   s     €€rf   rÿ   zsmtlib_code.<locals>.<listcomp>¡  s5   ø€ ð ð ð àõ % S¨!¨XÑ6Ô6ðð ð rg   c                 ó2   •— g | ]}t          |‰‰¦  «        ‘ŒS r½   r
  )rm   r  r  rÔ   s     €€rf   rÿ   zsmtlib_code.<locals>.<listcomp>¤  s5   ø€ ð ð ð àõ % S¨!¨XÑ6Ô6ðð ð rg   c                 ó   — g | ]}|¯|‘ŒS r½   r½   )rm   Údecls     rf   rÿ   zsmtlib_code.<locals>.<listcomp>¨  s   € Ð>Ð>Ð> ¸Ð>˜Ð>Ð>Ð>rg   c                 ó2   •— g | ]}t          |‰‰¦  «        ‘ŒS r½   )Ú_auto_assert_smtlib)rm   r†   r  rÔ   s     €€rf   rÿ   zsmtlib_code.<locals>.<listcomp>«  s&   ø€ ÐBÐBÐB¸Õ# A q¨(Ñ3Ô3ÐBÐBÐBrg   ú
c                 óh   •— g | ].}t          |t          ¦  «        r|n‰                     |¦  «        ‘Œ/S r½   ©rx   ry   Údoprint©rm   r†   rÔ   s     €rf   rÿ   zsmtlib_code.<locals>.<listcomp>°  óF   ø€ ð 

ð 

ð 

àõ ˜A�sÑ#Ô#Ð5ˆAˆA¨¯ª°1©¬ð

ð 

ð 

rg   c              3   ó   K  — | ]}|V — Œd S rw   r½   ©rm   r†   s     rf   rn   zsmtlib_code.<locals>.<genexpr>¶  s"   è è € Ð(Ð(�a�Ð(Ð(Ð(Ð(Ð(Ð(rg   c                 óh   •— g | ].}t          |t          ¦  «        r|n‰                     |¦  «        ‘Œ/S r½   r  r  s     €rf   rÿ   zsmtlib_code.<locals>.<listcomp>¹  r  rg   c                 óh   •— g | ].}t          |t          ¦  «        r|n‰                     |¦  «        ‘Œ/S r½   r  r  s     €rf   rÿ   zsmtlib_code.<locals>.<listcomp>¿  r  rg   )rx   r�   Ú_auto_infer_smtlib_typesr<   r  r   r   Ú	is_Symbolr`   rX   rô   Úis_Functionr‚   ra   r  Ú	TypeErrorrb   r~   Úsorted)rì   Úauto_assertÚauto_declarerS   rX   rT   rU   rV   Úprefix_expressionsÚsuffix_expressionsr  rY   r†   r  ÚdeclarationsÚ	constantsÚ	functionsrÔ   s             `      @rf   Úsmtlib_coder(    s¤  øø€ ðr Ð+˜N˜N€Hå�d�DÑ!Ô!Ð0¨4¨& 4ðð àðñ ô €Dð
 Ð*¨˜Ý+Ø	ðØ(ðð €Lð €HØÐ3¨)�(˜;Ñ'ØàÐ9¨k�H˜]Ñ+ØàÐE°o˜Ð!2Ñ3ØàÐE°o˜Ð!2Ñ3ØàÐ6°BÐ1ØÐ6°BÐ1å�h Ñ-Ô-€AØð ð ð ˆØ—7’7�6¥8Ñ,Ô,ð 	ð 	ˆCà”ð,à˜1Ô-Ð-Ð-Ø˜1œ>Ð)Ð)à�ÐQ°SÐQÐQÐQÑRÔRÐRÝ&+�”˜sÑ#à”ðå�S‘	”	 Ô!3Ð3Ð3Ý�S‘	”	 ¤Ð/Ð/ØÔ$ð 0åðo°sð oð oð oñô ð øð	ð$ €LØð ?ð7ð 7ð 7ð 7¨Dð 7ñ 7ô 7ˆ	ðVð Vð Vð V¨Dð Vñ Vô Vˆ	ðð ð ð ð à$×+Ò+Ñ-Ô-ðñ ô ðð ð ð ð à$×+Ò+Ñ-Ô-ðñ ô ñð 	ð ?Ð>¨Ð>Ñ>Ô>ˆàð CØBÐBÐBÐBÐB¸TÐBÑBÔBˆð �9Š9ð ð

ð 

ð 

ð 

à'ð

ñ 

ô 

ðõ 
Ð(Ð(˜<Ð(Ñ(Ô(Ñ	(Ô	(ðð

ð 

ð 

ð 

àð

ñ 

ô 

ðð"

ð 

ð 

ð 

à'ð

ñ 

ô 

ð#ñ ô ð rg   r  rÔ   r  c                 ó  ‡— | j         rI‰j        |          }t          |t          ¦  «        sJ ‚‰j        |         }‰                     d| |g¦  «        S | j        r¢‰j        t          | ¦  «                 }t          |¦  «        sJ ‚ˆfd„|j        D ¦   «         }t          |¦  «        dk    sJ ‚dd 
                    |d d…         ¦  «        › d�}|d         }‰                     dt          | ¦  «        ||g¦  «        S  |d	| › d
�¦  «         d S )Nzdeclare-constc                 ó*   •— g | ]}‰j         |         ‘ŒS r½   )r_   )rm   re   rÔ   s     €rf   rÿ   z(_auto_declare_smtlib.<locals>.<listcomp>Ð  s    ø€ ÐMÐMÐM°˜!œ.¨Ô+ÐMÐMÐMrg   r   r|   ru   éÿÿÿÿr}   zdeclare-funzNon-Symbol/Function `z` will not be declared.)r  rX   rx   r‚   r_   r€   r  ÚcallableÚ__args__r˜   r~   )r  rÔ   r  Útype_signatureÚparams_signatureÚreturn_signatures    `    rf   r  r  Æ  s0  ø€ Ø
„}ð Øœ¨Ô,ˆÝ˜.­$Ñ/Ô/Ð/Ð/Ð/Øœ¨Ô7ˆØ�yŠy˜¨3°Ð*?Ñ@Ô@Ð@à	Œð Øœ­¨S©	¬	Ô2ˆÝ˜Ñ'Ô'Ð'Ð'Ð'ØMÐMÐMÐM°^Ô5LÐMÑMÔMˆÝ�>Ñ"Ô" QÒ&Ð&Ð&Ð&Ø?˜sŸxšx¨°s¸°sÔ(;Ñ<Ô<Ð?Ð?Ð?ÐØ)¨"Ô-ÐØ�yŠy˜­¨c©¬Ð4DÐFVÐ(WÑXÔXÐXð 	ˆÐE¨ÐEÐEÐEÑFÔFÐFØˆtrg   r†   c                 óP  — t          | t          ¦  «        sj| |j        v r|j        |          t          k    sK| j        r[t          | ¦  «        |j        v rE|j        t          | ¦  «                 j        d         t          k    r|                     d| g¦  «        S  |d| › d�¦  «         | S )Nr+  ÚassertzNon-Boolean expression `z6` will not be asserted. Converting to SMTLib verbatim.)rx   r)   rX   rò   r  r‚   r-  r€   )r†   rÔ   r  s      rf   r  r  Û  s¨   € Ý�!•WÑÔð 
Ø	ˆQŒ^ÐÐ ¤¨qÔ 1µTÒ 9Ð 9à	Œð !:õ 	ˆQ‰Œ�1”>Ð!Ð!Ø	Œ•t˜A‘w”wÔÔ(¨Ô,µÒ4Ð4à�yŠy˜ A 3Ñ'Ô'Ð'àˆÐe¨AÐeÐeÐeÑfÔfÐfØˆrg   )rX   ÚexprsrX   rs   c                 ó  ‡— | rt          | ¦  «        ni Šdt          fˆfd„} |d„ |D ¦   «         t          ¦  «          |d„ |D ¦   «         t          ¦  «          |ˆfd„|D ¦   «         t          ¦  «          |ˆfd„|D ¦   «         t          ¦  «          |d„ |D ¦   «         t          ¦  «          |d„ |D ¦   «         t          ¦  «         d	„ |D ¦   «         }d
„ |D ¦   «         d„ |D ¦   «         z   }|D ]—\  }}|‰v r‰|         nv|‰v r‰|         nj|j        r1t          |¦  «        ‰v r ‰t          |¦  «                 j        d         n2|j        rt          n$|j	        s|j
        rt          n|j        rt          nd }|r ||h|¦  «         Œ˜‰S )NÚsymsc           
      óŽ   •— | D ]@}|j         sJ ‚‰                     ||¦  «        x}|k    rt          d|› d|› d|› d�¦  «        ‚ŒAd S )Nr   z`. Apparently both `z` and `z`?)r  Ú
setdefaultr  )r5  Úinfrh   Úold_typeÚ_symbolss       €rf   Úsafe_updatez-_auto_infer_smtlib_types.<locals>.safe_updateü  s   ø€ Øð 	mð 	mˆAØ”;ÐÐ�;Ø$×/Ò/°°3Ñ7Ô7Ð7�¸CÒ?Ð?ÝÐ k¸AÐ kÐ kÐS[Ð kÐ kÐdgÐ kÐ kÐ kÑlÔlÐlð @ð	mð 	mrg   c                 ó    — h | ]}|j         ¯	|’ŒS r½   )r  r  s     rf   ú	<setcomp>z+_auto_infer_smtlib_types.<locals>.<setcomp>  s0   € ð ð ð àØŒ;ðØ	ðð ð rg   c                 ón   — h | ]2}|                      t          ¦  «        D ]}|j        D ]}|j        ¯	|’ŒŒŒ3S r½   )r  r,   rr   r  )rm   r†   ÚboolfuncÚsymbols       rf   r=  z+_auto_infer_smtlib_types.<locals>.<setcomp>	  sm   € ð ð ð àØŸš¥Ñ0Ô0ðð ð Ø”mð	ð ð ØÔðØðð ð ð ð rg   c           
      óú   •— h | ]w}|                      t          ¦  «        D ]Z}t          |¦  «        ‰v rGt          |j        ‰t          |¦  «                 j        ¦  «        D ]\  }}|j        r|t          k    ¯|’ŒŒ[ŒxS r½   )r  r   r‚   Úziprr   r-  r  rò   )rm   r†   r?  r@  Úparamr:  s        €rf   r=  z+_auto_infer_smtlib_types.<locals>.<setcomp>  s–   ø€ ð ð ð àØŸš¥Ñ)Ô)ðð ð Ý�‰>Œ>˜XÐ%Ð%Ý  ¤°½¸h¹¼Ô0HÔ0QÑRÔRð &Ð%ÙˆF�EØÔð &à %­¢ ð 	ð
 !.    rg   c           
      óú   •— h | ]w}|                      t          ¦  «        D ]Z}t          |¦  «        ‰v rGt          |j        ‰t          |¦  «                 j        ¦  «        D ]\  }}|j        r|t          k    ¯|’ŒŒ[ŒxS r½   )r  r   r‚   rB  rr   r-  r  ró   )rm   r†   Úintfuncr@  rC  r:  s        €rf   r=  z+_auto_infer_smtlib_types.<locals>.<setcomp>  s–   ø€ ð ð ð àØ—w’w�xÑ(Ô(ðð ð Ý�‰=Œ=˜HÐ$Ð$Ý  ¤¨x½¸W¹¼Ô/FÔ/OÑPÔPð %Ð$ÙˆF�EØÔð %à %­¢ ð 	ð
 !-    rg   c                 óZ   — h | ](}|                      t          ¦  «        D ]}|j        ¯	|’ŒŒ)S r½   )r  r   Ú
is_integer©rm   r†   r@  s      rf   r=  z+_auto_infer_smtlib_types.<locals>.<setcomp>#  sR   € ð ð ð àØ—g’g�f‘o”oðð ð ØÔð	Øðð ð ð rg   c                 óh   — h | ]/}|                      t          ¦  «        D ]}|j        ¯	|j        °|’ŒŒ0S r½   )r  r   Úis_realrG  rH  s      rf   r=  z+_auto_infer_smtlib_types.<locals>.<setcomp>*  s^   € ð ð ð àØ—g’g�f‘o”oðð ð ØŒ>ð	ð #)Ô"3ð	Øðð ð ð rg   c                 óL   — g | ]!}|                      t          ¦  «        D ]}|‘ŒŒ"S r½   )r  r   )rm   rì   r·   s      rf   rÿ   z,_auto_infer_smtlib_types.<locals>.<listcomp>2  s1   € ÐEÐEÐE�t°·
²
½8Ñ0DÔ0DÐEÐE¨ˆsÐEÐEÐEÐErg   c                 óB   — g | ]}|j         j        ¯|j         |j        f‘ŒS r½   )Úlhsr  Úrhs©rm   r·   s     rf   rÿ   z,_auto_infer_smtlib_types.<locals>.<listcomp>3  s;   € ð ð ð Ø&)¸¼Ô8IðØ”˜œÐ!ðð ð rg   c                 óB   — g | ]}|j         j        ¯|j         |j        f‘ŒS r½   )rN  r  rM  rO  s     rf   rÿ   z,_auto_infer_smtlib_types.<locals>.<listcomp>5  s;   € ð ð ð Ø&)¸¼Ô8IðØ”˜œÐ!ðð ð rg   r+  )r^   Úsetrò   ró   rô   r  r‚   r-  Ú
is_BooleanrG  Ú
is_IntegerrJ  )	rX   r3  r;  Úrels_eqÚrelsÚinferÚreltdÚ	inferencer:  s	           @rf   r  r  é  sÐ  ø€ ð" &2Ð9�t�LÑ!Ô!Ð!°r€Hðm�#ð mð mð mð mð mð mð €Kð ð àðñ ô õ ñ	ô ð ð €Kð ð àðñ ô õ ñô ð ð €Kð ð ð ð àðñ ô õ ñô ð ð €Kð ð ð ð àðñ ô õ ñô ð ð €Kð ð àðñ ô õ
 ñô ð ð €Kð ð àðñ ô õ
 ñô ð ð FÐE˜uÐEÑEÔE€Gðð Ø-4ðñ ô ðð Ø-4ðñ ô ñ€Dð
 ð 6ð 6‰ˆˆuà$¨Ð0Ð0ˆH�UŒOˆOØ$¨Ð0Ð0ˆH�UŒOˆOð Ô ðÝ%)¨%¡[¤[°HÐ%<Ð%<ð •T˜%‘[”[Ô!Ô*¨2Ô.Ð.ð Ô$ð �DˆDØÔ#ð  uÔ'7ð �CˆCØ”]ð �EˆEØð 	ð Ð5�k�k 5 '¨9Ñ5Ô5Ð5øà€Org   )
TTNNNNNNNN)Vr›   rý   Ú
sympy.corer   r   r   r   r   r   r	   r
   Úsympy.core.functionr   r   Úsympy.core.relationalr   r   r   r   r   r   r   Ú$sympy.functions.elementary.complexesr   Ú&sympy.functions.elementary.exponentialr   r   r   Ú%sympy.functions.elementary.hyperbolicr   r   r   Ú(sympy.functions.elementary.miscellaneousr   r   Ú$sympy.functions.elementary.piecewiser   Ú(sympy.functions.elementary.trigonometricr   r   r    r!   r"   r#   r$   Úsympy.logic.boolalgr%   r&   r'   r(   r)   r*   r+   r,   r-   r.   Úsympy.printing.printerr/   Ú
sympy.setsr0   Úmpmath.libmp.libmpfr1   r2   rÈ   Úsympy.assumptions.assumer3   Ú!sympy.assumptions.relation.binrelr4   Úsympy.assumptions.askr5   Ú#sympy.assumptions.relation.equalityr6   r7   r8   r9   r:   r<   r(  rœ   ÚCallablery   r  r  rö   r^   r  r½   rg   rf   ú<module>rk     sµ  ðØ €€€à €€€Ø Ð Ð Ð Ð Ð Ð Ð Ø DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DØ ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø |Ð |Ð |Ð |Ð |Ð |Ð |Ð |Ð |Ð |Ð |Ð |Ð |Ð |Ð |Ð |Ð |Ð |Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø :Ð :Ð :Ð :Ð :Ð :Ø [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ø >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ø TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TØ *Ð *Ð *Ð *Ð *Ð *Ø Ð Ð Ð Ð Ð Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø CÐ CÐ CÐ CÐ CÐ CØ #Ð #Ð #Ð #Ð #Ð #ð `ð  `ð  `ð  `ð  `ð  `ð  `ð  `ð  `ð  `ð  `ð  `ð  `ð  `ðocð ocð ocð ocð oc�Gñ ocô ocð ocðh $(ØØØ<@Ø04Øðxð xð xð xðv˜fœl¨6°8Ð+;Ô<ð Àð ÐZ`ÔZiÐknÐjoÐquÐjuÔZvð ð ð ð ð*˜4ð  Mð ¸V¼_ÈcÈUÐTXÈ[Ô=Yð ð ð ð ð  +/ð^ð ^ð ^Øð^à”/ $Ô'ð^ð 
ð^ð ^ð ^ð ^ð ^ð ^rg   