
    sgYM                         d dl Z d dlZd dlmZ d dlmZ  ed      Zer	d dlmZmZ n G d d      Z G d d	      Z G d
 de      Z	y)    N)import_module)LaTeXParsingErrorlark)TransformerTokenc                       e Zd Zd Zy)r   c                      y N )selfargss     W/var/www/html/venv/lib/python3.12/site-packages/sympy/parsing/latex/lark/transformer.py	transformzTransformer.transform   s        N)__name__
__module____qualname__r   r   r   r   r   r      s    	r   r   c                       e Zd Zy)r   N)r   r   r   r   r   r   r   r      s    r   r   c                   <   e Zd ZdZej
                  Zej                  j                  j                  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 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' Z0d( Z1d) Z2d* Z3d+ Z4d, Z5d- Z6d. Z7d/ Z8d0 Z9d1 Z:d2 Z;d3 Z<d4 Z=d5 Z>d6 Z?d7 Z@d8 ZAd9 ZBd: ZCd; ZDd< ZEd= ZFd> ZGd? ZHd@ ZIdA ZJdB ZKdC ZLdD ZMdE ZNdF ZOdG ZPdH ZQdI ZRdJ ZSdK ZTdL ZUdM ZVdNeWfdOZXyP)QTransformToSymPyExpra   Returns a SymPy expression that is generated by traversing the ``lark.Tree``
    passed to the ``.transform()`` function.

    Notes
    =====

    **This class is never supposed to be used directly.**

    In order to tweak the behavior of this class, it has to be subclassed and then after
    the required modifications are made, the name of the new class should be passed to
    the :py:class:`LarkLaTeXParser` class by using the ``transformer`` argument in the
    constructor.

    Parameters
    ==========

    visit_tokens : bool, optional
        For information about what this option does, see `here
        <https://lark-parser.readthedocs.io/en/latest/visitors.html#lark.visitors.Transformer>`_.

        Note that the option must be set to ``True`` for the default parser to work.
    c                 "    t         j                  S r
   )sympyoor   tokenss     r   	CMD_INFTYzTransformToSymPyExpr.CMD_INFTY1   s    xxr   c                 `    t        j                  dd|dd        }t        j                  |      S )Nvar    )resubr   Symbol)r   r   variable_names      r   GREEK_SYMBOLz!TransformToSymPyExpr.GREEK_SYMBOL4   s+     ub&*5||M**r   c                     |j                   j                  d      \  }}|j                  d      rt        j                  |d|dd d      S t        j                  |d|d      S )N_{_{r    })valuesplit
startswithr   r#   )r   r   symbolr"   s       r   BASIC_SUBSCRIPTED_SYMBOLz-TransformToSymPyExpr.BASIC_SUBSCRIPTED_SYMBOL;   sT    ll((->>#<<VS2Y ?@@<<VS 9::r   c                    |j                   j                  d      \  }}t        j                  dd|dd        }|j	                  d      rt        j                  |d|dd d      S t        j                  |d|d      S )	Nr'   r   r   r    r(   r)   r*   r+   )r,   r-   r!   r"   r.   r   r#   )r   r   greek_letterr"   s       r   GREEK_SUBSCRIPTED_SYMBOLz-TransformToSymPyExpr.GREEK_SUBSCRIPTED_SYMBOLB   sn    "LL..s3cvveRab)9:>>#<<\3q9 EFF<<\3 ?@@r   c                 <   |j                   j                  d      \  }}|j                  d      r7|dd }t        j                  dd|      }t        j                  |d|d      S |d	d  }t        j                  dd|      }t        j                  |d|d      S )
Nr'   r(      r*   r   r   r)   r+   r    )r,   r-   r.   r!   r"   r   r#   )r   r   r/   r"   r2   s        r   SYMBOL_WITH_GREEK_SUBSCRIPTz0TransformToSymPyExpr.SYMBOL_WITH_GREEK_SUBSCRIPTK   s    ll((->>#q9L66%\:L<<V\ BCCqr7L66%\:L<<V\ BCCr   c                 2    t        j                  |d         S Nr5   )r   r#   r   s     r   multi_letter_symbolz(TransformToSymPyExpr.multi_letter_symbolX   s    ||F1I&&r   c                     d|d   v r,t         j                  j                  j                  |d         S t         j                  j                  j	                  |d         S )N.r   )r   corenumbersFloatIntegerr   s     r   numberzTransformToSymPyExpr.number[   sL    &)::%%++F1I66::%%--fQi88r   c                     |d   S Nr   r   r   s     r   latex_stringz!TransformToSymPyExpr.latex_stringa       ayr   c                     |d   S Nr    r   r   s     r   group_round_parenthesesz,TransformToSymPyExpr.group_round_parenthesesd   rD   r   c                     |d   S rF   r   r   s     r   group_square_bracketsz*TransformToSymPyExpr.group_square_bracketsg   rD   r   c                     |d   S rF   r   r   s     r   group_curly_parenthesesz,TransformToSymPyExpr.group_curly_parenthesesj   rD   r   c                 :    t        j                  |d   |d         S Nr   r5   )r   Eqr   s     r   eqzTransformToSymPyExpr.eqm       xxq	6!9--r   c                 :    t        j                  |d   |d         S rM   )r   Ner   s     r   nezTransformToSymPyExpr.nep   rP   r   c                 :    t        j                  |d   |d         S rM   )r   Ltr   s     r   ltzTransformToSymPyExpr.lts   rP   r   c                 :    t        j                  |d   |d         S rM   )r   Ler   s     r   ltezTransformToSymPyExpr.ltev   rP   r   c                 :    t        j                  |d   |d         S rM   )r   Gtr   s     r   gtzTransformToSymPyExpr.gty   rP   r   c                 :    t        j                  |d   |d         S rM   )r   Ger   s     r   gtezTransformToSymPyExpr.gte|   rP   r   c                 :    t        j                  |d   |d         S rM   )r   Addr   s     r   addzTransformToSymPyExpr.add       yyF1I..r   c                     t        |      dk(  r|d    S t        |      dk(  rt        j                  |d   |d          S y )Nr5   r       r   )lenr   ra   r   s     r   r"   zTransformToSymPyExpr.sub   sF    v;!1I:[A99VAY
33 r   c                 :    t        j                  |d   |d         S rM   )r   Mulr   s     r   mulzTransformToSymPyExpr.mul   rc   r   c                 b    t        j                  |d   t        j                  |d   d            S )Nr   r5   r*   r   rh   Powr   s     r   divzTransformToSymPyExpr.div   s&    yyEIIfQi$<==r   c                 ^   ddl m}m} t        |d   |      r$t        |d   |      rddl m}  ||d   |d         S |d   t        j                  d      k(  r
|d   |d   fS t        |d   t              rt        j                  |d   |d   d         S t        j                  |d   |d         S )Nr   )BraKetr    )OuterProductd)
sympy.physics.quantumro   rp   
isinstancerq   r   r#   tuple
Derivativerh   )r   r   ro   rp   rq   s        r   adjacent_expressionsz)TransformToSymPyExpr.adjacent_expressions   s     	3fQi%*VAY*D:q	6!955AY%,,s++!9fQi''q	5)##F1Ivay|<<99VAYq	22r   c                 :    t        j                  |d   |d         S rM   )r   rl   r   s     r   superscriptz TransformToSymPyExpr.superscript   rc   r   c                     |d   }t        |d   t              r|d   \  }}d|fS |d   }t        j                  |t        j                  |d            S )Nr    r5   
derivativer*   )rt   ru   r   rh   rl   )r   r   	numeratorr'   variabledenominators         r   fractionzTransformToSymPyExpr.fraction   sX    1I	fQi' )KAx  )) )K99Y		+r(BCCr   c                 :    t        j                  |d   |d         S )Nr    r5   )r   binomialr   s     r   r   zTransformToSymPyExpr.binomial   s    ~~fQi33r   c                    d }d }d|v r|j                  d      }d|v r|j                  d      }|r||dz      nd }|r||dz      nd }| j                  |      }|t        d      |j                  |      dz   }||   }||t        d      ||t        d      |||dz
  k(  rd}	n|||dz
  k(  rd}	n|dk(  rd}	n||dz
     }	|t        j                  |	|||f      S t        j                  |	|      S )	Nr'   ^r    ztDifferential symbol was not found in the expression.Valid differential symbols are "d", "\text{d}, and "\mathrm{d}".FLower bound for the integral was found, but upper bound was not found.FUpper bound for the integral was found, but lower bound was not found.re   r5   )index_extract_differential_symbolr   r   Integral)
r   r   underscore_indexcaret_indexlower_boundupper_bounddifferential_symboldifferential_variable_indexdifferential_variable	integrands
             r   normal_integralz$TransformToSymPyExpr.normal_integral   sq   &=  &||C0&= !,,s+K6Ff-12D1<f[1_-$"??G&# %n o o '-ll3F&G!&K# &'B C "{':#$lmm"{':#$lmm ',<@[^_@_,_ I$8SVW8W)W I(A- I :Q>?I"
 >>).C[R]-^__ >>)-BCCr   c                 ^    t        |      dk(  rd|d   fS t        |      dk(  r
|d   |d   fS y )Nre   r       r5   )rf   r   s     r   group_curly_parentheses_intz0TransformToSymPyExpr.group_curly_parentheses_int   sB     v;!fQi<[A!9fQi'' r   c                 t    |d   \  }}|d   }t        j                  |t        j                  |d            |fS )Nr    r5   r*   rk   )r   r   r|   r}   r~   s        r   special_fractionz%TransformToSymPyExpr.special_fraction   s<    $Qi	8Qi yyEIIk2$>?IIr   c                 <   d }d }d|v r|j                  d      }d|v r|j                  d      }|r||dz      nd }|r||dz      nd }||t        d      ||t        d      |d   \  }}|t        j                  ||||f      S t        j                  ||      S )Nr'   r   r    r   r   r*   )r   r   r   r   )r   r   r   r   r   r   r   r   s           r   integral_with_special_fractionz3TransformToSymPyExpr.integral_with_special_fraction  s    &=  &||C0&= !,,s+K6Ff-12D1<f[1_-$ "{':#$lmm"{':#$lmm+1":(	("
 >>).C[R]-^__ >>)-BCCr   c                     |j                  d      }|j                  d      }|j                  d|      }|j                  d|      }||dz   | }||dz   d  }|d   }|d   }	|d   }
||	|
fS )Nr'   r   r(   r+   r    r   r*   r   )r   r   r   r   left_brace_indexright_brace_indexbottom_limit	top_limitindex_variablelower_limitupper_limits              r   group_curly_parentheses_specialz4TransformToSymPyExpr.group_curly_parentheses_special*  s    !<<,ll3' "<<-=>"LL.>?.24EF ;?+,	 &a"2&l {K77r   c                 :    t        j                  |d   |d         S Nr5   r    )r   Sumr   s     r   	summationzTransformToSymPyExpr.summationM  rc   r   c                 :    t        j                  |d   |d         S r   )r   Productr   s     r   productzTransformToSymPyExpr.productP  s    }}VAYq	22r   c                     |j                  d      }d|v r|j                  d|      }||dz      }n||dz      }|dk(  r|d   dfS |dk(  r|d   dfS |d   dfS )Nr   r(   r    +r   -+-r   )r   r   r   left_curly_brace_index	directions        r   limit_dir_exprz#TransformToSymPyExpr.limit_dir_exprS  s    ll3'&=%+\\#{%C"59:I{Q/I!9c>!#!9c>!!9d?"r   c                 \    |d   }t        |d   t              r	|d   \  }}n|d   }d}|||fS )Nr    re   r   )rt   ru   r   r   limit_variabledestinationr   s        r   group_curly_parentheses_limz0TransformToSymPyExpr.group_curly_parentheses_limc  sB    fQi'%+AY"K )KI{I55r   c                 J    |d   \  }}}t        j                  |d   |||      S Nr5   r*   )r   Limitr   s        r   limitzTransformToSymPyExpr.limitm  s+    17.Y{{6":~{INNr   c                     |d   S rF   r   r   s     r   differentialz!TransformToSymPyExpr.differentialr  rD   r   c                 :    t        j                  |d   |d         S )Nr*      )r   rv   r   s     r   r{   zTransformToSymPyExpr.derivativeu  s    r
F1I66r   c                 @    t        |      dk(  r|S d }t        ||      S )Nr    c                 Z    t        | t              r| j                  dk7  rt        d      yy)NCOMMAzAA comma token was expected, but some other token was encountered.FT)rt   r   typer   )r   s    r   remove_tokensz?TransformToSymPyExpr.list_of_expressions.<locals>.remove_tokens~  s*    dE*yyG+/0stt r   )rf   filter)r   r   r   s      r   list_of_expressionsz(TransformToSymPyExpr.list_of_expressionsx  s)    v;! M -00r   c                 >     t        j                  |d         |d    S rM   )r   Functionr   s     r   function_appliedz%TransformToSymPyExpr.function_applied  s     (u~~fQi(&)44r   c                 ,    t        j                  |d    S r8   )r   Minr   s     r   minzTransformToSymPyExpr.min      yy&)$$r   c                 ,    t        j                  |d    S r8   )r   Maxr   s     r   maxzTransformToSymPyExpr.max  r   r   c                 $    ddl m}  ||d         S )Nr   )ro   r    )rs   ro   )r   r   ro   s      r   brazTransformToSymPyExpr.bra      -6!9~r   c                 $    ddl m}  ||d         S )Nr   )rp   r    )rs   rp   )r   r   rp   s      r   ketzTransformToSymPyExpr.ket  r   r   c                 L    ddl m}m}m}  | ||d          ||d               S )Nr   )ro   rp   InnerProductr    re   )rs   ro   rp   r   )r   r   ro   rp   r   s        r   inner_productz"TransformToSymPyExpr.inner_product  s%    @@Cq	NCq	N;;r   c                 2    t        j                  |d         S rF   )r   sinr   s     r   r   zTransformToSymPyExpr.sin      yy##r   c                 2    t        j                  |d         S rF   )r   cosr   s     r   r   zTransformToSymPyExpr.cos  r   r   c                 2    t        j                  |d         S rF   )r   tanr   s     r   r   zTransformToSymPyExpr.tan  r   r   c                 2    t        j                  |d         S rF   )r   cscr   s     r   r   zTransformToSymPyExpr.csc  r   r   c                 2    t        j                  |d         S rF   )r   secr   s     r   r   zTransformToSymPyExpr.sec  r   r   c                 2    t        j                  |d         S rF   )r   cotr   s     r   r   zTransformToSymPyExpr.cot  r   r   c                     |d   }|dk(  rt        j                  |d         S t        j                  t        j                  |d         |      S r   )r   asinrl   r   r   r   exponents      r   	sin_powerzTransformToSymPyExpr.sin_power  C    !9r>::fRj))99UYYvbz2H==r   c                     |d   }|dk(  rt        j                  |d         S t        j                  t        j                  |d         |      S r   )r   acosrl   r   r   s      r   	cos_powerzTransformToSymPyExpr.cos_power  r   r   c                     |d   }|dk(  rt        j                  |d         S t        j                  t        j                  |d         |      S r   )r   atanrl   r   r   s      r   	tan_powerzTransformToSymPyExpr.tan_power  r   r   c                     |d   }|dk(  rt        j                  |d         S t        j                  t        j                  |d         |      S r   )r   acscrl   r   r   s      r   	csc_powerzTransformToSymPyExpr.csc_power  r   r   c                     |d   }|dk(  rt        j                  |d         S t        j                  t        j                  |d         |      S r   )r   asecrl   r   r   s      r   	sec_powerzTransformToSymPyExpr.sec_power  r   r   c                     |d   }|dk(  rt        j                  |d         S t        j                  t        j                  |d         |      S r   )r   acotrl   r   r   s      r   	cot_powerzTransformToSymPyExpr.cot_power  r   r   c                 2    t        j                  |d         S rF   )r   r   r   s     r   arcsinzTransformToSymPyExpr.arcsin      zz&)$$r   c                 2    t        j                  |d         S rF   )r   r   r   s     r   arccoszTransformToSymPyExpr.arccos  r   r   c                 2    t        j                  |d         S rF   )r   r   r   s     r   arctanzTransformToSymPyExpr.arctan  r   r   c                 2    t        j                  |d         S rF   )r   r   r   s     r   arccsczTransformToSymPyExpr.arccsc  r   r   c                 2    t        j                  |d         S rF   )r   r   r   s     r   arcseczTransformToSymPyExpr.arcsec  r   r   c                 2    t        j                  |d         S rF   )r   r   r   s     r   arccotzTransformToSymPyExpr.arccot  r   r   c                 2    t        j                  |d         S rF   )r   sinhr   s     r   r  zTransformToSymPyExpr.sinh  r   r   c                 2    t        j                  |d         S rF   )r   coshr   s     r   r	  zTransformToSymPyExpr.cosh  r   r   c                 2    t        j                  |d         S rF   )r   tanhr   s     r   r  zTransformToSymPyExpr.tanh  r   r   c                 2    t        j                  |d         S rF   )r   asinhr   s     r   r  zTransformToSymPyExpr.asinh      {{6!9%%r   c                 2    t        j                  |d         S rF   )r   acoshr   s     r   r  zTransformToSymPyExpr.acosh  r  r   c                 2    t        j                  |d         S rF   )r   atanhr   s     r   r  zTransformToSymPyExpr.atanh  r  r   c                 2    t        j                  |d         S rF   )r   Absr   s     r   abszTransformToSymPyExpr.abs  r   r   c                 2    t        j                  |d         S rF   )r   floorr   s     r   r  zTransformToSymPyExpr.floor   r  r   c                 2    t        j                  |d         S rF   )r   ceilingr   s     r   ceilzTransformToSymPyExpr.ceil  s    }}VAY''r   c                 2    t        j                  |d         S rB   )r   	factorialr   s     r   r  zTransformToSymPyExpr.factorial      vay))r   c                 2    t        j                  |d         S rF   )r   	conjugater   s     r   r  zTransformToSymPyExpr.conjugate	  r  r   c                     t        |      dk(  rt        j                  |d         S t        |      dk(  rt        j                  |d   |d         S y )Nr5   r    re   )rf   r   sqrtrootr   s     r   square_rootz TransformToSymPyExpr.square_root  sK    v;!::fQi(([A::fQi33 r   c                 2    t        j                  |d         S rF   )r   expr   s     r   exponentialz TransformToSymPyExpr.exponential  r   r   c                 B   |d   j                   dk(  rt        j                  |d   d      S |d   j                   dk(  rt        j                  |d         S |d   j                   dk(  r8d|v rt        j                  |d   |d	         S t        j                  |d         S y )
Nr   FUNC_LGr    
   FUNC_LNFUNC_LOGr'   re   r5   )r   r   logr   s     r   r,  zTransformToSymPyExpr.log  s    !9>>Y& 99VAY++AY^^y(99VAY''AY^^z)f}yyF1I66 yy++ *r   sc                 :    h d}t        fd|D        d       }|S )N>   \text{d}
\mathrm{d}rr   c              3   ,   K   | ]  }|v s|  y wr
   r   ).0r/   r-  s     r   	<genexpr>zDTransformToSymPyExpr._extract_differential_symbol.<locals>.<genexpr>+  s     #]vQW[\Q\F#]s   	)next)r   r-  differential_symbolsr   s    `  r   r   z1TransformToSymPyExpr._extract_differential_symbol(  s$    @"#]9M#]_cd""r   N)Yr   r   r   __doc__r   r#   SYMBOLr<   r=   r?   DIGITr   r%   r0   r3   r6   r9   r@   rC   rG   rI   rK   rO   rS   rV   rY   r\   r_   rb   r"   ri   rm   rw   ry   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   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,  strr   r   r   r   r   r      s   . \\FJJ&&E+;AD'9....../4/>3 /
D4ADF(J%DN!8F/3# 6O
71 5%%<$$$$$$>>>>>>%%%%%%%%%&&&$&(**4$,"#c #r   r   )
r!   r   sympy.externalr   sympy.parsing.latex.errorsr   r   r   r   r   r   r   r   <module>r<     sF    	  ( 8V'' 
 
W#; W#r   