a
    kº”hšd  ã                   @   sˆ   d dl Z d dlZd dlmZ d dlmZ edƒZerJd dlmZmZm	Z	 n*G dd„ dƒZG dd	„ d	ƒZG d
d„ dƒZ	G dd„ deƒZ
dS )é    N)Úimport_module)ÚLaTeXParsingErrorÚlark)ÚTransformerÚTokenÚTreec                   @   s   e Zd Zdd„ ZdS )r   c                 G   s   d S ©N© )ÚselfÚargsr	   r	   úR/var/www/auris/lib/python3.9/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S )r   Nr   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™„ ZVdšd›„ ZWdœd„ ZXdždŸ„ ZYeZd œd¡d¢„Z[d£d¤„ Z\d¥d¦„ Z]d§d¨„ Z^d©dª„ Z_d«d¬„ Z`d­d®„ Zad¯S )°Ú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_INFTY5   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_SYMBOL_WITH_PRIMES8   s    z-TransformToSymPyExpr.GREEK_SYMBOL_WITH_PRIMESc                 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   Úbaser   r	   r	   r   Ú!LATIN_SYMBOL_WITH_LATIN_SUBSCRIPT?   s    
z6TransformToSymPyExpr.LATIN_SYMBOL_WITH_LATIN_SUBSCRIPTc                 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   r%   r   Zgreek_letterr	   r	   r   Ú!GREEK_SYMBOL_WITH_LATIN_SUBSCRIPTF   s
    
z6TransformToSymPyExpr.GREEK_SYMBOL_WITH_LATIN_SUBSCRIPTc                 C   sT   |j  d¡\}}| d¡r(|dd… }n|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   Ú!LATIN_SYMBOL_WITH_GREEK_SUBSCRIPTO   s    
z6TransformToSymPyExpr.LATIN_SYMBOL_WITH_GREEK_SUBSCRIPTc                 C   sj   |j  d¡\}}t dd|dd … ¡}| d¡r>|dd… }n|dd … }t dd|¡}t d||f ¡S )	Nr   r   r   r   r   r*   r!   r    r'   )r
   r   r%   r   Z
greek_baseZ	greek_subr	   r	   r   Ú!GREEK_SYMBOL_WITH_GREEK_SUBSCRIPTZ   s    
z6TransformToSymPyExpr.GREEK_SYMBOL_WITH_GREEK_SUBSCRIPTc                 C   s@   t |ƒdkrt |d ¡S t |ƒdkr<t |d |d  ¡S d S )Né   r*   é   )Úlenr   r   r   r	   r	   r   Úmulti_letter_symbolf   s    z(TransformToSymPyExpr.multi_letter_symbolc                 C   sH   |d j dkrtjS d|d v r2tjj |d ¡S tjj |d ¡S d S )Nr   ZCMD_IMAGINARY_UNITÚ.)Útyper   ÚIÚcoreÚnumbersZFloatÚIntegerr   r	   r	   r   Únumberl   s
    zTransformToSymPyExpr.numberc                 C   s   |d S ©Nr   r	   r   r	   r	   r   Úlatex_stringu   s    z!TransformToSymPyExpr.latex_stringc                 C   s   |d S ©Nr   r	   r   r	   r	   r   Úgroup_round_parenthesesx   s    z,TransformToSymPyExpr.group_round_parenthesesc                 C   s   |d S r:   r	   r   r	   r	   r   Úgroup_square_brackets{   s    z*TransformToSymPyExpr.group_square_bracketsc                 C   s   |d S r:   r	   r   r	   r	   r   Úgroup_curly_parentheses~   s    z,TransformToSymPyExpr.group_curly_parenthesesc                 C   s   t  |d |d ¡S ©Nr   r*   )r   ÚEqr   r	   r	   r   Úeq   s    zTransformToSymPyExpr.eqc                 C   s   t  |d |d ¡S r>   )r   ZNer   r	   r	   r   Úne„   s    zTransformToSymPyExpr.nec                 C   s   t  |d |d ¡S r>   )r   ÚLtr   r	   r	   r   Últ‡   s    zTransformToSymPyExpr.ltc                 C   s   t  |d |d ¡S r>   )r   ZLer   r	   r	   r   ÚlteŠ   s    zTransformToSymPyExpr.ltec                 C   s   t  |d |d ¡S r>   )r   ÚGtr   r	   r	   r   Úgt   s    zTransformToSymPyExpr.gtc                 C   s   t  |d |d ¡S r>   )r   ZGer   r	   r	   r   Úgte   s    zTransformToSymPyExpr.gtec                 C   s`   t |ƒdkr|d S t |ƒdkr\|d }|d }|  |¡sD|  |¡rPt ||¡S t ||¡S d S )Nr*   r   é   r   )r/   Ú_obj_is_sympy_Matrixr   ÚMatAddÚAdd©r
   r   ÚlhÚrhr	   r	   r   Úadd“   s    zTransformToSymPyExpr.addc                 C   s†   t |ƒdkr0|d }|  |¡r*t d|¡S | S t |ƒdkr‚|d }|d }|  |¡s`|  |¡rtt |t d|¡¡S t || ¡S d S )Nr*   r   r!   rH   r   )r/   rI   r   ÚMatMulrJ   rK   )r
   r   ÚxrM   rN   r	   r	   r   r   Ÿ   s    
zTransformToSymPyExpr.subc                 C   s<   |d }|d }|   |¡s$|   |¡r0t ||¡S t ||¡S r>   )rI   r   rP   ÚMulrL   r	   r	   r   Úmul°   s
    zTransformToSymPyExpr.mulc                 C   s   |   |d |d ¡S r>   )Ú_handle_divisionr   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.quantumrV   rW   Ú
isinstancerX   r   r   ÚtupleÚ
DerivativerR   )r
   r   rV   rW   rX   r	   r	   r   Úadjacent_expressions¼   s    z)TransformToSymPyExpr.adjacent_expressionsc                 C   s¤  dd„ }dd„ }dd„ }dd„ }|d	 }t |ƒd
kr<|d }t |ƒdkrP|d
 }|  |¡r\|t d¡krtt |¡S |t d¡krŒt |¡S ||ƒr¸|j}t |ƒd d	kr®|S t |¡S ||ƒrì|j}t |ƒt dƒ d d	krâ|S t |¡S ||ƒr |j}t |ƒd d	kr| ¡ S t |¡S ||ƒr\|j}t |ƒt dƒ d d	krR| ¡ S t |¡S ||ƒs„||ƒs„||ƒs„||ƒr˜t|› d|› dƒ‚t 	||¡S )Nc                 S   s   t | tƒo| jdkS )NZPRIMES©r[   r   r2   ©rQ   r	   r	   r   ÚisprimeÍ   s    z1TransformToSymPyExpr.superscript.<locals>.isprimec                 S   s   t | tƒo| jdkp| jdkS )NZPRIMES_VIA_CMDZ	CMD_PRIMEr_   r`   r	   r	   r   Ú
