Run parameter sweeps and Monte Carlo dispersions over GMAT missions in parallel from Python.
Project description
gmat-sweep
Run parameter sweeps and Monte Carlo dispersions over GMAT missions in parallel from Python.
What this is
A parallel orchestrator on top of gmat-run's
single-run primitive. Point gmat-sweep at a working .script, declare a parameter grid,
and it fans the cartesian product across subprocess workers, aggregates each run's
ReportFile into a single (run_id, time)-MultiIndexed pandas DataFrame, and writes a
JSON Lines manifest alongside the results so any sweep is reproducible bit-for-bit.
What this is not
- Not a single-run runner — that's
gmat-run; everygmat-sweepworker calls into it. - Not a way to build GMAT missions from scratch in Python — see
gmatpyplus. - Not a
.scripttext generator — seepygmat. - Not an optimiser. Gradient-, Bayesian-, and population-based optimisation
(CasADi, pagmo2, scikit-optimize) is a different problem;
gmat-sweepmay serve as the parallel evaluator inside one, but it ships no optimiser of its own. - Monte Carlo dispersion (
monte_carlo), Latin hypercube sampling (latin_hypercube), and programmatic resume of partial sweeps land in v0.2 — see the roadmap below. v0.1 ships the full-factorial grid path and the durability contract those features build on.
Requirements
- Python 3.10, 3.11, or 3.12.
gmat-run≥ 0.3 — installed as a transitive dependency from PyPI.gmat-sweepnever importsgmatpydirectly; the import happens inside each worker subprocess on first call.- A local GMAT install.
gmat-sweepdoes not ship GMAT binaries; it relies ongmat-run's install discovery, which honours$GMAT_ROOTor finds a build under a conventional path. Download GMAT from the SourceForge release page — seegmat-run's install guide for the unpack-and-discover steps.
Supported GMAT versions
| GMAT release | Status | CI |
|---|---|---|
| R2026a | Primary development target | Exercised on every PR (Ubuntu + Windows, Python 3.10/3.11/3.12) |
| R2025a | Supported | Exercised on every PR (Ubuntu + Windows, Python 3.10/3.11/3.12) |
R2023a and R2024a were never released by the upstream GMAT project; R2025a and R2026a are
the only releases supported in v0.1. macOS is exercised by gmat-run and lands in
gmat-sweep's CI matrix in v0.2.
Installation
pip install gmat-sweep
The [examples] extra pulls in matplotlib for the example notebooks:
pip install gmat-sweep[examples]
Quick start
from gmat_sweep import sweep
df = sweep(
"mission.script",
grid={"Sat.SMA": [7000, 7100, 7200]},
workers=8,
)
print(df)
That call runs mission.script three times — once per Sat.SMA value — each in a fresh
subprocess, and returns a (run_id, time)-MultiIndexed pandas.DataFrame containing
the rows from every run's ReportFile plus a __status column flagging
ok / failed / skipped. A single failed run lands as a failed row with the captured
GMAT stderr in the manifest — never as a silent zero-row DataFrame and never as an
unhandled exception that aborts the whole sweep.
By default the per-run Parquet files and the manifest land in a temporary directory
whose lifetime is tied to the returned DataFrame. Pass out=Path(...) to keep them.
A gmat-sweep console script is also installed for shell-script and CI use:
gmat-sweep run --grid Sat.SMA=7000:7200:3 --workers 8 --out ./sweep mission.script
gmat-sweep show ./sweep/manifest.jsonl
See the CLI reference in the docs for the full grid grammar.
Outputs
Every sweep emits two artefacts:
- The returned DataFrame —
(run_id, time)-MultiIndexed, one column perReportFilechannel plus the__statuscolumn. Built lazily from per-run Parquet files via pyarrow's dataset API, so a 10,000-run sweep does not have to fit in memory at once. - A JSON Lines manifest (
manifest.jsonl) — append-only, fsync'd after every entry. Records the canonical script SHA-256, software-version fingerprint, full parameter spec, and per-run status, timing, output paths, and captured stderr. ACtrl-Cmid-sweep leaves the manifest in a parseable state. See the manifest schema for the full contract.
Documentation
Full docs at https://astro-tools.github.io/gmat-sweep/, including a getting-started guide, the parameter spec reference, the manifest schema, the supported-version matrix, the FAQ, and the API reference.
Runnable example notebooks:
- Single-axis SMA scan —
fifty runs across
np.linspace(7000, 8000, 50)ofSat.SMA, parallel-dispatched and overlaid on a single altitude-vs-time plot. - Two-axis epoch × time-of-flight grid —
cartesian product over
Sat.Epochand a script-levelVariable TOF, contoured by per-run miss distance. - Surviving a kill —
launch a sweep, send
SIGINTmid-run, and walk through inspecting the partial manifest withgmat-sweep showbefore reloading the partial DataFrame from disk.
Roadmap
| Release | Scope |
|---|---|
| v0.1 (current) | Full-factorial sweep(grid=...). LocalJoblibPool default backend with subprocess isolation per run. Lazy (run_id, time) aggregation from per-run Parquet. JSON Lines manifest with append/fsync durability. gmat-sweep run/show CLI. Ubuntu + Windows CI on R2025a + R2026a × Python 3.10/3.11/3.12. |
| v0.2 (next) | monte_carlo() and latin_hypercube() plus explicit-row samples=DataFrame sweeps. Programmatic resume via Sweep.from_manifest(...).resume(). Ephemeris and contact aggregation across runs. macOS added to CI. Manifest format frozen as a stable v1 schema. Coverage gate raised to 85%. |
Past releases live in CHANGELOG.md.
Development
To work on gmat-sweep itself:
git clone https://github.com/astro-tools/gmat-sweep.git
cd gmat-sweep
uv sync --all-groups
See CONTRIBUTING.md for the full branch / PR / test workflow.
Licence
MIT. See LICENSE.
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 gmat_sweep-0.1.0.tar.gz.
File metadata
- Download URL: gmat_sweep-0.1.0.tar.gz
- Upload date:
- Size: 512.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e16127e2cead7e11c69dcd2f64c0b0ea15c3f4194edb01f134b2d1a9a4e0ed69
|
|
| MD5 |
238672ab88bb06785ad541946b611e76
|
|
| BLAKE2b-256 |
a1a4fb42ac85c2530ddad5449f0802f9796b2eb0b6653e2d82bae87134255e09
|
Provenance
The following attestation bundles were made for gmat_sweep-0.1.0.tar.gz:
Publisher:
release.yml on astro-tools/gmat-sweep
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gmat_sweep-0.1.0.tar.gz -
Subject digest:
e16127e2cead7e11c69dcd2f64c0b0ea15c3f4194edb01f134b2d1a9a4e0ed69 - Sigstore transparency entry: 1438134303
- Sigstore integration time:
-
Permalink:
astro-tools/gmat-sweep@70de4793b4fb91dc11ea2e4a0c9959b8ffb4c3af -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/astro-tools
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@70de4793b4fb91dc11ea2e4a0c9959b8ffb4c3af -
Trigger Event:
push
-
Statement type:
File details
Details for the file gmat_sweep-0.1.0-py3-none-any.whl.
File metadata
- Download URL: gmat_sweep-0.1.0-py3-none-any.whl
- Upload date:
- Size: 31.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
26ceacdc42970404085d5a8ebf0d57ecb0c1d69614281dc0d5aa85378d5c54db
|
|
| MD5 |
a1d548625b92e4337dd037d0063be217
|
|
| BLAKE2b-256 |
381c823e9506f6047af73cecd63a5ca6ab7120c34e1decca47f86cabfea65c09
|
Provenance
The following attestation bundles were made for gmat_sweep-0.1.0-py3-none-any.whl:
Publisher:
release.yml on astro-tools/gmat-sweep
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gmat_sweep-0.1.0-py3-none-any.whl -
Subject digest:
26ceacdc42970404085d5a8ebf0d57ecb0c1d69614281dc0d5aa85378d5c54db - Sigstore transparency entry: 1438134309
- Sigstore integration time:
-
Permalink:
astro-tools/gmat-sweep@70de4793b4fb91dc11ea2e4a0c9959b8ffb4c3af -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/astro-tools
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@70de4793b4fb91dc11ea2e4a0c9959b8ffb4c3af -
Trigger Event:
push
-
Statement type: