U
    L?hYM  ã                   @   sv   d dl Z d dlZd dlmZ d dlmZ edƒZerFd 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   úV/var/www/html/venv/lib/python3.8/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„ ZId€d„ ZJd‚dƒ„ ZKd„d…„ ZLd†d‡„ ZMdˆd‰„ ZNdŠd‹„ ZOdŒd„ ZPdŽd„ ZQdd‘„ ZRd’d“„ ZSd”d•„ ZTd–d—„ ZUd˜d™„ ZVeWdšœd›dœ„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   )ÚsympyZ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   Zvariable_namer   r   r   ÚGREEK_SYMBOL4   s    z!TransformToSymPyExpr.GREEK_SYMBOLc                 C   sJ   |j  d¡\}}| d¡r4t d||dd… f ¡S t d||f ¡S d 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¡rJt d||dd… f ¡S t d||f ¡S d 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   sv   |j  d¡\}}| d¡rF|dd… }t dd|¡}t d||f ¡S |dd … }t dd|¡}t d||f ¡S d 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   s   t  |d ¡S ©Nr'   )r   r   r   r   r   r   Úmulti_letter_symbolX   s    z(TransformToSymPyExpr.multi_letter_symbolc                 C   s4   d|d krt jj |d ¡S t jj |d ¡S d S )NÚ.r   )r   ÚcoreÚnumbersÚFloatÚIntegerr   r   r   r   Únumber[   s    zTransformToSymPyExpr.numberc                 C   s   |d S ©Nr   r   r   r   r   r   Úlatex_stringa   s    z!TransformToSymPyExpr.latex_stringc                 C   s   |d S ©Nr   r   r   r   r   r   Úgroup_round_parenthesesd   s    z,TransformToSymPyExpr.group_round_parenthesesc                 C   s   |d S r3   r   r   r   r   r   Úgroup_square_bracketsg   s    z*TransformToSymPyExpr.group_square_bracketsc                 C   s   |d S r3   r   r   r   r   r   Úgroup_curly_parenthesesj   s    z,TransformToSymPyExpr.group_curly_parenthesesc                 C   s   t  |d |d ¡S ©Nr   r'   )r   ÚEqr   r   r   r   Úeqm   s    zTransformToSymPyExpr.eqc                 C   s   t  |d |d ¡S r7   )r   ZNer   r   r   r   Únep   s    zTransformToSymPyExpr.nec                 C   s   t  |d |d ¡S r7   )r   ÚLtr   r   r   r   Últs   s    zTransformToSymPyExpr.ltc                 C   s   t  |d |d ¡S r7   )r   ZLer   r   r   r   Últev   s    zTransformToSymPyExpr.ltec                 C   s   t  |d |d ¡S r7   )r   ÚGtr   r   r   r   Úgty   s    zTransformToSymPyExpr.gtc                 C   s   t  |d |d ¡S r7   )r   ZGer   r   r   r   Úgte|   s    zTransformToSymPyExpr.gtec                 C   s   t  |d |d ¡S r7   )r   ÚAddr   r   r   r   Úadd   s    zTransformToSymPyExpr.addc                 C   s<   t |ƒdkr|d  S t |ƒdkr8t |d |d  ¡S d S )Nr'   r   é   r   )Úlenr   rA   r   r   r   r   r   ‚   s    
