Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
c22c94b
Added m.copy() method.
bobbyxng Mar 17, 2026
8218503
Added testing suite for m.copy().
bobbyxng Mar 17, 2026
2da2d35
Fix solver_dir type annotation.
bobbyxng Mar 17, 2026
bb6b8a4
Bug fix: xarray copyies need to be .
bobbyxng Mar 18, 2026
724b850
Intial commit: Working dualizer for LPs.
bobbyxng Mar 18, 2026
c49a2b8
Fixed typing issues. Initialise dual objective with LinearExpression(…
bobbyxng Mar 18, 2026
b6c26fe
Fixed more typing issues.
bobbyxng Mar 18, 2026
8b66ba0
Added code-block to dualize() examples.
bobbyxng Mar 18, 2026
883d858
Fix more typing issues.
bobbyxng Mar 18, 2026
1b6d09f
Fixed variable bounds for dualisation of max problems (primal) --> re…
bobbyxng Mar 18, 2026
f45c49c
Updated docstrings for max -> min.
bobbyxng Mar 18, 2026
fe8d952
Moved copy to io.py, added deep-copy to all xarray operations.
bobbyxng Mar 18, 2026
3dc0ef0
Merge branch 'copy' into dual
bobbyxng Mar 18, 2026
f4016a8
Improved copy method: Strengtheninc copy protocol compatibility, chec…
bobbyxng Mar 20, 2026
49e9246
Added release notes.
bobbyxng Mar 20, 2026
cad7110
Merge branch 'copy' into dual
bobbyxng Mar 20, 2026
4089a85
Made Model.copy defaulting to deep copy more explicit.
bobbyxng Mar 20, 2026
f38e4d9
Merge branch 'copy' into dual
bobbyxng Mar 20, 2026
0199d67
Fine-tuned docs and added to read the docs api.rst.
bobbyxng Mar 20, 2026
e1760d1
Merge branch 'copy' into dual
bobbyxng Mar 20, 2026
e90bea0
Merge branch 'master' into dual
bobbyxng Apr 8, 2026
3e0f512
Clean up some methods in `dual` module (#629)
brynpickering Apr 8, 2026
70d0cab
fix: use dimension coords only when adding dual variables to avoid sc…
bobbyxng Apr 8, 2026
fc14729
Merge master into branch
bobbyxng May 27, 2026
066de31
fix CI testing issues
bobbyxng Jun 1, 2026
9e3c770
refactor dualisation, update tests, modularise functions and vectoris…
bobbyxng Jun 1, 2026
9cd9543
rename to _lift_bounds_to_constraints and make private
bobbyxng Jun 2, 2026
ecf661a
refactor, improve docstrings
bobbyxng Jun 2, 2026
9babff9
improve readability, docstring formats, testing suite
bobbyxng Jun 2, 2026
ae3cc7c
fix typing in pytests
bobbyxng Jun 2, 2026
fe1e389
fix typing in pytests
bobbyxng Jun 2, 2026
bac70c3
improve test coverage and remove non-supported objective constant
bobbyxng Jun 2, 2026
ea778b0
Fix cases where constraints and variables of the same block/name can …
bobbyxng Jun 2, 2026
215febd
revert test-models.yml environments to upstream, see PR 522
bobbyxng Jun 2, 2026
66410ad
add release notes and improve docstrings of m.dualize()
bobbyxng Jun 2, 2026
14f0c24
docstring improvements
bobbyxng Jun 2, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions doc/release_notes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ Upcoming Version
* After ``model.solve()``, the solver object stays available on ``model.solver``. You can inspect it, reuse it, or release the underlying solver (and its license) by calling ``model.solver.close()`` or assigning ``model.solver = None``. It is also released automatically when the model is garbage-collected.
* New ``SolverReport`` on the result (``result.report``) reports runtime, MIP gap, dual (best) bound, and iteration counts. It is shown in ``repr(result)`` and currently populated by CBC, HiGHS, Gurobi, Knitro, and cuPDLPx.

*Dualize LP models*

* New ``Model.dualize()`` constructs the LP dual as a standalone model, lifting finite variable bounds into explicit constraints so they are reflected in the dual. Dual variables are named after the primal constraints. Works for linear problems with linear objective and constraints. (https://github.com/PyPSA/linopy/pull/626)

*A new way to call a solver (advanced)*

Most users should keep calling ``model.solve(...)``. If you want more control, you can now build the solver yourself and run it in two steps:
Expand Down
Loading
Loading