Skip to content

Commit 6dd1bf0

Browse files
jkiviluoclaude
andcommitted
release: v4.0.0b18 — fix zeroed existing capacity for scalar+Map entity classes
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent a4b822d commit 6dd1bf0

2 files changed

Lines changed: 29 additions & 1 deletion

File tree

CHANGELOG.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,31 @@
1+
## Release 4.0.0b18 (30.6.2026) — fix zeroed existing capacity for scalar+Map entity classes
2+
3+
No database migration (schema stays **v62**) and dependency floors unchanged
4+
(`polar-high>=3.2.0`, `polars>=1.40`, `highspy<=1.14.0`). Output-only fix — the
5+
converged solution (dispatch, investments, optimal objective) is unchanged.
6+
7+
### Outputs
8+
9+
- **Fix zeroed `existing` capacity for a unit whose constant value shares an
10+
entity class with a period-Map sibling.** When one unit carries a scalar
11+
(constant) `existing` capacity while another unit of the same class carries a
12+
period-indexed Map, the Spine reader returns a single frame with one shared
13+
index column (named `x` by Spine's silent default) in which the constant
14+
unit's row has a **null** index. The per-entity resolver classified rows by the
15+
*presence* of that column rather than per-row, so the null-index scalar became
16+
an explicit `(entity, period=null)` row that never joined the period grid and
17+
was silently filled with `0`. Downstream this zeroed the output-facing
18+
existing/total capacity for such units — surfacing most visibly as **negative
19+
VRE curtailment** (`potential − flow`, with `potential` computed from a `0`
20+
capacity), and as `0` in the capacity, capacity-factor, and per-entity
21+
pre-existing fixed-cost reports. The resolver now detects scalars per row (a
22+
null index broadcasts the constant across the period universe), in both mirror
23+
implementations. The LP itself was never affected — its flow bound reads a
24+
separate, scalar-correct existing-count parameter, and existing fixed cost
25+
enters the objective only as an opt-in constant term — so this is purely a
26+
reporting fix; re-running output processing on an existing solve produces
27+
correct reports without re-solving.
28+
129
## Release 4.0.0b17 (30.6.2026) — autoscale centres the objective (no more "excessively small costs")
230

331
No database migration (schema stays **v62**). Dependency floor raised to

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ name = "flextool"
77
# restructure are in. 4.0.0 final follows after the remaining
88
# minor-functionality additions, cleanup and testing land. PEP 440
99
# pre-release suffix: 4.0.0a1, 4.0.0a2, ... 4.0.0b1, 4.0.0rc1, then 4.0.0.
10-
version = "4.0.0b17"
10+
version = "4.0.0b18"
1111
description = "IRENA FlexTool is an energy and power systems model for understanding the role of variable power generation in future energy systems."
1212
readme = "README.md"
1313
license = { file = "LICENSE.txt" }

0 commit comments

Comments
 (0)