Spaces:
Running
Running
from sympy.external import import_module | |
from sympy.utilities.decorator import doctest_depends_on | |
from sympy.parsing.latex.lark import LarkLaTeXParser, TransformToSymPyExpr, parse_latex_lark # noqa | |
from .errors import LaTeXParsingError # noqa | |
__doctest_requires__ = {('parse_latex',): ['antlr4', 'lark']} | |
def parse_latex(s, strict=False, backend="antlr"): | |
r"""Converts the input LaTeX string ``s`` to a SymPy ``Expr``. | |
Parameters | |
========== | |
s : str | |
The LaTeX string to parse. In Python source containing LaTeX, | |
*raw strings* (denoted with ``r"``, like this one) are preferred, | |
as LaTeX makes liberal use of the ``\`` character, which would | |
trigger escaping in normal Python strings. | |
backend : str, optional | |
Currently, there are two backends supported: ANTLR, and Lark. | |
The default setting is to use the ANTLR backend, which can be | |
changed to Lark if preferred. | |
Use ``backend="antlr"`` for the ANTLR-based parser, and | |
``backend="lark"`` for the Lark-based parser. | |
The ``backend`` option is case-sensitive, and must be in | |
all lowercase. | |
strict : bool, optional | |
This option is only available with the ANTLR backend. | |
If True, raise an exception if the string cannot be parsed as | |
valid LaTeX. If False, try to recover gracefully from common | |
mistakes. | |
Examples | |
======== | |
>>> from sympy.parsing.latex import parse_latex | |
>>> expr = parse_latex(r"\frac {1 + \sqrt {\a}} {\b}") | |
>>> expr | |
(sqrt(a) + 1)/b | |
>>> expr.evalf(4, subs=dict(a=5, b=2)) | |
1.618 | |
>>> func = parse_latex(r"\int_1^\alpha \dfrac{\mathrm{d}t}{t}", backend="lark") | |
>>> func.evalf(subs={"alpha": 2}) | |
0.693147180559945 | |
""" | |
if backend == "antlr": | |
_latex = import_module( | |
'sympy.parsing.latex._parse_latex_antlr', | |
import_kwargs={'fromlist': ['X']}) | |
if _latex is not None: | |
return _latex.parse_latex(s, strict) | |
elif backend == "lark": | |
return parse_latex_lark(s) | |
else: | |
raise NotImplementedError(f"Using the '{backend}' backend in the LaTeX" \ | |
" parser is not supported.") | |