
    gۚ                       d dl mZ d dlZd dlZd dlmZ d dlmZmZ d dlZd dlm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZN d dlOmPZPmQZQ d dlRmSZS d dlTmUZU d d	lVmWZW dd
ZXd ZYd ZZd Z[e[ G d d                      Z\dS )    )annotationsN)product)AnyCallable)FMulAddPowRationallogexpsqrtcossintanasinacosacotasecacscsinhcoshtanhasinhacoshatanhacothasechacschexpandimflattenpolylogcancelexpand_trigsignsimplifyUnevaluatedExprSatanatan2ModMaxMinrfEiSiCiairyaiairyaiprimeairybiprimepiprimeisprimecotseccsccschsechcothFunctionIpiTupleGreaterThanStrictGreaterThanStrictLessThanLessThanEqualityOrAndLambdaIntegerDummysymbols)sympify_sympify)airybiprime)li)sympy_deprecation_warningc                    t          ddd           t          |          }t          |                    |                     S )NzThe ``mathematica`` function for the Mathematica parser is now
deprecated. Use ``parse_mathematica`` instead.
The parameter ``additional_translation`` can be replaced by SymPy's
.replace( ) or .subs( ) methods on the output expression instead.z1.11zmathematica-parser-new)deprecated_since_versionactive_deprecations_target)rQ   MathematicaParserrM   
_parse_old)sadditional_translationsparsers      U/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/parsing/mathematica.pymathematicar[      sS    	E "(#;    677F6$$Q''(((    c                H    t                      }|                    |           S )a  
    Translate a string containing a Wolfram Mathematica expression to a SymPy
    expression.

    If the translator is unable to find a suitable SymPy expression, the
    ``FullForm`` of the Mathematica expression will be output, using SymPy
    ``Function`` objects as nodes of the syntax tree.

    Examples
    ========

    >>> from sympy.parsing.mathematica import parse_mathematica
    >>> parse_mathematica("Sin[x]^2 Tan[y]")
    sin(x)**2*tan(y)
    >>> e = parse_mathematica("F[7,5,3]")
    >>> e
    F(7, 5, 3)
    >>> from sympy import Function, Max, Min
    >>> e.replace(Function("F"), lambda *x: Max(*x)*Min(*x))
    21

    Both standard input form and Mathematica full form are supported:

    >>> parse_mathematica("x*(a + b)")
    x*(a + b)
    >>> parse_mathematica("Times[x, Plus[a, b]]")
    x*(a + b)

    To get a matrix from Wolfram's code:

    >>> m = parse_mathematica("{{a, b}, {c, d}}")
    >>> m
    ((a, b), (c, d))
    >>> from sympy import Matrix
    >>> Matrix(m)
    Matrix([
    [a, b],
    [c, d]])

    If the translation into equivalent SymPy expressions fails, an SymPy
    expression equivalent to Wolfram Mathematica's "FullForm" will be created:

    >>> parse_mathematica("x_.")
    Optional(Pattern(x, Blank()))
    >>> parse_mathematica("Plus @@ {x, y, z}")
    Apply(Plus, (x, y, z))
    >>> parse_mathematica("f[x_, 3] := x^3 /; x > 0")
    SetDelayed(f(Pattern(x, Blank()), 3), Condition(x**3, x > 0))
    )rU   parse)rW   rY   s     rZ   parse_mathematicar_       s     d   F<<??r\   c            	     0   t          |           dk    r| d         }t          d          |                              }d |D             }t          |          }t	          |t
                    rUt          d| t                    }t          ||	                    fdt          |          D                                 S t          d|          S t          |           d	k    r | d         }| d         }t          ||          S t          d
          )N   r   Slotc                (    g | ]}|j         d          S )r   )args).0as     rZ   
