General Relativity computation library built on Symbolica
Project description
Gravica
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
Absolute 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3c4d8e4254d1b258bb7fc4939077cd844d4c6d419432f5953f79fd09149bc861
|
|
| MD5 |
27523c8c1d06e200f4c0bfdb0ee12f8b
|
|
| BLAKE2b-256 |
b7fde1527ad7873e9561ac63813f241182617e24f99705121704802d11b10d35
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
888e19879dc6222d72997d208322ff915dc9611700a11e9c589095ec2c9826b8
|
|
| MD5 |
18063f5807a19a24a5b248ea47e4722f
|
|
| BLAKE2b-256 |
c7c1fdbc15ea76998461aaf9a5b95e88f80cb0550bca2347080ad86e432078bf
|