§
    ¬³Ùg.a  ã                   ó  — d Z 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	 ddl
mZ h d	£Zd
dddœZi dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“d d!d"d#d#d$d%d&d'd(d)d*d+d,œ¥Zd-d.d-d/d0d0d1œZd2„ Zd3„ Z G d4„ d5e¦  «        Z G d6„ d7¦  «        Z G d8„ d9e¦  «        Zej        D ]Z eed:ez  e¦  «         ŒeD ]Z eed:ez  e¦  «         Œd;„ Zd<                     ¦   «         Zd=„ e                     ¦   «         D ¦   «         Z eefi d>d?d@dAdBdCdDdEdFdGdHdIdJœ¤ŽZd-d.dKdLdMd0d/dNdOœZdP„ Z  G dQ„ dRe¦  «        Z!e!j        D ]Z ee!d:ez  e¦  «         ŒeD ]Z ee!d:ez  e¦  «         Œ G dS„ dTe¦  «        Z"dUS )Vzy
Python code printers

This module contains Python code printers for plain Python as well as NumPy & SciPy enabled code.
é    )Údefaultdict)Úchain)ÚS)ÚModé   )Ú
precedence)ÚCodePrinter>!   ÚasÚifÚinÚisÚorÚandÚdefÚdelÚforÚnotÚtryÚNoneÚTrueÚelifÚelseÚfromÚpassÚwithÚFalseÚbreakÚclassÚraiseÚwhileÚyieldÚassertÚexceptÚglobalÚimportÚlambdaÚreturnÚfinallyÚcontinueÚnonlocalÚabsÚminÚmax)ÚAbsÚMinÚMaxÚacosÚacoshÚasinÚasinhÚatanÚatan2ÚatanhÚceilingÚceilÚcosÚcoshÚerfÚerfcÚexpÚexpm1Ú	factorialÚfloorÚgammaÚhypotÚisnanÚlgammaÚlogÚlog10Úlog1pÚlog2ÚsinÚsinhÚsqrtÚtanÚtanh)rC   rD   ÚloggammarF   ÚlnrG   rH   rI   rJ   rK   ÚSqrtrM   rN   ÚeÚpiÚinfÚnan)ÚExp1ÚPiÚEÚInfinityÚNaNÚComplexInfinityc                 óÎ   ‡ — ‰ j         |j        j                 }d                     ‰                      |¦  «        d                     ˆ fd„|j        D ¦   «         ¦  «        ¬¦  «        S )Nz{name}({args})ú, c              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S ©N©Ú_print©Ú.0ÚargÚselfs     €úK/granary/edev/quantum/lib/python3.11/site-packages/sympy/printing/pycode.pyú	<genexpr>z$_print_known_func.<locals>.<genexpr>F   s/   øè è € Ð2YÐ2YÈ°4·;²;¸sÑ3CÔ3CÐ2YÐ2YÐ2YÐ2YÐ2YÐ2Yó    )ÚnameÚargs)Úknown_functionsÚ	__class__Ú__name__ÚformatÚ_module_formatÚjoinrj   ©re   ÚexprÚknowns   `  rf   Ú_print_known_funcrt   C   sk   ø€ ØÔ  ¤Ô!8Ô9€EØ×"Ò"¨×(;Ò(;¸EÑ(BÔ(BØ(,¯	ª	Ð2YÐ2YÐ2YÐ2YÈtÌyÐ2YÑ2YÔ2YÑ(ZÔ(Zð #ñ \ô \ð \rh   c                 óZ   — | j         |j        j                 }|                      |¦  «        S r_   )Úknown_constantsrl   rm   ro   rq   s      rf   Ú_print_known_constrw   I   s(   € ØÔ  ¤Ô!8Ô9€EØ×Ò˜uÑ%Ô%Ð%rh   c            	       ó  ‡ — e Zd ZdZdZeZdZdZ e	 e
e                     ¦   «         d„ e                     ¦   «         D ¦   «         ¦  «        ¦  «        Zd„ e                     ¦   «         D ¦   «         Zddd	d
œZ e	ej        i ddddd¬¦  «        Zd2ˆ fd„	Zd„ Zd3d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!ˆ fd„Z"d„ Z#d „ Z$d!„ Z%d"„ Z&d#„ Z'd$„ xZ(xZ)xZ*xZ+xZ,xZ-xZ.Z/d%„ Z0d&„ Z1d'„ Z2d(„ Z3d)„ Z4d*„ Z5d+„ Z6d,„ Z7d-„ Z8d.„ Z9d/„ Z:d4d1„Z;ˆ xZ<S )5ÚAbstractPythonCodePrinterÚ_pythoncodeÚPythonNz    c                 ó"   — g | ]\  }}|d |z   f‘ŒS ©zmath.© ©rc   ÚkÚvs      rf   ú
<listcomp>z$AbstractPythonCodePrinter.<listcomp>V   s%   € ÐDÐDÐD™d˜a ˆ!ˆW�q‰[Ð	ÐDÐDÐDrh   c                 ó    — i | ]\  }}|d |z   “ŒS r}   r~   r   s      rf   ú
<dictcomp>z$AbstractPythonCodePrinter.<dictcomp>X   s"   € Ð
BÐ
BÐ
B™D˜A˜qˆ1ˆg�a‰iÐ
BÐ
BÐ
Brh   r   r   r   )r   r   r   é   TFÚpython3)Úuser_functionsÚ	precisionÚinlineÚfully_qualified_modulesÚcontractÚstandardc                 óÌ  •— t          ¦   «                              |¦  «         | j        d         }|€#dd l}d                     |j        j        ¦  «        }|dk    rt          d¦  «        ‚|| _        t          t          ¦  «        | _        t          | j        fi |pi                      di ¦  «        ¤Ž| _        t          | j        fi |pi                      di ¦  «        ¤Ž| _        d S )NrŒ   r   zpython{}r†   zOnly Python 3 is supported.r‡   Úuser_constants)ÚsuperÚ__init__Ú	_settingsÚsysrn   Úversion_infoÚmajorÚ
ValueErrorrŒ   r   ÚsetÚmodule_importsÚdictÚ_kfÚgetrk   Ú_kcrv   )re   ÚsettingsÚstdr’   rl   s       €rf   r�   z"AbstractPythonCodePrinter.__init__d   sÿ   ø€ Ý‰Œ×Ò˜Ñ"Ô"Ð"ð Œn˜ZÔ(ˆØˆ;ØˆJˆJˆJØ×#Ò# CÔ$4Ô$:Ñ;Ô;ˆCØ�)ÒÐÝÐ:Ñ;Ô;Ð;ØˆŒå)­#Ñ.Ô.ˆÔõ  $ D¤Hð  #ð  #°°¸R×0DÒ0DØ˜bñ1"ô 1"ð  #ð  #ˆÔå# D¤Hð  #ð  #°°¸R×0DÒ0DØ˜bñ1"ô 1"ð  #ð  #ˆÔÐÐrh   c                 ó   — |›d|›�S ©Nz = r~   )re   ri   Úvalues      rf   Ú_declare_number_constz/AbstractPythonCodePrinter._declare_number_constx   s   € Ø ˜D˜D % %Ð(Ð(rh   c                 ó�  — |                      d¦  «        }|rTt          |¦  «        dk    rA| j        d                     |d d…         ¦  «                                      |d         ¦  «         | j        d         r|S |                      d¦  «        d                               d¦  «        d                               d¦  «        d         S )Nú.r   éÿÿÿÿrŠ   ú(r   ú[)ÚsplitÚlenr—   rp   Úaddr‘   )re   ÚfqnÚregisterÚpartss       rf   ro   z(AbstractPythonCodePrinter._module_format{   s­   € Ø—	’	˜#‘”ˆØð 	E�˜E™
œ
 Qš˜ØÔ §¢¨¨s°¨s¬Ñ 4Ô 4Ô5×9Ò9¸%À¼)ÑDÔDÐDàŒ>Ð3Ô4ð 	BØˆJà—9’9˜S‘>”> !Ô$×*Ò*¨3Ñ/Ô/°Ô2×8Ò8¸Ñ=Ô=¸bÔAÐArh   c                 ó   — |S r_   r~   )re   Úliness     rf   Ú_format_codez&AbstractPythonCodePrinter._format_code…   s   € Øˆrh   c                 ó,   — d                      |¦  «        S )Nz{}©rn   ©re   Ú
codestrings     rf   Ú_get_statementz(AbstractPythonCodePrinter._get_statementˆ   s   € Ø�{Š{˜:Ñ&Ô&Ð&rh   c                 ó,   — d                      |¦  «        S )Nz  # {}r±   )re   Útexts     rf   Ú_get_commentz&AbstractPythonCodePrinter._get_comment‹   s   € Ø�Š˜tÑ$Ô$Ð$rh   c                 ó  — t          |¦  «        dk    r|                      |d         ¦  «        S |                      |¦  «        ›d|                      ||dd…         ¦  «        ›d|                      |d         ¦  «        ›d�S )zø
        This method expands a fold on binary operations.

        ``functools.reduce`` is an example of a folded operation.

        For example, the expression

        `A + B + C + D`

        is folded into

        `((A + B) + C) + D`
        r   r   r¥   Nr¤   r]   ú))r¨   ra   ro   Ú_expand_fold_binary_op)re   Úoprj   s      rf   rº   z0AbstractPythonCodePrinter._expand_fold_binary_opŽ   s†   € õ ˆt‰9Œ9˜Š>ˆ>Ø—;’;˜t AœwÑ'Ô'Ð'ð ×#Ò# BÑ'Ô'Ð'Ð'Ø×+Ò+¨B°°S°b°S´	Ñ:Ô:Ð:Ð:Ø—’˜D œHÑ%Ô%Ð%Ð%ðð rh   c           	      ó.  — t          |¦  «        dk    r|                      |d         ¦  «        S t          |¦  «        }|dz  }|                      |¦  «        ›d|                      |d|…         ¦  «        ›d|                      ||d…         ¦  «        ›d�S )zú
        This method expands a reductin on binary operations.

        Notice: this is NOT the same as ``functools.reduce``.

        For example, the expression

        `A + B + C + D`

        is reduced into:

        `(A + B) + (C + D)`
        r   r   é   r¥   Nr]   r¹   )r¨   ra   ro   Ú_expand_reduce_binary_op)re   r»   rj   ÚNÚNhalfs        rf   r¾   z2AbstractPythonCodePrinter._expand_reduce_binary_op¥   sœ   € õ ˆt‰9Œ9˜Š>ˆ>Ø—;’;˜t AœwÑ'Ô'Ð'å�D‘	”	ˆAØ˜‘FˆEà×#Ò# BÑ'Ô'Ð'Ð'Ø×-Ò-¨d°6°E°6¬lÑ;Ô;Ð;Ð;Ø×-Ò-¨d°5°6°6¬lÑ;Ô;Ð;Ð;ðð rh   c                 ó   — dS )Nzfloat('nan')r~   ©re   rr   s     rf   Ú
_print_NaNz$AbstractPythonCodePrinter._print_NaN¾   ó   € Øˆ~rh   c                 ó   — dS )Nzfloat('inf')r~   rÂ   s     rf   Ú_print_Infinityz)AbstractPythonCodePrinter._print_InfinityÁ   rÄ   rh   c                 ó   — dS )Nzfloat('-inf')r~   rÂ   s     rf   Ú_print_NegativeInfinityz1AbstractPythonCodePrinter._print_NegativeInfinityÄ   s   € Øˆrh   c                 ó,   — |                       |¦  «        S r_   )rÃ   rÂ   s     rf   Ú_print_ComplexInfinityz0AbstractPythonCodePrinter._print_ComplexInfinityÇ   s   € Ø�Š˜tÑ$Ô$Ð$rh   c                 ó\   ‡ ‡— t          |¦  «        Š dj        ˆˆ fd„|j        D ¦   «         Ž S )Nz{} % {}c              3   óD   •K  — | ]}‰                      |‰¦  «        V — Œd S r_   )Úparenthesize)rc   ÚxÚPRECre   s     €€rf   rg   z7AbstractPythonCodePrinter._print_Mod.<locals>.<genexpr>Ì   s3   øè è € Ð"QÐ"QÀ! 4×#4Ò#4°Q¸Ñ#=Ô#=Ð"QÐ"QÐ"QÐ"QÐ"QÐ"Qrh   )r   rn   rj   ©re   rr   rÏ   s   ` @rf   Ú
_print_Modz$AbstractPythonCodePrinter._print_ModÊ   s;   øø€ Ý˜$ÑÔˆØ �	Ô Ð"QÐ"QÐ"QÐ"QÐ"QÀtÄyÐ"QÑ"QÔ"QÐRÐSrh   c                 ó‚  — g }d}|j         D ]Ô}|j        }|j        }|dk    r|                     d¦  «         |                     d¦  «         |                     |                      |¦  «        ¦  «         |                     d¦  «         |                     d¦  «         |                     |                      |¦  «        ¦  «         |                     d¦  «         |dz  }ŒÕ|d d…         }|d         dk    r |d d	…         }|                     d¦  «         n|                     d
¦  «         d                     |¦  «        S )Nr   r¥   r¹   z if z else r   r¤   r   éþÿÿÿz else None)Ú )rj   rr   ÚcondÚappendra   rp   )re   rr   ÚresultÚird   rR   Úcs          rf   Ú_print_Piecewisez*AbstractPythonCodePrinter._print_PiecewiseÎ   s1  € ØˆØˆØ”9ð 	ð 	ˆCØ”ˆAØ”ˆAØ�AŠvˆvØ—’˜cÑ"Ô"Ð"Ø�MŠM˜#ÑÔÐØ�MŠM˜$Ÿ+š+ a™.œ.Ñ)Ô)Ð)Ø�MŠM˜#ÑÔÐØ�MŠM˜&Ñ!Ô!Ð!Ø�MŠM˜$Ÿ+š+ a™.œ.Ñ)Ô)Ð)Ø�MŠM˜(Ñ#Ô#Ð#Ø�‰FˆAˆAØ˜˜˜”ˆØ�"Œ:˜ÒÐØ˜C˜R˜C”[ˆFØ�MŠM˜#ÑÔÐÐà�MŠM˜-Ñ(Ô(Ð(Ø�wŠw�v‰ŒÐrh   c                 ó  •— dddddddœ}|j         |v rQ|                      |j        ¦  «        }|                      |j        ¦  «        }d                     |j         ||¬	¦  «        S t          ¦   «                              |¦  «        S )
z.Relational printer for Equality and UnequalityÚequalÚ	not_equalÚlessÚ
less_equalÚgreaterÚgreater_equal)z==z!=ú<z<=ú>z>=z({lhs} {op} {rhs}))r»   ÚlhsÚrhs)Úrel_opra   rä   rå   rn   r�   Ú_print_Relational)re   rr   r»   rä   rå   rl   s        €rf   rç   z+AbstractPythonCodePrinter._print_Relationalå   s�   ø€ ð ØØØØØ!ð
ð 
ˆð Œ;˜"ÐÐØ—+’+˜dœhÑ'Ô'ˆCØ—+’+˜dœhÑ'Ô'ˆCØ'×.Ò.°$´+À3ÈCÐ.ÑPÔPÐPÝ‰wŒw×(Ò(¨Ñ.Ô.Ð.rh   c                 ó^   — ddl m} |                      |                     |¦  «        ¦  «        S )Nr   )Ú	Piecewise)Ú$sympy.functions.elementary.piecewiseré   ra   Úrewrite)re   rr   ré   s      rf   Ú
_print_ITEz$AbstractPythonCodePrinter._print_ITEõ   s2   € ØBÐBÐBÐBÐBÐBØ�{Š{˜4Ÿ<š<¨	Ñ2Ô2Ñ3Ô3Ð3rh   c                 ó®   ‡ — ˆ fd„|j         D ¦   «         }d                     ‰                      |j        ¦  «        d                     |¦  «        ¬¦  «        S )Nc              3   óÂ   •K  — | ]Y\  }}}d                       ‰                     |¦  «        ‰                     |¦  «        ‰                     |¦  «        ¬¦  «        V — ŒZdS )zfor {i} in range({a}, {b}+1))rØ   ÚaÚbN)rn   ra   )rc   rØ   rï   rð   re   s       €rf   rg   z7AbstractPythonCodePrinter._print_Sum.<locals>.<genexpr>ú   s{   øè è € ð (ð (ñ
 ��1�að	 +×1Ò1Ø—+’+˜a‘.”.Ø—+’+˜a‘.”.Ø—+’+˜a‘.”.ð 2ñ "ô "ð(ð (ð (ð (ð (ð (rh   z"(builtins.sum({function} {loops}))ú )ÚfunctionÚloops)Úlimitsrn   ra   rò   rp   )re   rr   ró   s   `  rf   Ú
_print_Sumz$AbstractPythonCodePrinter._print_Sumù   sl   ø€ ð(ð (ð (ð (ð
  œ;ð(ñ (ô (ˆð 4×:Ò:Ø—[’[ ¤Ñ/Ô/Ø—(’(˜5‘/”/ð ;ñ #ô #ð 	#rh   c                 ó   — dS )NÚ1jr~   rÂ   s     rf   Ú_print_ImaginaryUnitz.AbstractPythonCodePrinter._print_ImaginaryUnit  s   € Øˆtrh   c                 ó�   — |j         \  }}d                     |                      |¦  «        |                      |¦  «        ¬¦  «        S )Nz(1 if {a} == {b} else 0))rï   rð   )rj   rn   ra   )re   rr   rï   rð   s       rf   Ú_print_KroneckerDeltaz/AbstractPythonCodePrinter._print_KroneckerDelta  sD   € ØŒy‰ˆˆ1à)×0Ò0Ø—’˜A‘”Ø—’˜A‘”ð 1ñ 
ô 
ð 	
rh   c                 óª   — |j         j        }| j                             ||¦  «        }|›d|                      |                     ¦   «         ¦  «        ›d�S )Nr¥   r¹   )rl   rm   rk   rš   ra   Útolist)re   rr   ri   Úfuncs       rf   Ú_print_MatrixBasez+AbstractPythonCodePrinter._print_MatrixBase  sM   € ØŒ~Ô&ˆØÔ#×'Ò'¨¨dÑ3Ô3ˆØ˜4˜4 §¢¨T¯[ª[©]¬]Ñ!;Ô!;Ð!;Ð!;Ð<Ð<rh   c                 ó,   — |                       |¦  «        S r_   )rþ   rÂ   s     rf   ú<lambda>z"AbstractPythonCodePrinter.<lambda>  s   € ˜4×1Ò1°$Ñ7Ô7€ rh   c                 ól   ‡ — d                      ˆ fd„|                     d¦  «        D ¦   «         ¦  «        S )Nú
c                 ó$   •— g | ]}‰j         |z   ‘ŒS r~   )Útab)rc   Úlinere   s     €rf   r‚   z@AbstractPythonCodePrinter._indent_codestring.<locals>.<listcomp>  s   ø€ ÐMÐMÐM¨d˜$œ( T™/ÐMÐMÐMrh   )rp   r§   r²   s   ` rf   Ú_indent_codestringz,AbstractPythonCodePrinter._indent_codestring  s8   ø€ Ø�yŠyÐMÐMÐMÐM°j×6FÒ6FÀtÑ6LÔ6LÐMÑMÔMÑNÔNÐNrh   c                 ó  ‡ — d                      ˆ fd„|j        D ¦   «         ¦  «        }d                     ‰                      |j        ¦  «        d                      ˆ fd„|j        D ¦   «         ¦  «        ‰                      |¦  «        ¬¦  «        S )Nr  c              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S r_   r`   rb   s     €rf   rg   zFAbstractPythonCodePrinter._print_FunctionDefinition.<locals>.<genexpr>"  s/   øè è € Ð>Ð>¨s˜$Ÿ+š+ cÑ*Ô*Ð>Ð>Ð>Ð>Ð>Ð>rh   z def {name}({parameters}):
{body}r]   c                 óD   •— g | ]}‰                      |j        ¦  «        ‘ŒS r~   )ra   Úsymbol)rc   Úvarre   s     €rf   r‚   zGAbstractPythonCodePrinter._print_FunctionDefinition.<locals>.<listcomp>%  s'   ø€ Ð!SÐ!SÐ!S¸c $§+¢+¨c¬jÑ"9Ô"9Ð!SÐ!SÐ!Srh   )ri   Ú
parametersÚbody)rp   r  rn   ra   ri   r  r  )re   Úfdr  s   `  rf   Ú_print_FunctionDefinitionz3AbstractPythonCodePrinter._print_FunctionDefinition!  s�   ø€ Ø�yŠyÐ>Ð>Ð>Ð>°b´gÐ>Ñ>Ô>Ñ?Ô?ˆØ2×9Ò9Ø—’˜RœWÑ%Ô%Ø—y’yÐ!SÐ!SÐ!SÐ!SÀRÄ]Ð!SÑ!SÔ!SÑTÔTØ×(Ò(¨Ñ.Ô.ð :ñ 
ô 
ð 	
rh   c                 óÔ   ‡ — d                      ˆ fd„|j        D ¦   «         ¦  «        }d                     ‰                      |j        ¦  «        ‰                      |¦  «        ¬¦  «        S )Nr  c              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S r_   r`   rb   s     €rf   rg   z9AbstractPythonCodePrinter._print_While.<locals>.<genexpr>*  s/   øè è € Ð?Ð?¨s˜$Ÿ+š+ cÑ*Ô*Ð?Ð?Ð?Ð?Ð?Ð?rh   zwhile {cond}:
{body})rÕ   r  )rp   r  rn   ra   Ú	conditionr  )re   Úwhlr  s   `  rf   Ú_print_Whilez&AbstractPythonCodePrinter._print_While)  sj   ø€ Ø�yŠyÐ?Ð?Ð?Ð?°c´hÐ?Ñ?Ô?Ñ@Ô@ˆØ&×-Ò-Ø—’˜Sœ]Ñ+Ô+Ø×(Ò(¨Ñ.Ô.ð .ñ 
ô 
ð 	
rh   c                 ó„   — |                       |j        j        ¦  «        ›d|                       |j        j        ¦  «        ›�S rŸ   )ra   Úvariabler
  r    )re   Údecls     rf   Ú_print_Declarationz,AbstractPythonCodePrinter._print_Declaration0  s=   € à�KŠK˜œÔ,Ñ-Ô-Ð-Ð-Ø�KŠK˜œÔ+Ñ,Ô,Ð,ð
ð 	
rh   c                 ó   — dS )Nr   r~   )re   Úbts     rf   Ú_print_BreakTokenz+AbstractPythonCodePrinter._print_BreakToken6  s   € Øˆwrh   c                 óD   — |j         \  }d|                      |¦  «        z  S )Nz	return %s©rj   ra   )re   Úretrd   s      rf   Ú_print_Returnz'AbstractPythonCodePrinter._print_Return9  s"   € ØŒx‰ˆØ˜TŸ[š[¨Ñ-Ô-Ñ-Ð-rh   c                 óD   — |j         \  }d|                      |¦  «        z  S )Nzraise %sr  )re   Úrsrd   s      rf   Ú_print_Raisez&AbstractPythonCodePrinter._print_Raise=  s"   € ØŒw‰ˆØ˜DŸKšK¨Ñ,Ô,Ñ,Ð,rh   c                 óD   — |j         \  }d|                      |¦  «        z  S )NzRuntimeError(%s)r  )re   ÚreÚmessages      rf   Ú_print_RuntimeError_z.AbstractPythonCodePrinter._print_RuntimeError_A  s"   € Ø”7‰ˆØ! D§K¢K°Ñ$8Ô$8Ñ8Ð8rh   c                 ó.  ‡ — d                      ˆ fd„|j        D ¦   «         ¦  «        }ddlm} |j        |k    r.d                     ‰                      |j        ¦  «        |¦  «        }|j        d k    r |d‰                      |j        ¦  «        z  z  }d|z  S )Nr]   c              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S r_   r`   rb   s     €rf   rg   z9AbstractPythonCodePrinter._print_Print.<locals>.<genexpr>F  s/   øè è € ÐLÐL°S §¢¨CÑ 0Ô 0ÐLÐLÐLÐLÐLÐLrh   r   )Únonez{} % ({}), end=""z	, file=%sz	print(%s))rp   Ú
print_argsÚsympy.codegen.astr)  Úformat_stringrn   ra   Úfile)re   Úprntr*  r)  s   `   rf   Ú_print_Printz&AbstractPythonCodePrinter._print_PrintE  s¬   ø€ Ø—Y’YÐLÐLÐLÐL¸D¼OÐLÑLÔLÑMÔMˆ
Ø*Ð*Ð*Ð*Ð*Ð*ØÔ Ò%Ð%Ø,×3Ò3Ø—’˜DÔ.Ñ/Ô/Øñô ˆJð Œ9˜ÒÐØ˜+¨¯ª°D´IÑ(>Ô(>Ñ>Ñ>ˆJØ˜ZÑ'Ð'rh   c                 óê   — t          |j        ¦  «        dk    r|                      d¦  «        S t          |j        ¦  «        dk    r|                      d¦  «        S |                      |j        ¦  «        S )NÚstdoutz
sys.stdoutÚstderrz
sys.stderr)Ústrri   ro   ra   )re   Ústrms     rf   Ú_print_Streamz'AbstractPythonCodePrinter._print_StreamQ  sd   € ÝˆtŒy‰>Œ>˜XÒ%Ð%Ø×&Ò& |Ñ4Ô4Ð4Ý�”‰^Œ^˜xÒ'Ð'Ø×&Ò& |Ñ4Ô4Ð4à—;’;˜tœyÑ)Ô)Ð)rh   c                 ó   — dS )Nr   r~   )re   rd   s     rf   Ú_print_NoneTokenz*AbstractPythonCodePrinter._print_NoneTokenY  s   € Øˆvrh   ú	math.sqrtc                 ó  — t          |¦  «        }|j        t          j        k    rH|sF|                      |¦  «        }|                      |j        ¦  «        }d                     ||¬¦  «        S |j        rÅ|sÃ|j         t          j        u rY|                      |¦  «        }|                      t          j	        ¦  «        }|                      |j        ¦  «        }|› d|› d|› d�S |j        t          j
        u rC|                      t          j	        ¦  «        }|                      |j        |d¬¦  «        }|› d|› �S |                      |j        |d¬¦  «        }|                      |j        |d¬¦  «        }	d                     ||	¦  «        S )	a   Printing helper function for ``Pow``

        Notes
        =====

        This preprocesses the ``sqrt`` as math formatter and prints division

        Examples
        ========

        >>> from sympy import sqrt
        >>> from sympy.printing.pycode import PythonCodePrinter
        >>> from sympy.abc import x

        Python code printer automatically looks up ``math.sqrt``.

        >>> printer = PythonCodePrinter()
        >>> printer._hprint_Pow(sqrt(x), rational=True)
        'x**(1/2)'
        >>> printer._hprint_Pow(sqrt(x), rational=False)
        'math.sqrt(x)'
        >>> printer._hprint_Pow(1/sqrt(x), rational=True)
        'x**(-1/2)'
        >>> printer._hprint_Pow(1/sqrt(x), rational=False)
        '1/math.sqrt(x)'
        >>> printer._hprint_Pow(1/x, rational=False)
        '1/x'
        >>> printer._hprint_Pow(1/x, rational=True)
        'x**(-1)'

        Using sqrt from numpy or mpmath

        >>> printer._hprint_Pow(sqrt(x), sqrt='numpy.sqrt')
        'numpy.sqrt(x)'
        >>> printer._hprint_Pow(sqrt(x), sqrt='mpmath.sqrt')
        'mpmath.sqrt(x)'

        See Also
        ========

        sympy.printing.str.StrPrinter._print_Pow
        z{func}({arg}))rý   rd   ú/r¥   r¹   F©Ústrictz{}**{})r   r>   r   ÚHalfro   ra   Úbasern   Úis_commutativeÚOneÚNegativeOnerÍ   )
re   rr   ÚrationalrL   rÏ   rý   rd   ÚnumÚbase_strÚexp_strs
             rf   Ú_hprint_Powz%AbstractPythonCodePrinter._hprint_Pow\  s|  € õV ˜$ÑÔˆàŒ8•q”vÒÐ hÐØ×&Ò& tÑ,Ô,ˆDØ—+’+˜dœiÑ(Ô(ˆCØ"×)Ò)¨t¸Ð)Ñ=Ô=Ð=àÔð 		& xð 		&Ø”ˆy�AœFÐ"Ð"Ø×*Ò*¨4Ñ0Ô0�Ø—k’k¥!¤%Ñ(Ô(�Ø—k’k $¤)Ñ,Ô,�ØÐ-Ð- Ð-Ð- sÐ-Ð-Ð-Ð-ØŒx�1œ=Ð(Ð(Ø—k’k¥!¤%Ñ(Ô(�Ø×'Ò'¨¬	°4ÀÐ'ÑFÔF�Ø�~�~ �~�~Ð%ð ×$Ò$ T¤Y°¸UÐ$ÑCÔCˆØ×#Ò# D¤H¨d¸5Ð#ÑAÔAˆØ�Š˜x¨Ñ1Ô1Ð1rh   r_   )T)Fr8  )=rm   Ú
__module__Ú__qualname__ÚprintmethodÚlanguageÚ_kwÚreserved_wordsÚmodulesr  r˜   r   Ú_known_functionsÚitemsÚ_known_functions_mathr™   Ú_known_constants_mathr›   Ú
_operatorsr	   Ú_default_settingsr�   r¡   ro   r¯   r´   r·   rº   r¾   rÃ   rÆ   rÈ   rÊ   rÑ   rÚ   rç   rì   rõ   rø   rú   rþ   Ú_print_SparseRepMatrixÚ_print_MutableSparseMatrixÚ_print_ImmutableSparseMatrixÚ_print_MatrixÚ_print_DenseMatrixÚ_print_MutableDenseMatrixÚ_print_ImmutableMatrixÚ_print_ImmutableDenseMatrixr  r  r  r  r  r  r"  r&  r/  r5  r7  rF  Ú__classcell__©rl   s   @rf   ry   ry   N   sE  ø€ € € € € Ø€KØ€HØ€NØ€GØ
€CØ
ˆ$ˆuˆuØ×ÒÑ Ô ØDÐDÐ&;×&AÒ&AÑ&CÔ&CÐDÑDÔDñô ñ ô €Cð CÐ
BÐ$9×$?Ò$?Ñ$AÔ$AÐ
BÑ
BÔ
B€CØ d°5Ð9Ð9€JØ˜ØÔ%ØØØØ $ØØðñ ô Ðð#ð #ð #ð #ð #ð #ð()ð )ð )ðBð Bð Bð Bðð ð ð'ð 'ð 'ð%ð %ð %ðð ð ð.ð ð ð2ð ð ðð ð ðð ð ð%ð %ð %ðTð Tð Tðð ð ð./ð /ð /ð /ð /ð 4ð 4ð 4ð	#ð 	#ð 	#ðð ð ð
ð 
ð 
ð=ð =ð =ð 	8Ð7ð8Ðð 8Ø"ð8à$ð8ð 	ð8ð 	ð	8ð
 	"ð8ð 	Ø#ðOð Oð Oð
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ðð ð ð.ð .ð .ð-ð -ð -ð9ð 9ð 9ð
(ð 
(ð 
(ð*ð *ð *ðð ð ð@2ð @2ð @2ð @2ð @2ð @2ð @2ð @2rh   ry   c                   óV   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ ZdS )ÚArrayPrinterc                 óJ   — ddl m} 	  ||¦  «        S # t          $ r |cY S w xY w)Nr   )Úconvert_indexed_to_array)Ú4sympy.tensor.array.expressions.from_indexed_to_arrayra  Ú	Exception)re   Úindexedra  s      rf   Ú	_arrayifyzArrayPrinter._arrayify¡  sN   € ØaÐaÐaÐaÐaÐað	Ø+Ð+¨GÑ4Ô4Ð4øÝð 	ð 	ð 	ØˆNˆNˆNð	øøøs   ˆ
 “"¡"c                 ó  — |                       ¦   «         }d}d}d„ |D ¦   «         }g }|D ]e}g }	t          |¦  «        D ]<}
||v r|	                     ||         ¦  «         n|	                     |¦  «         |dz  }Œ=|                     |	¦  «         Œfi }g }g }|D ]e}
|
D ][}||vrt          |¦  «        }|||<   n||         }||z  }||v r||vr|                     |¦  «         ŒF|                     |¦  «         Œ\|dz  }Œf|d d…         }|||fS )NrÔ   r   c                 ó8   — i | ]}|D ]}|t          |¦  «        “ŒŒS r~   )r,   )rc   rØ   Újs      rf   r„   z3ArrayPrinter._get_einsum_string.<locals>.<dictcomp>¬  s-   € Ð?Ð?Ð?˜1¸QÐ?Ð?¸ˆQ•�A‘”Ð?Ð?Ð?Ð?rh   r   ú,r¤   )Ú _get_letter_generator_for_einsumÚrangerÖ   Únext)re   ÚsubranksÚcontraction_indicesÚlettersÚcontraction_stringÚcounterÚdÚindicesÚrank_argÚlindicesrØ   ÚmappingÚletters_freeÚletters_dumrh  Úls                   rf   Ú_get_einsum_stringzArrayPrinter._get_einsum_string¨  s€  € Ø×7Ò7Ñ9Ô9ˆØÐØˆØ?Ð?Ð 3Ð?Ñ?Ô?ˆØˆØ ð 	%ð 	%ˆHØˆHÝ˜8‘_”_ð ð �Ø˜a�<�<Ø—O’O A g¤JÑ/Ô/Ð/Ð/à—O’O GÑ,Ô,Ð,Ø˜1‘��Ø�NŠN˜8Ñ$Ô$Ð$Ð$ØˆØˆØˆØð 	&ð 	&ˆAØð +ð +�Ø˜GÐ#Ð#Ý˜W™œ�AØ!"�G˜A‘J�Jà œ
�AØ" aÑ'Ð"Ø˜�6�6Ø Ð+Ð+Ø#×*Ò*¨1Ñ-Ô-Ð-øà ×'Ò'¨Ñ*Ô*Ð*Ð*Ø #Ñ%ÐÐØ/°°°Ô4ÐØ! <°Ð<Ð<rh   c              #   ó´   K  — t          dd¦  «        D ]}t          |¦  «        V — Œt          dd¦  «        D ]}t          |¦  «        V — Œt          d¦  «        ‚)Néa   é{   éA   é[   zout of letters)rk  Úchrr•   )re   rØ   s     rf   rj  z-ArrayPrinter._get_letter_generator_for_einsumË  se   è è € Ý�r˜3‘”ð 	ð 	ˆAÝ�a‘&”&ˆLˆLˆLˆLÝ�r˜2‘”ð 	ð 	ˆAÝ�a‘&”&ˆLˆLˆLˆLÝÐ)Ñ*Ô*Ð*rh   c                 ó  ‡ ‡— ‰                       ¦   «         Šd                     ˆfd„|j        D ¦   «         ¦  «        }‰                      ‰ j        dz   ‰ j        z   ¦  «        ›d|›dd                     ˆ fd„|j        D ¦   «         ¦  «        ›d�S )	Nri  c                 ól   •— g | ]0}d                       ˆfd„t          |¦  «        D ¦   «         ¦  «        ‘Œ1S )rÔ   c                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS r~   )rl  )rc   rh  ro  s     €rf   r‚   zEArrayPrinter._print_ArrayTensorProduct.<locals>.<listcomp>.<listcomp>Ô  s   ø€ Ð/PÐ/PÐ/PÀ!µ°W±´Ð/PÐ/PÐ/Prh   )rp   rk  )rc   rØ   ro  s     €rf   r‚   z:ArrayPrinter._print_ArrayTensorProduct.<locals>.<listcomp>Ô  sA   ø€ Ð&iÐ&iÐ&iÐVW r§w¢wÐ/PÐ/PÐ/PÐ/PÅuÈQÁxÄxÐ/PÑ/PÔ/PÑ'QÔ'QÐ&iÐ&iÐ&irh   r£   ú("ú", r]   c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r~   r`   rb   s     €rf   r‚   z:ArrayPrinter._print_ArrayTensorProduct.<locals>.<listcomp>Ø  s%   ø€ ÐAÐAÐA°˜4Ÿ;š; sÑ+Ô+ÐAÐAÐArh   r¹   )rj  rp   rm  ro   Ú_moduleÚ_einsumrj   )re   rr   rp  ro  s   `  @rf   Ú_print_ArrayTensorProductz&ArrayPrinter._print_ArrayTensorProductÒ  s¤   øø€ Ø×7Ò7Ñ9Ô9ˆØ ŸXšXÐ&iÐ&iÐ&iÐ&iÐ[_Ô[hÐ&iÑ&iÔ&iÑjÔjÐà×#Ò# D¤L°3Ñ$6¸¼Ñ$EÑFÔFÐFÐFØ"Ð"Ð"Ø—	’	ÐAÐAÐAÐA°t´yÐAÑAÔAÑBÔBÐBÐBð
ð 	
rh   c           
      óº  ‡ — ddl m} |j        }|j        }t	          ||¦  «        r.d                     ˆ fd„|j        D ¦   «         ¦  «        }|j        }n*‰                      |¦  «        }t          |j
        ¦  «        g}‰                      ||¦  «        \  }}}	|s‰                      |¦  «        S t	          ||¦  «        r'd                     ˆ fd„|j        D ¦   «         ¦  «        }n‰                      |¦  «        }‰                      ‰ j        dz   ‰ j        z   ¦  «        ›dd                     |d	                     t!          |¦  «        ¦  «        ¦  «        ›d
|›d�S )Nr   ©ÚArrayTensorProductri  c                 ó@   •— g | ]}d ‰                      |¦  «        z  ‘ŒS ©z%sr`   rb   s     €rf   r‚   z8ArrayPrinter._print_ArrayContraction.<locals>.<listcomp>á  ó*   ø€ ÐMÐMÐM¸C˜d d§k¢k°#Ñ&6Ô&6Ñ7ÐMÐMÐMrh   c                 ó@   •— g | ]}d ‰                      |¦  «        z  ‘ŒS rŽ  r`   rb   s     €rf   r‚   z8ArrayPrinter._print_ArrayContraction.<locals>.<listcomp>ì  r�  rh   r£   r„  ú{}->{}rÔ   r…  r¹   )Ú0sympy.tensor.array.expressions.array_expressionsrŒ  rr   rn  Ú
isinstancerp   rj   rm  ra   r¨   Úshaperz  ro   r‡  rˆ  rn   Úsorted)
re   rr   rŒ  r>  rn  ÚelemsÚranksrp  rw  rx  s
   `         rf   Ú_print_ArrayContractionz$ArrayPrinter._print_ArrayContractionÛ  ss  ø€ ØWÐWÐWÐWÐWÐWØŒyˆØ"Ô6Ðå�dÐ.Ñ/Ô/ð 	&Ø—H’HÐMÐMÐMÐMÀ4Ä9ÐMÑMÔMÑNÔNˆEØ”MˆEˆEà—K’K Ñ%Ô%ˆEÝ˜œ‘_”_Ð%ˆEà8<×8OÒ8OÐPUÐWjÑ8kÔ8kÑ5Ð˜L¨+à"ð 	%Ø—;’;˜tÑ$Ô$Ð$Ý�dÐ.Ñ/Ô/ð 	&Ø—H’HÐMÐMÐMÐMÀ4Ä9ÐMÑMÔMÑNÔNˆEˆEà—K’K Ñ%Ô%ˆEà×Ò ¤¨sÑ 2°T´\Ñ AÑBÔBÐBÐBØ�OŠOÐ.°·²½¸|Ñ8LÔ8LÑ0MÔ0MÑNÔNÐNÐNØˆEˆEð
ð 	
rh   c           	      óØ  ‡ — ddl m} t          |j        ¦  «        }t	          |j        |¦  «        r|j        j        }|j        j        }n|j        }|j        g}‰                      ||¦  «        \  }}}ˆ fd„|D ¦   «         }‰  	                    ‰ j
        dz   ‰ j        z   ¦  «        ›dd                     |d                     ||z   ¦  «        ¦  «        ›dd	                     |¦  «        ›d
�S )Nr   r‹  c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r~   r`   )rc   rØ   re   s     €rf   r‚   z5ArrayPrinter._print_ArrayDiagonal.<locals>.<listcomp>ÿ  s#   ø€ Ð/Ð/Ð/ A�—’˜Q‘”Ð/Ð/Ð/rh   r£   r„  r‘  rÔ   r…  r]   r¹   )r’  rŒ  ÚlistÚdiagonal_indicesr“  rr   rm  rj   rz  ro   r‡  rˆ  rn   rp   )	re   rr   rŒ  rœ  rm  r–  Údiagonal_stringrw  rx  s	   `        rf   Ú_print_ArrayDiagonalz!ArrayPrinter._print_ArrayDiagonalõ  s  ø€ ØWÐWÐWÐWÐWÐWÝ Ô 5Ñ6Ô6ÐÝ�d”iÐ!3Ñ4Ô4ð 	 Ø”yÔ)ˆHØ”I”NˆEˆEà”}ˆHØ”Y�KˆEØ59×5LÒ5LÈXÐWgÑ5hÔ5hÑ2ˆ˜ {Ø/Ð/Ð/Ð/¨Ð/Ñ/Ô/ˆà×Ò ¤¨sÑ 2°T´\Ñ AÑBÔBÐBÐBØ�OŠO˜O¨R¯WªW°\À+Ñ5MÑ-NÔ-NÑOÔOÐOÐOØ�IŠI�eÑÔÐÐð
ð 	
rh   c                 óÈ   — |                       | j        dz   | j        z   ¦  «        ›d|                      |j        ¦  «        ›d|                      |j        j        ¦  «        ›d�S )Nr£   r¥   r]   r¹   )ro   r‡  Ú
_transposera   rr   ÚpermutationÚ
array_formrÂ   s     rf   Ú_print_PermuteDimszArrayPrinter._print_PermuteDims  sc   € à×Ò ¤¨sÑ 2°T´_Ñ DÑEÔEÐEÐEØ�KŠK˜œ	Ñ"Ô"Ð"Ð"Ø�KŠK˜Ô(Ô3Ñ4Ô4Ð4Ð4ð
ð 	
rh   c                 óX   — |                       | j        dz   | j        z   |j        ¦  «        S )Nr£   )rº   r‡  Ú_addrj   rÂ   s     rf   Ú_print_ArrayAddzArrayPrinter._print_ArrayAdd  s(   € Ø×*Ò*¨4¬<¸#Ñ+=ÀÄ	Ñ+IÈ4Ì9ÑUÔUÐUrh   c                 ó®   — |                       | j        dz   | j        z   ¦  «        ›dd                     t	          | j        |j        ¦  «        ¦  «        ›d�S ©Nr£   z((ri  z,)))ro   r‡  Ú_onesrp   Úmapra   rj   rÂ   s     rf   Ú_print_OneArrayzArrayPrinter._print_OneArray  sT   € à×Ò ¤¨cÑ 1°D´JÑ >Ñ?Ô?Ð?Ð?Ø�HŠH•S˜œ T¤YÑ/Ô/Ñ0Ô0Ð0Ð0ð
ð 	
rh   c                 ó®   — |                       | j        dz   | j        z   ¦  «        ›dd                     t	          | j        |j        ¦  «        ¦  «        ›d�S r¨  )ro   r‡  Ú_zerosrp   rª  ra   rj   rÂ   s     rf   Ú_print_ZeroArrayzArrayPrinter._print_ZeroArray  sT   € à×Ò ¤¨cÑ 1°D´KÑ ?Ñ@Ô@Ð@Ð@Ø�HŠH•S˜œ T¤YÑ/Ô/Ñ0Ô0Ð0Ð0ð
ð 	
rh   c                 óÄ   — |                       |                      |j        ¦  «        ¦  «        }|                       |                      |j        ¦  «        ¦  «        }|›d|›�S rŸ   )ra   re  rä   rå   )re   rr   rä   rå   s       rf   Ú_print_AssignmentzArrayPrinter._print_Assignment  sS   € ð �kŠk˜$Ÿ.š.¨¬Ñ2Ô2Ñ3Ô3ˆØ�kŠk˜$Ÿ.š.¨¬Ñ2Ô2Ñ3Ô3ˆØ ˜S˜S # #Ð'Ð'rh   c                 ó,   — |                       |¦  «        S r_   )Ú_print_ArraySymbolrÂ   s     rf   Ú_print_IndexedBasezArrayPrinter._print_IndexedBase#  s   € Ø×&Ò& tÑ,Ô,Ð,rh   N)rm   rG  rH  re  rz  rj  r‰  r˜  rž  r£  r¦  r«  r®  r°  r³  r~   rh   rf   r_  r_  Ÿ  sÌ   € € € € € ðð ð ð!=ð !=ð !=ðF+ð +ð +ð
ð 
ð 
ð
ð 
ð 
ð4
ð 
ð 
ð"
ð 
ð 
ðVð Vð Vð
ð 
ð 
ð
ð 
ð 
ð(ð (ð (ð-ð -ð -ð -ð -rh   r_  c                   óˆ   ‡ — e Zd Zd„ Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ Z	d	„ Z
ˆ fd
„Zej        Zej        Zej        Zej        Zˆ xZS )ÚPythonCodePrinterc                 ó’   — d                      |                      d¦  «        |                      |j        d         ¦  «        ¬¦  «        S )Nz"(0.0 if {e} == 0 else {f}(1, {e}))zmath.copysignr   )ÚfrR   ©rn   ro   ra   rj   ©re   rR   s     rf   Ú_print_signzPythonCodePrinter._print_sign)  sG   € Ø3×:Ò:Ø×!Ò! /Ñ2Ô2°d·k²kÀ!Ä&ÈÄ)Ñ6LÔ6Lð ;ñ Nô Nð 	Nrh   c                 ó~   — t          |¦  «        }| j        d         |                      |j        d         |¦  «        z   S )Nr   r   )r   rR  rÍ   rj   rÐ   s      rf   Ú
_print_NotzPythonCodePrinter._print_Not-  s7   € Ý˜$ÑÔˆØŒ˜uÔ%¨×(9Ò(9¸$¼)ÀA¼,ÈÑ(MÔ(MÑMÐMrh   c                 ó   — |j         S r_   )ri   rÂ   s     rf   r³  z$PythonCodePrinter._print_IndexedBase1  s
   € ØŒyÐrh   c                 óÀ   ‡ — |j         d         }|j         dd …         }d                     t          |¦  «        d                     ˆ fd„|D ¦   «         ¦  «        ¦  «        S )Nr   r   z{}[{}]r]   c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r~   r`   )rc   Úindre   s     €rf   r‚   z4PythonCodePrinter._print_Indexed.<locals>.<listcomp>7  s%   ø€ Ð4WÐ4WÐ4WÈ#°T·[²[ÀÑ5EÔ5EÐ4WÐ4WÐ4Wrh   )rj   rn   r3  rp   )re   rr   r>  Úindexs   `   rf   Ú_print_Indexedz PythonCodePrinter._print_Indexed4  sY   ø€ ØŒy˜Œ|ˆØ”	˜!˜"˜"”ˆØ�Š�s 4™yœy¨$¯)ª)Ð4WÐ4WÐ4WÐ4WÐQVÐ4WÑ4WÔ4WÑ*XÔ*XÑYÔYÐYrh   Fc                 ó0   — |                       ||¬¦  «        S )N)rB  ©rF  ©re   rr   rB  s      rf   Ú