<listcomp>z#_parse_Function.<locals>.<listcomp>[   s    ,,,16!9,,,r\   zdummy0:clsc                4    i | ]\  }} |d z             |S )ra    )re   ivrb   s      rZ   
<dictcomp>z#_parse_Function.<locals>.<dictcomp>_   s+    2a2a2aDAq44!99a2a2a2ar\   rk      z&Function node expects 1 or 2 arguments)lenr>   atomsmax
isinstancerJ   rL   rK   rI   xreplace	enumerateSyntaxError)rd   argslotsnumbersnumber_of_arguments	variablesbodyrb   s          @rZ   _parse_Functionr}   V   s   
4yyA~~1g		$,,e,,,!'ll)733 	d ?*= ? ?UKKKI)S\\2a2a2a2aIV_L`L`2a2a2a%b%bcccb#	TaG	Awi&&&BCCCr\   c                .    |                                   | S N)_initialize_classrh   s    rZ   _decor   i   s    Jr\   c            !         e Zd ZU 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)d*Z ed+d,d-          D ]b\  ZZZeez   ez   d.z   Z	erd/e
                                z   ez   d0z   Zne
                                ez   d0z   Ze                    e	ei           cd1d2d3d4d5Z ej        d6ej                  d7f ej        d8ej                  d7f ej        d9ej                  d:f ej        d;ej                  d<fd=Z ej        d>ej                  Z ej        d?ej                  Zd@Zi ZdAedB<   i ZdAedC<   i ZdAedD<   edE             ZddGZedH             ZdI ZdJ ZedK             ZedL             Z edM             Z!edN             Z"dO Z#dP Z$dQZ%dRZ&dSZ'dTZ(dUZ)dVZ*e'dFdWdX ife%e(dWdYife%e)dZd[d\d]d^d_d`fe%e*dadb ife'dFdcddife%e*dedfife%e)dgdhdife%e*djdkife%e(dldmife'dFdndodpfe%e(dqdrife%e(dsdtife&dFdudvife%e(dwdxdyfe%e(dzd{d|d}d~ddfe%dFddife%e(dddfe%e(dddfe%e(ddife&dFd d dfe%e)ddife%e)dddd dfe'dFdddddfe%dFd d dfe&dFd d dfe%dFddife'dFd d d d dfe%dFdd ife&dFdddfgZ+ded<   d d dZ,dZ-dZ.g dZ/g dZ0ed             Z1ed             Z2dFZ3d Z4ddZ5ddZ6ddZ7ddZ8ddZ9ddĄZ:ddńZ;dddǄZ<ddʄZ=dd̄Z>dd΄Z?i de@deAdeBdeCddф ddӄ ddՄ deCdeDdeEdeFdeGdeHdeIdeJdeKdeLi deMdd deNdeOdePdeQdeRdeSdeTdeUdeVdeWdeXdeYdeZde[de\i de]de^de_j        de`deadebdecdeddeedefdegdd dehdeid ejdekdeli demdendeodepdeqderd	esd
etdeudevdewdexd~eyd}ezd|e{dze|dre}e~edZeedZd Zd ZdFS (  rU   ap  
    An instance of this class converts a string of a Wolfram Mathematica
    expression to a SymPy expression.

    The main parser acts internally in three stages:

    1. tokenizer: tokenizes the Mathematica expression and adds the missing *
        operators. Handled by ``_from_mathematica_to_tokens(...)``
    2. full form list: sort the list of strings output by the tokenizer into a
        syntax tree of nested lists and strings, equivalent to Mathematica's
        ``FullForm`` expression output. This is handled by the function
        ``_from_tokens_to_fullformlist(...)``.
    3. SymPy expression: the syntax tree expressed as full form list is visited
        and the nodes with equivalent classes in SymPy are replaced. Unknown
        syntax tree nodes are cast to SymPy ``Function`` objects. This is
        handled by ``_from_fullformlist_to_sympy(...)``.

    zSqrt[x]zsqrt(x)zRational[x,y]zRational(x,y)zExp[x]zexp(x)zLog[x]zlog(x)zLog[x,y]zlog(y,x)zLog2[x]zlog(x,2)zLog10[x]z	log(x,10)zMod[x,y]zMod(x,y)zMax[*x]zMax(*x)zMin[*x]zMin(*x)zPochhammer[x,y]zrf(x,y)zArcTan[x,y]z
atan2(y,x)zExpIntegralEi[x]zEi(x)zSinIntegral[x]zSi(x)zCosIntegral[x]zCi(x)z	AiryAi[x]z	airyai(x)zAiryAiPrime[x]zairyaiprime(x)z	airybi(x)zairybiprime(x)z li(x)z
primepi(x)zprime(x)z
isprime(x))z	AiryBi[x]zAiryBiPrime[x]zLogIntegral[x]z
PrimePi[x]zPrime[x]z	PrimeQ[x]) Arc)SinCosTanCotSecCsc)r   hz[x]rf   z(x)r   z**[]) ^{}z
                (?:(?<=[a-zA-Z\d])|(?<=\d\.))     # a letter or a number
                \s+                               # any number of whitespaces
                (?:(?=[a-zA-Z\d])|(?=\.\d))       # a letter or a number
                *z
                (?:(?<=[])\d])|(?<=\d\.))       # ], ) or a number
                                                # ''
                (?=[(a-zA-Z])                   # ( or a single letter
                z
                (?<=[a-zA-Z])       # a letter
                \(                  # ( as a character
                (?=.)               # any characters
                z*(z
                (?:
                \A|(?<=[^a-zA-Z])
                )
                Pi                  # 'Pi' is 3.14159... in Mathematica
                (?=[^a-zA-Z])
                r@   )
whitespaceadd*_1add*_2Piz
                (?:
                \A|(?<=[^a-zA-Z])   # at the top or a non-letter
                )
                [A-Z][a-zA-Z\d]*    # Function
                (?=\[)              # [ as a character
                z(
                \{.*\}
                z
                (?:
                \A|(?<=[^a-zA-Z])
                )
                {arguments}         # model argument like x, y,...
                (?=[^a-zA-Z])
                z%dict[tuple[str, int], dict[str, Any]]TRANSLATIONScache_originalcache_compiledc                n    |                      | j                  }| j                            |           d S r   )_compile_dictionaryCORRESPONDENCESr   update)ri   ds     rZ   r   z#MathematicaParser._initialize_class   s7     ##C$788"""""r\   Nc                d   i | _         | j                             | j                   |i }| j        j        |k    rQt          |t                    st          d          |                     |          }|| j        _        || j        _	        | j                             | j        j	                   d S )NzThe argument must be dict type)
translationsr   r   	__class__r   rs   dict
ValueErrorr   r   )selfrX   r   s      rZ   __init__zMathematicaParser.__init__   s     	  !2333"*&(# >(,CCC5t<< C !ABBB (()@AAA -DDN),-DN) 	  !>?????r\   c                   i }|                                 D ]\  }}|                     |           |                     |           |                     |d          }|                     |d          }|                     |d          }|                     |d          }| j                            |          }|%d                    |          }t          |          |                                }| 	                    |          \  }}	|
                                dk    s|	t          |          k    r%d                    |          }t          |          |d         d         dk    rd}