iscmdprimeÐ   s    ÿz4TransformToSymPyExpr.superscript.<locals>.iscmdprimec                 S   s   t | tƒo| jdkS )NZSTARSr_   r`   r	   r	   r   ÚisstarÔ   s    z0TransformToSymPyExpr.superscript.<locals>.isstarc                 S   s   t | tƒo| jdkp| jdkS )NZSTARS_VIA_CMDZCMD_ASTERISKr_   r`   r	   r	   r   Ú	iscmdstar×   s    ÿz3TransformToSymPyExpr.superscript.<locals>.iscmdstarr   rH   r*   r.   ÚTÚHz\primez\astz with superscript ú is not understood.)
r/   rI   r   r   Ú	TransposeZadjointr"   Údoitr   ÚPow)r
   r   ra   rb   rc   rd   r%   Úsupr	   r	   r   ÚsuperscriptÌ   sJ    







(z TransformToSymPyExpr.superscriptc                 C   sP   |d }|d j }|  |¡s2td|› d|› dƒ‚t|ƒd dkrF|S t |¡S )Nr   r   ú(ú)rg   r*   )r"   rI   r   r/   r   rh   ©r
   r   r%   Zprimesr	   r	   r   Úmatrix_prime  s    

z!TransformToSymPyExpr.matrix_primec                 C   s&   |d }|d j }t |j› |› ¡S )Nr   r   )r"   r   r   Únamero   r	   r	   r   Úsymbol_prime  s    
z!TransformToSymPyExpr.symbol_primec                 C   sB   |d }t |d tƒr*|d \}}d|fS |d }|  ||¡S d S )Nr   r*   Ú
derivative)r[   r\   rT   )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   rx   &  s    zTransformToSymPyExpr.binomialc           
      C   s.  d }d }d|v r|  d¡}d|v r,|  d¡}|r<||d  nd }|rP||d  nd }|  |¡}|d u rntdƒ‚|  |¡d }|| }|d urœ|d u rœtdƒ‚|d ur´|d u r´tdƒ‚|d urÎ||d krÎd}	n4|d urè||d krèd}	n|dkröd}	n||d  }	|d u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.rH   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 )NrH   r   r-   r*   )r/   r   r	   r	   r   Úgroup_curly_parentheses_intl  s    z0TransformToSymPyExpr.group_curly_parentheses_intc                 C   s,   |d \}}|d }t  |t  |d¡¡|fS )Nr   r*   r!   )r   rR   rj   )r
   r   rt   ru   rv   r	   r	   r   Úspecial_fractionu  s    z%TransformToSymPyExpr.special_fractionc                 C   sº   d }d }d|v r|  d¡}d|v r,|  d¡}|r<||d  nd }|rP||d  nd }|d url|d u rltdƒ‚|d ur„|d u r„tdƒ‚|d \}}|d urªt ||||f¡S t ||¡S d S )Nr   ry   r   rz   r{   r!   )r|   r   r   r~   )r
   r   r   r€   r   r‚   r…   r„   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   ry   r   Ú}r   r   r!   ©r|   )r
   r   r   r€   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   Ú	summationÆ  s    zTransformToSymPyExpr.summationc                 C   s   t  |d |d ¡S r   )r   ZProductr   r	   r	   r   ÚproductÉ  s    zTransformToSymPyExpr.productc                 C   sp   |  d¡}d|v 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 )Nry   r   r   ú+r   ú-ú+-r‹   )r
   r   r€   Zleft_curly_brace_indexÚ	directionr	   r	   r   Úlimit_dir_exprÌ  s    
