Skip to content

handle missing dual values when barrier solution has no crossover#601

Merged
FabianHofmann merged 3 commits into
PyPSA:masterfrom
open-energy-transition:duals_cplex
Mar 11, 2026
Merged

handle missing dual values when barrier solution has no crossover#601
FabianHofmann merged 3 commits into
PyPSA:masterfrom
open-energy-transition:duals_cplex

Conversation

@danielelerede-oet
Copy link
Copy Markdown
Contributor

@danielelerede-oet danielelerede-oet commented Mar 4, 2026

Changes proposed in this Pull Request

This PR improves the extraction of solver quality metrics for CPLEX. Previously, linopy attempted to access some quality attributes that are not always available for LP problems solved with CPLEX. In particular, the max_dual_infeasibility metric was not consistently retrieved, which could lead to missing or incomplete solver diagnostics when using CPLEX through Linopy.

This PR introduces safer handling of CPLEX quality attributes and ensures that available metrics are extracted correctly without raising errors when certain attributes are absent.

Checklist

  • Code changes are sufficiently documented; i.e. new functions contain docstrings and further explanations may be given in doc.
  • Unit tests for new features were added (if applicable).
  • A note for the release notes doc/release_notes.rst of the upcoming release is included.
  • I consent to the release of this PR's code under the MIT license.

@FabianHofmann FabianHofmann merged commit 1e5a4ec into PyPSA:master Mar 11, 2026
2 of 4 checks passed
FabianHofmann added a commit to CharlieFModo/linopy that referenced this pull request Mar 12, 2026
…PSA#601)

* handle missing dual values when barrier solution has no crossover

* Add release notes

---------

Co-authored-by: Fabian Hofmann <fab.hof@gmx.de>
FBumann added a commit that referenced this pull request May 7, 2026
* docs: restructure upcoming release notes and fold in missing PRs

Group the upcoming version block into Features / Performance / Bug Fixes
/ Breaking Changes / Documentation sections so the headline (piecewise)
leads, and add the entries for #589, #595, #601, #614, #619, #635, #656,
#671, #672, #674. Tighten the piecewise block to its final state.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs: tighten upcoming changelog and drop internal-only entries

Trim verbose phrasing in the piecewise / variables / model / solvers
sections, fold subset-superset sub-bullets into one paragraph, and drop
two entries that aren't user-facing for a release notes audience:
sphinx-copybutton (doc tooling) and Model.__weakref__ (only relevant to
extension authors).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs: move align convention from breakpoints() to Slopes in changelog

#673 removed the slopes-mode (and slopes_align kwarg) from breakpoints();
the align kwarg now lives on the Slopes class.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs: move SOS reformulation bullet from Variables to Model

SOS reformulation is a model-rewrite/solve-pipeline concern, not a
variable attribute.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs: split coord alignment into Expressions, move CPLEX to Bug Fixes

- New *Expressions* subsection holds the subset/superset coord
  harmonization, which was misfiled under *Model*.
- CPLEX quality-attribute handling is a fix for crashes on missing
  attributes, not a new feature — moved to **Bug Fixes**.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs: fold as_dataarray MultiIndex fix into add_variables bullet

#659 fixes a regression introduced by #614 in the same release cycle —
no end user ever saw the broken state, so a standalone bullet
overstates the change. Net behavior is captured by extending the
add_variables bullet to mention MultiIndex coords.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs: tighter pass on upcoming changelog

Drop implementation details that belong in API docs (numpy-vs-pandas
note, JSON encoding for netCDF, "with no auxiliary variables" piecewise
detail), merge the two OETC bullets, and trim "Add X. Supports Y."
wrappers across most lines.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs: rephrase active gating bullet to avoid output-zeroing implication

Previous wording ("zeros all auxiliaries when off") was true at the
auxiliary level but glossed over the bounded-tuple case where the
output is not automatically pinned to 0. Drop the implication and
defer the detail to the docstring.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs: drop option-name detail from upcoming changelog

Trim references to specific kwargs/attributes the reader doesn't need
in the high-level summary: method="auto" parens, align="pieces|leading",
deep / include_solution, reformulate_sos="auto", solver_name /
**solver_options, max_dual_infeasibility example, and the
operator-by-operator coord-alignment breakdown.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants