Ë
    7^(hK)  ã                   ó¸  — d Z ddlmZ ddlmZmZmZ ddlmZ ddl	m
Z
mZ ddlZ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/d0d1d2d3d4d5d6d7d8œ¥ZeD ]  Zeee<   Œ	 ej                   d9ej"                  d:ej$                  d;ej&                  d<ej(                  d=iZd>d?d@œZej.                  gZ G dA„ dBe«      ZdEdC„ZdD„ Zy)Fa	  
Maple code printer

The MapleCodePrinter converts single SymPy expressions into single
Maple expressions, using the functions defined in the Maple objects where possible.


FIXME: This module is still under actively developed. Some functions may be not completed.
é    )ÚS)ÚIntegerÚIntegerConstantÚequal_valued)ÚCodePrinter)Ú
precedenceÚ
PRECEDENCEN) ÚsinÚcosÚtanÚsecÚcscÚcotÚsinhÚcoshÚtanhÚsechÚcschÚcothÚexpÚfloorÚ	factorialÚ	bernoulliÚeulerÚ	fibonacciÚgcdÚlcmÚ	conjugateÚCiÚChiÚEiÚLiÚSiÚShiÚerfÚerfcÚharmonicÚLambertWÚsqrtÚAbsÚabsÚlogÚlnÚasinÚarcsinÚacosÚarccosÚatanÚarctanÚasecÚarcsecÚacscÚarccscÚacotÚarccotÚasinhÚarcsinhÚacoshÚarccoshÚatanhÚarctanhÚasechÚarcsechÚacschÚarccschÚacothÚarccothÚceilingÚceilÚMaxÚmaxÚMinÚminÚdoublefactorialÚ
pochhammerÚBesselIÚBesselJÚBesselKÚBesselYÚHankelH1ÚHankelH2ÚAiryAiÚAiryBiÚAppellF1ÚFresnelCÚFresnelSÚLerchPhi)Ú
factorial2ÚRisingFactorialÚbesseliÚbesseljÚbesselkÚbesselyÚhankelh1Úhankelh2ÚairyaiÚairybiÚappellf1ÚfresnelcÚfresnelsÚlerchphiÚPizexp(1)ÚCatalanÚgammaz(1/2 + (1/2)*sqrt(5))ú=z<>)z==z!=c                   ó  ‡ — e Zd ZdZdZdZddddœZ eej                  fi ddd	œ¤ŽZ	d&ˆ f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„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd'd„Zd„ Zd„ Zd „ Z d!„ Z!d"„ Z"d#„ Z#d$„ Z$d%„ Z%ˆ xZ&S )(ÚMapleCodePrinterzF
    Printer which converts a SymPy expression into a maple code.
    Ú_mapleÚmapleÚandÚorznot )rp   rq   ÚnotT)ÚinlineÚallow_unknown_functionsc                 ó®   •— |€i }t         ‰| �  |«       t        t        «      | _        |j	                  di «      }| j                  j                  |«       y )NÚuser_functions)ÚsuperÚ__init__ÚdictÚknown_functionsÚgetÚupdate)ÚselfÚsettingsÚ	userfuncsÚ	__class__s      €úR/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/printing/maple.pyrx   zMapleCodePrinter.__init__f   sM   ø€ ØÐØˆHÜ‰Ñ˜Ô"Ü#¤OÓ4ˆÔØ—L‘LÐ!1°2Ó6ˆ	Ø×Ñ×#Ñ# IÕ.ó    c                 ó   — d|z  S )Nz%s;© )r}   Ú
codestrings     r�   Ú_get_statementzMapleCodePrinter._get_statementn   s   € Ø�zÑ!Ð!r‚   c                 ó$   — dj                  |«      S )Nz# {})Úformat)r}   Útexts     r�   Ú_get_commentzMapleCodePrinter._get_commentq   s   € Ø�}‰}˜TÓ"Ð"r‚   c                 ó^   — dj                  ||j                  | j                  d   «      «      S )Nz	{} := {};Ú	precision)rˆ   ÚevalfÚ	_settings)r}   ÚnameÚvalues      r�   Ú_declare_number_constz&MapleCodePrinter._declare_number_constt   s.   € Ø×!Ñ! $Ø$)§K¡K°·±¸{Ñ0KÓ$LóNð 	Nr‚   c                 ó   — |S ©Nr„   )r}   Úliness     r�   Ú_format_codezMapleCodePrinter._format_codex   s   € Øˆr‚   c                 ó6   — | j                  t        |«      «      S r“   ©Ú_printÚlist©r}   Úexprs     r�   Ú_print_tuplezMapleCodePrinter._print_tuple{   ó   € Ø�{‰{œ4 ›:Ó&Ð&r‚   c                 ó6   — | j                  t        |«      «      S r“   r—   rš   s     r�   Ú_print_TuplezMapleCodePrinter._print_Tuple~   r�   r‚   c                 ó”   — | j                  |j                  «      }| j                  |j                  «      }dj                  ||¬«      S )Nz{lhs} := {rhs})ÚlhsÚrhs)r˜   r¡   r¢   rˆ   )r}   r›   r¡   r¢   s       r�   Ú_print_Assignmentz"MapleCodePrinter._print_Assignment�   s<   € Ø�k‰k˜$Ÿ(™(Ó#ˆØ�k‰k˜$Ÿ(™(Ó#ˆØ×&Ñ&¨3°CÐ&Ó8Ð8r‚   c                 óà  — t        |«      }t        |j                  d«      rd| j                  |j                  |«      z  S t        |j                  d«      rd| j                  |j                  «      z  S t        |j                  d«      rd| j                  |j                  «      z  S dj                  | j                  |j                  |«      | j                  |j                  |«      ¬«      S )	Néÿÿÿÿz1/%sg      à?zsqrt(%s)g      à¿z
1/sqrt(%s)z{base}^{exp})Úbaser   )r   r   r   Úparenthesizer¦   r˜   rˆ   )r}   r›   ÚkwargsÚPRECs       r�   Ú
_print_PowzMapleCodePrinter._print_Pow†   sÂ   € Ü˜$ÓˆÜ˜Ÿ™ "Ô%Ø˜T×.Ñ.¨t¯y©y¸$Ó?Ñ@Ð@Ü˜$Ÿ(™( CÔ(Ø §¡¨D¯I©IÓ 6Ñ6Ð6Ü˜$Ÿ(™( DÔ)Ø $§+¡+¨d¯i©iÓ"8Ñ8Ð8à!×(Ñ(Ø×&Ñ& t§y¡y°$Ó7Ø×%Ñ% d§h¡h°Ó5ð )ó 7ð 7r‚   c           
      óü  — |j                   d   j                  dur5|j                   d   j                  t        j                  k7  rt	        d«      ‚|j                   D ��cg c]m  \  }}|durC|t        j                  ur1dj                  | j                  |«      | j                  |«      ¬«      n dj                  | j                  |«      ¬«      ‘Œo }}}dj                  |«      }d	j                  |¬
