NRPy+'s LaTeX Interface to SymPy (CAS) for General Relativity
- automatic expansion of
- Einstein summation convention
- Levi-Civita and Christoffel symbols
- Lie and covariant derivatives
- metric inverse and determinant
- automatic index raising and lowering
- arbitrary coordinate system (default)
- exception handling and debugging
To install NRPyLaTeX using PyPI, run the following command in the terminal
$ pip install nrpylatex
If you are using Mathematica instead of SymPy, run the following code to convert your output
from sympy import mathematica_code
namespace = parse_latex(...)
for var in namespace:
exec(f'{var} = mathematica_code({var})')
If you are using a different CAS, reference the SymPy documentation to find the relevant printing function.
Quick Start | NRPy+ Integration | Guided Example (BSSN Formalism)
Getting Started and API Reference
Simple Example (Kretschmann Scalar)
Python REPL or Script (*.py)
>>> from nrpylatex import parse_latex
>>> parse_latex(r"""
... % ignore "\begin{align}" "\end{align}"
... \begin{align}
... % coord [t, r, \theta, \phi]
... % define gDD --dim 4 --zeros
... % define G M --const
... %% define Schwarzschild metric diagonal
... g_{t t} &= -\left(1 - \frac{2GM}{r}\right) \\
... g_{r r} &= \left(1 - \frac{2GM}{r}\right)^{-1} \\
... g_{\theta \theta} &= r^2 \\
... g_{\phi \phi} &= r^2 \sin^2{\theta} \\
... %% generate metric inverse gUU, determinant det(gDD), and connection GammaUDD
... % assign gDD --metric
... R^\alpha{}_{\beta \mu \nu} &= \partial_\mu \Gamma^\alpha_{\beta \nu} - \partial_\nu \Gamma^\alpha_{\beta \mu}
... + \Gamma^\alpha_{\mu \gamma} \Gamma^\gamma_{\beta \nu} - \Gamma^\alpha_{\nu \sigma} \Gamma^\sigma_{\beta \mu} \\
... K &= R^{\alpha \beta \mu \nu} R_{\alpha \beta \mu \nu}
... \end{align}
... """)
('G', 'GammaUDD', 'gDD', 'gUU', 'epsilonUUUU', 'RUDDD', 'K', 'RUUUU', 'M', 'r', 'theta', 'RDDDD', 'gdet')
>>> from sympy import simplify
>>> print(simplify(K))
48*G**2*M**2/r**6
IPython REPL or Jupyter Notebook
In [1]: %load_ext nrpylatex
In [2]: %%parse_latex
...: % ignore "\begin{align}" "\end{align}"
...: \begin{align}
...: % coord [t, r, \theta, \phi]
...: % define gDD --dim 4 --zeros
...: % define G M --const
...: %% define Schwarzschild metric diagonal
...: g_{t t} &= -\left(1 - \frac{2GM}{r}\right) \\
...: g_{r r} &= \left(1 - \frac{2GM}{r}\right)^{-1} \\
...: g_{\theta \theta} &= r^2 \\
...: g_{\phi \phi} &= r^2 \sin^2{\theta} \\
...: %% generate metric inverse gUU, determinant det(gDD), and connection GammaUDD
...: % assign gDD --metric
...: R^\alpha{}_{\beta \mu \nu} &= \partial_\mu \Gamma^\alpha_{\beta \nu} - \partial_\nu \Gamma^\alpha_{\beta \mu}
...: + \Gamma^\alpha_{\mu \gamma} \Gamma^\gamma_{\beta \nu} - \Gamma^\alpha_{\nu \sigma} \Gamma^\sigma_{\beta \mu} \\
...: K &= R^{\alpha \beta \mu \nu} R_{\alpha \beta \mu \nu}
...: \end{align}
Out[2]: ('G', 'GammaUDD', 'gDD', 'gUU', 'epsilonUUUU', 'RUDDD', 'K', 'RUUUU', 'M', 'r', 'theta', 'RDDDD', 'gdet')
In [3]: from sympy import simplify
In [4]: print(simplify(K))
Out[4]: 48*G**2*M**2/r**6