z#TransformToSymPyExpr.limit_dir_exprc                 C   s:   |d }t |d tƒr$|d \}}n|d }d}|||fS )Nr   rH   r’   )r[   r\   ©r
   r   Zlimit_variableZdestinationr“   r	   r	   r   Úgroup_curly_parentheses_limÜ  s    z0TransformToSymPyExpr.group_curly_parentheses_limc                 C   s"   |d \}}}t  |d |||¡S ©Nr*   r!   )r   ZLimitr•   r	   r	   r   Úlimitæ  s    zTransformToSymPyExpr.limitc                 C   s   |d S r:   r	   r   r	   r	   r   Údifferentialë  s    z!TransformToSymPyExpr.differentialc                 C   s   t  |d |d ¡S )Nr!   r.   )r   r]   r   r	   r	   r   rs   î  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)r[   r   r2   r   )r   r	   r	   r   Úremove_tokens÷  s
    

z?TransformToSymPyExpr.list_of_expressions.<locals>.remove_tokens)r/   Úfilter)r
   r   r›   r	   r	   r   Úlist_of_expressionsñ  s    z(TransformToSymPyExpr.list_of_expressionsc                 C   s   t  |d ¡|d Ž S r>   )r   ZFunctionr   r	   r	   r   Úfunction_applied  s    z%TransformToSymPyExpr.function_appliedc                 C   s   t j|d Ž S ©Nr*   )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   )rV   r   )rZ   rV   )r
   r   rV   r	   r	   r   Úbra
  s    zTransformToSymPyExpr.brac                 C   s   ddl m} ||d ƒS )Nr   )rW   r   )rZ   rW   )r
   r   rW   r	   r	   r   Úket  s    zTransformToSymPyExpr.ketc                 C   s.   ddl m}m}m} |||d ƒ||d ƒƒS )Nr   )rV   rW   ÚInnerProductr   rH   )rZ   rV   rW   r¤   )r
   r   rV   rW   r¤   r	   r	   r   Úinner_product  s    z"TransformToSymPyExpr.inner_productc                 C   s   t  |d ¡S r:   )r   Úsinr   r	   r	   r   r¦     s    zTransformToSymPyExpr.sinc                 C   s   t  |d ¡S r:   )r   Úcosr   r	   r	   r   r§     s    zTransformToSymPyExpr.cosc                 C   s   t  |d ¡S r:   )r   Útanr   r	   r	   r   r¨     s    zTransformToSymPyExpr.tanc                 C   s   t  |d ¡S r:   )r   Úcscr   r	   r	   r   r©     s    zTransformToSymPyExpr.cscc                 C   s   t  |d ¡S r:   )r   Úsecr   r	   r	   r   rª   "  s    zTransformToSymPyExpr.secc                 C   s   t  |d ¡S r:   )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 r—   )r   Úasinrj   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 r—   )r   Úacosrj   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 r—   )r   Úatanrj   r¨   r­   r	   r	   r   Ú	tan_power6  s    zTransformToSymPyExpr.tan_powerc                 C   s8   |d }|dkrt  |d ¡S t  t  |d ¡|¡S d S r—   )r   Úacscrj   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 r—   )r   Úasecrj   rª   r­   r	   r	   r   Ú	sec_powerD  s    zTransformToSymPyExpr.sec_powerc                 C   s8   |d }|dkrt  |d ¡S t  t  |d ¡|¡S d S r—   )r   Úacotrj   r«   r­   r	   r	   r   Ú	cot_powerK  s    zTransformToSymPyExpr.cot_powerc                 C   s   t  |d ¡S r:   )r   r¬   r   r	   r	   r   ÚarcsinR  s    zTransformToSymPyExpr.arcsinc                 C   s   t  |d ¡S r:   )r   r°   r   r	   r	   r   ÚarccosU  s    zTransformToSymPyExpr.arccosc                 C   s   t  |d ¡S r:   )r   r²   r   r	   r	   r   ÚarctanX  s    zTransformToSymPyExpr.arctanc                 C   s   t  |d ¡S r:   )r   r´   r   r	   r	   r   Úarccsc[  s    zTransformToSymPyExpr.arccscc                 C   s   t  |d ¡S r:   )r   r¶   r   r	   r	   r   Úarcsec^  s    zTransformToSymPyExpr.arcsecc                 C   s   t  |d ¡S r:   )r   r¸   r   r	   r	   r   Úarccota  s    zTransformToSymPyExpr.arccotc                 C   s   t  |d ¡S r:   )r   Úsinhr   r	   r	   r   rÀ   d  s    zTransformToSymPyExpr.sinhc                 C   s   t  |d ¡S r:   )r   Úcoshr   r	   r	   r   rÁ   g  s    zTransformToSymPyExpr.coshc                 C   s   t  |d ¡S r:   )r   Útanhr   r	   r	   r   rÂ   j  s    zTransformToSymPyExpr.tanhc                 C   s   t  |d ¡S r:   )r   Úasinhr   r	   r	   r   rÃ   m  s    zTransformToSymPyExpr.asinhc                 C   s   t  |d ¡S r:   )r   Úacoshr   r	   r	   r   rÄ   p  s    zTransformToSymPyExpr.acoshc                 C   s   t  |d ¡S r:   )r   Úatanhr   r	   r	   r   rÅ   s  s    zTransformToSymPyExpr.atanhc                 C   s   t  |d ¡S r:   )r   ZAbsr   r	   r	   r   Úabsv  s    zTransformToSymPyExpr.absc                 C   s   t  |d ¡S r:   )r   Úfloorr   r	   r	   r   rÇ   y  s    zTransformToSymPyExpr.floorc                 C   s   t  |d ¡S r:   )r   Zceilingr   r	   r	   r   Úceil|  s    zTransformToSymPyExpr.ceilc                 C   s   t  |d ¡S r8   )r   Ú	factorialr   r	   r	   r   rÉ     s    zTransformToSymPyExpr.factorialc                 C   s   t  |d ¡S r:   )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   rH   )r/   r   ÚsqrtÚrootr   r	   r	   r   Úsquare_root…  s    z TransformToSymPyExpr.square_rootc                 C   s   t  |d ¡S r:   )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|v rdt |d |d	 ¡S t |d ¡S d S )