nt          |          }
||
f}d |D             }d	d
                    |          z   dz   }| j                            |          }t          j        |t          j                  }i ||<   |||         d<   |||         d<   |||         d<   |S )Nr   r   '{f}' function form is invalid.fr   r   c                4    g | ]}|d          dk    r|nd|z   S )r   r   \rk   )re   xs     rZ   rg   z9MathematicaParser._compile_dictionary.<locals>.<listcomp>C  s,    DDD!AaDCKKqqTAXDDDr\   z(?:(|z)))	argumentsfsrd   pat)items_check_input_apply_rules_replace
FM_PATTERNsearchformatr   group	_get_argsstartrp   joinARGS_PATTERN_TEMPLATErecompileVERBOSE)ri   dicr   fmr   merrfm_namerd   endkey_argkeyre_argsxyzpatStrr   s                   rZ   r   z%MathematicaParser._compile_dictionary  s    iikk 7	  7	 FBR   R    !!"l33B!!"l33B b#&&Bb#&&B %%b))A y7>>>DD oo% ggiiG a((ID# wwyyA~~B7>>>DD oo% Bx{c!!d))G$C EDtDDDG 388G,,,t3C .555DDF*VRZ00C AcFAcF4L!AcF6NAcF5MMr\   c                >   | j         }d}d}	 |                    |          }|||z  }ns|                                }|                     |          \  }}|                                }	|                     ||||	|          }|	}||d|         z  }||d         }|S )z'Parse Mathematica function to SymPy oner   r   TN)r   r   r   r   r   _convert_one_function)
r   rW   r   scannedcurr   r   rd   r   bgns
             rZ   _convert_functionz#MathematicaParser._convert_functionU  s     o	

1Ay1 B q))ID# ''))C **1b$SAAA C q#wG #$$A7	: r\   c                d   |t          |          f| j        v rB|t          |          f}| j        |         d         }t          t          ||                    }n|df| j        v rh|df}| j        |         d         }i }t	          |          D ]>\  }	}
|
d         dk    r"d                    ||	d                    ||
<    n||	         ||
<   ?n%d                    |          }t          |          | j        |         d         }| j        |         d         }d	}d}	 |                    |          }|||z  }n]|	                                }
|
                                }||d |         ||
         z   z  }|                                }||d          }z|d |         |z   ||d          z   }|S )
Nrd   r   r   ,z'{f}' is out of the whitelist.r   r   r   r   )rp   r   r   zipru   r   r   r   r   r   r   r   )r   rW   r   rd   r   r   r   x_argsr   rl   r   r   templater   r   r   r   xbgns                     rZ   r   z'MathematicaParser._convert_one_function|  s   D		?d///s4yy/C &s+F3F S&&''AA #Y$+++s)C &s+F3F A!&))  1Q43;;88DH--AaDEAw! 399B9??CS//! $S)$/ $U+	&

