OpenPinch
OpenPinch is an open-source Python toolkit for advanced Pinch Analysis and Total Site Integration. It supports direct and indirect heat integration targeting, graph interpretation, Heat Pump and refrigeration screening, exergy and cogeneration post-processing, heat exchanger network synthesis, multi-period analysis, stream piece-wise linearisation (for variable heat capacity and phase change streams), and file-backed or schema-first workflows.
Full documentation is available at https://openpinch.readthedocs.io/en/latest/.
Install
Install the base package for validation, targeting, summaries, and schema-first Python workflows:
python -m pip install openpinch
Install optional extras only for the workflows that need them:
python -m pip install "openpinch[notebook]" # Jupyter, Plotly graphs, Excel I/O
python -m pip install "openpinch[dashboard]" # Streamlit dashboard
python -m pip install "openpinch[synthesis]" # HEN synthesis, then run: idaes get-extensions
python -m pip install "openpinch[brayton_cycle]" # TESPy-backed Brayton-cycle tooling
python -m pip install "openpinch[full]" # all optional surfaces, including synthesis
OpenPinch currently requires Python >=3.14.2.
Both synthesis and full install the IDAES/Pyomo synthesis stack. Complete
the IDAES installation before running solver-backed workflows:
idaes get-extensions
First Solve
OpenPinch exposes two package-root workflow classes. Use PinchProblem for one
case and PinchWorkspace for named cases and scenarios.
from OpenPinch import PinchProblem
problem = PinchProblem(
{
"streams": [
{
"name": "Hot feed",
"zone": "Process",
"t_supply": 180.0,
"t_target": 80.0,
"heat_flow": 1000.0,
},
{
"name": "Cold feed",
"zone": "Process",
"t_supply": 20.0,
"t_target": 120.0,
"heat_flow": 800.0,
},
],
"utilities": [],
},
project_name="First solve",
)
problem.validate()
problem.target.all_heat_integration()
print(problem.summary_frame())
Analysis is explicit: named methods execute work, while summaries, reports, plots, and exports consume prepared or cached state.
Packaged Resources
OpenPinch ships maintained sample cases and notebook workflows. The resource helpers below are useful repository tooling, but are not compatibility protected:
from OpenPinch.resources import (
list_notebooks,
list_sample_cases,
notebook_metadata,
sample_case_metadata,
)
print(list_sample_cases())
print(sample_case_metadata("basic_pinch.json").description)
print(list_notebooks())
print(notebook_metadata("01_first_solve_and_core_curves.ipynb").title)
Copy the notebook series from the CLI:
openpinch notebook -o notebooks
The eighteen-notebook series progresses from first solve through multiperiod HPR, cogeneration, HEN synthesis, and publication workflows.
The CLI intentionally copies notebooks only. Solves, validation, graph export, Excel export, dashboards, and advanced targeting happen through Python.
Documentation Map
- Getting started: https://openpinch.readthedocs.io/en/latest/getting-started.html
- Workflow choice: https://openpinch.readthedocs.io/en/latest/overview/workflow-map.html
- Guides: https://openpinch.readthedocs.io/en/latest/guides/index.html
- API reference: https://openpinch.readthedocs.io/en/latest/api/index.html
Testing
Run the test suite locally:
uv sync --frozen --group dev
uv run --no-sync ruff check .
uv run --no-sync coverage run --branch --source=OpenPinch -m pytest --hypothesis-seed=20260715 -m "not solver"
uv run --no-sync coverage report --fail-under=95
uv run --no-sync python scripts/build_docs.py
uv run --no-sync python scripts/build_dist.py
Ubuntu runs the complete CI suite. Windows and macOS install the generated
wheel and verify the core import, CLI, and packaged resources. Tests marked
solver require external solver binaries; the release workflow installs the
IDAES extensions and runs this gate automatically. Run it locally with
uv run pytest -m solver when the required binaries are available.
Release Process
- In the pull request targeting
main, set a strict, forwardX.Y.Zversion inpyproject.tomland keep the OpenPinch entry inuv.locksynchronized. - Merge only after the read-only validation jobs, external-solver suite, and
aggregate
pr-gateresult pass. - The main-branch workflow repeats the test, documentation, solver, build, and cross-platform artifact gates.
- After those gates pass, it creates the annotated version tag and a draft GitHub release with checksummed release artifacts, then publishes the same distributions to TestPyPI. Preflight and postflight checks require the exact expected filenames and SHA-256 hashes, including safe recovery from a partial upload.
- After TestPyPI succeeds:
- it publishes the GitHub release before production PyPI
- it dispatches the same workflow at the version tag
- The tag-ref run verifies the source push, workflow, prerequisite jobs, and
immutable build artifact ID, digest, and build attempt. It then requires the
public release files to match that artifact byte-for-byte without rebuilding
and waits at the protected
pypienvironment. - Approve that deployment to use PyPI Trusted Publishing; the workflow uploads the verified distributions and confirms the version through the PyPI API.
Version bumping does not create a tag locally. The release workflow owns tags
and rejects malformed versions, mismatched lock metadata, or an existing tag
that points anywhere other than the main-branch release commit. If production
publication or its availability check fails after the GitHub Release becomes
public, open the original tag run and select Re-run failed jobs. Exact index
preflight, skip-existing, and a separately retryable availability check make
an absent, partial, or already-complete release recoverable without accepting
mismatched files. Do not start a fresh tag dispatch when the upload may already
have succeeded.
Build the documentation locally:
uv run scripts/build_docs.py
History and Citation
OpenPinch started in 2011 as an Excel workbook with macros. The Python implementation began in 2021 to make the workflows scriptable and testable.
In publications and forks, please cite and link the foundational article and this repository:
Timothy Gordon Walmsley, 2026. OpenPinch: An Open-Source Python Library for Advanced Pinch Analysis and Total Site Integration. Process Integration and Optimization for Sustainability. https://doi.org/10.1007/s41660-026-00729-6
Contributors
Founder: Tim Walmsley, University of Waikato
Stephen Burroughs, Benjamin Lincoln, Alex Geary, Harrison Whiting, Khang Tran, Roger Padulles, Jasper Walden, Caleb Archer
License
OpenPinch is released under the MIT License. See LICENSE for details.
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 openpinch-0.6.3.tar.gz.
File metadata
- Download URL: openpinch-0.6.3.tar.gz
- Upload date:
- Size: 461.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
69777d28e4b8c0f591e527c87b8006a330685153cabc2638d506ff2c0c780893
|
|
| MD5 |
b7f54ffd2108212dbe32bd3c81d806d1
|
|
| BLAKE2b-256 |
0f3a0913abe08a22d49bee44f3678b3cd7d53892f55b65b749bbbc4a773957ee
|
Provenance
The following attestation bundles were made for openpinch-0.6.3.tar.gz:
Publisher:
ci-publish.yml on waikato-ahuora-smart-energy-systems/OpenPinch
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
openpinch-0.6.3.tar.gz -
Subject digest:
69777d28e4b8c0f591e527c87b8006a330685153cabc2638d506ff2c0c780893 - Sigstore transparency entry: 2683591758
- Sigstore integration time:
-
Permalink:
waikato-ahuora-smart-energy-systems/OpenPinch@6494fb410458cc9e77e61d3cf842310ef2c5003b -
Branch / Tag:
refs/tags/v0.6.3 - Owner: https://github.com/waikato-ahuora-smart-energy-systems
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci-publish.yml@6494fb410458cc9e77e61d3cf842310ef2c5003b -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file openpinch-0.6.3-py3-none-any.whl.
File metadata
- Download URL: openpinch-0.6.3-py3-none-any.whl
- Upload date:
- Size: 640.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
111ade289f4b7258f56891d1ddfb208161f1767a5e191ef04f2ee7e8a30f6b6f
|
|
| MD5 |
68c276f05a5746eb93ad04ebb30a13ed
|
|
| BLAKE2b-256 |
54dadba89f8b3766dacbafa966025bce6847cf79cd5a5a13d3bb89814655eef5
|
Provenance
The following attestation bundles were made for openpinch-0.6.3-py3-none-any.whl:
Publisher:
ci-publish.yml on waikato-ahuora-smart-energy-systems/OpenPinch
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
openpinch-0.6.3-py3-none-any.whl -
Subject digest:
111ade289f4b7258f56891d1ddfb208161f1767a5e191ef04f2ee7e8a30f6b6f - Sigstore transparency entry: 2683591788
- Sigstore integration time:
-
Permalink:
waikato-ahuora-smart-energy-systems/OpenPinch@6494fb410458cc9e77e61d3cf842310ef2c5003b -
Branch / Tag:
refs/tags/v0.6.3 - Owner: https://github.com/waikato-ahuora-smart-energy-systems
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci-publish.yml@6494fb410458cc9e77e61d3cf842310ef2c5003b -
Trigger Event:
workflow_dispatch
-
Statement type: