Skip to main content

Logo

latex2sympy2

About

latex2sympy2 parses LaTeX math expressions and converts it into the equivalent SymPy form. The latex2sympy2 is adapted from augustt198/latex2sympy and purdue-tlt / latex2sympy.

This project is a part of a VS Code extension called Latex Sympy Calculator. It is designed for providing people writing in latex or markdown a ability to calculate something when writing math expression.

ANTLR is used to generate the parser.

Features

  • Arithmetic: Add (+), Sub (-), Dot Mul (·), Cross Mul (×), Frac (/), Power (^), Abs (|x|), Sqrt (√), etc...
  • Alphabet: a - z, A - Z, α - ω, Subscript (x_1), Accent Bar(ā), etc...
  • Common Functions: gcd, lcm, floor, ceil, max, min, log, ln, exp, sin, cos, tan, csc, sec, cot, arcsin, sinh, arsinh, etc...
  • Funcion Symbol: f(x), f(x-1,), g(x,y), etc...
  • Calculous: Limit ($lim_{n\to\infty}$), Derivation ($\frac{d}{dx}(x^2+x)$), Integration ($\int xdx$), etc...
  • Linear Algebra: Matrix, Determinant, Transpose, Inverse, Elementary Transformation, etc...
  • Other: Binomial...

NOTICE: It will do some irreversible calculations when converting determinants, transposed matrixes and elementary transformations...

Installation

pip install latex2sympy2

Requirements: sympy and antlr4-python3-runtime packages.

Usage

Basic

In Python:

from latex2sympy2 import latex2sympy, latex2latex

tex = r"\frac{d}{dx}(x^{2}+x)"
# Or you can use '\mathrm{d}' to replace 'd'
latex2sympy(tex)
# => "Derivative(x**2 + x, x)"
latex2latex(tex)
# => "2 x + 1"

Examples

LaTeX Converted SymPy Calculated Latex
x^{3} $x^{3}$ x**3 x^{3} $x^{3}$
\frac{d}{dx} tx $\frac{d}{dx}tx$ Derivative(x*t, x) t $t$
\sum_{i = 1}^{n} i $\sum_{i = 1}^{n} i$ Sum(i, (i, 1, n)) \frac{n \left(n + 1\right)}{2} $\frac{n \left(n + 1\right)}{2}$
\int_{a}^{b} \frac{dt}{t} Integral(1/t, (t, a, b)) -\log{(a)} + \log{(b)} $-\log{(a)} + \log{(b)}$
`(2x^3 - x + z) {x=3}` $(2x^3 - x + z)|{x=3}$ z + 51

If you want to read the math formula, you can click GitNotes.

Solve Equation

# Before
x + y = 1

# After
[ y = 1 - x, \  x = 1 - y]

Eval At

# Before
(x+2)|_{x=y+1}

# After
y + 3

Matrix

Identity matrix

tex = r"\bm{I}_3"
latex2sympy(tex)
# => "Matrix([[1, 0, 0], [0, 1, 0], [0, 0, 1]])"

Determinant

from latex2sympy2 import latex2sympy

tex = r"\begin{vmatrix} x & 0 & 0 \\ 0 & x & 0 \\ 0 & 0 & x \end{vmatrix}"
latex2sympy(tex)
# => "x^{3}"

Transpose

from latex2sympy2 import latex2sympy

tex = r"\begin{pmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{pmatrix}^T"
# Or you can use "\begin{pmatrix}1&2&3\\4&5&6\\7&8&9\end{pmatrix}'"
latex2sympy(tex)
# => "Matrix([[1, 4, 7], [2, 5, 8], [3, 6, 9]])"

Elementary Transformation

from latex2sympy2 import latex2sympy

matrix = r'''
    \begin{pmatrix}
        1 & 2 & 3 \\ 
        4 & 5 & 6 \\
        7 & 8 & 9 \\ 
    \end{pmatrix}
'''

# Scale the row with grammar "\xrightarrow{kr_n}"
tex = matrix + r'\xrightarrow{3r_1}'
latex2sympy(tex)
# => "Matrix([[3, 6, 9], [4, 5, 6], [7, 8, 9]])"

# Swap the cols with grammar "\xrightarrow{c_1<=>c_2}"
# Of course, you can use "\leftrightarrow" to replace "<=>" 
tex = matrix + r'\xrightarrow{c_1<=>c_2}'
latex2sympy(tex)
# => "Matrix([[2, 1, 3], [5, 4, 6], [8, 7, 9]])"

# Scale the second row and add it to the first row
# with grammar "\xrightarrow{r_1+kr_2}"
tex = matrix + r'\xrightarrow{r_1+kr_2}'
latex2sympy(tex)
# => "Matrix([[4*k + 1, 5*k + 2, 6*k + 3], [4, 5, 6], [7, 8, 9]])"

# You can compose the transform with comma ","
# and grammar "\xrightarrow[4r_3]{2r_1, 3r_2}"
# Remember the priority of "{}" is higher than "[]"
tex = matrix + r'\xrightarrow[4r_3]{2r_1, 3r_2}'
latex2sympy(tex)
# => "Matrix([[2, 4, 6], [12, 15, 18], [28, 32, 36]])"

Variances

from latex2sympy2 import latex2sympy, variances, var, set_variances

# Assign x a value of 1
latex2sympy(r"x = 1")

# Assign x a matrix symbol with dimension of n x m
latex2sympy(r"x \in \mathbb{R}^{n \times m}")

# Calculate x + y
latex2sympy(r"x + y")
# => "y + 1"

# Get all variances
print(variances)
# => "{x: 1}"

# Get variance of "x"
print(var["x"])
# => "1"

# Reset all variances
set_variances({})
latex2sympy(r"x + y")
# => "x + y"

Complex Number Support

from latex2sympy2 import set_real

set_real(False)

Contributing

If you want to add a new grammar, you can fork the code from OrangeX4/latex2sympy.

  • To modify parser grammar, view the existing structure in PS.g4.
  • To modify the action associated with each grammar, look into latex2sympy.py.

Contributors are welcome! Feel free to open a pull request or an issue.

Metadata

Release files for rlinf_latex2sympy2 1.9.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for rlinf_latex2sympy2 1.9.0
File Size Uploaded
rlinf_latex2sympy2-1.9.0.tar.gz 82.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for rlinf_latex2sympy2 1.9.0
File Interpreter ABI Platform
rlinf_latex2sympy2-1.9.0-py3-none-any.whl Python 3 none any Details

Total release size: 173.8 kB

Release files / rlinf_latex2sympy2-1.9.0.tar.gz

Download URL rlinf_latex2sympy2-1.9.0.tar.gz
Size 82.9 kB
Tags Source
SHA-256 checksum
How to use checksums
3033fc882e5a8e1fd67aeda8b31623d3375887c147ced7e47279e29aa40dbd01
BLAKE2b-256 checksum
How to use checksums
371ec56944cfbcceba7986ce1bed6fb77b3e60da4d25147a8d3fe35f4b8262eb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.10.2 {"installer":{"name":"uv","version":"0.10.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / rlinf_latex2sympy2-1.9.0-py3-none-any.whl

Download URL rlinf_latex2sympy2-1.9.0-py3-none-any.whl
Size 90.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2289af0b43b493878777388c46313edffbd0f68535b735c25193d915cc285f3d
BLAKE2b-256 checksum
How to use checksums
d5a754cd35d6a8c4cc81a5b80ea9be2d6cf5be91accb0795e8661e2131e056ae
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.10.2 {"installer":{"name":"uv","version":"0.10.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

1.9.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page