from sympy.external import import_module
from sympy.utilities.decorator import doctest_depends_on

from .errors import LaTeXParsingError  # noqa

@doctest_depends_on(modules=('antlr4',))
def parse_latex(s):
    r"""Converts the 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.

    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
    """

    _latex = import_module(
        'sympy.parsing.latex._parse_latex_antlr',
        import_kwargs={'fromlist': ['X']})

    if _latex is not None:
        return _latex.parse_latex(s)
    else:
        raise ImportError("Could not import 'sympy.parsing.latex._parse_latex_antlr'!")
