Skip to main content

General Relativity computation library built on Symbolica

Project description

Gravica

PyPI

General Relativity computation library built on Symbolica (Rust-powered CAS).

Gravica computes the full GR tensor chain — from metric tensor to Einstein tensor — using Symbolica's high-performance symbolic algebra engine, achieving 23x–4300x speedup over EinsteinPy/SymPy.

Features

  • Full GR computation chain: Metric → Christoffel → Riemann → Ricci → Einstein → Weyl
  • Curvature invariants: Kretschner scalar, Ricci scalar
  • Schouten tensor, Stress-Energy-Momentum tensor
  • Geodesic equation generator
  • Index raising/lowering utilities
  • Built-in metrics: Minkowski, Schwarzschild, Kerr, FLRW, Reissner-Nordström, de Sitter, anti-de Sitter, Gödel
  • Lazy evaluation with caching
  • Cross-validated against EinsteinPy

Documentation

API reference: https://site.jijinbei.jp/gravica/

Quick Start

See tutorials/getting_started.ipynb for a step-by-step guide.

Benchmarks: Gravica vs EinsteinPy

All benchmarks measured on the same machine. Median of 3 runs with GC disabled.

Speedup Heatmap

Speedup Heatmap

Absolute Time Comparison

Time Comparison

Summary

Computation Minkowski Schwarzschild FLRW
Christoffel 33x 23x 23x
Riemann 91x 149x 147x
Ricci 72x 40x 296x
Ricci Scalar 472x 2021x 544x
Einstein 1391x 4342x 1029x

Metric inverse is ~0.3–0.5x (Python cofactor overhead), but this is amortized by the massive speedups in downstream computations.

Reproduce

uv run benchmarks/run_benchmarks.py    # Run benchmarks
uv run benchmarks/plot_benchmarks.py   # Generate charts

Architecture

MetricTensor → ChristoffelSymbols → RiemannTensor → RicciTensor → EinsteinTensor
                      ↓                   ↓              ↓       → WeylTensor
               GeodesicEquations   KretschnerScalar  SchoutenTensor
                                                              ↓
                                                     StressEnergyTensor
Module Computes
metric.py $g_{ab}$, $g^{ab}$, $\det(g)$
christoffel.py $\Gamma^a_{\ bc} = g^{ad},\tfrac{1}{2}(\partial_b,g_{ac} + \partial_c,g_{ab} - \partial_a,g_{bc})$
riemann.py $R^a_{\ bcd}$, $R_{abcd}$, $R^{abcd}$
ricci.py $R_{ab} = R^c_{\ acb}$, $R = g^{ab},R_{ab}$
einstein.py $G_{ab} = R_{ab} - \tfrac{1}{2},g_{ab},R$
weyl.py $C_{abcd}$ (Weyl conformal tensor)
kretschner.py $K = R_{abcd},R^{abcd}$ (Kretschner scalar)
geodesic.py $\ddot{x}^a + \Gamma^a_{\ bc},\dot{x}^b,\dot{x}^c = 0$
schouten.py $S_{ab} = \tfrac{1}{n-2}\bigl(R_{ab} - \tfrac{R,g_{ab}}{2(n-1)}\bigr)$
stress_energy.py $8\pi G,T_{ab} = G_{ab} + \Lambda,g_{ab}$
indexing.py Index raising / lowering for rank-2 tensors

Tests

uv run pytest

Verified properties:

  • Minkowski: All tensors $= 0$
  • Schwarzschild: $R_{ab} = 0$, $G_{ab} = 0$ (vacuum), $K = 12,r_s^2/r^6$
  • Riemann symmetries: $R^a_{\ bcd} = -R^a_{\ bdc}$
  • Christoffel known values: $\Gamma^r_{\ tt} = r_s(r-r_s)/(2r^3)$
  • de Sitter / anti-de Sitter: Ricci scalar matches analytic values
  • Geodesic equations: Free particle in Minkowski
  • Index roundtrip: Raise then lower recovers original tensor
  • EinsteinPy cross-validation: Christoffel and Ricci match

License

MIT

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

gravica-0.1.1.tar.gz (322.9 kB view details)

Uploaded Source

Built Distribution

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

gravica-0.1.1-py3-none-any.whl (23.6 kB view details)

Uploaded Python 3

File details

Details for the file gravica-0.1.1.tar.gz.

File metadata

  • Download URL: gravica-0.1.1.tar.gz
  • Upload date:
  • Size: 322.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.11

File hashes

Hashes for gravica-0.1.1.tar.gz
Algorithm Hash digest
SHA256 3c4d8e4254d1b258bb7fc4939077cd844d4c6d419432f5953f79fd09149bc861
MD5 27523c8c1d06e200f4c0bfdb0ee12f8b
BLAKE2b-256 b7fde1527ad7873e9561ac63813f241182617e24f99705121704802d11b10d35

See more details on using hashes here.

File details

Details for the file gravica-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: gravica-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 23.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.11

File hashes

Hashes for gravica-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 888e19879dc6222d72997d208322ff915dc9611700a11e9c589095ec2c9826b8
MD5 18063f5807a19a24a5b248ea47e4722f
BLAKE2b-256 c7c1fdbc15ea76998461aaf9a5b95e88f80cb0550bca2347080ad86e432078bf

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