o
    gYM                     @   sv   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 dZG dd	 d	ZG d
d deZ	dS )    N)import_module)LaTeXParsingErrorlark)TransformerTokenc                   @   s   e Zd Zdd ZdS )r   c                 G   s   d S N )selfargsr   r   [/var/www/visachat/venv/lib/python3.10/site-packages/sympy/parsing/latex/lark/transformer.py	transform   s   zTransformer.transformN)__name__
__module____qualname__r   r   r   r   r   r      s    r   c                   @   s   e Zd ZdS )r   N)r   r   r   r   r   r   r   r      s    r   c                   @   s  e Zd ZdZejZejjj	Z
dd Zdd Zdd Zdd	 Zd
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Z d.d/ Z!d0d1 Z"d2d3 Z#d4d5 Z$d6d7 Z%d8d9 Z&d:d; Z'd<d= Z(d>d? Z)d@dA Z*dBdC Z+dDdE Z,dFdG Z-dHdI Z.dJdK Z/dLdM Z0dNdO Z1dPdQ Z2dRdS Z3dTdU Z4dVdW Z5dXdY Z6dZd[ Z7d\d] Z8d^d_ Z9d`da Z:dbdc Z;ddde Z<dfdg Z=dhdi Z>djdk Z?dldm Z@dndo ZAdpdq ZBdrds ZCdtdu ZDdvdw ZEdxdy ZFdzd{ ZGd|d} ZHd~d ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdeWfddZXdS )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                 C   s   t jS r   )sympyoor	   tokensr   r   r   	CMD_INFTY1   s   zTransformToSymPyExpr.CMD_INFTYc                 C   s    t dd|dd  }t|S )Nvar    )resubr   Symbol)r	   r   variable_namer   r   r   GREEK_SYMBOL4   s   
z!TransformToSymPyExpr.GREEK_SYMBOLc                 C   sF   |j d\}}|drtd||dd f S td||f S )N_{%s_{%s}r   )valuesplit
startswithr   r   )r	   r   symbolr   r   r   r   BASIC_SUBSCRIPTED_SYMBOL;   s   
z-TransformToSymPyExpr.BASIC_SUBSCRIPTED_SYMBOLc                 C   s\   |j d\}}tdd|dd  }|dr%td||dd f S td||f S )Nr   r   r   r   r   r    r!   )r"   r#   r   r   r$   r   r   )r	   r   greek_letterr   r   r   r   GREEK_SUBSCRIPTED_SYMBOLB   s
   
z-TransformToSymPyExpr.GREEK_SUBSCRIPTED_SYMBOLc                 C   sr   |j d\}}|dr#|dd }tdd|}td||f S |dd  }tdd|}td||f S )	Nr   r      r!   r   r   r    r   )r"   r#   r$   r   r   r   r   )r	   r   r%   r   r'   r   r   r   SYMBOL_WITH_GREEK_SUBSCRIPTK   s   
z0TransformToSymPyExpr.SYMBOL_WITH_GREEK_SUBSCRIPTc                 C      t |d S Nr)   )r   r   r   r   r   r   multi_letter_symbolX      z(TransformToSymPyExpr.multi_letter_symbolc                 C   s0   d|d v rt jj|d S t jj|d S )N.r   )r   corenumbersFloatIntegerr   r   r   r   number[   s   zTransformToSymPyExpr.numberc                 C      |d S Nr   r   r   r   r   r   latex_stringa      z!TransformToSymPyExpr.latex_stringc                 C   r5   Nr   r   r   r   r   r   group_round_parenthesesd   r8   z,TransformToSymPyExpr.group_round_parenthesesc                 C   r5   r9   r   r   r   r   r   group_square_bracketsg   r8   z*TransformToSymPyExpr.group_square_bracketsc                 C   r5   r9   r   r   r   r   r   group_curly_parenthesesj   r8   z,TransformToSymPyExpr.group_curly_parenthesesc                 C      t |d |d S Nr   r)   )r   Eqr   r   r   r   eqm      zTransformToSymPyExpr.eqc                 C   r=   r>   )r   Ner   r   r   r   nep   rA   zTransformToSymPyExpr.nec                 C   r=   r>   )r   Ltr   r   r   r   lts   rA   zTransformToSymPyExpr.ltc                 C   r=   r>   )r   Ler   r   r   r   ltev   rA   zTransformToSymPyExpr.ltec                 C   r=   r>   )r   Gtr   r   r   r   gty   rA   zTransformToSymPyExpr.gtc                 C   r=   r>   )r   Ger   r   r   r   gte|   rA   zTransformToSymPyExpr.gtec                 C   r=   r>   )r   Addr   r   r   r   add   rA   zTransformToSymPyExpr.addc                 C   s<   t |dkr|d  S t |dkrt|d |d  S d S )Nr)   r      r   )lenr   rL   r   r   r   r   r      s
   
