1 | initial version |

It turns out that `sympy`

has an (experimental) latex parser, which however does not seem to be able to do what you mean. You'll need to install the `antlr4-python3-runtime`

library in Sage's `pip`

.

```
sage: from sympy.parsing.latex import parse_latex
sage: parse_latex(r"\int_a^b f(x) dx")
ANTLR runtime and generated code versions disagree: 4.9!=4.7.2
ANTLR runtime and generated code versions disagree: 4.9!=4.7.2
Integral(f(x), (x, a, b))
sage: parse_latex(r"\int_a^b f(x) dx")._sage_()
ANTLR runtime and generated code versions disagree: 4.9!=4.7.2
ANTLR runtime and generated code versions disagree: 4.9!=4.7.2
integrate(f(x), x, a, b)
```

One notes warnings about version mismatches (tome explored further). Notwithstanding these warnings, the parser *seems* to be able to correctly parse simple latex expression and genetare the `sumpy`

representation of the objects they represent (which be re-translated to `sage`

).

However, your latex expression is to complex to be parsed :

```
sage: parse_latex(z_k)
ANTLR runtime and generated code versions disagree: 4.9!=4.7.2
ANTLR runtime and generated code versions disagree: 4.9!=4.7.2
2
```

Eliminating the "obvious suspects" (text at the end of the expression, implicit multiplications) is not sufficient :

```
sage: z_k1 = r"2*\sqrt{\frac{-p}3}*\cos{\left(\frac13\arccos{\left(\frac{-q}2\sqrt{\frac{27}{-p^3}}\right)}+ \frac{2*k\pi}3\right)}"
sage: parse_latex(z_k1)
ANTLR runtime and generated code versions disagree: 4.9!=4.7.2
ANTLR runtime and generated code versions disagree: 4.9!=4.7.2
2
```

Some exploration seems to be in order. Could you keep us posted if you decide to go further ?

HTH,

2 | No.2 Revision |

It turns out that `sympy`

has an (experimental) latex parser, which however does not seem to be able to do what you mean. You'll need to install the `antlr4-python3-runtime`

library in Sage's `pip`

.

```
sage: from sympy.parsing.latex import parse_latex
sage: parse_latex(r"\int_a^b f(x) dx")
ANTLR runtime and generated code versions disagree: 4.9!=4.7.2
ANTLR runtime and generated code versions disagree: 4.9!=4.7.2
Integral(f(x), (x, a, b))
sage: parse_latex(r"\int_a^b f(x) dx")._sage_()
ANTLR runtime and generated code versions disagree: 4.9!=4.7.2
ANTLR runtime and generated code versions disagree: 4.9!=4.7.2
integrate(f(x), x, a, b)
```

One notes warnings about version mismatches (tome explored further). Notwithstanding these warnings, the parser *seems* to be able to correctly parse simple latex expression and genetare the `sumpy`

representation of the objects they represent (which be re-translated to `sage`

).

However, your latex expression is to complex to be parsed :

```
sage: parse_latex(z_k)
ANTLR runtime and generated code versions disagree: 4.9!=4.7.2
ANTLR runtime and generated code versions disagree: 4.9!=4.7.2
2
```

Eliminating the "obvious suspects" (text at the end of the expression, implicit multiplications) is not sufficient :

```
sage: z_k1 = r"2*\sqrt{\frac{-p}3}*\cos{\left(\frac13\arccos{\left(\frac{-q}2\sqrt{\frac{27}{-p^3}}\right)}+ \frac{2*k\pi}3\right)}"
sage: parse_latex(z_k1)
ANTLR runtime and generated code versions disagree: 4.9!=4.7.2
ANTLR runtime and generated code versions disagree: 4.9!=4.7.2
2
```

Some exploration seems to be in order. Could you keep us posted if you decide to go further ?

**EDIT :** I did a bit of exploring myself. The problem seems to be bound to the fact that the arguments of `\frac`

*must* be surrounded by braces in order to be parsed :

```
parse_latex(r"\frac{1}{2}")
ANTLR runtime and generated code versions disagree: 4.9!=4.7.2
ANTLR runtime and generated code versions disagree: 4.9!=4.7.2
1/2
sage: parse_latex(r"\frac12")
ANTLR runtime and generated code versions disagree: 4.9!=4.7.2
ANTLR runtime and generated code versions disagree: 4.9!=4.7.2
---------------------------------------------------------------------------
LaTeXParsingError Traceback (most recent call last)
[ Snip... ]
LaTeXParsingError: missing '{' at '12'
\frac12
~~~~~^
```

And, indeed, :

```
sage: parse_latex(r"2 \sqrt{\frac{-p}{3}} \cos{\left(\frac{1}{3}\arccos{\left(\frac{-q}{2}\sqrt{\frac{27}{-p^3}}\right)}+ \frac{2k\pi}{3}\right)}")
ANTLR runtime and generated code versions disagree: 4.9!=4.7.2
ANTLR runtime and generated code versions disagree: 4.9!=4.7.2
2*((sqrt(3)*sqrt(-p)/3)*cos((2*(k*pi))/3 + acos(((-q)/2)*(3*sqrt(3)*sqrt(1/(-p**3))))/3))
```

