Skip to main content

Convert LaTeX math to SymPy expressions

Project description

Logo

latex2sympy2_extended

About

latex2sympy2_extended parses LaTeX math expressions and converts it into the equivalent SymPy form. The latex2sympy2_extended is adapted from OrangeX4/latex2sympy.

ANTLR 4.13.1 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...
  • Set: Union (∪), Intersection (∩), etc...
  • Other: Binomial...

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

NOTICE: comma separated numbers are only supported in standalone form: 1,233, not in expressions: 1,233x.

Installation

pip install latex2sympy2_extended

Requirements: sympy and antlr4-python3-runtime packages.

Usage

Basic

In Python:

from latex2sympy2_extended import latex2sympy

tex = r"\frac{d}{dx}(x^{2}+x)"
latex2sympy(tex)
# => "Derivative(x**2 + x, x)"

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

Eval At

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

# After
y + 3

Matrix

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

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 hynky1999/latex2sympy2_extended.

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

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

latex2sympy2_extended-1.0.3.tar.gz (82.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

latex2sympy2_extended-1.0.3-py3-none-any.whl (82.0 kB view details)

Uploaded Python 3

File details

Details for the file latex2sympy2_extended-1.0.3.tar.gz.

File metadata

  • Download URL: latex2sympy2_extended-1.0.3.tar.gz
  • Upload date:
  • Size: 82.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.1

File hashes

Hashes for latex2sympy2_extended-1.0.3.tar.gz
Algorithm Hash digest
SHA256 0d3010068ea98d92dbaf68b7d9afdd65b4853adc10f0be141c137e82e47a56a5
MD5 4dc3618ced13053db557cf474c4c682c
BLAKE2b-256 9be2f4a931e8d7b8c2934117e21888e9c653d7f2e96de25f301eac896973c3ea

See more details on using hashes here.

File details

Details for the file latex2sympy2_extended-1.0.3-py3-none-any.whl.

File metadata

File hashes

Hashes for latex2sympy2_extended-1.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 457cda38e462e709b34559727852409e4cd49f58da5d2c2943389d28fe1917a0
MD5 eed15d1ffa077e273f31d25c2fd55de3
BLAKE2b-256 07250cbd3d94766137706d5635574221daa67191a6130e6a63e464aff84c266c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page