zTransformToSymPyExpr.subc                 C   s   t  |d |d ¡S r7   )r   ÚMulr   r   r   r   Úmulˆ   s    zTransformToSymPyExpr.mulc                 C   s   t  |d t  |d d¡¡S )Nr   r'   r   ©r   rE   ÚPowr   r   r   r   Údiv‹   s    zTransformToSymPyExpr.divc                 C   sª   ddl m}m} t|d |ƒrJt|d |ƒrJddl m} ||d |d ƒS |d t d¡krl|d |d fS t|d tƒr’t |d |d d ¡S t 	|d |d ¡S d S )Nr   )ÚBraÚKetr   )ÚOuterProductÚd)
Úsympy.physics.quantumrJ   rK   Ú
isinstancerL   r   r   ÚtupleÚ
DerivativerE   )r	   r   rJ   rK   rL   r   r   r   Úadjacent_expressionsŽ   s    z)TransformToSymPyExpr.adjacent_expressionsc                 C   s   t  |d |d ¡S r7   )r   rH   r   r   r   r   Úsuperscriptž   s    z TransformToSymPyExpr.superscriptc                 C   sJ   |d }t |d tƒr*|d \}}d|fS |d }t |t |d¡¡S d S )Nr   r'   Ú
derivativer   )rO   rP   r   rE   rH   )r	   r   Ú	numeratorr   ÚvariableÚdenominatorr   r   r   Úfraction¡   s    zTransformToSymPyExpr.fractionc                 C   s   t  |d |d ¡S )Nr   r'   )r   Úbinomialr   r   r   r   rY   ­   s    zTransformToSymPyExpr.binomialc           
      C   s.  d }d }d|kr|  d¡}d|kr,|  d¡}|r<||d  nd }|rP||d  nd }|  |¡}|d krntdƒ‚|  |¡d }|| }|d k	rœ|d krœtdƒ‚|d k	r´|d kr´tdƒ‚|d k	rÎ||d krÎd}	n4|d k	rè||d krèd}	n|dkröd}	n||d  }	|d k	rt |	|||f¡S t |	|¡S d 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.rC   r'   )ÚindexÚ_extract_differential_symbolr   r   ÚIntegral)
r	   r   Úunderscore_indexÚcaret_indexÚlower_boundÚupper_boundÚdifferential_symbolZ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r4|d |d fS d S )NrC   r   é   r'   )rD   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   rG   )r	   r   rU   rV   rW   r   r   r   Úspecial_fractionü   s    z%TransformToSymPyExpr.special_fractionc                 C   sº   d }d }d|kr|  d¡}d|kr,|  d¡}|r<||d  nd }|rP||d  nd }|d k	rl|d krltdƒ‚|d k	r„|d kr„tdƒ‚|d \}}|d k	rªt ||||f¡S t ||¡S d S )Nr   rZ   r   r[   r\   r   )r]   r   r   r_   )r	   r   r`   ra   rb   rc   rf   re   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   rZ   r   Ú}r   r   r   ©r]   )r	   r   r`   ra   Zleft_brace_indexZright_brace_indexZbottom_limitZ	top_limitZindex_variableZlower_limitZupper_limitr   r   r   Úgroup_curly_parentheses_special*  s    

z4TransformToSymPyExpr.group_curly_parentheses_specialc                 C   s   t  |d |d ¡S ©Nr'   r   )r   ZSumr   r   r   r   Ú	summationM  s    zTransformToSymPyExpr.summationc                 C   s   t  |d |d ¡S ro   )r   ZProductr   r   r   r   ÚproductP  s    zTransformToSymPyExpr.productc                 C   sp   |  d¡}d|kr,|  d|¡}||d  }n||d  }|dkrL|d dfS |dkr`|d dfS |d dfS d S )NrZ   r   r   ú+r   ú-ú+-rm   )r	   r   ra   Z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   rC   rt   )rO   rP   ©r	   r   Zlimit_variableZdestinationru   r   r   r   Úgroup_curly_parentheses_limc  s    z0TransformToSymPyExpr.group_curly_parentheses_limc                 C   s"   |d \}}}t  |d |||¡S ©Nr'   r   )r   ZLimitrw   r   r   r   Úlimitm  s    zTransformToSymPyExpr.limitc                 C   s   |d S r3   r   r   r   r   r   Údifferentialr  s    z!TransformToSymPyExpr.differentialc                 C   s   t  |d |d ¡S )Nr   é   )r   rQ   r   r   r   r   rT   u  s    zTransformToSymPyExpr.derivativec                 C   s&   t |ƒdkr|S dd„ }t||ƒS d 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)rO   r   Útyper   )r
   r   r   r   Úremove_tokens~  s
    

