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.0

  • gekko>=1.3.2

  • plotly>=6.8.0

  • kaleido>=1.3.0

  • openpyxl>=3.1.5

  • wakepy>=1.0.0

  • idaes-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.