_print_PowzPythonCodePrinter._print_Pow9  s   € Ø×Ò ¨xÐÑ8Ô8Ð8rh   c                 óB   — d                      |j        |j        ¦  «        S )Nz{}/{})rn   ÚpÚqrÂ   s     rf   Ú_print_Rationalz!PythonCodePrinter._print_Rational<  s   € Ø�~Š~˜dœf d¤fÑ-Ô-Ð-rh   c                 ó,   — |                       |¦  «        S r_   ©rÊ  rÂ   s     rf   Ú_print_HalfzPythonCodePrinter._print_Half?  s   € Ø×#Ò# DÑ)Ô)Ð)rh   c                 ó^   — |                       t          |j        d         d¦  «        ¦  «        S )Nr   r   )rÑ   r   rj   rÂ   s     rf   Ú_print_fraczPythonCodePrinter._print_fracB  s$   € Ø�Š�s 4¤9¨Q¤<°Ñ3Ô3Ñ4Ô4Ð4rh   c                 ó:  •— t          ¦   «                              |¦  «        }|| j        v rA| j        d         r$d}t	          |                     |¦  «        ¦  «        ‚|| j        d         z   S d|v r*|                     dd¦  «                             dd¦  «        S |S )NÚerror_on_reservedzVThis expression includes the symbol "{}" which is a reserved keyword in this language.Úreserved_word_suffixÚ{rÔ   Ú})r�   Ú_print_SymbolrL  r‘   r•   rn   Úreplace)re   rr   ri   Úmsgrl   s       €rf   rÕ  zPythonCodePrinter._print_SymbolE  sž   ø€ å‰wŒw×$Ò$ TÑ*Ô*ˆà�4Ô&Ð&Ð&ØŒ~Ð1Ô2ð 3ð<�å  §¢¨DÑ!1Ô!1Ñ2Ô2Ð2Ø˜$œ.Ð)?Ô@Ñ@Ð@Ø�Dˆ[ˆ[Ø—<’<  RÑ(Ô(×0Ò0°°bÑ9Ô9Ð9àˆKrh   ©F)rm   rG  rH  rº  r¼  r³  rÂ  rÆ  rÊ  rÍ  rÏ  rÕ  r	   Ú_print_not_supportedÚ_print_lowergammaÚ_print_uppergammaÚ_print_fresnelcÚ_print_fresnelsr\  r]  s   @rf   rµ  rµ  '  sÖ   ø€ € € € € ðNð Nð NðNð Nð Nðð ð ðZð Zð Zð
9ð 9ð 9ð 9ð.ð .ð .ð*ð *ð *ð5ð 5ð 5ðð ð ð ð ð $Ô8ÐØ#Ô8ÐØ!Ô6€OØ!Ô6€O€O€O€O€Orh   rµ  z	_print_%sc                 óF   — t          |¦  «                             | ¦  «        S )a)   Converts an expr to a string of Python code

    Parameters
    ==========

    expr : Expr
        A SymPy expression.
    fully_qualified_modules : bool
        Whether or not to write out full module names of functions
        (``math.sin`` vs. ``sin``). default: ``True``.
    standard : str or None, optional
        Only 'python3' (default) is supported.
        This parameter may be removed in the future.

    Examples
    ========

    >>> from sympy import pycode, tan, Symbol
    >>> pycode(tan(Symbol('x')) + 1)
    'math.tan(x) + 1'

    )rµ  Údoprint)rr   rœ   s     rf   Úpycoderà  a  s    € õ. ˜XÑ&Ô&×.Ò.¨tÑ4Ô4Ð4rh   z