8$$Ay8# 		A 7799D x1--G %%''C  ~H)	&. dsdGg#$$'r\   c                   |j         }|                                dz   }g g }}g }|}t          ||d         |          D ]\  }}	|	dk    r&|s$|s"|                    |||                    |dz   }|	dk    r|                    |	           n|	dk    r|                                 |	dk    r|                    |	           |	dk    r6|r|                                 |                    |||                     n|dz   }
||
fS )z'Get arguments of a Mathematica functionra   Nr   r   r   r   r   )stringr   ru   appendpop)ri   r   rW   ancsquarecurlyrd   r   rl   cfunc_ends              rZ   r   zMathematicaParser._get_args  s5    HeeggkB ags++ 	 	DAqCxxx%xAc!eH%%%!e CxxQc		 Cxxa    c JJLLLLKK#a%)))E  q5X~r\   c                L    | j         |         }|                    ||          }|S r   )REPLACEMENTSreplace)ri   rW   befafts       rZ   r   zMathematicaParser._replace  s'    s#IIc3r\   c                N    | j         |         \  }}|                    ||          S r   )RULESsub)ri   rW   r   r   r   s        rZ   r   zMathematicaParser._apply_rules  s#    9S>SwwsAr\   c                    dD ]_}|                     |d                   |                     |d                   k    r%d                    |          }t          |          `d|v rd}t          |          d S )N))r   r   )r   r   )()r   ra   r   r   r   z Currently list is not supported.)countr   r   )ri   rW   bracketr   s       rZ   r   zMathematicaParser._check_input  s    ; 	& 	&Gwwwqz""agggaj&9&9997>>>CC oo% : !884CS//! 8r\   c                b   |                      |           |                     |d          }|                     |d          }|                     |d          }|                     |d          }|                     |          }|                     |d          }|                     |d          }|S )Nr   r   r   r   r   r   )r   r   r   r   )r   rW   s     rZ   rV   zMathematicaParser._parse_old  s    ! a.. MM!S!! a**a** ""1%% MM!S!! a&& r\   c                    |                      |          }|                     |          }|                     |          }|S r   )_from_mathematica_to_tokens_from_tokens_to_fullformlist_from_fullformlist_to_sympy)r   rW   s2s3s4s        rZ   r^   zMathematicaParser.parse  s@    --a00..r22--b11	r\   InfixPrefixPostfixFlatRightLeft;c                ^    t          | t                    r| r| d         dk    r| dgz   nd| dgS )Nr   CompoundExpressionNull)rs   listr   s    rZ   <lambda>zMathematicaParser.<lambda>%  sW    
1d8K8K  )ZPQ  )ZVWXYVZ^rVrVrVH  zN  PQ  SY  yZ r\   r   Set
SetDelayedAddToSubtractFromTimesByDivideBy)=z:=z+=z-=z*=z/=z//c                
    | |gS r   rk   r   ys     rZ   r  zMathematicaParser.<lambda>(  s
    1a& r\   &r>   z/.
ReplaceAllRuleRuleDelayed)z->z:>z/;	Conditionr   AlternativesRepeatedRepeatedNull)z..z...z||rG   z&&rH   !NotSameQUnsameQ)z===z=!=EqualUnequal	LessEqualLessGreaterEqualGreater)z==z!=z<=<z>=>z;;SpanPlus+-Times)r   /.Dotc                6    t                               |           S r   )rU   _get_negr  s    rZ   r  zMathematicaParser.<lambda>8  s    '8'A'A!'D'D r\   c                    | S r   rk   r  s    rZ   r  zMathematicaParser.<lambda>9  s    q r\   )r%  r$  r   PowerApplyMapMapAllc                    d| |ddggS )Nr.  List1rk   r  s     rZ   r  zMathematicaParser.<lambda>;  s    ZacdfgjpruivYw r\   )z@@z/@z//@z@@@
Derivative	Factorial
Factorial2	Decrement)'r  z!!z--c                    | g|S r   rk   r  s     rZ   r  zMathematicaParser.<lambda>=  s    !a r\   c                    d| g|S )NPartrk   r  s     rZ   r  zMathematicaParser.<lambda>=  s    fa_RS_ r\   )r   [[c                    dg| S )Nr2  rk   r  s    rZ   r  zMathematicaParser.<lambda>>  s    || r\   c                    | d         S )Nr   rk   r  s    rZ   r  zMathematicaParser.<lambda>>  s
    AaD r\   )r   r   ?PatternTestc                    d| dggS NPatternBlankrk   r  s    rZ   r  zMathematicaParser.<lambda>A  s    Iq7)4 r\   c                    dd| dgggS )NOptionalrC  rD  rk   r  s    rZ   r  zMathematicaParser.<lambda>B  s    Z)Q	)BC r\   c                    d| dggS )NrC  BlankSequencerk   r  s    rZ   r  zMathematicaParser.<lambda>C  s    YO+<= r\   c                    d| dggS )NrC  BlankNullSequencerk   r  s    rZ   r  zMathematicaParser.<lambda>D  s    i-@,AB r\   )_z_._____rK  c                    d| d|ggS rB  rk   r  s     rZ   r  zMathematicaParser.<lambda>F  s    )Q!)E r\   rb   SlotSequence)#z##z7list[tuple[str, str | None, dict[str, str | Callable]]]_mathematica_op_precedencec                 
    ddgS )Nrb   r3  rk   rk   r\   rZ   r  zMathematicaParser.<lambda>K  s
    fc] r\   c                 
    ddgS )NrO  r3  rk   rk   r\   rZ   r  zMathematicaParser.<lambda>L  s    ~s+ r\   z[A-Za-z][A-Za-z0-9]*z (?:[0-9]+(?:\.[0-9]*)?|\.[0-9]+))r   r   r<  r   )r   r   ]]r   c                ~    t          |t                    r$t          j        t          j        |          rd| ndd|gS )Nr%  r&  -1)rs   strr   matchrU   _numberri   r   s     rZ   r+  zMathematicaParser._get_negU  sA    $Q,,o:K:SUV1W1Wow1www^egkmn]oor\   c                    d|dgS )Nr-  rV  rk   rZ  s     rZ   _get_invzMathematicaParser._get_invY  s    D!!r\   c                   | j         | j         S | j        | j        g}| j        d d          | j        d d          z   }| j        D ] \  }}}|D ]}|                    |           !|                    d            |                    t          t          j        |                     |                    d           |                    d           t          j        dd                    |          z   dz             }|| _         | j         S )Nc                "    t          |            S r   )rp   r  s    rZ   r  z2MathematicaParser._get_tokenizer.<locals>.<lambda>h  s    #a&& r\   )r   r   