zTransformToSymPyExpr.subc                 C   r=   r>   )r   Mulr   r   r   r   mul   rA   zTransformToSymPyExpr.mulc                 C   s   t |d t |d dS )Nr   r)   r!   r   rP   Powr   r   r   r   div   s   zTransformToSymPyExpr.divc                 C   s   ddl m}m} t|d |r%t|d |r%ddl m} ||d |d S |d tdkr6|d |d fS t|d trIt|d |d d S t	|d |d S )Nr   )BraKetr   )OuterProductd)
sympy.physics.quantumrU   rV   
isinstancerW   r   r   tuple
DerivativerP   )r	   r   rU   rV   rW   r   r   r   adjacent_expressions   s   z)TransformToSymPyExpr.adjacent_expressionsc                 C   r=   r>   )r   rS   r   r   r   r   superscript   rA   z TransformToSymPyExpr.superscriptc                 C   sF   |d }t |d tr|d \}}d|fS |d }t|t|dS )Nr   r)   
derivativer!   )rZ   r[   r   rP   rS   )r	   r   	numeratorr   variabledenominatorr   r   r   fraction   s   zTransformToSymPyExpr.fractionc                 C   r=   )Nr   r)   )r   binomialr   r   r   r   rd      rA   zTransformToSymPyExpr.binomialc           
      C   s(  d }d }d|v r| d}d|v r| d}|r||d  nd }|r(||d  nd }| |}|d u r7td| |d }|| }|d urN|d u rNtd|d urZ|d u rZtd|d urg||d krgd}	n|d urt||d krtd}	n|dkr{d}	n||d  }	|d urt|	|||fS t|	|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.rN   r)   )index_extract_differential_symbolr   r   Integral)
r	   r   underscore_indexcaret_indexlower_boundupper_bounddifferential_symboldifferential_variable_indexdifferential_variable	integrandr   r   r   normal_integral   s6   