log1p log2c                 ó.   — g | ]\  }}|t           v¯||f‘ŒS r~   )Ú_not_in_mpmathr   s      rf   r‚   r‚   |  s*   € ÐZÐZÐZ™˜˜AÀ!Í>ÐBYÐBYˆq�!ˆfÐBYÐBYÐBYrh   ÚbetaÚfracÚfresnelcÚfresnelsÚsignrO   ÚhyperÚmeijergÚbesseljÚbesselyÚbesseliÚbesselk)rã  rä  rå  ræ  rç  rO   rè  ré  rê  rë  rì  rí  ÚphiÚeulerÚcatalanÚninf)rV   rW   ÚGoldenRatioÚ
EulerGammaÚCatalanrZ   rY   ÚNegativeInfinityc                 óÐ   — g }g }| j         D ]W}t          |¦  «        dk    r|\  }}}nt          d¦  «        ‚|                     |¦  «         |                     ||f¦  «         ŒX||fS )zì helper function for _print_Integral that
        - accepts an Integral expression
        - returns a tuple of
           - a list variables of integration
           - a list of tuples of the upper and lower limits of integration
    é   z%Only definite integrals are supported)rô   r¨   ÚNotImplementedErrorrÖ   )Úintegral_exprÚintegration_varsrô   Úintegration_rangeÚintegration_varÚlower_limitÚupper_limits          rf   Ú_unpack_integral_limitsrÿ  —  sŒ   € ð ÐØ€FØ*Ô1ð 2ð 2ÐÝÐ Ñ!Ô! QÒ&Ð&Ø8IÑ5ˆO˜[¨+¨+å%Ð&MÑNÔNÐNØ×Ò Ñ0Ô0Ð0Ø�Š�{ KÐ0Ñ1Ô1Ð1Ð1Ø˜VÐ#Ð#rh   c                   ó  — e Zd ZdZdZdZ e ee 	                    ¦   «         d„ e
 	                    ¦   «         D ¦   «         ¦  «        ¦  «        Zd„ e 	                    ¦   «         D ¦   «         Zd„ Zd„ Zd„ Zd	„ Zd
„ Zd„ Zd„ Zdd„Zd„ ZdS )ÚMpmathPrinterzH
    Lambda printer for mpmath which maintains precision for floats
    Ú_mpmathcodezPython with mpmathc                 ó"   — g | ]\  }}|d |z   f‘ŒS ©zmpmath.r~   r   s      rf   r‚   zMpmathPrinter.<listcomp>´  s%   € ÐHÐHÐH¡  1ˆ!ˆY˜‰]Ð	ÐHÐHÐHrh   c                 ó    — i | ]\  }}|d |z   “ŒS r  r~   r   s      rf   r„   zMpmathPrinter.<dictcomp>¶  s"   € Ð
FÐ
FÐ
F™d˜a ˆ1ˆi˜‰kÐ
FÐ
FÐ
Frh   c                 ó¾   — t          t          t          t          |j        ¦  «        ¦  «        ¦  «        }d                     |                      d¦  «        |¬¦  «        S )Nz{func}({args})ú
mpmath.mpf)rý   rj   )r3  Útuplerª  ÚintÚ_mpf_rn   ro   )re   rR   rj   s      rf   Ú_print_FloatzMpmathPrinter._print_Float¸  sM   € õ •5��S !¤'Ñ*Ô*Ñ+Ô+Ñ,Ô,ˆØ×&Ò&¨D×,?Ò,?ÀÑ,MÔ,MÐTXÐ&ÑYÔYÐYrh   c                 ó¸   — d                      |                      d¦  «        |                      |j        ¦  «        |                      |j        ¦  «        ¬¦  «        S )Nz{func}({p})/{func}({q})r  )rý   rÉ  rÈ  )rn   ro   ra   rÉ  rÈ  r¹  s     rf   rÊ  zMpmathPrinter._print_RationalÂ  sR   € Ø(×/Ò/Ø×$Ò$ \Ñ2Ô2Ø�kŠk˜!œ#ÑÔØ�kŠk˜!œ#ÑÔð 0ñ 
ô 
ð 	
rh   c                 ó,   — |                       |¦  «        S r_   rÌ  r¹  s     rf   rÍ  zMpmathPrinter._print_HalfÉ  s   € Ø×#Ò# AÑ&Ô&Ð&rh   c                 óö   — d                      |                      d¦  «        |                      |j        d         ¦  «        |                      |j        d         ¦  «        |                      d¦  «        ¦  «        S )Nz{}({}, {}, {})úmpmath.gammaincr   r   z
mpmath.infr¸  r¹  s     rf   rÛ  zMpmathPrinter._print_uppergammaÌ  sg   € Ø×&Ò&Ø×ÒÐ 1Ñ2Ô2Ø�KŠK˜œ˜qœ	Ñ"Ô"Ø�KŠK˜œ˜qœ	Ñ"Ô"Ø×Ò Ñ-Ô-ñ	/ô /ð 	/rh   c                 óÎ   — d                      |                      d¦  «        |                      |j        d         ¦  «        |                      |j        d         ¦  «        ¦  «        S )Nz{}({}, 0, {})r  r   r   r¸  r¹  s     rf   rÚ  zMpmathPrinter._print_lowergammaÓ  sV   € Ø×%Ò%Ø×ÒÐ 1Ñ2Ô2Ø�KŠK˜œ˜qœ	Ñ"Ô"Ø�KŠK˜œ˜qœ	Ñ"Ô"ñ$ô $ð 	$rh   c                 ó�   — d                      |                      d¦  «        |                      |j        d         ¦  «        ¦  «        S )Nz{0}({1})/{0}(2)z
mpmath.logr   r¸  r¹  s     rf   Ú_print_log2zMpmathPrinter._print_log2Ù  sB   € Ø ×'Ò'Ø×Ò Ñ-Ô-¨t¯{ª{¸1¼6À!¼9Ñ/EÔ/EñGô Gð 	Grh   c                 ó�   — d                      |                      d¦  «        |                      |j        d         ¦  «        ¦  «        S )Nz{}({})zmpmath.log1pr   r¸  r¹  s     rf   Ú_print_log1pzMpmathPrinter._print_log1pÝ  s@   € Ø�ŠØ×Ò Ñ/Ô/°·²¸Q¼VÀA¼YÑ1GÔ1GñIô Ið 	Irh   Fc                 ó2   — |                       ||d¬¦  «        S )Nzmpmath.sqrt©rB  rL   rÄ  rÅ  s      rf   rÆ  zMpmathPrinter._print_Powá  s   € Ø×Ò ¨x¸mÐÑLÔLÐLrh   c           	      óD  ‡ — t          |¦  «        \  }}d                     ‰                      d¦  «        d                     t	          ‰ j        |¦  «        ¦  «        ‰                      |j        d         ¦  «        d                     ˆ fd„|D ¦   «         ¦  «        ¦  «        S )Nz{}(lambda {}: {}, {})zmpmath.quadr]   r   c              3   ób   •K  — | ])}d t          t          ‰j        |¦  «        ¦  «        z  V — Œ*dS )z(%s, %s)N)r  rª  ra   )rc   ry  re   s     €rf   rg   z0MpmathPrinter._print_Integral.<locals>.<genexpr>ë  s<   øè è € ÐRÐRÀa˜*¥u­S°´¸aÑ-@Ô-@Ñ'AÔ'AÑAÐRÐRÐRÐRÐRÐRrh   )rÿ  rn   ro   rp   rª  ra   rj   )re   rR   rú  rô   s   `   rf   Ú_print_IntegralzMpmathPrinter._print_Integralä  s—   ø€ Ý#:¸1Ñ#=Ô#=Ñ Ð˜&à&×-Ò-Ø×#Ò# MÑ2Ô2Ø—	’	�#˜dœkÐ+;Ñ<Ô<Ñ=Ô=Ø—’˜AœF 1œIÑ&Ô&Ø—	’	ÐRÐRÐRÐRÈ6ÐRÑRÔRÑRÔRñ	Tô Tð 	Trh   NrØ  )rm   rG  rH  Ú__doc__rI  rJ  r˜   r   rN  rO  Ú_known_functions_mpmathr™   Ú_known_constants_mpmathr›   r  rÊ  rÍ  rÛ  rÚ  r  r  rÆ  r  r~   rh   rf   r  r  ª  s7  € € € € € ðð ð  €Kà#€Hà
ˆ$ˆuˆuØ×ÒÑ Ô ØHÐHÐ(?×(EÒ(EÑ(GÔ(GÐHÑHÔHñô ñ ô €Cð GÐ
FÐ&=×&CÒ&CÑ&EÔ&EÐ
FÑ
FÔ
F€CðZð Zð Zð
ð 
ð 
ð'ð 'ð 'ð/ð /ð /ð$ð $ð $ðGð Gð GðIð Ið IðMð Mð Mð MðTð Tð Tð Tð Trh   r  c                   óD   — e Zd ZdZ eej        d¬¦  «        Zd„ Zdd„ZdS )ÚSymPyPrinterzPython with SymPyFr;  c                 óÆ   ‡ — |j         j        pd}‰                      ||rdndz   |j         j        z   ¦  «        ›dd                     ˆ fd„|j        D ¦   «         ¦  «        ›d�S )NrÔ   r£   r¥   r]   c              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S r_   r`   rb   s     €rf   rg   z/SymPyPrinter._print_Function.<locals>.<genexpr>  s/   øè è € Ð%LÐ%L¸3 d§k¢k°#Ñ&6Ô&6Ð%LÐ%LÐ%LÐ%LÐ%LÐ%Lrh   r¹   )rý   rG  ro   rm   rp   rj   )re   rr   Úmods   `  rf   Ú_print_FunctionzSymPyPrinter._print_Functionþ  sy   ø€ ØŒiÔ"Ð( bˆØ×.Ò.¨s¸SÐ6H°c°cÀbÑ/IÈDÌIÔL^Ñ/^Ñ_Ô_Ð_Ð_ØŸ9š9Ð%LÐ%LÐ%LÐ%LÀ$Ä)Ð%LÑ%LÔ%LÑMÔMÐMÐMðOð 	Orh   c                 ó2   — |                       ||d¬¦  «        S )Nz
sympy.sqrtr  rÄ  rÅ  s      rf   rÆ  zSymPyPrinter._print_Pow  s   € Ø×Ò ¨x¸lÐÑKÔKÐKrh   NrØ  )	rm   rG  rH  rJ  r˜   ry   rS  r"  rÆ  r~   rh   rf   r  r  õ  se   € € € € € à"€Hà˜Ø!Ô3Øðñ ô Ðð
Oð Oð Oð
Lð Lð Lð Lð Lð Lrh   r  N)#r  Úcollectionsr   Ú	itertoolsr   Ú
sympy.corer   Úsympy.core.modr   r   Úcodeprinterr	   rK  rN  rP  rQ  rt   rw   ry   r_  rµ  r™   r€   Úsetattrrà  r§   râ  rO  Ú
_in_mpmathr˜   r  r  rÿ  r  r  r~   rh   rf   ú<module>r+     s~  ððð ð
 $Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ø $Ð $Ð $Ð $Ð $Ð $ðð ð €ð ØØðð Ð ð