r   r   r   )_regex_tokenizer_literalrY  _enclosure_open_enclosure_closerQ  r   sortextendmapr   escaper   r   )r   tokenstokens_escapetypstratsymdictk	tokenizers           rZ   _get_tokenizerz MathematicaParser._get_tokenizer_  s    ,((-.,QQQ/$2G2JJ#'#B 	( 	(C ( ($$Q''''(00111c")]33444cdJsSXXf%5%55;<<	 )$$r\   coderW  c                F   |                                  g }	 |                    d          }|dk    r)t          |          dk    r|                    |           nt	          j        d||dz   d                    }|t          d          ||                                z   dz   }|dk    r|                    |d |                    |                    d||dz   |                             d	d          g           ||dz   d          }t          |          D ]\  }}t          |t                    r	 |                    d
          }|dk    rnI|                    d          }	|	dk    s|	|k     rt          d          |d |         ||	dz   d          z   }e|||<   fd|D             }
d |
D             }|r/|d         dk    r#|                    d           |r|d         dk    #|r/|d         dk    r#|                    d           |r|d         dk    #|S )NT"r   r   z(?<!\\)"ra   z"mismatch in string "  " expression_Strz\"z(*z*)zmismatch in comment (*  *) codero   c                    g | ]C}t          |t                    r)|                                r                    |          n|gDS rk   )rs   rW  isasciifindall)re   rl   rn  s     rZ   rg   zAMathematicaParser._from_mathematica_to_tokens.<locals>.<listcomp>  sM    ppp_`z!S/A/AZaiikkZy((+++XYWZpppr\   c                    g | ]	}|D ]}|
S rk   rk   )re   rl   js      rZ   rg   zAMathematicaParser._from_mathematica_to_tokens.<locals>.<listcomp>  s%    444!44Q!4444r\   r_  )ro  findrp   r   r   r   rv   r   r   ru   rs   r   r   )r   rp  code_splitsstring_start	match_end
string_endrl   
code_splitpos_comment_startpos_comment_endtoken_listsrh  rn  s               @rZ   r   z-MathematicaParser._from_mathematica_to_tokensp  s   ''))	 )+	'99T??Lr!!t99q==&&t,,,	+tLNOO/DEEI !"FGGG%	(9(99A=Ja""4#6777\!^J-F(G(O(OPUWZ([([\]]]
1&D	'  '{33 	( 	(MAz*d++ ]$.OOD$9$9!$**",//$"7"7"b((O>O,O,O%&GHHH'(:):(:;jYZIZI[I[>\\
] (KNN qpppdoppp44[444  	d**JJqMMM  	d**  	t++JJrNNN  	t++ r\   token
str | listreturnboolc                    t          |t                    rdS t          j        | j        |          rdS t          j        d| j        z   |          rdS dS )NFz-?T)rs   r   r   rX  ra  rY  r   r  s     rZ   _is_opzMathematicaParser._is_op  sY    eT"" 	58DM5)) 	58D4<'// 	5tr\   c                :    |dv rdS |                      |           S )N)r   r   Tr  r  s     rZ   _is_valid_star1z!MathematicaParser._is_valid_star1  '    J4;;u%%%%r\   c                :    |dv rdS |                      |           S )N)r   r   Tr  r  s     rZ   _is_valid_star2z!MathematicaParser._is_valid_star2  r  r\   rh  r   c                   g g}g }d}|t          |          k     r#||         }|| j        v rG|d                             |           |                    |           |                    g            n|dk    r~t          |d                   dk    r0|d         d         |d         k    rt          d|d         z            |                     |d                   |d<   |                    g            n.|| j        v r	| j                            |          }| j        |         |d         k    rt          d          }|dk    r|d         dk    r~|d         dk    r|                    |d	z   d
           nZ|d         dk    rK||d	z            d
k    r	d||d	z   <   n6||d	z            dk    r"d||d	z   <   |                    |dz   d
           n|n|t          |d                   dk    r!|d         d         dk    rt          d          |                     |d         d          }||d<   g }	|d         d         |d         k    r?|	                    |                                           |d         d         |d         k    ?|		                                 |d         dk    r2t          |	          d	k    rt          dt          |	          z            |d                             |	           |                    d           n|d                             |           |d	z  }|t          |          k     #t          |          d	k    rt          d          |                     |d                   S )Nr   r   r   z %s cannot be followed by comma ,zunmatched enclosurerT  r   ra   r   r<  ro   r   z( ) not valid syntaxTz1( must be followed by one expression, %i detectedz"Stack should have only one element)rp   rb  r   rv   _parse_after_bracesrc  indexinsertr   reverseRuntimeError)
r   rh  stackopen_seqpointerr  indunmatched_enclosure
last_stacknew_stack_elements
             rZ   r   z.MathematicaParser._from_tokens_to_fullformlist  s   DF##7OE,,,b	  '''&&&R    #uRy>>Q&&59R=HRL+H+H%&H8TV<&WXXX 44U2Y??b	R    $///+11%88',<<*56K*L*L'}}")<)<#B<3..
 #MM'!)S9999%b\T11%gai0C7748wqy 1 1!'	!2d!:!:48wqy 1 &gai = = = =&9 9 2 21uRy>>Q&&59R=C+?+?%&<===!55eBiFF
