Skip to content

Preserve case geography and PowerWorld drawings for 0.11.1 - #496

Draft
samtalki wants to merge 3 commits into
claude/powermcp-powerio-tellegen-4orrbcfrom
codex/tellegen-release-fixes
Draft

Preserve case geography and PowerWorld drawings for 0.11.1#496
samtalki wants to merge 3 commits into
claude/powermcp-powerio-tellegen-4orrbcfrom
codex/tellegen-release-fixes

Conversation

@samtalki

@samtalki samtalki commented Sep 7, 2026

Copy link
Copy Markdown
Member

Preserve bus coordinates, line paths, and coordinate systems through edits and PowerIO IR. Read the supplied PowerWorld PWB locations and PWD drawings, and support the GeoJSON conventions proposed in BMOPFTools #258. BMOPF output keeps geometry under schema-valid extras.geojson while the proposal remains under Task Force review.

This builds on #495 for 0.11.1; published 0.11.0 assets remain unchanged. Tests cover all 20 supplied New England PWB files, the drawings, edited BMOPF output against both schemas, and Julia access. Rust (2,001), C (35), Python (219), and Julia (1,042) checks pass. Release and production updates remain on hold for the Tellegen preview review.

@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

Conversion Matrix

Legend

Cells show X/Y: observed warnings / expected warnings. Counts include source parse, target write, and target readback.

A nonzero cell means the target format cannot carry what the source stated, and every warning names the field or record it cannot carry. A write or readback warning names a field of the target format; a source parse warning, which every cell of that row shares, names what the source document itself leaves unstated. A warning that named a writer PowerIO could extend instead of a limit of the format would be a defect in this table.

  • 🟢 0/0: no warnings and checked invariants held.
  • 🟡 X=Y: observed warnings match the reviewed expected count, and that count is nonzero.
  • 🔴 X!=Y or invariant failure: behavior changed. If warnings decreased because fidelity improved, update the expected counts in the same PR.
  • Expected counts are the *_WARNING_BASELINE arrays in powerio-cli/tests/conversion_matrix_report.rs; accept an intentional change by editing the matching source/target entry in the same PR.

Transmission

Six generated cases per writable source row; one vendored case per read-only source row.

Into a case format

Source ↓ / target → MATPOWER .m PowerModels JSON PSS/E .raw 33 PSS/E RAWX 35 PowerWorld .aux egret JSON pandapower JSON Surge JSON PSLF .epc
MATPOWER .m 🟢 0/0 🟡 1/1 🟡 15/15 🟡 15/15 🟡 18/18 🟡 7/7 🟡 14/14 🟡 23/23 🟡 14/14
PowerModels JSON 🟢 0/0 🟢 0/0 🟡 15/15 🟡 15/15 🟡 17/17 🟡 6/6 🟡 13/13 🟡 22/22 🟡 13/13
PSS/E .raw 33 🟡 1/1 🟡 1/1 🟢 0/0 🟢 0/0 🟡 2/2 🟡 1/1 🟡 3/3 🟡 1/1 🟡 2/2
PSS/E RAWX 35 🟡 1/1 🟡 1/1 🟢 0/0 🟢 0/0 🟡 2/2 🟡 1/1 🟡 3/3 🟡 1/1 🟡 2/2
PowerWorld .aux 🟡 1/1 🟢 0/0 🟡 6/6 🟡 6/6 🟢 0/0 🟢 0/0 🟡 8/8 🟢 0/0 🟡 6/6
egret JSON 🟢 0/0 🟢 0/0 🟡 9/9 🟡 9/9 🟡 12/12 🟢 0/0 🟡 7/7 🟡 1/1 🟡 7/7
pandapower JSON 🟢 0/0 🟢 0/0 🟡 7/7 🟡 7/7 🟡 8/8 🟢 0/0 🟢 0/0 🟢 0/0 🟡 7/7
Surge JSON 🟢 0/0 🟢 0/0 🟡 9/9 🟡 9/9 🟡 12/12 🟢 0/0 🟡 6/6 🟢 0/0 🟡 7/7
PSLF .epc 🟢 0/0 🟢 0/0 🟡 1/1 🟡 1/1 🟡 1/1 🟢 0/0 🟡 4/4 🟡 3/3 🟢 0/0
XIIDM 1.17 🟡 9/9 🟡 7/7 🟡 33/33 🟡 33/33 🟡 8/8 🟡 7/7 🟡 9/9 🟡 7/7 🟡 8/8
JIIDM 1.17 🟡 9/9 🟡 7/7 🟡 33/33 🟡 33/33 🟡 8/8 🟡 7/7 🟡 9/9 🟡 7/7 🟡 8/8
CGMES 3.0 🟡 8/8 🟡 6/6 🟡 67/67 🟡 42/42 🟡 6/6 🟡 6/6 🟡 7/7 🟡 6/6 🟡 6/6
UCTE-DEF .uct 🟡 18/18 🟡 12/12 🟡 6/6 🟡 6/6 🟡 18/18 🟡 12/12 🟡 6/6 🟡 12/12 🟡 18/18
PyPSA CSV 🟢 0/0 🟡 6/6 🟡 14/14 🟡 14/14 🟡 14/14 🟡 6/6 🟡 9/9 🟡 6/6 🟡 12/12
GridFM Parquet 🟡 6/6 🟢 0/0 🟡 14/14 🟡 14/14 🟡 14/14 🟡 6/6 🟡 9/9 🟢 0/0 🟡 12/12
PSS/E .raw 32 🟡 5/5 🟡 4/4 🟡 2/2 🟡 2/2 🟡 4/4 🟡 4/4 🟡 5/5 🟡 4/4 🟡 6/6
IEEE CDF 🟡 8/8 🟡 8/8 🟡 6/6 🟡 6/6 🟡 8/8 🟡 8/8 🟡 9/9 🟡 8/8 🟡 8/8
GO Challenge 3 JSON 🟡 6/6 🟡 5/5 🟡 7/7 🟡 7/7 🟡 9/9 🟡 5/5 🟡 7/7 🟡 5/5 🟡 7/7
DeepMind OPFData JSON 🟡 3/3 🟡 2/2 🟡 5/5 🟡 5/5 🟡 5/5 🟡 3/3 🟡 4/4 🟡 2/2 🟡 4/4

