Synthesis Dependency Policy
OpenPinch core remains the default install target. The heat exchanger network
synthesis migration uses an isolated synthesis optional extra so users who
only run core pinch, targeting, graph-data, and workspace workflows do not
install solver stacks, plot export tooling, workbook engines, or
wake-management packages.
Python Version Policy
OpenPinch stays on Python >=3.14.2 for the migration. Source OpenHENS targets
Python >=3.12, but migrated synthesis dependencies must resolve and import
under OpenPinch’s Python target before solver code moves.
The HENS-01 viability set is:
pyomo>=6.10.0gekko>=1.3.2plotly>=6.8.0kaleido>=1.3.0openpyxl>=3.1.5wakepy>=1.0.0idaes-pse>=2.11.0
Optional Install
Install the future synthesis runtime dependencies explicitly:
python -m pip install "openpinch[synthesis]"
Repository development should use uv:
rtk uv sync --extra synthesis
The full extra intentionally does not include synthesis. full keeps
covering the established dashboard, notebook, and Brayton-cycle optional
surfaces; heat exchanger network synthesis has separate solver-binary and
dependency expectations.
Test Marker Policy
Fast tests are unmarked and must not require the synthesis extra or solver
binaries. Run them in default CI with:
rtk uv run pytest -m "not synthesis and not solver"
Use @pytest.mark.synthesis for tests that require
openpinch[synthesis] but no external solver binary:
rtk uv run pytest -m synthesis
Use @pytest.mark.solver for tests that require external solver binaries
such as Couenne or IPOPT:
rtk uv run pytest -m solver
Missing optional Python packages should raise
MissingSynthesisDependencyError with the openpinch[synthesis] install
path. Missing external executables should raise MissingSynthesisSolverError
with the binary name and the solver-marker rerun command.