Background
The IASR-derived transmission templater (src/ispypsa/templater/transmission.py) produces region-agnostic timeslices on flow-path limits — peak_demand, summer_typical, winter_reference — paired with a direction of forward / reverse.
The PLEXOS model, by contrast, attaches region-prefixed timeslice tags to Line properties: "NSW Hot Day", "QLD Typical Summer", "VIC Winter", etc. For intra-region paths the right region is obvious, but for inter-regional paths the mapping isn't.
What the PLEXOS model actually does
Investigation in notes/line_timeslice_poke.py (walks every Line object in the AEMO Draft 2026 ISP Step Change PLEXOS XML and tabulates the tag-region on Max Flow vs Min Flow) found a clean, zero-exception rule:
Max Flow (forward, positive limit) carries the destination region's timeslice tag.
Min Flow (reverse, negative limit) carries the origin region's timeslice tag.
This makes physical sense: the seasonal demand condition that constrains the limit is in the receiving region — that's where load tightens the import limit. The rule is symmetric, so reversing direction flips the tag region.
The same rule holds for Max Capacity Reserves / Min Capacity Reserves. Intra-region paths collapse to the single shared region, which is what the existing code already implicitly assumes.
Per-line evidence (all 18 Lines in the AEMO model)
| Line |
from -> to |
MaxFlow tag region |
MinFlow tag region |
| EnergyConnect |
SNSW -> CSA |
SA |
NSW |
| Marinus |
TAS -> SEV |
VIC |
TAS |
| N-Q-MNSP1 |
NNSW -> SQ |
QLD |
NSW |
| NSW1-QLD1 |
NNSW -> SQ |
QLD |
NSW |
| T-V-MNSP1 |
TAS -> SEV |
VIC |
TAS |
| VIC1-NSW1 |
WNV -> SNSW |
NSW |
VIC |
| V-SA |
WNV -> SESA |
SA |
VIC |
| V-S-MNSP1 |
WNV -> CSA |
SA |
VIC |
| (intra-region lines) |
... |
(single region) |
(same region) |
Required change
The network templater (_template_network_transmission and helpers in src/ispypsa/templater/transmission.py) should produce timeslices that follow this destination/origin rule, so downstream code can match against PLEXOS tags without ambiguity. Concretely, the mapping is:
| IASR side |
PLEXOS-style timeslice |
(forward, peak_demand) on path X-Y |
"<region(Y)> Hot Day" |
(forward, summer_typical) |
"<region(Y)> Typical Summer" |
(forward, winter_reference) |
"<region(Y)> Winter" |
(reverse, peak_demand) |
"<region(X)> Hot Day" |
(reverse, summer_typical) |
"<region(X)> Typical Summer" |
(reverse, winter_reference) |
"<region(X)> Winter" |
Where region(X) / region(Y) are the NEM regions of the path's geo_from / geo_to endpoints (so the templater needs a sub-region -> NEM-region lookup at the point where it builds the timeslice column — sub_regional_geography already carries that mapping).
References
- Investigation script:
notes/line_timeslice_poke.py
- Current templater output:
src/ispypsa/templater/transmission.py (_extract_flow_path_limits, _extract_rez_limits)
- PLEXOS-side timeslice tags as seen on extracted custom constraints:
src/ispypsa/templater/plexos/7.5/rhs_values.csv
Background
The IASR-derived transmission templater (
src/ispypsa/templater/transmission.py) produces region-agnostic timeslices on flow-path limits —peak_demand,summer_typical,winter_reference— paired with adirectionofforward/reverse.The PLEXOS model, by contrast, attaches region-prefixed timeslice tags to
Lineproperties:"NSW Hot Day","QLD Typical Summer","VIC Winter", etc. For intra-region paths the right region is obvious, but for inter-regional paths the mapping isn't.What the PLEXOS model actually does
Investigation in
notes/line_timeslice_poke.py(walks everyLineobject in the AEMO Draft 2026 ISP Step Change PLEXOS XML and tabulates the tag-region onMax FlowvsMin Flow) found a clean, zero-exception rule:Max Flow(forward, positive limit) carries the destination region's timeslice tag.Min Flow(reverse, negative limit) carries the origin region's timeslice tag.This makes physical sense: the seasonal demand condition that constrains the limit is in the receiving region — that's where load tightens the import limit. The rule is symmetric, so reversing direction flips the tag region.
The same rule holds for
Max Capacity Reserves/Min Capacity Reserves. Intra-region paths collapse to the single shared region, which is what the existing code already implicitly assumes.Per-line evidence (all 18 Lines in the AEMO model)
Required change
The network templater (
_template_network_transmissionand helpers insrc/ispypsa/templater/transmission.py) should produce timeslices that follow this destination/origin rule, so downstream code can match against PLEXOS tags without ambiguity. Concretely, the mapping is:(forward, peak_demand)on path X-Y"<region(Y)> Hot Day"(forward, summer_typical)"<region(Y)> Typical Summer"(forward, winter_reference)"<region(Y)> Winter"(reverse, peak_demand)"<region(X)> Hot Day"(reverse, summer_typical)"<region(X)> Typical Summer"(reverse, winter_reference)"<region(X)> Winter"Where
region(X)/region(Y)are the NEM regions of the path'sgeo_from/geo_toendpoints (so the templater needs a sub-region -> NEM-region lookup at the point where it builds the timeslice column —sub_regional_geographyalready carries that mapping).References
notes/line_timeslice_poke.pysrc/ispypsa/templater/transmission.py(_extract_flow_path_limits,_extract_rez_limits)src/ispypsa/templater/plexos/7.5/rhs_values.csv