From 83aa72cbe7649633f6f3848000461166aa7ce9a5 Mon Sep 17 00:00:00 2001 From: samtalki <10187005+samtalki@users.noreply.github.com> Date: Sun, 14 Jun 2026 16:49:36 -0400 Subject: [PATCH 1/2] feat: adopt powerio 0.2.2 and expose the PowerWorld .pwd display reader powerio 0.2.2 moved the four folder/Parquet tools (read_pypsa_csv_folder, write_pypsa_csv_folder, read_gridfm, write_gridfm) into the canonical powerio.mcp.server (powerio #119), so powerio_mcp.py drops its local overlay for them and re-exports all twelve canonical tools verbatim. The one remaining overlay is read_display_file, wrapping the new .pwd display API from powerio #120 (parse_display_file) until the canonical server exposes a display tool of its own. It returns the one-line diagram canvas and each substation's display coordinates. - bump the powerio pin to >=0.2.2 - delete the 4-tool overlay; add those four names to the re-export - add read_display_file + tests against a vendored ACTIVSg200.pwd fixture (un-ignored in .gitignore so it ships) - the 0.2.2 AUX/PSS/E parsing and PTDF/LODF fixes reach the bridges and compute_matrix automatically, no code change Co-Authored-By: Claude Opus 4.8 (1M context) --- .gitignore | 4 +- README.md | 2 + powerio/powerio_mcp.py | 177 ++++++--------------------- pyproject.toml | 7 +- tests/data/powerworld/ACTIVSg200.pwd | Bin 0 -> 285960 bytes tests/test_powerio_server.py | 30 +++++ 6 files changed, 78 insertions(+), 142 deletions(-) create mode 100644 tests/data/powerworld/ACTIVSg200.pwd diff --git a/.gitignore b/.gitignore index 9945080..74b115f 100644 --- a/.gitignore +++ b/.gitignore @@ -96,7 +96,9 @@ eig_*/ # PowerWorld *.pwd -# Note: .pwb files might be case files you want to keep (like IEEE 39 bus.pwb), +# ...but keep the vendored .pwd display fixture the powerio tests decode. +!tests/data/powerworld/*.pwd +# Note: .pwb files might be case files you want to keep (like IEEE 39 bus.pwb), # so we don't ignore them globally. # Testing diff --git a/README.md b/README.md index f9f0f0d..1769e25 100644 --- a/README.md +++ b/README.md @@ -141,6 +141,8 @@ save_case(to="psse", out_path="case9.raw", json=...) # stage a file for path-on `save_case` covers the servers without a bridge: write the converted case to disk and point their load tools at the file (e.g. convert PowerWorld `.aux` to MATPOWER `.m` for ANDES). +PowerWorld `.pwd` display files decode separately via `read_display_file(path=...)`, which returns the one-line diagram's canvas size and each substation's display coordinates — the diagram geometry, distinct from the `.pwb`/`.aux` case data. + ### Running from a clone (without installing) Every server is still a standalone script. Clone the repo and run any server directly for use in Claude Desktop: diff --git a/powerio/powerio_mcp.py b/powerio/powerio_mcp.py index 65fe5df..98a13cd 100644 --- a/powerio/powerio_mcp.py +++ b/powerio/powerio_mcp.py @@ -2,19 +2,21 @@ ``powerio.mcp.server`` that ships with the powerio package. powerio is a core dependency (see ``powermcp.registry`` / ``pyproject.toml``), so -the standalone server no longer keeps its own copy of the conversion/summary/ -matrix tools: it re-exports the canonical FastMCP ``mcp`` instance and every -tool registered on it, and adds the handful of folder/Parquet tools that are not -yet upstream. This keeps the eight text-format tools (``convert_case``, -``save_case``, ``case_summary``, ``parse_case``, ``normalize_case``, -``case_to_json``, ``compute_matrix``, ``dense_view``) in lockstep with powerio -with zero divergence to hand-sync. - -The overlay tools below (``read_pypsa_csv_folder`` / ``write_pypsa_csv_folder`` -and ``read_gridfm`` / ``write_gridfm``) wrap powerio library functions that the -canonical server does not expose as MCP tools yet. They should migrate into -``powerio.mcp.server`` upstream; once a powerio release includes them, delete -them here and this module becomes a pure re-export. +the standalone server keeps no copy of the conversion/summary/matrix tools: it +re-exports the canonical FastMCP ``mcp`` instance and every tool registered on +it. As of powerio 0.2.2 that is twelve tools — the eight text-format tools +(``convert_case``, ``save_case``, ``case_summary``, ``parse_case``, +``normalize_case``, ``case_to_json``, ``compute_matrix``, ``dense_view``) plus +the four folder/Parquet tools (``read_pypsa_csv_folder`` / +``write_pypsa_csv_folder`` and ``read_gridfm`` / ``write_gridfm``) that moved +upstream in powerio #119. They stay in lockstep with powerio, nothing to +hand-sync. + +The one overlay below, ``read_display_file``, wraps powerio's ``.pwd`` display +API (``parse_display_file``, added in powerio #120) that the canonical server +does not expose as an MCP tool yet. It should migrate into ``powerio.mcp.server`` +upstream; once a powerio release includes it, delete it here and this module +becomes a pure re-export. Run over stdio with ``python powerio_mcp.py`` (or ``powermcp run powerio``). """ @@ -37,147 +39,46 @@ case_to_json, compute_matrix, dense_view, - # Private helpers reused by the overlay tools below so they share the exact - # input-resolution and summary shape of the canonical tools. Pinned to a - # powerio version that exports them (see pyproject's powerio requirement). - _load, - _summary, + read_pypsa_csv_folder, + write_pypsa_csv_folder, + read_gridfm, + write_gridfm, ) @mcp.tool() -def read_pypsa_csv_folder(folder: str) -> dict: - """Read a PyPSA static CSV folder into the JSON transport plus a summary. +def read_display_file(path: str) -> dict: + """Decode a PowerWorld ``.pwd`` display file into canvas + substation layout. - ``folder`` is a directory of PyPSA component CSVs (``buses.csv``, - ``generators.csv``, ``lines.csv``, ...). PyPSA CSV is a folder format with - no single-file text form, so it can't go through ``parse_case`` / - ``convert_case``; use this to bring such a dataset into the transport, then - pass the returned ``json`` to any other tool. + A ``.pwd`` is the one-line *display* artifact (diagram geometry), separate + from the network case in a ``.pwb`` / ``.aux``. This reads the diagram's + canvas size, its stamp, and each substation's display coordinates, so a + client can place buses on a one-line or map without PowerWorld installed. - Returns ``{"json": , "summary": , - "warnings": []}``. + Returns ``{"kind": "powerworld", "canvas_width": , + "canvas_height": , "stamp": , "substations": + [{"number", "name", "x", "y"}, ...]}``. """ try: - case = powerio.read_pypsa_csv_folder(folder) + display = powerio.parse_display_file(path) except powerio.PowerIOError as exc: raise ValueError(f"parse failed: {exc}") from exc except FileNotFoundError as exc: raise ValueError(f"file not found: {exc}") from exc except OSError as exc: - raise ValueError(f"cannot read folder: {exc}") from exc - return { - "json": case.to_json(), - "summary": _summary(case), - "warnings": list(getattr(case, "read_warnings", []) or []), - } - - -@mcp.tool() -def write_pypsa_csv_folder( - out_dir: str, - path: "str | None" = None, - content: "str | None" = None, - json: "str | None" = None, - format: str = "matpower", -) -> dict: - """Write a case out as a PyPSA static CSV folder. - - Converts any case — a file ``path``, inline ``content`` (with ``format``), - or the ``json`` transport from ``parse_case`` — to PyPSA's CSV component - tables under ``out_dir`` (created if needed). This is the PyPSA-CSV - counterpart of ``save_case`` for the folder format. - - Returns ``{"dir": , "files": [], - "warnings": []}``. - """ - case = _load(path, content, json, format) - try: - result = case.write_pypsa_csv_folder(out_dir) - except powerio.PowerIOError as exc: - raise ValueError(f"conversion failed: {exc}") from exc - except OSError as exc: - raise ValueError(f"write failed: {exc}") from exc + raise ValueError(f"cannot read file: {exc}") from exc + pwd = display.data return { - "dir": result.get("dir", out_dir), - "files": list(result.get("files", [])), - "warnings": list(result.get("warnings", [])), + "kind": display.kind, + "canvas_width": pwd.canvas_width, + "canvas_height": pwd.canvas_height, + "stamp": pwd.stamp, + "substations": [ + {"number": s.number, "name": s.name, "x": s.x, "y": s.y} + for s in pwd.substations + ], } -@mcp.tool() -def read_gridfm(dir: str, scenario: int = 0) -> dict: - """Read one scenario of a gridfm-datakit Parquet dataset into the transport. - - ``dir`` is resolved leniently: the ``raw/`` directory holding the parquet - files, a ``/`` directory with a ``raw/`` child, or a parent with one - ``*/raw/`` child all work. ``scenario`` selects one snapshot from a batch - (``0``, the base case, by default). The read is lossy but recovers - everything a power flow needs; what it can't recover is in ``warnings``. - - Returns ``{"json": , "summary": , - "scenario": , "warnings": []}``. Requires a powerio - build with the native gridfm reader (published wheels include it). - """ - try: - result = powerio.read_gridfm(dir, scenario) - except powerio.PowerIOError as exc: - raise ValueError(f"parse failed: {exc}") from exc - except FileNotFoundError as exc: - raise ValueError(f"file not found: {exc}") from exc - except ImportError as exc: - raise ValueError(str(exc)) from exc - except OSError as exc: - raise ValueError(f"cannot read dataset: {exc}") from exc - case = result.network - return { - "json": case.to_json(), - "summary": _summary(case), - "scenario": int(result.scenario), - "warnings": list(result.warnings), - } - - -@mcp.tool() -def write_gridfm( - out_dir: str, - path: "str | None" = None, - content: "str | None" = None, - json: "str | None" = None, - format: str = "matpower", - scenario: int = 0, - include_y_bus: bool = True, - include_taps: bool = True, - include_shifts: bool = True, -) -> dict: - """Write a case as a gridfm-datakit Parquet dataset under ``out_dir``. - - Converts any case — a file ``path``, inline ``content`` (with ``format``), - or the ``json`` transport — and writes the gridfm layout - (``/raw/*.parquet`` plus ``gridfm_meta.json``). ``scenario`` tags the - snapshot id; the ``include_*`` flags toggle the Y-bus, tap, and shift - columns. - - Returns the writer's report ``{"dir": ..., "files": [...], ...}``. Requires - a powerio build with the native gridfm writer (published wheels include it). - """ - case = _load(path, content, json, format) - try: - result = case.write_gridfm( - out_dir, - scenario, - include_y_bus=include_y_bus, - include_taps=include_taps, - include_shifts=include_shifts, - ) - except powerio.PowerIOError as exc: - raise ValueError(f"conversion failed: {exc}") from exc - except ImportError as exc: - raise ValueError(str(exc)) from exc - except OSError as exc: - raise ValueError(f"write failed: {exc}") from exc - return dict(result) - - if __name__ == "__main__": mcp.run(transport="stdio") diff --git a/pyproject.toml b/pyproject.toml index a5f81fd..61bdf2f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,9 +40,10 @@ dependencies = [ # ANDES bridges build on its JSON transport), and is cheap to require: abi3 # wheels for five platforms, zero required runtime deps, [mcp,matrix] adding # only scipy (already transitive via pandapower) on top of mcp+numpy. - # >=0.2.1: powerio/powerio_mcp.py re-exports the canonical powerio.mcp.server - # (and its _load/_summary helpers) rather than vendoring a copy. - "powerio[mcp,matrix]>=0.2.1", + # >=0.2.2: the canonical powerio.mcp.server now registers the folder/Parquet + # tools too (powerio #119), so powerio_mcp.py re-exports all twelve tools and + # overlays only read_display_file over the new .pwd display API (powerio #120). + "powerio[mcp,matrix]>=0.2.2", # CLI / installer toolkit: "typer>=0.12", "questionary>=2.0", diff --git a/tests/data/powerworld/ACTIVSg200.pwd b/tests/data/powerworld/ACTIVSg200.pwd new file mode 100644 index 0000000000000000000000000000000000000000..3d3fea4a34ca1eabd21c4bd9f5aa255cc9082bf9 GIT binary patch literal 285960 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

Mc|M{o^snx3W=Oz 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⁣dqKgBeABkn`b>b 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 0 and r["canvas_height"] > 0 + subs = r["substations"] + assert subs, "expected at least one substation" + assert all(set(s) == {"number", "name", "x", "y"} for s in subs) + assert any(s["name"] for s in subs) + assert all( + isinstance(s["x"], (int, float)) and isinstance(s["y"], (int, float)) + for s in subs + ) + + +def test_read_display_missing_file_maps_cleanly(tmp_path): + with pytest.raises(ValueError): + powerio_mcp.read_display_file(str(tmp_path / "nope.pwd")) From f5ec85125ab8fcfc6007841220378918bc2940bc Mon Sep 17 00:00:00 2001 From: samtalki <10187005+samtalki@users.noreply.github.com> Date: Sun, 14 Jun 2026 18:10:26 -0400 Subject: [PATCH 2/2] harden read_display_file from the xhigh review - guard display.kind != "powerworld" so a future powerio display kind raises a clean ValueError instead of an opaque AttributeError (the pin is a >=0.2.2 floor and powerio #120's scope mentions PSS/E display formats) - fix the docstring return types: canvas dims and stamp are ints, not float/str - importorskip powerio with minversion="0.2.2" so the suite skips, rather than errors, on a stale powerio that predates the canonical tools - add a corrupt-.pwd regression test (PowerIOParseError maps to ValueError) - narrow the .gitignore negation to the exact fixture, not *.pwd, so a private .pwd dropped in tests/data/powerworld/ stays ignored Co-Authored-By: Claude Opus 4.8 (1M context) --- .gitignore | 2 +- powerio/powerio_mcp.py | 11 ++++++++--- tests/test_powerio_server.py | 9 ++++++++- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 74b115f..f99b1ba 100644 --- a/.gitignore +++ b/.gitignore @@ -97,7 +97,7 @@ eig_*/ # PowerWorld *.pwd # ...but keep the vendored .pwd display fixture the powerio tests decode. -!tests/data/powerworld/*.pwd +!tests/data/powerworld/ACTIVSg200.pwd # Note: .pwb files might be case files you want to keep (like IEEE 39 bus.pwb), # so we don't ignore them globally. diff --git a/powerio/powerio_mcp.py b/powerio/powerio_mcp.py index 98a13cd..888666c 100644 --- a/powerio/powerio_mcp.py +++ b/powerio/powerio_mcp.py @@ -55,9 +55,9 @@ def read_display_file(path: str) -> dict: canvas size, its stamp, and each substation's display coordinates, so a client can place buses on a one-line or map without PowerWorld installed. - Returns ``{"kind": "powerworld", "canvas_width": , - "canvas_height": , "stamp": , "substations": - [{"number", "name", "x", "y"}, ...]}``. + Returns ``{"kind": "powerworld", "canvas_width": , + "canvas_height": , "stamp": , "substations": + [{"number": , "name": , "x": , "y": }, ...]}``. """ try: display = powerio.parse_display_file(path) @@ -67,6 +67,11 @@ def read_display_file(path: str) -> dict: raise ValueError(f"file not found: {exc}") from exc except OSError as exc: raise ValueError(f"cannot read file: {exc}") from exc + # powerio's DisplayData is generic (kind + data); only "powerworld" yields a + # PwdDisplay. Reject any other kind with a clean error instead of an opaque + # AttributeError if a future powerio adds one (the pin is a >=0.2.2 floor). + if display.kind != "powerworld": + raise ValueError(f"unsupported display format: {display.kind!r}") pwd = display.data return { "kind": display.kind, diff --git a/tests/test_powerio_server.py b/tests/test_powerio_server.py index a1d9586..37cca9a 100644 --- a/tests/test_powerio_server.py +++ b/tests/test_powerio_server.py @@ -21,7 +21,7 @@ import pytest -pytest.importorskip("powerio") +pytest.importorskip("powerio", minversion="0.2.2") import powerio # noqa: E402 @@ -512,3 +512,10 @@ def test_read_display_file_decodes_pwd(): def test_read_display_missing_file_maps_cleanly(tmp_path): with pytest.raises(ValueError): powerio_mcp.read_display_file(str(tmp_path / "nope.pwd")) + + +def test_read_display_garbage_file_maps_cleanly(tmp_path): + bad = tmp_path / "garbage.pwd" + bad.write_bytes(b"not a real display file\x00\x01\x02") + with pytest.raises(ValueError): + powerio_mcp.read_display_file(str(bad))