Into an exchange format

Source ↓ / target → XIIDM 1.17 JIIDM 1.17 CGMES 3.0 UCTE-DEF .uct
MATPOWER .m 🟡 70/70 🟡 70/70 🟡 57/57 🟡 42/42
PowerModels JSON 🟡 69/69 🟡 69/69 🟡 56/56 🟡 41/41
PSS/E .raw 33 🟡 32/32 🟡 32/32 🟡 12/12 🟡 29/29
PSS/E RAWX 35 🟡 32/32 🟡 32/32 🟡 12/12 🟡 29/29
PowerWorld .aux 🟡 54/54 🟡 54/54 🟡 30/30 🟡 33/33
egret JSON 🟡 68/68 🟡 68/68 🟡 36/36 🟡 36/36
pandapower JSON 🟡 55/55 🟡 55/55 🟡 35/35 🟡 52/52
Surge JSON 🟡 67/67 🟡 67/67 🟡 36/36 🟡 36/36
PSLF .epc 🟡 38/38 🟡 38/38 🟡 11/11 🟡 28/28
XIIDM 1.17 🟢 0/0 🟢 0/0 🟡 179/179 🟡 60/60
JIIDM 1.17 🟢 0/0 🟢 0/0 🟡 179/179 🟡 60/60
CGMES 3.0 🟡 44/44 🟡 44/44 🟢 0/0 🟡 51/51
UCTE-DEF .uct 🟡 36/36 🟡 36/36 🟡 12/12 🟢 0/0
PyPSA CSV 🟡 70/70 🟡 70/70 🟡 38/38 🟡 38/38
GridFM Parquet 🟡 64/64 🟡 64/64 🟡 32/32 🟡 40/40
PSS/E .raw 32 🟡 15/15 🟡 15/15 🟡 9/9 🟡 10/10
IEEE CDF 🟡 13/13 🟡 13/13 🟡 8/8 🟡 14/14
GO Challenge 3 JSON 🟡 8/8 🟡 8/8 🟡 7/7 🟡 14/14
DeepMind OPFData JSON 🟡 32/32 🟡 32/32 🟡 8/8 🟡 32/32

Into a dataset directory

Source ↓ / target → PyPSA CSV GridFM Parquet
MATPOWER .m 🟡 15/15 🟡 31/31
PowerModels JSON 🟡 14/14 🟡 30/30
PSS/E .raw 33 🟡 9/9 🟡 28/28
PSS/E RAWX 35 🟡 9/9 🟡 28/28
PowerWorld .aux 🟡 13/13 🟡 27/27
egret JSON 🟡 9/9 🟡 25/25
pandapower JSON 🟡 8/8 🟡 18/18
Surge JSON 🟡 9/9 🟡 25/25
PSLF .epc 🟡 8/8 🟡 27/27
XIIDM 1.17 🟡 15/15 🟡 53/53
JIIDM 1.17 🟡 15/15 🟡 53/53
CGMES 3.0 🟡 13/13 🟡 51/51
UCTE-DEF .uct 🟡 12/12 🟡 36/36
PyPSA CSV 🟢 0/0 🟡 15/15
GridFM Parquet 🟡 12/12 🟢 0/0
PSS/E .raw 32 🟡 6/6 🟡 12/12
IEEE CDF 🟡 9/9 🟡 11/11
GO Challenge 3 JSON 🟡 9/9 🟡 11/11
DeepMind OPFData JSON 🟡 5/5 🟡 4/4

Distribution

Seven cases per source row.

Into a distribution format

Source ↓ / target → OpenDSS .dss BMOPF JSON PMD JSON
OpenDSS .dss 🟢 0/0 🟡 66/66 🟡 88/88
BMOPF JSON 🟡 21/21 🟢 0/0 🟡 16/16
PMD JSON 🟡 27/27 🟡 44/44 🟢 0/0

Geographic Layer

One case per source row.

Into the geographic layer document

Source ↓ / target → geo-json
PowerWorld .aux substation coordinates 🟢 0/0

A geographic layer is a powerio.GeoLayer, not a network: no grid exchange format states a standalone layer, so the layer has its own table rather than a row of the network matrix. Its source is the substation coordinates of a vendored PowerWorld auxiliary file.

Full warning details: download conversion-matrix-warning-details for this workflow run.

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.

1 participant