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...
  • Function 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

Current version supports 3 runtimes:

  • 4.9.3
  • 4.11.0
  • 4.13.2

Use the following command to install with the runtime you need:

pip install latex2sympy2_extended[antlr4_13_2]

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.11.0.tar.gz (207.0 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.11.0-py3-none-any.whl (209.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: latex2sympy2_extended-1.11.0.tar.gz
  • Upload date:
  • Size: 207.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for latex2sympy2_extended-1.11.0.tar.gz
Algorithm Hash digest
SHA256 9695657c81b50abba2636638638618db59f4663ed2a4a12d62cef74a40e28fec
MD5 36105a41355aa9a714ccc6ef1527703e
BLAKE2b-256 3075456da2da05f6380ea96e6ea804ab2c03e41fc3ed80052307fe8efe6ea20e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for latex2sympy2_extended-1.11.0-py3-none-any.whl
Algorithm Hash digest
SHA256 aebb77d52ce269e25028e4bea89ddb14d242ba36bcf7b636496fb5fd9728d234
MD5 ce52523b2f7c031c73bb845cfdaad75c
BLAKE2b-256 e961f75cd1fa54d8434276126034aed54dd120747de9a8fa013cdd79545ccbeb

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