which is, indeed, (mathematically) equal to the typeset expression ; however, `sympy`

and/or `sage`

refactored some parts of the expression (see the innumerable questions about the "right" way to format an expression, which amount to the lack of algorithmic definition of "well-typeset"...), and the expressions are *cosmetically* different.

TL;DR : `parse_latex`

might help more with *some* latex expressions if they were not too much "hand-optimized" (the `frac`

in `\frac12`

has indeed two arguments (see the \TeX book...), but is too "hand-optimized" for `parse_latex`

(or for my taste, BTW...)).

HTH,

3 | No.3 Revision |

It turns out that `sympy`

has an (experimental) ~~latex parser, ~~LaTeX parser,
which however ~~ ~~does not ~~ ~~seem to be ~~able to do what ~~up to the task you ~~mean. ~~ask.
You'll need to install the `antlr4-python3-runtime`

~~library in ~~library
using Sage's `pip`

.

```
sage: from sympy.parsing.latex import parse_latex
sage: parse_latex(r"\int_a^b f(x) dx")
ANTLR runtime and generated code versions disagree: 4.9!=4.7.2
ANTLR runtime and generated code versions disagree: 4.9!=4.7.2
Integral(f(x), (x, a, b))
sage: parse_latex(r"\int_a^b f(x) dx")._sage_()
ANTLR runtime and generated code versions disagree: 4.9!=4.7.2
ANTLR runtime and generated code versions disagree: 4.9!=4.7.2
integrate(f(x), x, a, b)
```

~~One notes ~~Some of the version mismatch warnings ~~about version mismatches (tome ~~are explored ~~further). ~~further.
Notwithstanding these warnings, the parser *seems* to be ~~able ~~able
to correctly parse simple ~~latex ~~LaTeX expression and ~~genetare the ~~generate
the SymPy representation of the objects they `sumpy`

~~represent ~~represent
(which can then be re-translated to Sage).`sage`

).

However, your ~~latex ~~LaTeX expression is to complex to be ~~parsed :~~parsed:

```
sage: parse_latex(z_k)
ANTLR runtime and generated code versions disagree: 4.9!=4.7.2
ANTLR runtime and generated code versions disagree: 4.9!=4.7.2
2
```

Eliminating the "obvious suspects" (text at the end of the ~~expression, ~~expression,
implicit multiplications) is not ~~sufficient :~~enough:

```
sage: z_k1 = r"2*\sqrt{\frac{-p}3}*\cos{\left(\frac13\arccos{\left(\frac{-q}2\sqrt{\frac{27}{-p^3}}\right)}+ \frac{2*k\pi}3\right)}"
sage: parse_latex(z_k1)
ANTLR runtime and generated code versions disagree: 4.9!=4.7.2
ANTLR runtime and generated code versions disagree: 4.9!=4.7.2
2
```

Some exploration seems to be in ~~order. ~~order.
Could you keep us posted if you decide to go ~~further ?~~further?

**EDIT :** I did a bit of exploring myself. The problem seems ~~to be bound ~~bound
to the fact that the arguments of `\frac`

*must* be ~~surrounded ~~surrounded
by braces in order to be ~~parsed :~~parsed:

```
parse_latex(r"\frac{1}{2}")
ANTLR runtime and generated code versions disagree: 4.9!=4.7.2
ANTLR runtime and generated code versions disagree: 4.9!=4.7.2
1/2
sage: parse_latex(r"\frac12")
ANTLR runtime and generated code versions disagree: 4.9!=4.7.2
ANTLR runtime and generated code versions disagree: 4.9!=4.7.2
---------------------------------------------------------------------------
LaTeXParsingError Traceback (most recent call last)
[ Snip... ]
LaTeXParsingError: missing '{' at '12'
\frac12
~~~~~^
```

And, ~~indeed, :~~indeed:

```
sage: parse_latex(r"2 \sqrt{\frac{-p}{3}} \cos{\left(\frac{1}{3}\arccos{\left(\frac{-q}{2}\sqrt{\frac{27}{-p^3}}\right)}+ \frac{2k\pi}{3}\right)}")
ANTLR runtime and generated code versions disagree: 4.9!=4.7.2
ANTLR runtime and generated code versions disagree: 4.9!=4.7.2
2*((sqrt(3)*sqrt(-p)/3)*cos((2*(k*pi))/3 + acos(((-q)/2)*(3*sqrt(3)*sqrt(1/(-p**3))))/3))
```

which is, indeed, (mathematically) equal to the typeset ~~expression ; ~~expression;
however, SymPy and/or `sympy`

Sage refactored some parts of the `sage`

~~expression ~~expression
(see the innumerable questions about the "right" way to format an ~~expression, ~~expression,
which ~~amount ~~point to the lack of an algorithmic definition of ~~"well-typeset"...), ~~"well-typeset"...),
and the expressions are *cosmetically* different.

TL;DR : `parse_latex`

might help more with *some* ~~latex expressions ~~LaTeX expressions
if they were not too much "hand-optimized" (the `frac`

in `\frac12`

~~ ~~ has indeed two arguments (see the \TeX book...), but is ~~too ~~too
"hand-optimized" for `parse_latex`

(or for my taste, BTW...)).

HTH,

Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.