pyflightstream
Version-aware, didactic Python driver for the FlightStream panel-method solver. Successor of the author's legacy research scripts. MIT licensed.
Status: v0.2.0 is public on PyPI with the archived release on Zenodo (DOI recorded in CITATION.cff). Development continues toward v0.3.0; CHANGELOG.md carries the release history.
pip install pyflightstream
A first taste, no solver required (build time is where errors surface):
from pyflightstream.commands import CommandNotInVersionError
from pyflightstream.script import Script
script = Script(version="26.12") # the FlightStream version is explicit input
script.emit("NEW_SIMULATION")
script.emit("IMPORT", "METER", "STL", "wing.stl", clear=True)
script.emit("SOLVER_SET_AOA", 4.0)
script.emit("START_SOLVER")
print(script.render()) # validated ASCII script, ready for the solver
try:
Script(version="26.0").emit("SOLVER_SET_AOA", 4.0)
except CommandNotInVersionError as error:
print(error) # refused: no recorded evidence for that version
The worked examples in examples/ take it from here to executed
polars, campaigns, and coupled aeroelastic runs.
Optional extras: [fsi] (aeroelastic coupling, PyNiteFEA), [geom]
(probe-survey geometry gating, trimesh/rtree/scipy), [plot]
(matplotlib for the plotting examples).
Why this package
FlightStream is scripted through an ASCII command file, and the solver is under active development: the FlightStream team is responsive to user requests and works with intermediate hotfix builds that consolidate into stable releases. A fast-moving solver naturally means a scripting command set that evolves from version to version, faster than any single document can track. This package makes the FlightStream version an explicit input: every command it emits is validated against a per-version command database, and old versions are only ever added, never dropped, so campaigns stay reproducible across that evolution.
Every database entry carries a manual page citation, and its status per version (documented, verified, broken) can only be promoted by citing a committed probe report from a licensed machine. Nothing is guessed; the honest gaps are reported as such.
What ships
- Command database with per-version evidence and a manual citation on
every entry, browsable offline via
pyflightstream.help()(including a manual-coverage section) and as a generated docs site; the compatibility matrix carries the live counts. - Validating script builder with curated helpers: phase ordering, didactic refusals at build time, entity labels (recipes can name frames, actuators, motions, and boundaries instead of raw indices), and a solver-setup provenance snapshot recording the effective value of every solver flag per run.
- Campaign workspace: an input-artifact library (references, solver presets, boundary groups, geometries, profiles, executables by build id), a run manifest as the single identity authority, output naming templates, campaign pre-flight with zero solver time, and resumable incremental sweeps.
- Runner and parsers: headless execution, anchor-based parsers for the solver outputs, and a pandas table layer (per-result tables, one wide row per run, whole-sweep DataFrame straight from the manifest).
- Run-matrix support as a first-class interface: read, convert, pre-flight, and run the pipe-delimited 15-column matrix format.
- Far-field probe surveys (planar grids, geometry gating, VTK/Tecplot writers, conservation ledgers on xarray) and an aeroelastic coupling subpackage (structural beam, coupled driver, replay harness).
- Architecture overview from the live module docstrings via
pyflightstream.overview(). - Predictable surfaces: a declared-options registry
(
pyflightstream.options), one public exception catalog (pyflightstream.exceptions), test assertions with quantified reports (pyflightstream.testing), and the house conventions rendered byhelp().
Command-line tools
| Tool | Purpose |
|---|---|
pyfs-qa |
Tier 2 command-validity probes, Tier 3 physics regression and cross-version drift, status promotion from committed reports |
pyfs-workspace |
Initialize the managed campaign workspace tree |
pyfs-matrix |
Convert and pre-flight run matrices |
pyfs-fsi |
The structural executable of the aeroelastic coupling loop |
Supported FlightStream versions
Registered: 26.000, 26.100, 26.120 (canonical 26.XXX scheme; the last
digit indexes vendor hotfix builds). The ordered list in
src/pyflightstream/commands/_meta.yaml is the only ordering
authority. Evidence is strongest on 26.120 (probed on a licensed
machine); 26.100 is partially backfilled from the manuals; the 26.000
column is honestly empty until probed. The compatibility matrix in the
docs is generated from the database at build time.
What is each folder?
| Folder | Purpose in plain language |
|---|---|
src/pyflightstream/ |
The package, one subpackage per pipeline stage (versions, commands, script, results, cases, run, workspace, post, qa, plus fsi, probes, farfield) |
src/pyflightstream/commands/ |
The command database: what exists in which FlightStream version, with manual page citations |
tests/ |
Tier 1 tests, runnable anywhere, no FlightStream needed |
reports/ |
Committed evidence from licensed machines: command validity (compat), physics regression, drift, and research cards |
docs/ |
Documentation source (ProperDocs); reference pages are generated from the database, never committed |
examples/ |
Runnable example scripts in percent format |
guide/ |
LaTeX source of the user guide (the built pdf never enters Git) |
deprecated/ |
Discontinued public items, grouped here instead of scattered at the top level |
.claude/skills/ |
Maintenance procedures (version updates, command additions, QA runs, releases) |
_private/ |
Local only, never committed: FlightStream manuals, executables, research geometry |
Development setup
pip install -e .[dev,fsi,geom]
pre-commit install
pytest
Tier 1 (the pytest suite) runs anywhere. Tier 2 (command validity
probes) and Tier 3 (physics regression) require a local FlightStream
license and are documented in CONTRIBUTING.md. The docs build with
properdocs build --strict.
License
MIT. Contributions must be original or MIT-compatible; code derived from the AGPL pyFlightscript package is not accepted. See CONTRIBUTING.md.
Release files for pyflightstream 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pyflightstream-0.3.0.tar.gz | 337.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pyflightstream-0.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 628.8 kB
Release files / pyflightstream-0.3.0.tar.gz
| Download URL | pyflightstream-0.3.0.tar.gz |
|---|---|
| Size | 337.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6209f968cee6491c47e7de26e29b3153f3fd2ca26fd25fb78c6014973d3866b5
|
|
BLAKE2b-256 checksum How to use checksums |
45725c946cf6918bc0ae3ce2956966781a342f40d3c2b304377706cd8031b131
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.0
|
Release files / pyflightstream-0.3.0-py3-none-any.whl
| Download URL | pyflightstream-0.3.0-py3-none-any.whl |
|---|---|
| Size | 291.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6f9cdc7e121dd5ee3b668e2ef43068b95e0384360aae5a923c4d1bc1caec2807
|
|
BLAKE2b-256 checksum How to use checksums |
70d4ed644ec55456f3b262c80ffbda7df9d5712629550fd754a4c03450db4321
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.0
|