z?TransformToSymPyExpr.list_of_expressions.<locals>.remove_tokens)rD   Úfilter)r	   r   r   r   r   r   Úlist_of_expressionsx  s    z(TransformToSymPyExpr.list_of_expressionsc                 C   s   t  |d ¡|d Ž S r7   )r   ÚFunctionr   r   r   r   Úfunction_appliedˆ  s    z%TransformToSymPyExpr.function_appliedc                 C   s   t j|d Ž S r)   )r   ZMinr   r   r   r   Úmin‹  s    zTransformToSymPyExpr.minc                 C   s   t j|d Ž S r)   )r   ZMaxr   r   r   r   ÚmaxŽ  s    zTransformToSymPyExpr.maxc                 C   s   ddl m} ||d ƒS )Nr   )rJ   r   )rN   rJ   )r	   r   rJ   r   r   r   Úbra‘  s    zTransformToSymPyExpr.brac                 C   s   ddl m} ||d ƒS )Nr   )rK   r   )rN   rK   )r	   r   rK   r   r   r   Úket•  s    zTransformToSymPyExpr.ketc                 C   s.   ddl m}m}m} |||d ƒ||d ƒƒS )Nr   )rJ   rK   ÚInnerProductr   rC   )rN   rJ   rK   rˆ   )r	   r   rJ   rK   rˆ   r   r   r   Úinner_product™  s    z"TransformToSymPyExpr.inner_productc                 C   s   t  |d ¡S r3   )r   Úsinr   r   r   r   rŠ     s    zTransformToSymPyExpr.sinc                 C   s   t  |d ¡S r3   )r   Úcosr   r   r   r   r‹      s    zTransformToSymPyExpr.cosc                 C   s   t  |d ¡S r3   )r   Útanr   r   r   r   rŒ   £  s    zTransformToSymPyExpr.tanc                 C   s   t  |d ¡S r3   )r   Úcscr   r   r   r   r   ¦  s    zTransformToSymPyExpr.cscc                 C   s   t  |d ¡S r3   )r   Úsecr   r   r   r   rŽ   ©  s    zTransformToSymPyExpr.secc                 C   s   t  |d ¡S r3   )r   Úcotr   r   r   r   r   ¬  s    zTransformToSymPyExpr.cotc                 C   s8   |d }|dkrt  |d ¡S t  t  |d ¡|¡S d S ry   )r   ÚasinrH   rŠ   ©r	   r   Úexponentr   r   r   Ú	sin_power¯  s    zTransformToSymPyExpr.sin_powerc                 C   s8   |d }|dkrt  |d ¡S t  t  |d ¡|¡S d S ry   )r   ÚacosrH   r‹   r‘   r   r   r   Ú	cos_power¶  s    zTransformToSymPyExpr.cos_powerc                 C   s8   |d }|dkrt  |d ¡S t  t  |d ¡|¡S d S ry   )r   ÚatanrH   rŒ   r‘   r   r   r   Ú	tan_power½  s    zTransformToSymPyExpr.tan_powerc                 C   s8   |d }|dkrt  |d ¡S t  t  |d ¡|¡S d S ry   )r   ÚacscrH   r   r‘   r   r   r   Ú	csc_powerÄ  s    zTransformToSymPyExpr.csc_powerc                 C   s8   |d }|dkrt  |d ¡S t  t  |d ¡|¡S d S ry   )r   ÚasecrH   rŽ   r‘   r   r   r   Ú	sec_powerË  s    zTransformToSymPyExpr.sec_powerc                 C   s8   |d }|dkrt  |d ¡S t  t  |d ¡|¡S d S ry   )r   ÚacotrH   r   r‘   r   r   r   Ú	cot_powerÒ  s    zTransformToSymPyExpr.cot_powerc                 C   s   t  |d ¡S r3   )r   r   r   r   r   r   ÚarcsinÙ  s    zTransformToSymPyExpr.arcsinc                 C   s   t  |d ¡S r3   )r   r”   r   r   r   r   ÚarccosÜ  s    zTransformToSymPyExpr.arccosc                 C   s   t  |d ¡S r3   )r   r–   r   r   r   r   Úarctanß  s    zTransformToSymPyExpr.arctanc                 C   s   t  |d ¡S r3   )r   r˜   r   r   r   r   Úarccscâ  s    zTransformToSymPyExpr.arccscc                 C   s   t  |d ¡S r3   )r   rš   r   r   r   r   Úarcsecå  s    zTransformToSymPyExpr.arcsecc                 C   s   t  |d ¡S r3   )r   rœ   r   r   r   r   Úarccotè  s    zTransformToSymPyExpr.arccotc                 C   s   t  |d ¡S r3   )r   Úsinhr   r   r   r   r¤   ë  s    zTransformToSymPyExpr.sinhc                 C   s   t  |d ¡S r3   )r   Úcoshr   r   r   r   r¥   î  s    zTransformToSymPyExpr.coshc                 C   s   t  |d ¡S r3   )r   Útanhr   r   r   r   r¦   ñ  s    zTransformToSymPyExpr.tanhc                 C   s   t  |d ¡S r3   )r   Úasinhr   r   r   r   r§   ô  s    zTransformToSymPyExpr.asinhc                 C   s   t  |d ¡S r3   )r   Úacoshr   r   r   r   r¨   ÷  s    zTransformToSymPyExpr.acoshc                 C   s   t  |d ¡S r3   )r   Úatanhr   r   r   r   r©   ú  s    zTransformToSymPyExpr.atanhc                 C   s   t  |d ¡S r3   )r   ZAbsr   r   r   r   Úabsý  s    zTransformToSymPyExpr.absc                 C   s   t  |d ¡S r3   )r   Úfloorr   r   r   r   r«      s    zTransformToSymPyExpr.floorc                 C   s   t  |d ¡S r3   )r   Zceilingr   r   r   r   Úceil  s    zTransformToSymPyExpr.ceilc                 C   s   t  |d ¡S r1   )r   Ú	factorialr   r   r   r   r­     s    zTransformToSymPyExpr.factorialc                 C   s   t  |d ¡S r3   )r   Ú	conjugater   r   r   r   r®   	  s    zTransformToSymPyExpr.conjugatec                 C   s>   t |ƒdkrt |d ¡S t |ƒdkr:t |d |d ¡S d S )Nr'   r   rC   )rD   r   ÚsqrtÚrootr   r   r   r   Úsquare_root  s    z TransformToSymPyExpr.square_rootc                 C   s   t  |d ¡S r3   )r   Úexpr   r   r   r   Úexponential  s    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rrd|krdt |d |d	 ¡S t |d ¡S d S )
Nr   ZFUNC_LGr   é
   ZFUNC_LNZFUNC_LOGr   rC   r'   )r~   r   Úlogr   r   r   r   rµ     s    zTransformToSymPyExpr.log©Úsc                    s&   dddh}t ‡ fdd„|D ƒd ƒ}|S )NrM   z\text{d}z
\mathrm{d}c                 3   s   | ]}|ˆ kr|V  qd S r   r   )Ú.0r#   r¶   r   r   Ú	<genexpr>+  s      zDTransformToSymPyExpr._extract_differential_symbol.<locals>.<genexpr>)Únext)r	   r·   Zdifferential_symbolsrd   r   r¶   r   r^   (  s    
z1TransformToSymPyExpr._extract_differential_symbolN)Yr   r   r   Ú__doc__r   r   ZSYMBOLr,   r-   r/   ZDIGITr   r   r$   r&   r(   r*   r0   r2   r4   r5   r6   r9   r:   r<   r=   r?   r@   rB   r   rF   rI   rR   rS   rX   rY   rg   ri   rj   rk   rn   rp   rq   rv   rx   rz   r{   rT   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    
	C	'#
r   )
r   r   Zsympy.externalr   Zsympy.parsing.latex.errorsr   r   r   r   r   r   r   r   r   Ú<module>   s   