«      S c c}}w )Nr¥   Tz¼All Piecewise expressions must contain an (expr, True) statement to be used as a default condition. Without one, the generated expression may not evaluate to anything under some condition.z{c}, {e})ÚcÚez{e})r­   z, zpiecewise({_inbrace}))Ú_inbrace)ÚargsÚcondr   ÚBooleanTrueÚ
ValueErrorrˆ   r˜   Újoin)r}   r›   r­   r¬   Ú
_coup_listr®   s         r�   Ú_print_Piecewisez!MapleCodePrinter._print_Piecewise“   sö   € Ø�I‰I�b‰M×Ñ dÑ*°·±¸2±×1CÑ1CÄqÇ}Á}Ò1Tô ð /ó 0ð 0ð Ÿ	™	÷	#ñ ��1ð 56¸T±MÀaÌqÏ}É}ÑF\ð ×Ñ §¡¨Q£Ø!%§¡¨Q£ð ô 1Øbg×bnÑbnØ—+‘+˜a“.ð coó c"ñ"ð#ˆ
ñ #ð
 —9‘9˜ZÓ(ˆØ&×-Ñ-°xÐ-Ó@Ð@ùó#s   Á A2C8c                 ó    — t        |j                  «      t        |j                  «      }}dj                  t	        |«      t	        |«      ¬«      S )Nz{p}/{q})ÚpÚq)Úintr·   r¸   rˆ   Ústr)r}   r›   r·   r¸   s       r�   Ú_print_Rationalz MapleCodePrinter._print_Rational¤   s9   € Ü�4—6‘6‹{œC §¡›Kˆ1ˆØ×Ñ¤# a£&¬C°«FÐÓ3Ð3r‚   c                 óê   — t        |«      }| j                  |j                  |«      }| j                  |j                  |«      }|j                  }|t
        v r	t
        |   }dj                  |||¬«      S )Nz{lhs} {rel_op} {rhs})r¡   Úrel_opr¢   )r   r§   r¡   r¢   r½   Úspec_relational_opsrˆ   )r}   r›   r©   Úlhs_codeÚrhs_codeÚops         r�   Ú_print_Relationalz"MapleCodePrinter._print_Relational¨   sl   € Ü˜ÓˆØ×$Ñ$ T§X¡X¨tÓ4ˆØ×$Ñ$ T§X¡X¨tÓ4ˆØ�[‰[ˆØÔ$Ñ$Ü$ RÑ(ˆBØ%×,Ñ,°À"È(Ð,ÓSÐSr‚   c                 ó   — t         |   S r“   )Únumber_symbolsrš   s     r�   Ú_print_NumberSymbolz$MapleCodePrinter._print_NumberSymbol±   s   € Ü˜dÑ#Ð#r‚   c                  ó   — y)Nz	-infinityr„   rš   s     r�   Ú_print_NegativeInfinityz(MapleCodePrinter._print_NegativeInfinity´   ó   € Ør‚   c                  ó   — y)NÚinfinityr„   rš   s     r�   Ú_print_Infinityz MapleCodePrinter._print_Infinity·   s   € Ør‚   c                  ó   — y)NÚtruer„   rš   s     r�   Ú_print_BooleanTruez#MapleCodePrinter._print_BooleanTrueº   s   € Ør‚   c                  ó   — y)NÚfalser„   rš   s     r�   Ú_print_BooleanFalsez$MapleCodePrinter._print_BooleanFalse½   s   € Ør‚   c                 ó   — |rdS dS )NrÍ   rÐ   r„   rš   s     r�   Ú_print_boolzMapleCodePrinter._print_boolÀ   s   € ÙˆvÐ* 7Ð*r‚   c                  ó   — y)NÚ	undefinedr„   rš   s     r�   Ú
_print_NaNzMapleCodePrinter._print_NaNÃ   rÈ   r‚   c                 óÖ   — t         j                  |j                  v rdj                  |rdnd¬«      }|S dj                  | j	                  |j                  «       «      |rdnd¬«      }|S )NzMatrix([], storage = {storage})ÚsparseÚrectangular)Ústoragez#Matrix({list}, storage = {storage}))r™   rÚ   )r   ÚZeroÚshaperˆ   r˜   Útolist)r}   r›   rØ   Ú_strMs       r�   Ú_get_matrixzMapleCodePrinter._get_matrixÆ   sm   € Ü�6‰6�T—Z‘ZÑØ5×<Ñ<Ù$*™°ð =ó ?ˆEð ˆð :×@Ñ@Ø—[‘[ §¡£Ó/Ù$*™°ð Aó ?ˆEð ˆr‚   c                 óà   — dj                  | j                  |j                  t        d   d¬«      | j	                  |j
                  dz   «      | j	                  |j                  dz   «      ¬«      S )Nz{parent}[{i_maple}, {j_maple}]ÚAtomT)Ústricté   )ÚparentÚi_mapleÚj_maple)rˆ   r§   rä   r	   r˜   ÚiÚjrš   s     r�   Ú_print_MatrixElementz%MapleCodePrinter._print_MatrixElementÐ   s`   € Ø/×6Ñ6Ø×$Ñ$ T§[¡[´*¸VÑ2DÈTÐ$ÓRØ—K‘K §¡¨¡
Ó+Ø—K‘K §¡¨¡
Ó+ð 7ó -ð 	-r‚   c                 ó(   — | j                  |d¬«      S )NF©rØ   ©rß   rš   s     r�   Ú_print_MatrixBasez"MapleCodePrinter._print_MatrixBaseÖ   s   € Ø×Ñ ¨UÐÓ3Ð3r‚   c                 ó(   — | j                  |d¬«      S )NTrë   rì   rš   s     r�   Ú_print_SparseRepMatrixz'MapleCodePrinter._print_SparseRepMatrixÙ   s   € Ø×Ñ ¨TÐÓ2Ð2r‚   c                 óà   — t        |j                  t        t        f«      r$| j	                  t        j                  |«      «      S dj                  | j	                  |j                  «      ¬«      S )Nz$Matrix({var_size}, shape = identity))Úvar_size)Ú
isinstanceÚrowsr   r   r˜   ÚsympyÚSparseMatrixrˆ   rš   s     r�   Ú_print_Identityz MapleCodePrinter._print_IdentityÜ   sS   € Ü�d—i‘i¤'¬?Ð!;Ô<Ø—;‘;œu×1Ñ1°$Ó7Ó8Ð8à9×@Ñ@È$Ï+É+ÐVZ×V_ÑV_ÓJ`Ð@ÓaÐar‚   c                 ó�  ‡ ‡— t        |«      Št        |j                  «      }d }t        |d   t        j
                  t        j                  t        j                  t        j                  f«      s
