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 