Ø
ˆFðàˆWðð ˆFðð ˆWð	ð
 ˆFðð ˆWðð ˆWðð ˆvðð 
ˆ5ðð ˆFðð 
ˆ5ðð ˆFðð 
ˆ5ðð ˆWðð �ðð  ˆWð!ð" ˆWð#ð$ ØØØØ
ØØØØØØØØð=ð ð Ð ðD Ø
Ø	ØØØðð Ð ð\ð \ð \ð&ð &ð &ð
N2ð N2ð N2ð N2ð N2 ñ N2ô N2ð N2ðb
E-ð E-ð E-ð E-ð E-ñ E-ô E-ð E-ðP07ð 07ð 07ð 07ð 07Ð1ñ 07ô 07ð 07ðf 
Ô	ð Cð C€AØ€GÐ˜{¨Q™Ð0AÑBÔBÐBÐBà	ð Dð D€AØ€GÐ˜{¨Q™Ð0BÑCÔCÐCÐCð5ð 5ð 5ð4 ×#Ò#Ñ%Ô%€ØZÐZÐ!6×!<Ò!<Ñ!>Ô!>ÐZÑZÔZ€
Ø˜$˜zð ð ØØØØØØØØØØØØð.ð .ð ð Ð ð Ø
ØØØØØØð	ð 	Ð ð$ð $ð $ð&ATð ATð ATð ATð ATÐ%ñ ATô ATð ATðH 
Ô	ð ?ð ?€AØ€GˆM˜;¨™?Ð,=Ñ>Ô>Ð>Ð>à	 ð @ð @€AØ€GˆM˜;¨™?Ð,>Ñ?Ô?Ð?Ð?ðLð Lð Lð Lð LÐ,ñ Lô Lð Lð Lð Lrh   