|d   |dd  }}|�|dk(  rdj                  ˆˆ fd„|D «       «      S dj                  |dj                  ˆˆ fd„|D «       «      ¬«      S )Nr   rã   ú.c              3   óB   •K  — | ]  }‰j                  |‰«      –— Œ y ­wr“   ©r§   ©Ú.0Ú_mr©   r}   s     €€r�   ú	<genexpr>z1MapleCodePrinter._print_MatMul.<locals>.<genexpr>ë   s   øè ø€ ÒM¸B˜D×-Ñ-¨b°$×7ÑMùó   ƒz{c}*{m}c              3   óB   •K  — | ]  }‰j                  |‰«      –— Œ y ­wr“   rú   rû   s     €€r�   rþ   z1MapleCodePrinter._print_MatMul.<locals>.<genexpr>í   s   øè ø€ Ò8jÐY[¸×9JÑ9JÈ2Èt×9TÑ8jùrÿ   )r¬   Úm)r   r™   r¯   rò   rô   Ú
MatrixBaseÚ
MatrixExprÚMatrixSliceÚMatrixSymbolr³   rˆ   )r}   r›   Ú
_fact_listÚ_constr©   s   `   @r�   Ú_print_MatMulzMapleCodePrinter._print_MatMulâ   s®   ù€ Ü˜ÓˆÜ˜$Ÿ)™)“_ˆ
ØˆÜ˜* Q™-¬%×*:Ñ*:¼E×<LÑ<LÜ*/×*;Ñ*;¼U×=OÑ=Oð*Qô Rà!+¨A¡°
¸1¸2°�JˆFàˆ>˜V qš[Ø—8‘8ÔMÀ*ÔMÓMÐMà×#Ñ# f°·±Ô8jÐ_iÔ8jÓ0jÐ#ÓkÐkr‚   c                 óŒ   — dj                  | j                  |j                  «      | j                  |j                  «      ¬«      S )NzMatrixPower({A}, {n}))ÚAÚn)rˆ   r˜   r¦   r   rš   s     r�   Ú_print_MatPowzMapleCodePrinter._print_MatPowï   s5   € à&×-Ñ-°·±¸D¿I¹IÓ0FÈ$Ï+É+ÐVZ×V^ÑV^ÓJ_Ð-Ó`Ð`r‚   c                 ó|   ‡ ‡— t        |«      Št        |j                  «      }dj                  ˆˆ fd„|D «       «      S )NÚ*c              3   óB   •K  — | ]  }‰j                  |‰«      –— Œ y ­wr“   rú   rû   s     €€r�   rþ   z:MapleCodePrinter._print_HadamardProduct.<locals>.<genexpr>ö   s   øè ø€ ÒI¸˜×)Ñ)¨"¨d×3ÑIùrÿ   )r   r™   r¯   r³   )r}   r›   r  r©   s   `  @r�   Ú_print_HadamardProductz'MapleCodePrinter._print_HadamardProductó   s/   ù€ Ü˜$ÓˆÜ˜$Ÿ)™)“_ˆ
Ø�x‰xÔI¸jÔIÓIÐIr‚   c                 ó  — |j                   \  }\  }}|dk7  r2dj                  | j                  |«      | j                  |«      ¬«      }n!dj                  | j                  |«      ¬«      }dj                  | j                  |«      |¬«      S )Nrã   z{var}${order})ÚvarÚorderz{var})r  zdiff({func_expr}, {sec_arg}))Ú	func_exprÚsec_arg)r¯   rˆ   r˜   )r}   r›   Ú_fÚ_varÚ_orderÚ_second_args         r�   Ú_print_Derivativez"MapleCodePrinter._print_Derivativeø   s‚   € Ø!ŸY™YÑˆ‰NˆT�6à�QŠ;Ø)×0Ñ0°T·[±[ÀÓ5FØ7;·{±{À6Ó7Jð 1ó L‰Kð "Ÿ.™.¨T¯[©[¸Ó->˜.Ó?ˆKØ-×4Ñ4¸t¿{¹{È2»ÐXcÐ4ÓdÐdr‚   r“   )F)'Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚprintmethodÚlanguageÚ
_operatorsry   r   Ú_default_settingsrx   r†   rŠ   r‘   r•   rœ   rŸ   r£   rª   rµ   r»   rÂ   rÅ   rÇ   rË   rÎ   rÑ   rÓ   rÖ   rß   ré   rí   rï   rö   r  r  r  r  Ú__classcell__)r€   s   @r�   rm   rm   T   sß   ø„ ñð €KØ€Hð ØØñ€Jñ ˜[×:Ñ:ñ ØØ#'ñ?ñ Ðõ
/ò"ò#òNòò'ò'ò9ò
7òAò"4òTò$òòòòò+òóò-ò4ò3òbòlòaòJö
er‚   rm   c                 ó8   — t        |«      j                  | |«      S )aU  Converts ``expr`` to a string of Maple code.

    Parameters
    ==========

    expr : Expr
        A SymPy expression to be converted.
    assign_to : optional
        When given, the argument is used as the name of the variable to which
        the expression is assigned.  Can be a string, ``Symbol``,
        ``MatrixSymbol``, or ``Indexed`` type.  This can be helpful for
        expressions that generate multi-line statements.
    precision : integer, optional
        The precision for numbers such as pi  [default=16].
    user_functions : dict, optional
        A dictionary where keys are ``FunctionClass`` instances and values are
        their string representations.  Alternatively, the dictionary value can
        be a list of tuples i.e. [(argument_test, cfunction_string)].  See
        below for examples.
    human : bool, optional
        If True, the result is a single string that may contain some constant
        declarations for the number symbols.  If False, the same information is
        returned in a tuple of (symbols_to_declare, not_supported_functions,
        code_text).  [default=True].
    contract: bool, optional
        If True, ``Indexed`` instances are assumed to obey tensor contraction
        rules and the corresponding nested loops over indices are generated.
        Setting contract=False will not generate loops, instead the user is
        responsible to provide values for the indices in the code.
        [default=True].
    inline: bool, optional
        If True, we try to create single-statement code instead of multiple
        statements.  [default=True].

    )rm   Údoprint)r›   Ú	assign_tor~   s      r�   Ú
maple_coder'    s   € ôH ˜HÓ%×-Ñ-¨d°IÓ>Ð>r‚   c                 ó.   — t        t        | fi |¤Ž«       y)a&  Prints the Maple representation of the given expression.

    See :func:`maple_code` for the meaning of the optional arguments.

    Examples
    ========

    >>> from sympy import print_maple_code, symbols
    >>> x, y = symbols('x y')
    >>> print_maple_code(x, assign_to=y)
    y := x
    N)Úprintr'  )r›   r~   s     r�   Úprint_maple_coder*  *  s   € ô 
Œ*�TÑ
&˜XÑ
&Õ'r‚   r“   )r  Ú
sympy.corer   Úsympy.core.numbersr   r   r   Úsympy.printing.codeprinterr   Úsympy.printing.precedencer   r	   rô   Ú_known_func_same_namerz   Ú_funcrh   ÚExp1ri   Ú
EulerGammaÚGoldenRatiorÄ   r¾   ÚComplexInfinityÚnot_supported_symbolrm   r'  r*  r„   r‚   r�   ú<module>r6     s»  ðñõ ß EÑ EÝ 2ß <ã ðÐ ð"à	ˆ5ð"ð 
ˆ4ð"ð ˆHð	"ð
 ˆHð"ð ˆHð"ð ˆHð"ð ˆHð"ð ˆHð"ð ˆYð"ð ˆYð"ð ˆYð"ð ˆYð"ð ˆYð"ð ˆYð"ð  ˆvð!"ð" 
ˆEð#"ð$ 
ˆEð%"ð( $Ø#ØØØØØØØØØØØØòC"€ðH #ò #€EØ"€O�EÒð#ð
 ‡D�Dˆ$Ø‡F�FˆHØ‡I�IˆyØ‡L�L�'Ø‡M�MÐ*ð€ð Ø
ñÐ ð ×ÑðÐ ôle�{ô leó^$?óN(r‚   