z$TransformToSymPyExpr.normal_integralc                 C   s8   t |dkrd|d fS t |dkr|d |d fS d S )NrN   r      r)   )rO   r   r   r   r   group_curly_parentheses_int   s
   z0TransformToSymPyExpr.group_curly_parentheses_intc                 C   s,   |d \}}|d }t |t |d|fS )Nr   r)   r!   rR   )r	   r   r`   ra   rb   r   r   r   special_fraction   s   z%TransformToSymPyExpr.special_fractionc                 C   s   d }d }d|v r| d}d|v r| d}|r||d  nd }|r(||d  nd }|d ur6|d u r6td|d urB|d u rBtd|d \}}|d urUt||||fS t||S )Nr   re   r   rf   rg   r!   )rh   r   r   rj   )r	   r   rk   rl   rm   rn   rr   rq   r   r   r   integral_with_special_fraction  s    

z3TransformToSymPyExpr.integral_with_special_fractionc                 C   sn   | d}| d}| d|}| d|}||d | }||d d  }|d }|d }	|d }
||	|
fS )Nr   re   r   }r   r   r!   rh   )r	   r   rk   rl   left_brace_indexright_brace_indexbottom_limit	top_limitindex_variablelower_limitupper_limitr   r   r   group_curly_parentheses_special*  s   


z4TransformToSymPyExpr.group_curly_parentheses_specialc                 C   r=   Nr)   r   )r   Sumr   r   r   r   	summationM  rA   zTransformToSymPyExpr.summationc                 C   r=   r   )r   Productr   r   r   r   productP  rA   zTransformToSymPyExpr.productc                 C   sl   | d}d|v r| d|}||d  }n||d  }|dkr&|d dfS |dkr0|d dfS |d dfS )Nre   r   r   +r   -+-ry   )r	   r   rl   left_curly_brace_index	directionr   r   r   limit_dir_exprS  s   
z#TransformToSymPyExpr.limit_dir_exprc                 C   s:   |d }t |d tr|d \}}n|d }d}|||fS )Nr   rN   r   )rZ   r[   r	   r   limit_variabledestinationr   r   r   r   group_curly_parentheses_limc  s   
z0TransformToSymPyExpr.group_curly_parentheses_limc                 C   s"   |d \}}}t |d |||S Nr)   r!   )r   Limitr   r   r   r   limitm  s   zTransformToSymPyExpr.limitc                 C   r5   r9   r   r   r   r   r   differentialr  r8   z!TransformToSymPyExpr.differentialc                 C   r=   )Nr!      )r   r\   r   r   r   r   r_   u  rA   zTransformToSymPyExpr.derivativec                 C   s"   t |dkr|S dd }t||S )Nr   c                 S   s$   t | tr| jdkrtddS dS )NCOMMAzAA comma token was expected, but some other token was encountered.FT)rZ   r   typer   )r
   r   r   r   remove_tokens~  s
   

z?TransformToSymPyExpr.list_of_expressions.<locals>.remove_tokens)rO   filter)r	   r   r   r   r   r   list_of_expressionsx  s   
z(TransformToSymPyExpr.list_of_expressionsc                 C   s   t |d |d  S r>   )r   Functionr   r   r   r   function_applied  s   z%TransformToSymPyExpr.function_appliedc                 C      t j|d  S r,   )r   Minr   r   r   r   min  r.   zTransformToSymPyExpr.minc                 C   r   r,   )r   Maxr   r   r   r   max  r.   zTransformToSymPyExpr.maxc                 C      ddl m} ||d S )Nr   )rU   r   )rY   rU   )r	   r   rU   r   r   r   bra     zTransformToSymPyExpr.brac                 C   r   )Nr   )rV   r   )rY   rV   )r	   r   rV   r   r   r   ket  r   zTransformToSymPyExpr.ketc                 C   s.   ddl m}m}m} |||d ||d S )Nr   )rU   rV   InnerProductr   rN   )rY   rU   rV   r   )r	   r   rU   rV   r   r   r   r   inner_product  s   z"TransformToSymPyExpr.inner_productc                 C   r+   r9   )r   sinr   r   r   r   r     r.   zTransformToSymPyExpr.sinc                 C   r+   r9   )r   cosr   r   r   r   r     r.   zTransformToSymPyExpr.cosc                 C   r+   r9   )r   tanr   r   r   r   r     r.   zTransformToSymPyExpr.tanc                 C   r+   r9   )r   cscr   r   r   r   r     r.   zTransformToSymPyExpr.cscc                 C   r+   r9   )r   secr   r   r   r   r     r.   zTransformToSymPyExpr.secc                 C   r+   r9   )r   cotr   r   r   r   r     r.   zTransformToSymPyExpr.cotc                 C   4   |d }|dkrt |d S t t |d |S r   )r   asinrS   r   r	   r   exponentr   r   r   	sin_power     zTransformToSymPyExpr.sin_powerc                 C   r   r   )r   acosrS   r   r   r   r   r   	cos_power  r   zTransformToSymPyExpr.cos_powerc                 C   r   r   )r   atanrS   r   r   r   r   r   	tan_power  r   zTransformToSymPyExpr.tan_powerc                 C   r   r   )r   acscrS   r   r   r   r   r   	csc_power  r   zTransformToSymPyExpr.csc_powerc                 C   r   r   )r   asecrS   r   r   r   r   r   	sec_power  r   zTransformToSymPyExpr.sec_powerc                 C   r   r   )r   acotrS   r   r   r   r   r   	cot_power  r   zTransformToSymPyExpr.cot_powerc                 C   r+   r9   )r   r   r   r   r   r   arcsin  r.   zTransformToSymPyExpr.arcsinc                 C   r+   r9   )r   r   r   r   r   r   arccos  r.   zTransformToSymPyExpr.arccosc                 C   r+   r9   )r   r   r   r   r   r   arctan  r.   zTransformToSymPyExpr.arctanc                 C   r+   r9   )r   r   r   r   r   r   arccsc  r.   zTransformToSymPyExpr.arccscc                 C   r+   r9   )r   r   r   r   r   r   arcsec  r.   zTransformToSymPyExpr.arcsecc                 C   r+   r9   )r   r   r   r   r   r   arccot  r.   zTransformToSymPyExpr.arccotc                 C   r+   r9   )r   sinhr   r   r   r   r     r.   zTransformToSymPyExpr.sinhc                 C   r+   r9   )r   coshr   r   r   r   r     r.   zTransformToSymPyExpr.coshc                 C   r+   r9   )r   tanhr   r   r   r   r     r.   zTransformToSymPyExpr.tanhc                 C   r+   r9   )r   asinhr   r   r   r   r     r.   zTransformToSymPyExpr.asinhc                 C   r+   r9   )r   acoshr   r   r   r   r     r.   zTransformToSymPyExpr.acoshc                 C   r+   r9   )r   atanhr   r   r   r   r     r.   zTransformToSymPyExpr.atanhc                 C   r+   r9   )r   Absr   r   r   r   abs  r.   zTransformToSymPyExpr.absc                 C   r+   r9   )r   floorr   r   r   r   r      r.   zTransformToSymPyExpr.floorc                 C   r+   r9   )r   ceilingr   r   r   r   ceil  r.   zTransformToSymPyExpr.ceilc                 C   r+   r6   )r   	factorialr   r   r   r   r     r.   zTransformToSymPyExpr.factorialc                 C   r+   r9   )r   	conjugater   r   r   r   r   	  r.   zTransformToSymPyExpr.conjugatec                 C   s>   t |dkrt|d S t |dkrt|d |d S d S )Nr)   r   rN   )rO   r   sqrtrootr   r   r   r   square_root  s
   z TransformToSymPyExpr.square_rootc                 C   r+   r9   )r   expr   r   r   r   exponential  r.   z TransformToSymPyExpr.exponentialc                 C   sv   |d j dkrt|d dS |d j dkrt|d S |d j dkr9d|v r2t|d |d	 S t|d S d S )
Nr   FUNC_LGr   
   FUNC_LNFUNC_LOGr   rN   r)   )r   r   logr   r   r   r   r     s   zTransformToSymPyExpr.logsc                    s$   h d}t  fdd|D d }|S )N>   \text{d}
\mathrm{d}rX   c                 3   s    | ]	}| v r|V  qd S r   r   ).0r%   r   r   r   	<genexpr>+  s    zDTransformToSymPyExpr._extract_differential_symbol.<locals>.<genexpr>)next)r	   r   differential_symbolsro   r   r   r   ri   (  s   z1TransformToSymPyExpr._extract_differential_symbolN)Yr   r   r   __doc__r   r   SYMBOLr0   r1   r3   DIGITr   r   r&   r(   r*   r-   r4   r7   r:   r;   r<   r@   rC   rE   rG   rI   rK   rM   r   rQ   rT   r]   r^   rc   rd   rs   ru   rv   rw   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   strri   r   r   r   r   r      s    
	C	'#
r   )
r   r   sympy.externalr   sympy.parsing.latex.errorsr   r   r   r   r   r   r   r   r   <module>   s    