Skip to content

jijinbei/gravica

Repository files navigation

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

Tutorial Topics
Getting Started Schwarzschild metric, full pipeline (Metric → Christoffel → Riemann → Ricci → Einstein)
Predefined Metrics All 8 built-in metrics: Minkowski, Schwarzschild, Kerr, FLRW, Gödel, Reissner–Nordström, de Sitter, Anti-de Sitter
Weyl Tensor & Kretschner Scalar Curvature invariants, singularity detection, vacuum identity $C_{abcd} = R_{abcd}$
Geodesic Equations Symbolic equations of motion for Schwarzschild and Kerr spacetimes
Index Manipulation Raising and lowering tensor indices, round-trip verification
Kerr Black Hole Full tensor pipeline on the Kerr metric, vacuum solution verification
FLRW Cosmology Stress-energy tensor, cosmological constant, Schouten tensor

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

About

a GR tensor computation library built on Symbolica. Computes the full chain from metric tensor to Einstein/Weyl tensors, 23–4300x faster than EinsteinPy/SymPy.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors