warpax 1.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- warpax-1.4.0/.gitignore +69 -0
- warpax-1.4.0/CHANGELOG.md +112 -0
- warpax-1.4.0/LICENSE +21 -0
- warpax-1.4.0/PKG-INFO +414 -0
- warpax-1.4.0/README.md +350 -0
- warpax-1.4.0/examples/01_minkowski_sanity.py +44 -0
- warpax-1.4.0/examples/02_schwarzschild_verification.py +51 -0
- warpax-1.4.0/examples/03_alcubierre_analysis.py +67 -0
- warpax-1.4.0/examples/04_warp_drive_comparison.py +113 -0
- warpax-1.4.0/examples/05_grid_analysis.py +120 -0
- warpax-1.4.0/examples/06_geodesic_through_warp_bubble.py +126 -0
- warpax-1.4.0/examples/07_custom_warp_metric.py +422 -0
- warpax-1.4.0/examples/08_metric_design.py +179 -0
- warpax-1.4.0/examples/09_admissibility_diagnostics.py +97 -0
- warpax-1.4.0/examples/10_phase_diagram.py +105 -0
- warpax-1.4.0/examples/README.md +79 -0
- warpax-1.4.0/pyproject.toml +172 -0
- warpax-1.4.0/src/warpax/__init__.py +70 -0
- warpax-1.4.0/src/warpax/adm/__init__.py +5 -0
- warpax-1.4.0/src/warpax/adm/mass.py +376 -0
- warpax-1.4.0/src/warpax/analysis/__init__.py +45 -0
- warpax-1.4.0/src/warpax/analysis/comparison.py +255 -0
- warpax-1.4.0/src/warpax/analysis/construction_adapter.py +327 -0
- warpax-1.4.0/src/warpax/analysis/convergence.py +274 -0
- warpax-1.4.0/src/warpax/analysis/extrema.py +147 -0
- warpax-1.4.0/src/warpax/analysis/invariant_verification.py +225 -0
- warpax-1.4.0/src/warpax/analysis/kinematic_scalars.py +146 -0
- warpax-1.4.0/src/warpax/analysis/shift_kinematics.py +147 -0
- warpax-1.4.0/src/warpax/analysis/vorticity_type_analytic.py +107 -0
- warpax-1.4.0/src/warpax/averaged/__init__.py +28 -0
- warpax-1.4.0/src/warpax/averaged/anec.py +452 -0
- warpax-1.4.0/src/warpax/averaged/awec.py +197 -0
- warpax-1.4.0/src/warpax/benchmarks/__init__.py +14 -0
- warpax-1.4.0/src/warpax/benchmarks/alcubierre.py +204 -0
- warpax-1.4.0/src/warpax/benchmarks/minkowski.py +64 -0
- warpax-1.4.0/src/warpax/benchmarks/schwarzschild.py +133 -0
- warpax-1.4.0/src/warpax/bondi/__init__.py +19 -0
- warpax-1.4.0/src/warpax/bondi/extract.py +210 -0
- warpax-1.4.0/src/warpax/bondi/peeling.py +227 -0
- warpax-1.4.0/src/warpax/certify.py +140 -0
- warpax-1.4.0/src/warpax/classify/__init__.py +26 -0
- warpax-1.4.0/src/warpax/classify/bobrick_martire.py +231 -0
- warpax-1.4.0/src/warpax/constraints/__init__.py +23 -0
- warpax-1.4.0/src/warpax/constraints/_radial_solve.py +60 -0
- warpax-1.4.0/src/warpax/constraints/constraint_solver.py +153 -0
- warpax-1.4.0/src/warpax/constraints/residuals.py +307 -0
- warpax-1.4.0/src/warpax/constraints/source_consistency.py +68 -0
- warpax-1.4.0/src/warpax/constraints/tshell_solver.py +225 -0
- warpax-1.4.0/src/warpax/design/__init__.py +64 -0
- warpax-1.4.0/src/warpax/design/constraints.py +141 -0
- warpax-1.4.0/src/warpax/design/metrics.py +230 -0
- warpax-1.4.0/src/warpax/design/objectives.py +199 -0
- warpax-1.4.0/src/warpax/design/optimizer.py +278 -0
- warpax-1.4.0/src/warpax/design/shape_functions.py +275 -0
- warpax-1.4.0/src/warpax/energy_conditions/__init__.py +170 -0
- warpax-1.4.0/src/warpax/energy_conditions/_gen_eig_callback.py +111 -0
- warpax-1.4.0/src/warpax/energy_conditions/_intervalad.py +231 -0
- warpax-1.4.0/src/warpax/energy_conditions/_intervalcurv.py +257 -0
- warpax-1.4.0/src/warpax/energy_conditions/_jet.py +232 -0
- warpax-1.4.0/src/warpax/energy_conditions/certificate.py +554 -0
- warpax-1.4.0/src/warpax/energy_conditions/classification.py +451 -0
- warpax-1.4.0/src/warpax/energy_conditions/classification_mpmath.py +430 -0
- warpax-1.4.0/src/warpax/energy_conditions/eigenvalue_checks.py +111 -0
- warpax-1.4.0/src/warpax/energy_conditions/enclosure.py +963 -0
- warpax-1.4.0/src/warpax/energy_conditions/filtering.py +287 -0
- warpax-1.4.0/src/warpax/energy_conditions/frame_free.py +423 -0
- warpax-1.4.0/src/warpax/energy_conditions/interval_lmi.py +297 -0
- warpax-1.4.0/src/warpax/energy_conditions/observer.py +384 -0
- warpax-1.4.0/src/warpax/energy_conditions/optimization.py +1282 -0
- warpax-1.4.0/src/warpax/energy_conditions/slemma.py +362 -0
- warpax-1.4.0/src/warpax/energy_conditions/sweep.py +340 -0
- warpax-1.4.0/src/warpax/energy_conditions/types.py +195 -0
- warpax-1.4.0/src/warpax/energy_conditions/verifier.py +756 -0
- warpax-1.4.0/src/warpax/energy_conditions/worst_observer_analytic.py +194 -0
- warpax-1.4.0/src/warpax/geodesics/__init__.py +90 -0
- warpax-1.4.0/src/warpax/geodesics/_result_codes.py +66 -0
- warpax-1.4.0/src/warpax/geodesics/deviation.py +278 -0
- warpax-1.4.0/src/warpax/geodesics/initial_conditions.py +434 -0
- warpax-1.4.0/src/warpax/geodesics/integrator.py +306 -0
- warpax-1.4.0/src/warpax/geodesics/observables.py +227 -0
- warpax-1.4.0/src/warpax/geodesics/symplectic.py +362 -0
- warpax-1.4.0/src/warpax/geometry/__init__.py +79 -0
- warpax-1.4.0/src/warpax/geometry/adm_split.py +183 -0
- warpax-1.4.0/src/warpax/geometry/geometry.py +212 -0
- warpax-1.4.0/src/warpax/geometry/grid.py +202 -0
- warpax-1.4.0/src/warpax/geometry/invariants.py +175 -0
- warpax-1.4.0/src/warpax/geometry/metric.py +269 -0
- warpax-1.4.0/src/warpax/geometry/regularity.py +217 -0
- warpax-1.4.0/src/warpax/geometry/transitions.py +104 -0
- warpax-1.4.0/src/warpax/geometry/types.py +133 -0
- warpax-1.4.0/src/warpax/grids/__init__.py +31 -0
- warpax-1.4.0/src/warpax/grids/_axisymmetric.py +131 -0
- warpax-1.4.0/src/warpax/grids/_clustered.py +213 -0
- warpax-1.4.0/src/warpax/grids/_resolution.py +143 -0
- warpax-1.4.0/src/warpax/grids/_volume_weights.py +101 -0
- warpax-1.4.0/src/warpax/io/__init__.py +27 -0
- warpax-1.4.0/src/warpax/io/_interpolated.py +141 -0
- warpax-1.4.0/src/warpax/io/_interpolation.py +114 -0
- warpax-1.4.0/src/warpax/io/cactus.py +202 -0
- warpax-1.4.0/src/warpax/io/einfields.py +179 -0
- warpax-1.4.0/src/warpax/io/warpfactory.py +215 -0
- warpax-1.4.0/src/warpax/junction/__init__.py +25 -0
- warpax-1.4.0/src/warpax/junction/darmois.py +264 -0
- warpax-1.4.0/src/warpax/metrics/__init__.py +66 -0
- warpax-1.4.0/src/warpax/metrics/_common.py +33 -0
- warpax-1.4.0/src/warpax/metrics/_fuchs_legacy.py +254 -0
- warpax-1.4.0/src/warpax/metrics/_interp.py +18 -0
- warpax-1.4.0/src/warpax/metrics/_tov_scan.py +66 -0
- warpax-1.4.0/src/warpax/metrics/fuchs_construction.py +558 -0
- warpax-1.4.0/src/warpax/metrics/garattini.py +222 -0
- warpax-1.4.0/src/warpax/metrics/lentz.py +172 -0
- warpax-1.4.0/src/warpax/metrics/natario.py +268 -0
- warpax-1.4.0/src/warpax/metrics/rodal.py +209 -0
- warpax-1.4.0/src/warpax/metrics/sshell.py +218 -0
- warpax-1.4.0/src/warpax/metrics/sshell_profiles.py +289 -0
- warpax-1.4.0/src/warpax/metrics/tshell.py +194 -0
- warpax-1.4.0/src/warpax/metrics/tshell_profiles.py +254 -0
- warpax-1.4.0/src/warpax/metrics/van_den_broeck.py +154 -0
- warpax-1.4.0/src/warpax/metrics/warpshell.py +377 -0
- warpax-1.4.0/src/warpax/numerics/__init__.py +12 -0
- warpax-1.4.0/src/warpax/numerics/_constants.py +27 -0
- warpax-1.4.0/src/warpax/numerics/_grid.py +39 -0
- warpax-1.4.0/src/warpax/optimization/__init__.py +65 -0
- warpax-1.4.0/src/warpax/optimization/basis.py +152 -0
- warpax-1.4.0/src/warpax/optimization/ec_constraints.py +234 -0
- warpax-1.4.0/src/warpax/optimization/loss.py +165 -0
- warpax-1.4.0/src/warpax/optimization/optimizer.py +164 -0
- warpax-1.4.0/src/warpax/optimization/sweep.py +430 -0
- warpax-1.4.0/src/warpax/quantum/__init__.py +17 -0
- warpax-1.4.0/src/warpax/quantum/ford_roman.py +162 -0
- warpax-1.4.0/src/warpax/tov/__init__.py +5 -0
- warpax-1.4.0/src/warpax/tov/residuals.py +133 -0
- warpax-1.4.0/src/warpax/transport/__init__.py +13 -0
- warpax-1.4.0/src/warpax/transport/diagnostics.py +249 -0
- warpax-1.4.0/src/warpax/visualization/__init__.py +70 -0
- warpax-1.4.0/src/warpax/visualization/_style.py +135 -0
- warpax-1.4.0/src/warpax/visualization/alignment_plots.py +108 -0
- warpax-1.4.0/src/warpax/visualization/common/__init__.py +75 -0
- warpax-1.4.0/src/warpax/visualization/common/_color.py +152 -0
- warpax-1.4.0/src/warpax/visualization/common/_conversion.py +351 -0
- warpax-1.4.0/src/warpax/visualization/common/_frame_data.py +138 -0
- warpax-1.4.0/src/warpax/visualization/common/_physics.py +483 -0
- warpax-1.4.0/src/warpax/visualization/common/_scenes.py +371 -0
- warpax-1.4.0/src/warpax/visualization/comparison_plots.py +701 -0
- warpax-1.4.0/src/warpax/visualization/convergence_plots.py +233 -0
- warpax-1.4.0/src/warpax/visualization/direction_fields.py +195 -0
- warpax-1.4.0/src/warpax/visualization/geodesic_plots.py +203 -0
- warpax-1.4.0/src/warpax/visualization/kinematic_plots.py +290 -0
- warpax-1.4.0/src/warpax/visualization/manim/__init__.py +68 -0
- warpax-1.4.0/src/warpax/visualization/manim/_boost_arrows.py +608 -0
- warpax-1.4.0/src/warpax/visualization/manim/_boost_rapidity_sweep.py +394 -0
- warpax-1.4.0/src/warpax/visualization/manim/_eulerian_kinematics.py +406 -0
- warpax-1.4.0/src/warpax/visualization/manim/_gif_utils.py +149 -0
- warpax-1.4.0/src/warpax/visualization/manim/_heatmap.py +212 -0
- warpax-1.4.0/src/warpax/visualization/manim/_image_utils.py +449 -0
- warpax-1.4.0/src/warpax/visualization/manim/_kretschmann.py +256 -0
- warpax-1.4.0/src/warpax/visualization/manim/_nec_margin.py +371 -0
- warpax-1.4.0/src/warpax/visualization/manim/_scene_utils.py +488 -0
- warpax-1.4.0/src/warpax/visualization/manim/_split_screen.py +562 -0
- warpax-1.4.0/src/warpax/visualization/manim/_surface.py +173 -0
- warpax-1.4.0/src/warpax/visualization/manim/_velocity_sweep.py +348 -0
- warpax-1.4.0/src/warpax/visualization/manim/_wall_velocity_sweep.py +472 -0
- warpax-1.4.0/src/warpax/visualization/phase_diagram.py +357 -0
- warpax-1.4.0/src/warpax/visualization/shift_vorticity_plots.py +107 -0
- warpax-1.4.0/tests/__init__.py +0 -0
- warpax-1.4.0/tests/_gpu_xfail_registry.py +85 -0
- warpax-1.4.0/tests/conftest.py +177 -0
- warpax-1.4.0/tests/fixtures/alcubierre_optimal_parameters.npy +0 -0
- warpax-1.4.0/tests/fixtures/cactus/README.md +47 -0
- warpax-1.4.0/tests/fixtures/cactus/generate_minkowski_slice.py +76 -0
- warpax-1.4.0/tests/fixtures/cactus/minkowski_slice.h5 +0 -0
- warpax-1.4.0/tests/fixtures/einfields/.gitkeep +0 -0
- warpax-1.4.0/tests/fixtures/einfields/README.md +33 -0
- warpax-1.4.0/tests/fixtures/einfields/generate_minkowski_ckpt.py +58 -0
- warpax-1.4.0/tests/fixtures/einfields/minkowski.ckpt/_CHECKPOINT_METADATA +1 -0
- warpax-1.4.0/tests/fixtures/einfields/minkowski.ckpt/_METADATA +1 -0
- warpax-1.4.0/tests/fixtures/einfields/minkowski.ckpt/d/ab3629d54e5a5471243d8667edd3c853 +0 -0
- warpax-1.4.0/tests/fixtures/einfields/minkowski.ckpt/manifest.ocdbt +0 -0
- warpax-1.4.0/tests/fixtures/einfields/minkowski.ckpt/ocdbt.process_0/d/acb4584addcd9774607322a256862069 +0 -0
- warpax-1.4.0/tests/fixtures/einfields/minkowski.ckpt/ocdbt.process_0/d/d7bc34bbf51467563510082f17ba0b91 +0 -0
- warpax-1.4.0/tests/fixtures/einfields/minkowski.ckpt/ocdbt.process_0/manifest.ocdbt +0 -0
- warpax-1.4.0/tests/fixtures/golden/fibonacci_pool.npy +0 -0
- warpax-1.4.0/tests/fixtures/warpfactory/README.md +45 -0
- warpax-1.4.0/tests/fixtures/warpfactory/alcubierre.mat +0 -0
- warpax-1.4.0/tests/fixtures/warpshell_classify.npz +0 -0
- warpax-1.4.0/tests/test_adm.py +323 -0
- warpax-1.4.0/tests/test_asv_benchmarks.py +44 -0
- warpax-1.4.0/tests/test_averaged_and_quantum.py +381 -0
- warpax-1.4.0/tests/test_benchmarks/__init__.py +0 -0
- warpax-1.4.0/tests/test_benchmarks/test_alcubierre.py +77 -0
- warpax-1.4.0/tests/test_benchmarks/test_minkowski.py +44 -0
- warpax-1.4.0/tests/test_benchmarks/test_schwarzschild.py +85 -0
- warpax-1.4.0/tests/test_benchmarks/test_sympy_bridge.py +159 -0
- warpax-1.4.0/tests/test_bondi.py +123 -0
- warpax-1.4.0/tests/test_bug_hunt_regressions.py +426 -0
- warpax-1.4.0/tests/test_certificate.py +272 -0
- warpax-1.4.0/tests/test_classification.py +1218 -0
- warpax-1.4.0/tests/test_construction_adapter.py +107 -0
- warpax-1.4.0/tests/test_curvature_identities.py +236 -0
- warpax-1.4.0/tests/test_curvature_scaling.py +121 -0
- warpax-1.4.0/tests/test_design.py +558 -0
- warpax-1.4.0/tests/test_ec_observer_and_solvers.py +1459 -0
- warpax-1.4.0/tests/test_ec_verifier.py +565 -0
- warpax-1.4.0/tests/test_enclosure.py +478 -0
- warpax-1.4.0/tests/test_extrema.py +42 -0
- warpax-1.4.0/tests/test_frame_free.py +300 -0
- warpax-1.4.0/tests/test_fuchs_legacy_parity.py +76 -0
- warpax-1.4.0/tests/test_fuchs_published_profile.py +88 -0
- warpax-1.4.0/tests/test_geodesics.py +1100 -0
- warpax-1.4.0/tests/test_geometry.py +761 -0
- warpax-1.4.0/tests/test_geometry_extras.py +691 -0
- warpax-1.4.0/tests/test_grids_clustered.py +84 -0
- warpax-1.4.0/tests/test_interval_lmi.py +133 -0
- warpax-1.4.0/tests/test_invariant_verification.py +102 -0
- warpax-1.4.0/tests/test_io.py +224 -0
- warpax-1.4.0/tests/test_junction.py +173 -0
- warpax-1.4.0/tests/test_metrics_garattini.py +116 -0
- warpax-1.4.0/tests/test_metrics_warp.py +1243 -0
- warpax-1.4.0/tests/test_optimization.py +274 -0
- warpax-1.4.0/tests/test_peeling.py +145 -0
- warpax-1.4.0/tests/test_physics_validation.py +1449 -0
- warpax-1.4.0/tests/test_scripts_json_io.py +85 -0
- warpax-1.4.0/tests/test_shift_kinematics.py +78 -0
- warpax-1.4.0/tests/test_slemma.py +578 -0
- warpax-1.4.0/tests/test_ssv_bound.py +90 -0
- warpax-1.4.0/tests/test_sweep.py +337 -0
- warpax-1.4.0/tests/test_symplectic_geodesic.py +129 -0
- warpax-1.4.0/tests/test_tov_constraints.py +182 -0
- warpax-1.4.0/tests/test_translation_invariance.py +64 -0
- warpax-1.4.0/tests/test_transport.py +141 -0
- warpax-1.4.0/tests/test_visualization.py +467 -0
- warpax-1.4.0/tests/test_vorticity_type_analytic.py +176 -0
- warpax-1.4.0/tests/test_worst_observer_analytic.py +80 -0
warpax-1.4.0/.gitignore
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Byte-compiled / optimized
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# Distribution / packaging
|
|
7
|
+
dist/
|
|
8
|
+
build/
|
|
9
|
+
*.egg-info/
|
|
10
|
+
*.egg
|
|
11
|
+
.eggs/
|
|
12
|
+
|
|
13
|
+
# Testing
|
|
14
|
+
.pytest_cache/
|
|
15
|
+
.coverage
|
|
16
|
+
htmlcov/
|
|
17
|
+
|
|
18
|
+
# Linting
|
|
19
|
+
.ruff_cache/
|
|
20
|
+
|
|
21
|
+
# Manim renders
|
|
22
|
+
media/
|
|
23
|
+
animations/
|
|
24
|
+
|
|
25
|
+
# Example output (generated by examples/*.py)
|
|
26
|
+
examples/output/
|
|
27
|
+
|
|
28
|
+
# IDE
|
|
29
|
+
.vscode/
|
|
30
|
+
.idea/
|
|
31
|
+
*.swp
|
|
32
|
+
*.swo
|
|
33
|
+
|
|
34
|
+
# OS
|
|
35
|
+
.DS_Store
|
|
36
|
+
Thumbs.db
|
|
37
|
+
|
|
38
|
+
# Environments
|
|
39
|
+
.env
|
|
40
|
+
.venv/
|
|
41
|
+
env/
|
|
42
|
+
venv/
|
|
43
|
+
|
|
44
|
+
# MkDocs build output
|
|
45
|
+
site/
|
|
46
|
+
|
|
47
|
+
# asv benchmark harness output
|
|
48
|
+
.asv/
|
|
49
|
+
benchmarks/env/
|
|
50
|
+
benchmarks/.asv/
|
|
51
|
+
|
|
52
|
+
# Generated figure outputs (reproducible via reproduce_all.sh / Manim)
|
|
53
|
+
figures/*.pdf
|
|
54
|
+
figures/*.gif
|
|
55
|
+
figures/*.png
|
|
56
|
+
!figures/.gitkeep
|
|
57
|
+
!figures/wall_velocity_sweep.gif
|
|
58
|
+
!figures/eulerian_kinematics.gif
|
|
59
|
+
!figures/kretschmann_invariant.gif
|
|
60
|
+
!figures/eulerian_vs_worstcase_nec.gif
|
|
61
|
+
!figures/gaussian_warp_grid_comparison.png
|
|
62
|
+
|
|
63
|
+
# Reproduction cache - large binary artifacts. The MANIFEST + json/tex
|
|
64
|
+
# summaries stay tracked; npz and pdf are regenerated via reproduce_all.sh.
|
|
65
|
+
results/**/*.npz
|
|
66
|
+
results/**/*.pdf
|
|
67
|
+
|
|
68
|
+
# TeX and renderer logs
|
|
69
|
+
*.log
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to `warpax`, following
|
|
4
|
+
[Semantic Versioning](https://semver.org/spec/v2.0.0.html). Pre-1.0 history is
|
|
5
|
+
in `docs/explanation/release_notes.md`.
|
|
6
|
+
|
|
7
|
+
## [1.4.0] - 2026-08-31
|
|
8
|
+
|
|
9
|
+
Type-free certification. The energy-condition verdict comes from a $4\times4$
|
|
10
|
+
linear matrix inequality rather than from an eigendecomposition, so it holds at
|
|
11
|
+
every Hawking-Ellis type, and each verdict carries an exact rational
|
|
12
|
+
certificate.
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
|
|
16
|
+
- `energy_conditions.slemma.certify_point_lmi`: NEC/WEC/SEC/DEC over every
|
|
17
|
+
timelike and null observer from $\hat T + \sigma\eta \succeq 0$, at Types I
|
|
18
|
+
through IV alike, with no rapidity cap and no classification tolerance.
|
|
19
|
+
`witness_observer` returns the violating boost.
|
|
20
|
+
- `energy_conditions.certificate`: exact rational certificates checked over
|
|
21
|
+
`Fraction`. A multiplier $\sigma$ when the condition holds, a boost $w$ with
|
|
22
|
+
$|w| \le 1$ and $q(w) < 0$ when it fails.
|
|
23
|
+
- `energy_conditions.enclosure`: verified continuum enclosures of the worst-case
|
|
24
|
+
violation by interval branch-and-bound (Moore-Skelboe, `mpmath.iv`, outward
|
|
25
|
+
rounding), bracketing the extremum over the domain rather than over a grid.
|
|
26
|
+
- `energy_conditions.interval_lmi`: the same certificate in interval arithmetic,
|
|
27
|
+
from the metric rather than from a sampled stress-energy tensor.
|
|
28
|
+
- `grids.proper_volume_weights`: the slice Jacobian
|
|
29
|
+
$\mathrm{d}V = \sqrt{\det\gamma}\,\mathrm{d}^3x$. Every volume-weighted
|
|
30
|
+
fraction on a conformally scaled slice moves.
|
|
31
|
+
- `analysis.extrema.refine_extremum`: polishes a grid extremum off the grid.
|
|
32
|
+
|
|
33
|
+
### Fixed
|
|
34
|
+
|
|
35
|
+
- `averaged.anec`: the on-cone witness is measured on the trajectory tangent
|
|
36
|
+
$\mathrm{d}x/\mathrm{d}\lambda$, not on the projected vector, which is null by
|
|
37
|
+
construction. `_project_to_null` uses the Citardauq form.
|
|
38
|
+
- `averaged.awec`: a spacelike curve is reported rather than normalised as
|
|
39
|
+
timelike, and the line integral carries $\mathrm{d}\tau/\mathrm{d}\lambda$.
|
|
40
|
+
- `analysis.convergence`: grid spacing is $1/(N-1)$ on endpoint-inclusive grids.
|
|
41
|
+
Non-geometric ladders are refused rather than fitted.
|
|
42
|
+
- `energy_conditions.enclosure.tail_bound`: the minimum of $|x|$ over the slab,
|
|
43
|
+
not of $|$endpoint$|$, which excluded a slab straddling the origin.
|
|
44
|
+
- `junction.darmois`: one-sided limits at $\Sigma$, so a smooth metric gives a
|
|
45
|
+
vanishing jump. A $\Sigma$ of changing causal character gives no verdict.
|
|
46
|
+
- Every absolute floor is relative to the tensor or metric scale, so a verdict
|
|
47
|
+
survives a coordinate rescaling.
|
|
48
|
+
- Both classifiers report no verdict on non-finite input, and agree with each
|
|
49
|
+
other.
|
|
50
|
+
- `frame_free`: `lmi_substituted` marks margins taken from the LMI rather than
|
|
51
|
+
from the eigenvalue inequalities. Only their sign is comparable.
|
|
52
|
+
- ANEC affine windows come from the ray's horizon crossing, not from a
|
|
53
|
+
stationarity search that walked into integrator drift.
|
|
54
|
+
|
|
55
|
+
### Performance
|
|
56
|
+
|
|
57
|
+
- Interval branch-and-bound 3.3x faster, with bit-identical enclosures.
|
|
58
|
+
- Metric parameters are array leaves, so a velocity sweep no longer recompiles
|
|
59
|
+
the curvature chain per value.
|
|
60
|
+
- `import warpax` drops from 2.5 s to 0.75 s; `design` and sympy load on first
|
|
61
|
+
use.
|
|
62
|
+
|
|
63
|
+
### Removed
|
|
64
|
+
|
|
65
|
+
- `exceptions`, `grids._refined`, `benchmarks.registry`,
|
|
66
|
+
`visualization.common._themes` and `_jit_cache`, none of which had a caller.
|
|
67
|
+
|
|
68
|
+
## [1.3.0] - 2026-06-22
|
|
69
|
+
|
|
70
|
+
Manim scenes renamed to physically accurate names, colormaps matched to each
|
|
71
|
+
field's sign, and a headless 3D render path through OpenGL/EGL.
|
|
72
|
+
|
|
73
|
+
## [1.2.0] - 2026-06-21
|
|
74
|
+
|
|
75
|
+
New `warpax.bondi`: Bondi four-momentum radiated flux, Newman-Penrose Weyl
|
|
76
|
+
scalars, and peeling falloff $\Psi_n \sim r^{-(5-n)}$ at null infinity.
|
|
77
|
+
|
|
78
|
+
## [1.1.1] - 2026-06-20
|
|
79
|
+
|
|
80
|
+
Reproduction artifacts and docs for the source-shell paper
|
|
81
|
+
(arXiv:2605.25417). No API changes.
|
|
82
|
+
|
|
83
|
+
## [1.1.0] - 2026-06-10
|
|
84
|
+
|
|
85
|
+
Frame-independent certification.
|
|
86
|
+
|
|
87
|
+
- `warpax.certify(metric)`: one-call all-observer certification from the
|
|
88
|
+
Hawking-Ellis eigenvalue test of $T^a{}_b$, valid at all warp speeds
|
|
89
|
+
including superluminal $v_s \ge 1$.
|
|
90
|
+
- Closed-form Type-I worst observer, cross-checked against the BFGS optimizer.
|
|
91
|
+
- Rigorous geodesic-integrated ANEC through a symplectic null integrator that
|
|
92
|
+
conserves $g_{ab}k^ak^b$ where the adaptive integrator drifts off the cone.
|
|
93
|
+
- Shift vorticity controls the wall type: the Type-IV imaginary pair is linear
|
|
94
|
+
in it, and shear amplifies but does not open it.
|
|
95
|
+
- Wall NEC deficit and curvature invariants as power laws in $v_s$, splitting
|
|
96
|
+
by vorticity ($v_s^2$ vortical, $v_s^4$ irrotational).
|
|
97
|
+
- New `metrics.GarattiniMetric`, and cross-construction verification of the
|
|
98
|
+
Fuchs, WarpShell and Garattini-Zatrimaylov constructions.
|
|
99
|
+
|
|
100
|
+
## [1.0.0] - 2026-05-26
|
|
101
|
+
|
|
102
|
+
First stable release: Hawking-Ellis classification with exact Type-I margins,
|
|
103
|
+
multistart BFGS observer optimization, source-first S-/T-shell construction from
|
|
104
|
+
the Einstein constraints, a pure-JAX autodiff curvature chain, WarpFactory /
|
|
105
|
+
Cactus / EinsteinFields IO, and a differentiable metric-design API.
|
|
106
|
+
|
|
107
|
+
[1.4.0]: https://github.com/anindex/warpax/releases/tag/v1.4.0
|
|
108
|
+
[1.3.0]: https://github.com/anindex/warpax/releases/tag/v1.3.0
|
|
109
|
+
[1.2.0]: https://github.com/anindex/warpax/releases/tag/v1.2.0
|
|
110
|
+
[1.1.1]: https://github.com/anindex/warpax/releases/tag/v1.1.1
|
|
111
|
+
[1.1.0]: https://github.com/anindex/warpax/releases/tag/v1.1.0
|
|
112
|
+
[1.0.0]: https://github.com/anindex/warpax/releases/tag/v1.0.0
|
warpax-1.4.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 An T. Le
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
warpax-1.4.0/PKG-INFO
ADDED
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: warpax
|
|
3
|
+
Version: 1.4.0
|
|
4
|
+
Summary: Observer-robust energy condition verification for warp drive spacetimes
|
|
5
|
+
Project-URL: Homepage, https://github.com/anindex/warpax
|
|
6
|
+
Project-URL: Documentation, https://github.com/anindex/warpax#readme
|
|
7
|
+
Project-URL: Repository, https://github.com/anindex/warpax
|
|
8
|
+
Project-URL: Issues, https://github.com/anindex/warpax/issues
|
|
9
|
+
Project-URL: Author, https://github.com/anindex
|
|
10
|
+
Author-email: "An T. Le" <an@robot-learning.de>
|
|
11
|
+
License-Expression: MIT
|
|
12
|
+
License-File: LICENSE
|
|
13
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
14
|
+
Classifier: Intended Audience :: Science/Research
|
|
15
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
20
|
+
Classifier: Topic :: Scientific/Engineering :: Astronomy
|
|
21
|
+
Classifier: Topic :: Scientific/Engineering :: Physics
|
|
22
|
+
Requires-Python: >=3.12
|
|
23
|
+
Requires-Dist: beartype<0.23.0,>=0.22.9
|
|
24
|
+
Requires-Dist: diffrax>=0.7.2
|
|
25
|
+
Requires-Dist: equinox<0.14.0,>=0.13.6
|
|
26
|
+
Requires-Dist: jax<0.11.0,>=0.10.0
|
|
27
|
+
Requires-Dist: jaxtyping>=0.3.10
|
|
28
|
+
Requires-Dist: matplotlib<4.0.0,>=3.10.9
|
|
29
|
+
Requires-Dist: mpmath<1.4,>=1.3.0
|
|
30
|
+
Requires-Dist: numpy<3.0.0,>=2.2.0
|
|
31
|
+
Requires-Dist: optimistix>=0.1.0
|
|
32
|
+
Requires-Dist: sympy>=1.14
|
|
33
|
+
Requires-Dist: tqdm>=4.0
|
|
34
|
+
Provides-Extra: bench
|
|
35
|
+
Requires-Dist: asv<1.0,>=0.6.5; extra == 'bench'
|
|
36
|
+
Provides-Extra: design
|
|
37
|
+
Requires-Dist: interpax<0.4.0,>=0.3.14; extra == 'design'
|
|
38
|
+
Provides-Extra: dev
|
|
39
|
+
Requires-Dist: pytest-xdist>=3.6.0; extra == 'dev'
|
|
40
|
+
Requires-Dist: pytest<10.0.0,>=9.0.0; extra == 'dev'
|
|
41
|
+
Requires-Dist: ruff<1.0.0,>=0.15.16; extra == 'dev'
|
|
42
|
+
Provides-Extra: docs
|
|
43
|
+
Requires-Dist: griffe<3.0,>=2.0.2; extra == 'docs'
|
|
44
|
+
Requires-Dist: mkdocs-material<10.0,>=9.7.6; extra == 'docs'
|
|
45
|
+
Requires-Dist: mkdocstrings-python<3.0,>=2.0.3; extra == 'docs'
|
|
46
|
+
Requires-Dist: mkdocstrings<2.0,>=1.0.4; extra == 'docs'
|
|
47
|
+
Requires-Dist: pymdown-extensions>=10.0; extra == 'docs'
|
|
48
|
+
Provides-Extra: einfields
|
|
49
|
+
Requires-Dist: flax<0.13,>=0.12; extra == 'einfields'
|
|
50
|
+
Requires-Dist: orbax-checkpoint<0.13.0,>=0.11.40; extra == 'einfields'
|
|
51
|
+
Provides-Extra: interop
|
|
52
|
+
Requires-Dist: h5py<4.0.0,>=3.16.0; extra == 'interop'
|
|
53
|
+
Requires-Dist: mat73<1.0,>=0.65; extra == 'interop'
|
|
54
|
+
Provides-Extra: manim
|
|
55
|
+
Requires-Dist: imageio-ffmpeg>=0.4.9; extra == 'manim'
|
|
56
|
+
Requires-Dist: imageio>=2.31; extra == 'manim'
|
|
57
|
+
Requires-Dist: manim<0.21.0,>=0.20.1; extra == 'manim'
|
|
58
|
+
Provides-Extra: solver
|
|
59
|
+
Requires-Dist: scipy>=1.17.0; extra == 'solver'
|
|
60
|
+
Provides-Extra: viz
|
|
61
|
+
Requires-Dist: imageio>=2.31; extra == 'viz'
|
|
62
|
+
Requires-Dist: scipy>=1.17.0; extra == 'viz'
|
|
63
|
+
Description-Content-Type: text/markdown
|
|
64
|
+
|
|
65
|
+
# warpax
|
|
66
|
+
|
|
67
|
+
[](https://arxiv.org/abs/2602.18023)
|
|
68
|
+
[](https://doi.org/10.5281/zenodo.18715933)
|
|
69
|
+
[](https://github.com/anindex/warpax/actions/workflows/ci.yml)
|
|
70
|
+
[](https://python.org)
|
|
71
|
+
[](https://github.com/anindex/warpax/blob/main/LICENSE)
|
|
72
|
+
|
|
73
|
+
[**Observer-robust energy condition verification for warp drive spacetimes.**](https://arxiv.org/abs/2602.18023)
|
|
74
|
+
|
|
75
|
+
`warpax` decides the energy-condition structure of warp-drive spacetimes for
|
|
76
|
+
*every* observer at once, from the eigenstructure of the mixed stress-energy tensor
|
|
77
|
+
$T^a{}_b$, with exact curvature from JAX forward-mode autodiff. The decision uses
|
|
78
|
+
only the boost-invariant eigenvalues of $T^a{}_b$ and never requires the
|
|
79
|
+
coordinate-stationary observer $\partial_t$ to be timelike, so it stays well-defined
|
|
80
|
+
at all warp speeds, including superluminal $v_s \ge 1$ where $\partial_t$ turns
|
|
81
|
+
spacelike and single-frame tools such as WarpFactory break down. Each Hawking-Ellis
|
|
82
|
+
type is decided the same way: a $4\times4$ linear matrix inequality
|
|
83
|
+
$\hat T + \sigma\eta \succeq 0$ over every timelike and null observer, with no
|
|
84
|
+
rapidity cap and no classification tolerance, and each verdict backed by an exact
|
|
85
|
+
rational certificate.
|
|
86
|
+
|
|
87
|
+
<p align="center">
|
|
88
|
+
<img src="https://raw.githubusercontent.com/anindex/warpax/main/figures/wall_velocity_sweep.gif" width="760" alt="Alcubierre warp bubble: Eulerian energy density embedding and observer-robust NEC-margin slab"/>
|
|
89
|
+
</p>
|
|
90
|
+
|
|
91
|
+
<p align="center"><em>An Alcubierre warp bubble. The wireframe is the Eulerian energy density, negative everywhere across the wall (ρ<sub>Eul</sub> ≤ 0); the slab beneath is the NEC margin minimized over the whole null sphere, which never rises above zero. The sweep sharpens the wall (σ: 1 → 16), then eases the velocity toward flat space. Both fields span about three decades over the sweep, so height and colour are on a signed log scale: monotone and sign-preserving, but not proportional.</em></p>
|
|
92
|
+
|
|
93
|
+
## Features
|
|
94
|
+
|
|
95
|
+
- Frame-independent, all-observer energy-condition certification at every warp
|
|
96
|
+
speed (including superluminal $v_s \ge 1$), from the eigenstructure of
|
|
97
|
+
$T^a{}_b$, exact and cap-free for every Hawking-Ellis type.
|
|
98
|
+
- Hawking-Ellis classification (Type I-IV) with explicit Type-IV detection,
|
|
99
|
+
cross-checked by two eigensolver backends against a 50-digit `mpmath`
|
|
100
|
+
reference.
|
|
101
|
+
- Exact decision at Type-III/IV points from the absence of a causal
|
|
102
|
+
eigenvector, with a closed-form Eulerian null witness for the
|
|
103
|
+
momentum-sourced case; a closed-form Type-I worst observer and a multistart
|
|
104
|
+
BFGS optimizer serve only to display violation severity.
|
|
105
|
+
- Momentum-density control of the wall type through the discriminant
|
|
106
|
+
$\Delta=(\rho+S_\parallel)^2-4|j|^2$: a negative discriminant sends a point to
|
|
107
|
+
Type IV, and the same momentum density sets the wall NEC deficit and
|
|
108
|
+
curvature scaling.
|
|
109
|
+
- Rigorous geodesic-integrated ANEC via a symplectic null integrator (with an
|
|
110
|
+
on-cone witness), plus a Ford-Roman quantum-inequality diagnostic.
|
|
111
|
+
- Bondi four-momentum radiated-flux and Newman-Penrose peeling at null infinity
|
|
112
|
+
(`warpax.bondi`).
|
|
113
|
+
- Exact curvature via forward-mode JAX autodiff, no finite-difference stencils.
|
|
114
|
+
- Ten warp/shell metrics, constraint residuals, anisotropic TOV, ADM mass with
|
|
115
|
+
falloff, Israel junctions, transport diagnostics, and source-first S-/T-shell
|
|
116
|
+
construction with a five-criterion admissibility standard.
|
|
117
|
+
|
|
118
|
+
## Two papers, one toolkit
|
|
119
|
+
|
|
120
|
+
warpax backs two separate papers with disjoint claims. If you cite a result,
|
|
121
|
+
cite the paper it belongs to:
|
|
122
|
+
|
|
123
|
+
| | Certification paper ([arXiv:2602.18023](https://arxiv.org/abs/2602.18023)) | Companion note ([arXiv:2605.25417](https://arxiv.org/abs/2605.25417)) |
|
|
124
|
+
|---|---|---|
|
|
125
|
+
| **Question** | Which observers see energy-condition violations, at which warp speeds? | Can source-first shells satisfy the energy conditions at all? |
|
|
126
|
+
| **Results** | Frame-free all-velocity certifier; velocity-resolved type map; momentum-density discriminant controlling the wall type; closed-form worst observer; exoticity ranking + two-term $v_s$ deficit law | S-/T-shell constructions from the Einstein constraints; five-criterion admissibility standard; boundary-cost analysis |
|
|
127
|
+
| **Modules** | `energy_conditions`, `geometry`, `averaged`, `quantum`, `analysis`, `geodesics`, `transport`; metrics Alcubierre / Natário / Van den Broeck / Rodal / Lentz / WarpShell / Garattini | `constraints` (S-/T-shell solvers), `tov`, `adm`, `junction`, `design`, `optimization`; `metrics/sshell.py`, `metrics/tshell.py` |
|
|
128
|
+
| **Examples** | 01-07 | 08-10 |
|
|
129
|
+
|
|
130
|
+
The S-/T-shells are constructed and certified in the companion note, not in the
|
|
131
|
+
certification paper; neither paper's results depend on the other's.
|
|
132
|
+
|
|
133
|
+
## Quick start
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
# Create environment and install
|
|
137
|
+
conda create -n warpax python=3.12 -y && conda activate warpax
|
|
138
|
+
pip install -e ".[dev,viz,design,solver]"
|
|
139
|
+
|
|
140
|
+
# Run a quick example
|
|
141
|
+
python examples/01_minkowski_sanity.py
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
See [`examples/README.md`](examples/README.md) for a numbered learning path (01-10)
|
|
145
|
+
and which optional extras each script needs.
|
|
146
|
+
|
|
147
|
+
For a 5-10 minute walkthrough from install to seeing an energy condition violation,
|
|
148
|
+
see the [Quickstart tutorial](docs/tutorials/quickstart.md).
|
|
149
|
+
|
|
150
|
+
## Key results
|
|
151
|
+
|
|
152
|
+
### Frame-independent type map across the luminal transition
|
|
153
|
+
|
|
154
|
+
On matched, wall-resolved grids, the Rodal irrotational geometry is globally
|
|
155
|
+
Hawking-Ellis Type I at every speed from $v_s = 0.1$ to $2.5$, while the
|
|
156
|
+
Alcubierre/Natário/Van den Broeck bubble walls are Type-IV dominated (no rest
|
|
157
|
+
frame, no invariant energy density) at every speed. The split is controlled by the
|
|
158
|
+
Eulerian momentum density through the discriminant
|
|
159
|
+
$\Delta=(\rho+S_\parallel)^2-4|j|^2$: an irrotational shift carries no wall momentum
|
|
160
|
+
and stays globally Type I, while a vortical shift drives $\Delta<0$ and the wall to
|
|
161
|
+
Type IV. For Rodal's globally Type-I drive the Eulerian frame does not register
|
|
162
|
+
~73% of the wall weak-energy and ~74% of the wall dominant-energy violations seen
|
|
163
|
+
by boosted observers, an exact eigenvalue statement rather than an optimizer
|
|
164
|
+
artifact. A rigorous geodesic-integrated
|
|
165
|
+
ANEC (symplectic integrator with an on-cone witness) and a Ford-Roman comparison
|
|
166
|
+
preserve the ordering: every drive violates, and the irrotational Rodal geometry is
|
|
167
|
+
the mildest by one to two orders of magnitude.
|
|
168
|
+
|
|
169
|
+
### Composite exoticity ranking and scaling laws
|
|
170
|
+
|
|
171
|
+
A composite exoticity ranking on the benchmark slice, from observer-independent
|
|
172
|
+
inputs (NEC severity, Type-IV fraction, rigorous ANEC minimum), places the
|
|
173
|
+
irrotational Rodal drive nearly two orders of magnitude below the bubble-wall
|
|
174
|
+
drives (index 0.010 against 0.70 to 1.00), driven by its vanishing Type-IV
|
|
175
|
+
fraction and tiny averaged-null energy, not by a milder pointwise NEC. The wall NEC deficit follows the two-term law
|
|
176
|
+
$\min(\rho+p_i) = -C\,v_s^2 - D\,v_s$, single-term for the irrotational Rodal drive
|
|
177
|
+
($D=0$) and with a vorticity-set linear correction for the vortical walls, in line
|
|
178
|
+
with the Santiago-Schuster-Visser no-go. The wall curvature splits by the same
|
|
179
|
+
vorticity: vortical walls grow as $v_s^2$, the irrotational Rodal wall as $v_s^4$
|
|
180
|
+
($R^2 \ge 0.99$).
|
|
181
|
+
|
|
182
|
+
### Observer-robust vs Eulerian
|
|
183
|
+
|
|
184
|
+
Conditional on a violation existing, the Eulerian frame misses up to 29% of the
|
|
185
|
+
DEC-violating points and 76% of the SEC-violating points across the tested
|
|
186
|
+
drives (`results/comparison_table.json`).
|
|
187
|
+
|
|
188
|
+
### Custom metrics
|
|
189
|
+
|
|
190
|
+
Subclass `ADMMetric` and run the full pipeline. The figure below validates a
|
|
191
|
+
Gaussian warp bubble on a 24x24x4 grid: SEC margins from the Eulerian observer
|
|
192
|
+
(left), from the worst-case boosted observer found by BFGS (center), and the 1496
|
|
193
|
+
grid points the Eulerian frame reports as SEC-satisfied while the boosted observer
|
|
194
|
+
sees them violated (right). Regenerate it with
|
|
195
|
+
`python examples/07_custom_warp_metric.py --readme-figure`.
|
|
196
|
+
|
|
197
|
+

|
|
198
|
+
|
|
199
|
+
<p align="center"><em>SEC comparison for a custom Gaussian warp bubble (v<sub>s</sub> = 0.5). Red marks violations the Eulerian frame misses.</em></p>
|
|
200
|
+
|
|
201
|
+
See [`examples/07_custom_warp_metric.py`](examples/07_custom_warp_metric.py).
|
|
202
|
+
|
|
203
|
+
### Shell admissibility
|
|
204
|
+
|
|
205
|
+
`warpax` ships a five-criterion admissibility standard for warp shells:
|
|
206
|
+
|
|
207
|
+
| Criterion | Checks |
|
|
208
|
+
|-----------|--------|
|
|
209
|
+
| A. Regularity | $C^2$ metric continuity (thick) or Israel conditions (thin) |
|
|
210
|
+
| B. Constraints | Hamiltonian + momentum residuals $\epsilon_{\mathcal{H}}$, $\epsilon_{\mathcal{M}}$ |
|
|
211
|
+
| C. Matter model | Identifiable source (anisotropic fluid, elastic shell) |
|
|
212
|
+
| D. EC margins | Frame-free NEC/WEC/DEC from Hawking-Ellis eigenvalue slacks (exact, cap-free at Type-I; valid at all $v_s$) |
|
|
213
|
+
| E. Global | Positive ADM mass, asymptotic falloff, tidal forces, invariant transport |
|
|
214
|
+
|
|
215
|
+
Fuchs constant-velocity shell: source-aware $\epsilon_{\mathcal{H}} \approx
|
|
216
|
+
3\times10^{-8}$; the bulk shell interior is Type-I and EC-compliant (0 of 13
|
|
217
|
+
probes violate), while the smoothing tail turns Type-IV. The source-first S-/
|
|
218
|
+
T-shells likewise pass criteria A-C and E with positive interior margins; the
|
|
219
|
+
binding cost is a cap-free Type-I dominant-energy deficit at the inner shell edge
|
|
220
|
+
($\approx -4.4\times10^{-4}$), localized at the smooth source-vacuum transition,
|
|
221
|
+
and the tilted T-shell's shift vorticity drives a Type-IV onset at its
|
|
222
|
+
low-density edge. These shell results belong to the companion note; see
|
|
223
|
+
[The boundary cost of source consistency](docs/explanation/boundary_cost.md).
|
|
224
|
+
|
|
225
|
+
## Examples
|
|
226
|
+
|
|
227
|
+
See [`examples/README.md`](examples/README.md) for runtime estimates, install extras,
|
|
228
|
+
and a suggested order for new users.
|
|
229
|
+
|
|
230
|
+
| Script | Description |
|
|
231
|
+
|--------|-------------|
|
|
232
|
+
| `01_minkowski_sanity.py` | Flat-space sanity check (all ECs satisfied) |
|
|
233
|
+
| `02_schwarzschild_verification.py` | Schwarzschild ground-truth validation |
|
|
234
|
+
| `03_alcubierre_analysis.py` | Alcubierre warp drive EC analysis (**quickstart entry**) |
|
|
235
|
+
| `04_warp_drive_comparison.py` | Multi-metric comparison (six warp drives) |
|
|
236
|
+
| `05_grid_analysis.py` | Grid-based EC verification + comparison figure |
|
|
237
|
+
| `06_geodesic_through_warp_bubble.py` | Geodesic integration with tidal forces |
|
|
238
|
+
| `07_custom_warp_metric.py` | Custom warp manifold + robust EC validation |
|
|
239
|
+
| `08_metric_design.py` | Shape-function metric design (B-spline reproduction) |
|
|
240
|
+
| `09_admissibility_diagnostics.py` | Admissibility diagnostics on the Fuchs warp shell |
|
|
241
|
+
| `10_phase_diagram.py` | Parameter-space sweep and EC-admissible transport phase diagram |
|
|
242
|
+
|
|
243
|
+
```bash
|
|
244
|
+
python examples/01_minkowski_sanity.py
|
|
245
|
+
python examples/10_phase_diagram.py # 8x6 demo (~2 min)
|
|
246
|
+
python examples/10_phase_diagram.py --full # 20x15 sweep (~30 min GPU)
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
## Architecture
|
|
250
|
+
|
|
251
|
+
```
|
|
252
|
+
metrics -> geometry -> energy_conditions -> analysis
|
|
253
|
+
| |
|
|
254
|
+
geodesics classification (Hawking-Ellis)
|
|
255
|
+
|
|
|
256
|
+
transport / tidal / blueshift
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
| Package | Description |
|
|
260
|
+
|---------|-------------|
|
|
261
|
+
| `geometry` | JAX autodiff pipeline: metric $\to$ Christoffel $\to$ Riemann $\to$ Ricci $\to$ Einstein $\to$ $T_{\mu\nu}$; ADM 3+1 split; $C^2$ regularity diagnostics |
|
|
262
|
+
| `energy_conditions` | NEC/WEC/SEC/DEC via Hawking-Ellis classification, eigenvalue algebra, multi-start BFGS observer optimization |
|
|
263
|
+
| `grids` | Non-uniform grid generators; wall-clustered sampling that resolves a bubble wall without a uniform refinement everywhere |
|
|
264
|
+
| `metrics` | Nine warp/shell metrics: Natário, Lentz, Rodal, Van den Broeck, WarpShell, Fuchs, S-shell, T-shell, Garattini-Zatrimaylov (Alcubierre, Minkowski, and Schwarzschild ship in `benchmarks`, making ten warp metrics total) |
|
|
265
|
+
| `constraints` | Hamiltonian + momentum constraint residuals; S-shell and T-shell constraint solvers (pure JAX) |
|
|
266
|
+
| `tov` | Anisotropic TOV equilibrium checker |
|
|
267
|
+
| `adm` | ADM mass with surface integral and asymptotic falloff verification |
|
|
268
|
+
| `junction` | Israel/Darmois junction conditions and surface stress-energy |
|
|
269
|
+
| `transport` | Invariant diagnostics: geodesic deviation, null coordinate-time asymmetry, blueshift hazard |
|
|
270
|
+
| `optimization` | Bernstein basis, multi-objective loss, EC soft/hard constraints, parameter sweep |
|
|
271
|
+
| `geodesics` | Timelike/null geodesic integration via Diffrax, tidal deviation, blueshift extraction |
|
|
272
|
+
| `design` | Differentiable shape-function parametrization with constrained BFGS optimizer |
|
|
273
|
+
| `analysis` | Eulerian vs. robust comparison, convergence tools (stability spreads + continuum polishing of wall extrema, `analysis.extrema`), kinematic scalars |
|
|
274
|
+
| `io` | External metric loaders: WarpFactory (.mat), EinFields (checkpoint), Cactus (HDF5) |
|
|
275
|
+
| `visualization` | Matplotlib publication figures, Manim animations, phase diagram plots |
|
|
276
|
+
| `classify` | Bobrick-Martire subluminal/superluminal taxonomy |
|
|
277
|
+
| `averaged` | ANEC/AWEC null-ray and geodesic line integrals |
|
|
278
|
+
| `quantum` | Ford-Roman quantum inequality evaluator |
|
|
279
|
+
| `bondi` | Bondi four-momentum, radiated flux, and Newman-Penrose peeling at null infinity |
|
|
280
|
+
| `benchmarks` | Reference spacetimes (Alcubierre, Minkowski, Schwarzschild). Distinct from the top-level `benchmarks/` asv harness |
|
|
281
|
+
| `numerics` | Shared numerical utilities: constants, regularity floors, autodiff-safe helpers |
|
|
282
|
+
|
|
283
|
+
All metrics implement a common `MetricFunction` interface: a callable `(4,) -> (4,4)` mapping
|
|
284
|
+
coordinates $x^\mu$ to the covariant metric tensor $g_{\mu\nu}$.
|
|
285
|
+
|
|
286
|
+
## Running tests
|
|
287
|
+
|
|
288
|
+
```bash
|
|
289
|
+
pytest # Whole suite, ~3 min (1090 tests, parallel by default)
|
|
290
|
+
pytest -m smoke # Visualization import / render smoke tests
|
|
291
|
+
pytest tests/test_slemma.py # One module
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
One tier only: `-n auto` comes from `pyproject.toml`, and no test is excluded by
|
|
295
|
+
default.
|
|
296
|
+
|
|
297
|
+
## Reproducing results
|
|
298
|
+
|
|
299
|
+
To pin the exact Python environment used to produce the published results:
|
|
300
|
+
|
|
301
|
+
```bash
|
|
302
|
+
export PYTHON=$(uv run which python)
|
|
303
|
+
bash reproduce_all.sh
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
Stages can be run individually:
|
|
307
|
+
|
|
308
|
+
```bash
|
|
309
|
+
bash reproduce_all.sh --stage core # Core computation
|
|
310
|
+
bash reproduce_all.sh --stage ablation # Ablation studies
|
|
311
|
+
bash reproduce_all.sh --stage figures # Figure generation
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
Use `--keep-cache` to skip cache deletion and only recompute missing results.
|
|
315
|
+
|
|
316
|
+
Per-paper reproduction guides map every figure, table and quoted number to the
|
|
317
|
+
script that produces it:
|
|
318
|
+
|
|
319
|
+
- [**Observer-robust energy condition paper**](docs/how-to/reproduce_observer_robust_paper.md) - stage list, table- and figure-to-script maps, and the two consistency checks
|
|
320
|
+
- [**Warp-shell admissibility paper**](docs/how-to/reproduce_warpshell_paper.md) - per-figure, per-claim mapping to scripts and outputs
|
|
321
|
+
|
|
322
|
+
The outer-edge ($r \ge R_2$) Type-IV verification (log-log slope $1.01 \pm 0.01$) and
|
|
323
|
+
the ANEC impact-parameter scan are reproduced by
|
|
324
|
+
`scripts/run_tshell_typeIV_onset.py` and `scripts/run_anec_impact_scan.py`.
|
|
325
|
+
|
|
326
|
+
## Documentation
|
|
327
|
+
|
|
328
|
+
warpax ships full documentation in [`docs/`](docs/), organized following the [Diataxis](https://diataxis.fr/) framework:
|
|
329
|
+
|
|
330
|
+
### Tutorials
|
|
331
|
+
|
|
332
|
+
- [**Quickstart**](docs/tutorials/quickstart.md) - 5-10 minutes from install to seeing an energy condition violation
|
|
333
|
+
- [**First curvature computation**](docs/tutorials/first_curvature_computation.md) - full curvature chain on Minkowski as a warm-up
|
|
334
|
+
|
|
335
|
+
### How-to guides
|
|
336
|
+
|
|
337
|
+
- [**Define a custom warp metric**](docs/how-to/custom_metric_tutorial.md) - subclass `ADMMetric` and run the verification pipeline
|
|
338
|
+
- [**Interpret EC results**](docs/how-to/interpreting_ec_results.md) - read margin signs, Hawking-Ellis types, and worst-case observers
|
|
339
|
+
- [**Load an external metric**](docs/how-to/loading_external_metrics.md) - use WarpFactory, EinFields, or Cactus data
|
|
340
|
+
- [**Reproduce the observer-robust paper**](docs/how-to/reproduce_observer_robust_paper.md) - stage list, table- and figure-to-script maps, and the two consistency checks
|
|
341
|
+
- [**Reproduce the warp-shell admissibility paper**](docs/how-to/reproduce_warpshell_paper.md) - per-figure, per-claim mapping to scripts and outputs
|
|
342
|
+
|
|
343
|
+
### Reference
|
|
344
|
+
|
|
345
|
+
- [**API reference**](docs/reference/index.md) - autodoc of the public API
|
|
346
|
+
- [**Metric catalog**](docs/reference/metric_catalog.md) - all ten shipped metrics
|
|
347
|
+
- [**Benchmarks**](docs/reference/benchmarks.md) - asv regression harness
|
|
348
|
+
|
|
349
|
+
### Explanation
|
|
350
|
+
|
|
351
|
+
- [**Architecture**](docs/explanation/ARCHITECTURE.md) - package structure and design decisions
|
|
352
|
+
- [**Theory: ADM 3+1 and Hawking-Ellis types**](docs/explanation/theory.md) - mathematical background
|
|
353
|
+
- [**Release notes**](docs/explanation/release_notes.md) - pre-1.0 history
|
|
354
|
+
|
|
355
|
+
## Manim visualizations
|
|
356
|
+
|
|
357
|
+
Every scene comes from the same curvature and energy-condition code as the papers.
|
|
358
|
+
Geometric units on the z = 0 slice; each frame is a frozen metric, a parameter
|
|
359
|
+
sweep rather than a time evolution.
|
|
360
|
+
|
|
361
|
+
<div align="center">
|
|
362
|
+
<table>
|
|
363
|
+
<tr>
|
|
364
|
+
<td width="33%"><img src="https://raw.githubusercontent.com/anindex/warpax/main/figures/eulerian_kinematics.gif" alt="Expansion theta = -K and shear of the Eulerian congruence"/></td>
|
|
365
|
+
<td width="33%"><img src="https://raw.githubusercontent.com/anindex/warpax/main/figures/kretschmann_invariant.gif" alt="Kretschmann curvature invariant"/></td>
|
|
366
|
+
<td width="33%"><img src="https://raw.githubusercontent.com/anindex/warpax/main/figures/eulerian_vs_worstcase_nec.gif" alt="Eulerian vs observer-robust NEC margin"/></td>
|
|
367
|
+
</tr>
|
|
368
|
+
<tr>
|
|
369
|
+
<td align="center"><em><strong>Eulerian kinematics.</strong> Expansion θ = −K: space stretches behind the ship (red) and squeezes in front (blue). Shear σ² as iso-contours, with the f = 0.5 wall on top.</em></td>
|
|
370
|
+
<td align="center"><em><strong>Kretschmann invariant.</strong> K = R<sub>abcd</sub>R<sup>abcd</sup>, the same for every observer. Sign-indefinite in Lorentzian signature, so it dips negative, and spikes on the wall.</em></td>
|
|
371
|
+
<td align="center"><em><strong>Observer-robust NEC.</strong> Six axis-aligned Eulerian nulls on the left, the worst case over the whole null sphere on the right (k·n<sub>Eul</sub> = −1). The gap is what observer-robust verification buys.</em></td>
|
|
372
|
+
</tr>
|
|
373
|
+
</table>
|
|
374
|
+
</div>
|
|
375
|
+
|
|
376
|
+
The full set: **WallAndVelocitySweep** / **VelocitySweep** (dual-layer 3D,
|
|
377
|
+
ρ<sub>Eul</sub> above a NEC-margin slab), **BoostRapiditySweep** (energy density
|
|
378
|
+
vs rapidity ζ, deepening as cosh²ζ), **EulerianKinematics2D**,
|
|
379
|
+
**KretschmannInvariant2D**, **NECMargin2D** / **EulerianVsWorstCaseNEC**, and
|
|
380
|
+
**WorstCaseNullDirections** / **WorstCaseBoostDirections**.
|
|
381
|
+
|
|
382
|
+
```bash
|
|
383
|
+
# System dependencies (Ubuntu/Debian)
|
|
384
|
+
sudo apt install texlive-latex-extra texlive-fonts-recommended dvipng cm-super ffmpeg gifsicle
|
|
385
|
+
|
|
386
|
+
# Python dependencies (Python <= 3.13 recommended for the renderer)
|
|
387
|
+
pip install -e ".[manim]"
|
|
388
|
+
|
|
389
|
+
# Render all scenes (2D via Cairo, 3D via the GPU OpenGL renderer)
|
|
390
|
+
python scripts/render_all_scenes.py
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
Rendered videos and images are written to `media/` (not tracked by git). The 3D
|
|
394
|
+
scenes render through manim's OpenGL renderer (EGL, headless).
|
|
395
|
+
|
|
396
|
+
## Citation
|
|
397
|
+
|
|
398
|
+
If you found this work useful, please consider citing:
|
|
399
|
+
|
|
400
|
+
```bibtex
|
|
401
|
+
@article{le2026observer,
|
|
402
|
+
title={Observer-robust energy condition verification for warp drive spacetimes},
|
|
403
|
+
author={Le, An T},
|
|
404
|
+
journal={arXiv preprint arXiv:2602.18023},
|
|
405
|
+
year={2026}
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
@article{le2026boundary,
|
|
409
|
+
title={On the boundary cost of source-consistent warp shells},
|
|
410
|
+
author={Le, An T},
|
|
411
|
+
journal={arXiv preprint arXiv:2605.25417},
|
|
412
|
+
year={2026}
|
|
413
|
+
}
|
|
414
|
+
```
|