&b	$&!Bimx|33%,,UYY[[999 Bimx|33!))+++B<3&&3/@+A+AQ+F+F%&Y\_`q\r\r&rsssb	  !2333R    b	  '''qLG] F##^ u::??CDDD''a111r\   linesinside_enclosurec                   d}t          |          }||k     r5||         }|dk    r|r|                    |           |dz  }3|dk    r|                    d           |dz  }T|dk    rJ	 |                     |d |         |          }n2# t          $ r |                    |           |dz  }Y w xY w|d         }t          |          dk    r*|d         dk    r|                    |dd                     n|                    |           t          |          D ]}|                    d           ||z  }d}.|dz  }||k     3d S d S )Nr   r_  ra   r   )rp   r   r  rv   re  r   range)	r   r  rh  r  r  sizer  	prev_exprrl   s	            rZ   _util_remove_newlinesz'MathematicaParser._util_remove_newlines  s   6{{nn7OE}}# JJw'''AIDa<<JJqMMMAIDQ;;!$($<$<VHWH=MO_$`$`		& ! ! !

7+++	 !
 !'q	Iy>>A%%)A,:N*N*NLL122////LL+++w " "AJJqMMMMqLG= nnnnnns   -B $B32B3c                ^   t          |          }d}||k     r|dk    r|                     ||dz
                     rd|                     ||                   rI||         dk    rd||<   ||dz            d         ||dz   <   n |                    |d           |dz  }|dz  }|dz  }||k     d S d S )Nr   ra   r   r   )rp   r  r  r  )r   rh  r  r  s       rZ   _util_add_missing_asterisksz-MathematicaParser._util_add_missing_asterisks  s    KKnn!((!)<== ((99  '?c))&)F7O*01*=a*@F7Q;''MM'3///qLGAIDqLG! nnnnnnr\   Fc                <   d}g }|                      |||           t          | j                  D ]\  }}}d|v r|                     |           t	          |          }d}	|	|k     r||	         }
t          |
t                    r\|
|v rW||
         }t          |t                    r|g}d}ng }d}|
dv r5|| j        k    r*|	dk    r$|                     ||	dz
                     s|	dz  }	|| j	        k    rQ|	dk    sE|	|dz
  k    s<|                     ||	dz
                     s|                     ||	dz                      r|	dz  }	d}|||	<   || j	        k    r|
                    |	dz
            }|
                    |	          }|
dk    r|                     |          }n|
dk    r|                     |          }|	dz  }	|d	z  }|                    |           |}|| j        k    r|	d	z   |k     r|                     ||	dz            |
          r|                    |           |
                    |	dz             }|
                    |	dz             }|dk    r|                     |          }n|dk    r|                     |          }|d	z  }|	d	z   |k     r|                     ||	dz            |
          |                    |           n|| j        k    r|	d	z   |k     r{||	dz            |
k    rl|                    ||g           |d
         }|
                    |	dz              |
                    |	dz             }|d	z  }|	d	z   |k     r||	dz            |
k    l|                    |           n|| j        k    r|	dz   |k     r||	dz            |
k    rt          |t                    r|||         |g||<   n |||         |          ||<   |
                    |	dz              |
                    |	dz             }|d	z  }|	dz   |k     r||	dz            |
k    |                    |           n2|                    |           n|| j        k    r|t%          d          |	|dz
  k    s|                     ||	dz                      r | j        |
                     ||	<   n|                    |
                    |	dz                        |dz  }n|| j        k    r|t%          d          |	dk    s|                     ||	dz
                     r | j        |
                     ||	<   n5|                    |
                    |	dz
                       |	dz  }	|dz  }t          |t*                    rct-          j        t*          |          } || }|                                 t          |t2                    r|                    |           n|||	<   |	dz  }	|	|k     t	          |          dk    s&t	          |          dk    r:t	          |          dk    r'|r|                     ||          S t9          d          t	          |          dk    r3|d         r"|d         d         dk    r|d         dd          }dg||}|S |d         S )NFr   r   ra   r#  Tr'  r%  ro   r   z1'Prefix' op_type should not have a grouping stratz0unable to create a single AST for the expressionr   )r  reversedrQ  r  rp   rs   rW  PREFIXr  INFIXr   r\  r+  r   FLAT_check_op_compatibleRIGHTLEFT	TypeError_missing_arguments_defaultPOSTFIXr   typingcastclearr   re  r  rv   )r   rh  r  changedr  op_typegrouping_stratop_dictr  r  r  op_namenodefirst_indexarg1arg2node_pother_opop_callnew_nodecompound_expressions                        rZ   r  z%MathematicaParser._parse_after_braces!  su   ""5&2BCCC089X0Y0Y _	 _	,G^Wg~~00888FDGD..weS)) W7ew.>.>.5enG "'3// ( 'y&'!&'
**w$+/E/E'TU++^b^i^ijpqx{|q|j}^~^~+  1 $*,,"a<<7dQh+>+>$++fU\_`U`NaBbBb+>fjfqfqrx  zA  DE  zE  sF  gG  gG+>#qLG$"G&*F7O$*,,%zz'!)44%zz'22 C<<#'==#6#6DD"c\\#'==#6#6D1	D)))!%)TY66")A+"4"49R9RSYZabcZcSdfk9l9l"4 &d 3 3 3+1::gai+@+@'-zz'!)'<'<#+s??+/==+>+>DD%-__+/==+>+>D $	 #*A+"4"49R9RSYZabcZcSdfk9l9l"4 #MM$////+tz99")A+"4"4	9Je9S9S &wo > > >)/ &

719 5 5 5'-zz'!)'<'< $	 #*A+"4"4	9Je9S9S #MM$////+ty88")A+"4"4	9Je9S9S#-gs#;#; !];BF;DWY]:^F;$7$7:A'&BUW[:\:\F;$7 &

719 5 5 5'-zz'!)'<'< $	 #*A+"4"4	9Je9S9S #MM$//// KK---- DK//)5"+,_"`"``"dQh..$++fWq[>Q2R2R..Td.Me.T.V.VF7OO KK

719(=(=>>> AIDD DL00)5"+,_"`"``"a<<4;;vgk7J+K+K<.Td.Me.T.V.VF7OO KK

719(=(=>>>#qLG AID!'844 7,2K',J,J#*7D>

%h55 7 KK1111.6F7O1u D..v v;;??s5zzQ3v;;!3C3C J //8HIIIPQQQu::>>ay 'VAYq\-AAA122#7"I%"I&"I&&ayr\   op1op2c                N    ||k    rdS ddh}ddh}||v r||v rdS ||v r||v rdS dS )NTr   r'  r$  r%  Frk   )r   r  r  muldivaddsubs        rZ   r  z&MathematicaParser._check_op_compatible  sS    #::4ss&==SF]]4&==SF]]4ur\   wmexprc                   g }|g}t          j        d|          }d}|D ]e}| n_|                                }|||                             dd                              dd                              dd                                          }|                                dk    r"|dk    r|d                             |           n|                                dk    r6|dk    r|d                             |           |                                 nU|                                dk    r=|d                             |g           |                    |d         d                    |                                }g|d         S )	zH
        Parses FullForm[Downvalues[]] generated by Mathematica
        z[\[\],]r   Nr   r   r   r   r   )	r   finditerr   r   stripr   r   r   r   )	r   r  outr  	generatorlast_posrX  position	last_exprs	            rZ   _from_fullform_to_fullformlistz0MathematicaParser._from_fullform_to_fullformlist  sq    K
F33	 	# 	#E}{{}}Hx0199#rBBJJ3PRSS[[\_acddjjllI{{}}##??"I$$Y///#%%??"I$$Y///		#%%b	  )---U2Yr]+++yy{{HH1vr\   pylistc                <    ddl mm fd |          S )Nr   )r>   Symbolc                (   t          | t                    rNt          |           dk    r,| d         }fd| dd          D             }  |          | S t          d          t          | t                    r |           S t          |           S )Nr   c                &    g | ]} |          S rk   rk   )re   rw   	converters     rZ   rg   z\MathematicaParser._from_fullformlist_to_fullformsympy.<locals>.converter.<locals>.<listcomp>  s!    ???sIIcNN???r\   ra   zEmpty list of expressions)rs   r   rp   r   rW  rN   )exprheadrd   r>   r  r  s      rZ   r  zHMathematicaParser._from_fullformlist_to_fullformsympy.<locals>.converter  s    $%% 
&t99q==7D????d122h???D)88D>>400$%@AAAD#&& &vd||#~~%r\   )sympyr>   r  )r   r  r>   r  r  s     @@@rZ   #_from_fullformlist_to_fullformsympyz5MathematicaParser._from_fullformlist_to_fullformsympy  sR    ********	& 	& 	& 	& 	& 	& 	& y   r\   r
   Logc                 .    t          t          |            S r   )r   r  rf   s    rZ   r  zMathematicaParser.<lambda>  s    #x{{+ r\   Log2c                "    t          | d          S Nro   r   r  s    rZ   r  zMathematicaParser.<lambda>  s    #a)) r\   Log10c                "    t          | d          S )N
   r  r  s    rZ   r  zMathematicaParser.<lambda>  s    3q":: r\   ExpSqrtr   r   r   r   r   r   ArcSinArcCosArcTanc                 f    t          |           dk    rt          t          |            nt          |  S r  )rp   r*   r  r)   r  s    rZ   r  zMathematicaParser.<lambda>  s(    CFFaKKUHQKK00T1X r\   ArcCotArcSecArcCscSinhCoshTanhCothSechCschArcSinhArcCoshArcTanhArcCothArcSechArcCschExpandImReFlattenPolylogCancel
TrigExpandSignSimplifyDeferIdentityr   c                     t           j        S r   )r(   Zeror  s    rZ   r  zMathematicaParser.<lambda>	  s    16 r\   r+   r,   r-   
PochhammerExpIntegralEiSinIntegralCosIntegralAiryAiAiryAiPrimeAiryBiAiryBiPrimeLogIntegralPrimePiPrimePrimeQr2  )rH   r>   )r?   r   c                (      fd |          S )Nc                r   t          | t                    rzt          | d         t                    r | d                   }n4j                            | d         t	          | d                             } |fd| dd          D              S j                            | t          |                     S )Nr   c                &    g | ]} |          S rk   rk   )re   rw   recurses     rZ   rg   zRMathematicaParser._from_fullformlist_to_sympy.<locals>.recurse.<locals>.<listcomp>3  s!    ???sggcll???r\   ra   )rs   r   _node_conversionsgetr>   _atom_conversionsrM   )r  r  r  r   s     rZ   r  z>MathematicaParser._from_fullformlist_to_sympy.<locals>.recurse-  s    $%% Gd1gt,, R"747++DD155d1gxQ?P?PQQDt????d122h???@@-11$FFFr\   rk   )r   full_form_listr  s   ` @rZ   r   z-MathematicaParser._from_fullformlist_to_sympy+  s:    	G 	G 	G 	G 	G 	G w~&&&r\   c                    |}| j                                         D ](\  }}|                    t          |          |          })|S r   )r  r   r   r>   )r   mformr  mma_form
sympy_nodes        rZ   _from_fullformsympy_to_sympyz.MathematicaParser._from_fullformsympy_to_sympy9  sN    $($:$@$@$B$B 	@ 	@ Hj<< 2 2J??DDr\   r   )rp  rW  )r  r  r  r  )rh  r   )r  r   rh  r   r  r  )F)rh  r   r  r  )r  rW  r  rW  )r  rW  )r  r   )__name__
__module____qualname____doc__r   r   arctrir   r   lowerr   r   r   r   r   r   r   r   ARG_MTRX_PATTERNr   r   __annotations__r   r   classmethodr   r   r   r   r   r   r   r   r   rV   r^   r  r  r  r  r  r  rQ  r  ra  rY  rb  rc  r+  r\  r`  ro  r   r  r  r  r   r  r  r  r  r  r  r   r   r	   r
   r   r   r   r   r   r8   r9   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/   r0   r1   r2   r3   r4   rO   rP   r5   r6   r7   rA   rC   rB   rD   rE   rF   rG   rH   r}   r  r?   r@   r  r   r  rk   r\   rZ   rU   rU   n   sI         (9 	( 	(	
 	J 	: 	K 	J 	9 	9 	) 	l 	G 	' 	'  	[!" 	*#$ !*!"!/  O6 w{ -67@B B ) )S!3Y]U" 	)syy{{"Q&.BBq5(BBx(((( 	 L BJ  Z	! !
  BJ  Z	! !
  BJ  Z	! !
  BJ  Z! ! ;& &ER   Z! !J "rz #Z! !
 ;=L<<<< =?N>>>> =?N>>>># # [#
@ @ @ @0 = = [=~% % %N@ @ @D # # [#J   [
   [ " " ["  :   EFGDED 
$  Z  Z  [  	\	s012	U,g^clt~  	A	t0012	$j)*	t\*+	fM::;	t[)*	sN+,	$z.AAB	tTl#	tUm$	U|$	gi889	WI[v]kr{||}	tVn%	F001	G'223	sEl#	DD([* * 	+	W~&	gU8LwLwxxy	$lLXcdde	008T8TUUV	33..IIJ	sM*+	$44CC==BB	
 
 	 
sEEFG	V>::;G$[ $ $ $ $N #"++" "
 'H1G+++O,,,p p [p " " [" % % %"- - - -^   & & & &
& & & &
52 52 52 52n! ! ! !F   *w w w w wr	 	 	 	   6! ! ! !$RRR 	R 	H	R
 	++R 	##R 	%%R 	HR 	sR 	R 	sR 	sR 	sR 	sR  	s!R" 	s#R& 	$'R R( 	$)R* 	MM+R, 	$-R. 	$/R0 	$1R4 	5R6 	7R8 	9R: 	;R< 	=R> 	?RB 	5CRD 	5ERF 	5GRH 	5IRJ 	5KRL 	5MR R RP 	&QRR 	bSRT 	ehURV 	7WRX 	7YRZ 	&[R^ 	k_R` 	aRb 	HcRd 	eRf 	AgRn 	!!oRp 	sqRr 	ssRt 	suRv 	bwRx 	yR R Rz 	r{R| 	r}R~ 	&R@ 	{ARB 	&CRD 	{ERF 	rGRH 	7IRJ 	KRL 	'MRP 	QRR 	$SRT 	URV 	WRX 	XYRZ 	[R\ 	b]R R^ #cR R Rj  
' ' '    r\   rU   r   )]
__future__r   r   r  	itertoolsr   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/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   sympy.core.sympifyrM   rN   sympy.functions.special.besselrO   'sympy.functions.special.error_functionsrP   sympy.utilities.exceptionsrQ   r[   r_   r}   r   rU   rk   r\   rZ   <module>r0     s   " " " " " " 				                        A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
 1 0 0 0 0 0 0 0 6 6 6 6 6 6 6 6 6 6 6 6 @ @ @ @ @ @
) 
) 
) 
)3 3 3lD D D&  
 O O O O O O O O O Or\   