Nr   ZFUNC_LGr   é
   ZFUNC_LNZFUNC_LOGr   rH   r*   )r2   r   Úlogr   r	   r	   r   rÑ     s    zTransformToSymPyExpr.log©Úsc                    s$   h d£}t ‡ fdd„|D ƒd ƒ}|S )N>   z
\mathrm{d}z\text{d}rY   c                 3   s   | ]}|ˆ v r|V  qd S r   r	   )Ú.0ÚsymbolrÒ   r	   r   Ú	<genexpr>¤  ó    zDTransformToSymPyExpr._extract_differential_symbol.<locals>.<genexpr>)Únext)r
   rÓ   Zdifferential_symbolsrƒ   r	   rÒ   r   r}   ¡  s    z1TransformToSymPyExpr._extract_differential_symbolc                    s4   dd„ ‰ dd„ ‰|d j }t ‡ ‡fdd„|D ƒ¡S )Nc                 S   s   t | tƒo| jdkS )NZ
matrix_row)r[   r   Údatar`   r	   r	   r   Úis_matrix_row©  s    z2TransformToSymPyExpr.matrix.<locals>.is_matrix_rowc                 S   s   t | tƒ p| jdkS )NZMATRIX_COL_DELIMr_   )Úyr	   r	   r   Úis_not_col_delim¬  s    z5TransformToSymPyExpr.matrix.<locals>.is_not_col_delimr   c                    s(   g | ] }ˆ |ƒr‡fd d„|j D ƒ‘qS )c                    s   g | ]}ˆ |ƒr|‘qS r	   r	   )rÔ   rÛ   )rÜ   r	   r   Ú
<listcomp>°  r×   z:TransformToSymPyExpr.matrix.<locals>.<listcomp>.<listcomp>)Úchildren)rÔ   rQ   ©rÚ   rÜ   r	   r   rÝ   °  s   
ÿz/TransformToSymPyExpr.matrix.<locals>.<listcomp>)rÞ   r   ÚMatrix)r
   r   Zmatrix_bodyr	   rß   r   Úmatrix¨  s    
ÿzTransformToSymPyExpr.matrixc                 C   sL   t |ƒdkr.|  |d ¡s"tdƒ‚|d  ¡ S t |ƒdkrH|  |¡ ¡ S d S )Nr*   r   z&Cannot take determinant of non-matrix.rH   )r/   rI   r   Zdetrá   r   r	   r	   r   Údeterminant³  s    z TransformToSymPyExpr.determinantc                 C   s$   |   |d ¡stdƒ‚t |d ¡S )Nr   z Cannot take trace of non-matrix.)rI   r   r   ZTracer   r	   r	   r   Útrace½  s    zTransformToSymPyExpr.tracec                 C   s&   |   |d ¡stdƒ‚|d  ¡  ¡ S )Nr   z#Cannot take adjugate of non-matrix.)rI   r   ri   Úadjugater   r	   r	   r   rä   Ã  s    zTransformToSymPyExpr.adjugatec                 C   s   t |dƒr|jS t|tjƒS )NÚ	is_Matrix)Úhasattrrå   r[   r   rà   )r
   Úobjr	   r	   r   rI   Ê  s    
z)TransformToSymPyExpr._obj_is_sympy_Matrixc                 C   sD   |   |¡rtdƒ‚|   |¡r0t |t |d¡¡S t |t |d¡¡S )Nz¨Cannot divide by matrices like this since it is not clear if left or right multiplication by the inverse is intended. Try explicitly multiplying by the inverse instead.r!   )rI   r   r   rP   rj   rR   )r
   rt   rv   r	   r	   r   rT   Ð  s
    

z%TransformToSymPyExpr._handle_divisionN)br   r   r   Ú__doc__r   r   ÚSYMBOLr4   r5   r6   ÚDIGITr   r   r&   r)   r+   r,   r0   r7   r9   r;   r<   r=   r@   rA   rC   rD   rF   rG   rO   r   rS   rU   r^   rl   rp   rr   rw   rx   r†   r‡   rˆ   r‰   rŒ   rŽ   r   r”   r–   r˜   r™   rs   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ä   rI   rT   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	   r   Ú<module>   s   