Scalar-Induced Gravitational Wave AnalYsis — second-order, scalar-induced gravitational-wave signals.
Documentation · Paper · PyPI
SIGWAY is a collaborative effort of the LISA Cosmology Working Group to build the foundation of a data analysis pipeline for stochastic gravitational wave signals emitted by curvature perturbations in the early universe. Currently the package contains modules for
- solving the Mukhanov-Sasaki equation for single field ultra-slow roll inflationary models and computing the primordial scalar power spectrum $\mathcal{P}_\zeta$;
- computing the second order gravitational wave power spectrum $\Omega_{\mathrm{GW}}$ from $\mathcal{P}_\zeta$ for reentry during radiation domination or a phase of early matter domination.
Full documentation — installation, worked examples, the physics, and the API reference — is at sigway.readthedocs.io.
Using this code
If you use this code please cite our paper (https://arxiv.org/pdf/2501.11320) and feel free to drop me an email if you encounter any problems. Also, if there are bugs please report them!
Installation
SIGWAY is on PyPI:
pip install sigway
To work on the code, install the development version from a clone in editable mode:
git clone https://github.com/jonaselgammal/SIGWAY.git
cd SIGWAY
pip install -e .
Usage
$\Omega_{\mathrm{GW}}(f)$ is computed by composing three pieces — a power
spectrum $\mathcal{P}_\zeta$ (sigway.perturbations), a kernel (the
transfer function, sigway.kernels) and an integrator (the numerical
method, sigway.integrators, default Simpson) — into an OmegaGW model
(sigway.spectrum):
import jax.numpy as jnp
from sigway.spectrum import OmegaGW
from sigway.kernels import RadiationKernel
from sigway.perturbations import AnalyticPerturbations
def pzeta(k, logA, logks): # your P_zeta(k, *params)
A, ks = 10.0 ** logA, 10.0 ** logks
return A * jnp.exp(-0.5 * (jnp.log(k / ks) / 0.3) ** 2)
f = jnp.geomspace(1e-5, 1e-1, 200)
model = OmegaGW(
AnalyticPerturbations(pzeta, ("logA", "logks")),
RadiationKernel(), # carries the RD normalisation
s=jnp.linspace(0.0, 1.0, 10),
t=jnp.geomspace(1e-5, 1e3, 800), # array (shared over k) or t(k, *theta)
)
omega = model(f, -2.0, -2.0) # theta in model.parameter_names order
The model owns a single ordered parameter vector for inference:
model.parameter_names # ('logA', 'logks')
model(f, logA=-2.0, logks=-2.0) # keyword form also works
fisher_jac = model.jacobian(f, [-2.0, -2.0]) # d Omega_GW / d theta (jax.jacfwd)
Swap in other physics by changing a component:
- Early matter domination:
from sigway.kernels import InstantEMDKernel(its source cutoffkmaxis aScalarPerturbationsparameter). - Mukhanov–Sasaki $\mathcal{P}_\zeta$: wrap a
sigway.ms_solver.SingleFieldSolverinsigway.perturbations.SingleFieldPerturbations.
The previous
OmegaGWjax/OmegaGWmsclasses are deprecated (they emit aDeprecationWarning); useOmegaGWwith a kernel and a perturbation instead.
Dependencies
The current, minimal public version that contains the core functionality of the package needs jax, diffrax, numpy, scipy and matplotlib. The dependencies should be installed automatically but if not pip is your friend.
Metadata
Release files for sigway 1.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| sigway-1.0.1.tar.gz | 3.3 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| sigway-1.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 6.7 MB
Release files / sigway-1.0.1.tar.gz
| Download URL | sigway-1.0.1.tar.gz |
|---|---|
| Size | 3.3 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
12494417d598c5372502e7b5b7cd62069ae97894a1c2089f870499bfb52b2871
|
|
BLAKE2b-256 checksum How to use checksums |
bc928553a08421a0b3996eaa3d69586889941a11fd0abbb334e6e7936e4726d9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 24, 2026.
Transparency logRelease files / sigway-1.0.1-py3-none-any.whl
| Download URL | sigway-1.0.1-py3-none-any.whl |
|---|---|
| Size | 3.4 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4755b1e6f18b06b0237bab79de64072a51140bfb41aad665503e652c57c0eac7
|
|
BLAKE2b-256 checksum How to use checksums |
faaa4df7b7e44d344f8b182dfadb2b755eaa550ec039d929b5614aed5e99376f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 24, 2026.
Transparency log