gwmock-pop
gwmock-pop is a Python package for simulating populations of
gravitational-wave sources.
Current package surface
- Protocols:
GWPopSimulator(population simulators),ExternalPopulationLoader(catalogue loaders). - Graph-driven sampling:
GraphSimulatorfrom a YAML/TOMLparametersgraph (packaged presets vialist_presets()/GraphSimulator.from_preset). - Graph-backed CBC simulators:
CBCSimulator,BBHSimulator,BNSSimulator, andNSBHSimulator— configurable priors built on the graph engine; override any parameter's distribution via theparameters=argument. - Composition:
MixtureSimulator,PoissonEventSampler(event-count helper used in mixture workflows). - Catalogues:
FilePopulationLoaderandread_population_catalogue/write_population_cataloguefor CSV and HDF5 (structured or group-of-datasets layouts), including remote URL loading with local caching and CBC canonicalization in the loader. - Provenance:
gwmock_pop.provenance— every written catalogue carries a machine-readable record of the run behind it, andreplay_catalogueredraws that run from the record alone. - Quality checks:
validate_samplefor arrays returned by simulators.
Public re-exports live in gwmock_pop.__all__; full module reference is in the
API docs.
Requirements
- Python
>=3.12(tested on 3.12–3.14) - Linux, macOS, or Windows
Floating-point precision
Importing gwmock_pop enables 64-bit JAX floats (jax_enable_x64). GPS-scale
parameters such as coa_time (~1.6 × 10⁹ s) are unusable in JAX's 32-bit
default, where the float32 spacing at that magnitude is 128 s. The flag is
global JAX state, so it also affects arrays your own code creates after the
import. To keep JAX's 32-bit default (e.g. for GPU-throughput studies that do
not sample absolute times), set GWMOCK_POP_DISABLE_X64=1 in the environment
before importing the package.
The flag is requested by setting JAX_ENABLE_X64=1 in os.environ, so that
importing gwmock_pop does not have to import JAX (see below). Two consequences
worth knowing: child processes started afterwards inherit the same precision,
and GWMOCK_POP_DISABLE_X64 takes precedence over JAX_ENABLE_X64 whoever set
it. Call jax.config.update("jax_enable_x64", True) yourself if you want 64-bit
floats while opting out of this package's default.
Import cost
Importing gwmock_pop does not import JAX. The samplers, distributions and
transforms are JAX code and import it when they are loaded, but reading a
population catalogue, resolving a configuration or running gwmock-pop --help
does not reach them — and so does not pay for JAX's import (about 240 ms) or
start XLA's thread pools, which is also what keeps such a process safe to
fork().
Installation
Install from PyPI:
uv venv --python 3.12
source .venv/bin/activate # Windows: .venv\Scripts\activate
uv pip install gwmock-pop
Install from source:
git clone git@github.com:Leuven-Gravity-Institute/gwmock-pop.git
cd gwmock-pop
uv venv --python 3.12
source .venv/bin/activate # Windows: .venv\Scripts\activate
uv sync --no-dev
Developer setup:
uv sync --group dev
uv run prek install
Docs setup:
uv sync --group docs
uv run zensical serve
Getting started (CLI)
The gwmock-pop CLI uses Typer. Typical flow: pick a packaged preset or
a graph config file, set the sample count, and write a CSV or HDF5
catalogue.
# Packaged preset (see `gwmock-pop list` for names)
gwmock-pop simulate --config gwtc4 --n 1000 --output population.csv --seed 42
# Or a graph YAML/TOML (top-level `parameters:` as in `examples/gwtc4/bbh_population.yaml`)
gwmock-pop simulate --config examples/gwtc4/bbh_population.yaml --n 500 --output out.h5
A config file may also carry the run and output blocks that
MainConfiguration describes, and simulate honours them: run.seed,
run.n_samples, run.name and run.output.*. Command-line options win over
the file.
Other commands:
| Command | Purpose |
|---|---|
gwmock-pop convert |
Convert population files between CSV and HDF5; optional --column-map JSON/YAML |
gwmock-pop validate |
Check a graph config without sampling |
gwmock-pop inspect |
Summary statistics for a population file |
gwmock-pop list |
List presets and public simulator classes |
gwmock-pop --help
gwmock-pop simulate --help
Getting started (library)
from gwmock_pop import CBCSimulator
sim = CBCSimulator(seed=42)
population = sim.simulate(100)
assert population["detector_frame_mass_1"].shape == (100,)
Use GraphSimulator.from_config_file(...) or GraphSimulator.from_preset(...)
for full graph configs (see examples/ and gwmock_pop.simulators.graph).
Sample from a packaged preset (run gwmock-pop list or list_presets() for the
available names):
from gwmock_pop import GraphSimulator, list_presets
print(list_presets()) # e.g. ["gwtc4", ...]
sim = GraphSimulator.from_preset("gwtc4")
catalogue = sim.simulate(1000)
Provenance
Every catalogue written by gwmock-pop simulate — and by
Simulator.save_catalogue — carries a machine-readable record of the run that
produced it: the package version and, from a checkout, the commit and dirty
flag; the complete resolved configuration with sampler defaults filled in;
the RNG seed as actually used, so a run started without --seed is still
repeatable; the source type, row count and column names in output order; and the
creation time and writing tool.
HDF5 files carry the record in a metadata group beside data. CSV files get a
<name>.csv.provenance.json sidecar — which is why HDF5 is the format to
publish in: a sidecar can be separated from the catalogue it describes.
from gwmock_pop.provenance import read_provenance, replay_catalogue
record = read_provenance("population.h5")
catalogue = replay_catalogue(record) # the same samples, from the record alone
Set run.output.save_metadata to false to write the samples on their own.
FilePopulationLoader also accepts http://, https://, s3://, and
zenodo://<record>/<file> sources. Remote catalogues are cached under
${GWMOCK_POP_CACHE_DIR} or ${XDG_CACHE_HOME:-~/.cache}/gwmock-pop, and CBC
catalogues are validated and rewritten to canonical gwmock-pop parameter names
before sampling.
Verification
gwmock-pop --help
python -c "import gwmock_pop; print(gwmock_pop.__version__)"
Testing
Default test run excludes integration-marked tests:
uv run pytest
Run integration tests explicitly:
uv run pytest -m integration
Documentation
- Site: https://leuven-gravity-institute.github.io/gwmock-pop/
- API index (tables + navigation): docs/api/index.md
- User guide: docs/user_guide/installation.md, docs/user_guide/quick_start.md
License
BSD 3-Clause, see LICENSE.
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 gwmock_pop-0.13.0.tar.gz.
File metadata
- Download URL: gwmock_pop-0.13.0.tar.gz
- Upload date:
- Size: 308.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.8 {"installer":{"name":"uv","version":"0.12.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
42d223ff799a869867976b87f50d8911d23b5c55416a074e730a088fad197074
|
|
| MD5 |
f3a6206c83339d59978227ee44c4c989
|
|
| BLAKE2b-256 |
f788b69239940e66a4e1485f570ab4aacb50e47fa828fb39e35ed67464d2aa7c
|
File details
Details for the file gwmock_pop-0.13.0-py3-none-any.whl.
File metadata
- Download URL: gwmock_pop-0.13.0-py3-none-any.whl
- Upload date:
- Size: 126.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.8 {"installer":{"name":"uv","version":"0.12.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6cedd5aef06d57a656060fe232110530c3c79582150635d368a0be70bddda53c
|
|
| MD5 |
96f0938bdaa4c4a50d4f77dd6ca6acec
|
|
| BLAKE2b-256 |
c0d5b1d217d544c875ba4afa99bc2e847f9a768cb53449802c6b698b52ead1c5
|