Skip to main content

SIGWAY

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 cutoff kmax is a ScalarPerturbations parameter).
  • Mukhanov–Sasaki $\mathcal{P}_\zeta$: wrap a sigway.ms_solver.SingleFieldSolver in sigway.perturbations.SingleFieldPerturbations.

The previous OmegaGWjax / OmegaGWms classes are deprecated (they emit a DeprecationWarning); use OmegaGW with 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)

Source distribution for sigway 1.0.1
File Size Uploaded
sigway-1.0.1.tar.gz 3.3 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for sigway 1.0.1
File Interpreter ABI Platform
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 log

Release 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

Release history Release notifications | RSS feed

This release

1.0.1 This release

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page