Skip to main content

PowerIO

Rust Python Julia binding crates.io docs.rs PyPI MSRV 1.88 License: MIT OR Apache-2.0

PowerIO format and matrix flow

PowerIO reads power system data into typed values, writes those values back out in the formats other tools read, and builds the sparse matrices and graph data that solvers consume. The core is Rust, and the Python package, the Julia package PowerIO.jl, and the C ABI expose the same operations under the same names.

A parse returns a PioModule, which is one typed value together with its sources, diagnostics, source map, and history. Depending on what the source declares, the value is a network, an operating point, a calculation instance, a solution, a time series, a scenario set, a geographic layer, or a PSS/E contingency analysis file.

Convert files in the browser, including mixed transmission and distribution batches. Files stay on the computer.

Install

cargo add powerio                 # parsing, emission, PowerIO IR
cargo add powerio -F matrix       # and sparse matrices, sensitivities, graph data
pip install powerio               # pip install 'powerio[all]' adds SciPy, NetworkX, Polars
julia -e 'using Pkg; Pkg.add("PowerIO")'
cargo install powerio-cli         # the powerio command

Parse and emit

The examples use case9.m, the nine-bus MATPOWER case included in this repository. Save it in your working directory first, or replace "case9.m" with the path to your own case.

Rust:

use powerio::{PioValue, emit, parse};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let module = parse("case9.m")?;
    let PioValue::BalancedNetwork(network) = module.value() else {
        panic!("expected a balanced network");
    };
    assert_eq!(network.buses().len(), 9);
    emit(&module, "matpower", "copy.m")?;   // the source bytes, unchanged
    let result = emit(&module, "psse", "case9.raw")?;
    for finding in result.diagnostics() {
        eprintln!("{}", finding.code());    // what PSS/E cannot carry
    }
    Ok(())
}

Python:

import powerio

module = powerio.parse("case9.m")
network = module.value
assert isinstance(network, powerio.BalancedNetwork)
module.diagnostics                          # the reader's findings
powerio.emit(module, "matpower", "copy.m")  # the source bytes, unchanged
result = powerio.emit(module, "psse")       # text in memory plus findings

Julia:

using PowerIO

module_ = parse("case9.m")            # PioModule{BalancedNetwork}
net = module_.value
length(net.buses)                     # 9
module_.diagnostics
emit(module_, "matpower", "copy.m")

Command line:

powerio convert case9.m --to psse -o case9.raw
powerio serialize case9.m -o case9.pio.json
powerio verify case9.m --kind bdoubleprime
powerio sensitivities case9.m -o out

If you write an unchanged module back to its own format, you get the source back byte for byte. If you write it to another format, PowerIO keeps what that format can represent and reports each loss as a diagnostic with a stable code, so you can see what the conversion dropped. serialize and deserialize write and read PowerIO IR, the JSON document that stores a complete module for another PowerIO consumer to read back. It preserves the typed data and its history; retained source bytes stay in the running process. After deserialization, emit writes fresh output from the stored value.

Upgrading from 0.10? Start with the migration guide. PowerIO 0.11.7 keeps PowerIO IR version 2 and C ABI 7; these version numbers describe separate interfaces.

Formats

Format Token Read Write
MATPOWER .m matpower yes yes
PSS/E RAW psse, psse34, psse35 revisions 32 to 35 33, 34, 35
PSS/E RAWX psse-rawx revision 35 35
PSS/E contingency, subsystem, and monitored element files .con, .sub, .mon psse-con, psse-sub, psse-mon yes yes
PowSybl XIIDM xiidm 1.0 to 1.17 1.17
PowSybl JIIDM jiidm 1.0 to 1.17 1.17
CIM CGMES profile set cgmes 2.4.15, 3.0 3.0
ENTSO-E UCTE-DEF .uct ucte 2003.09.01, 2007.05.01 2007.05.01
PowerWorld .aux powerworld yes yes
PowerWorld .pwb pwb yes no
PowerWorld .pwd display powerworld-pwd as a geographic layer no
GE PSLF .epc pslf yes yes
IEEE Common Data Format ieee-cdf yes no
PowerModels JSON powermodels-json yes yes
Egret JSON egret-json yes yes
pandapower JSON pandapower-json yes yes
PyPSA CSV directory pypsa-csv yes yes
Surge JSON surge-json yes yes
GridFM Parquet directory, gridfm feature gridfm yes yes
DOE GO Challenge 3 JSON goc3-json problem, or problem with solution a complete solution
DeepMind OPFData JSON opfdata-json yes no
OpenDSS .dss dss yes yes
PowerModelsDistribution engineering JSON pmd-json yes yes
BMOPF JSON bmopf-json, bmopf-json@0.1.0, bmopf-json@0.2.0 0.1.0, 0.2.0 0.1.0, 0.2.0 (default)
Distribution CIM, CIM100 RDF/XML cim-dist cim17v40, one document or a directory cim17v40, one document
PSS SINCAL project, sincal feature sincal-balanced, sincal-multiconductor yes, with an explicit profile an unchanged source byte for byte; an experimental fresh writer in Rust
Geographic layer .geo.json geo-json yes yes

The balanced transmission formats parse to BalancedNetwork, and OpenDSS, PMD, BMOPF, and distribution CIM parse to MulticonductorNetwork. SINCAL holds both kinds of network in one project, so a parse names its profile: sincal-balanced gives a BalancedNetwork and sincal-multiconductor a MulticonductorNetwork. A GO Challenge 3 problem parses to AcScucInstance, a problem with its solution to AcScucSolution, an OPFData file to AcOpfSolution, a GridFM dataset to ScenarioSet<BalancedNetwork>, a PyPSA directory with several snapshots to a TimeSeries<BalancedNetwork>, or to TimeSeries<OperatingPoint<BalancedNetwork>> when only the electrical state varies, a PowerWorld .pwd display and a .geo.json file to GeoLayer, and the PSS/E .con, .sub, and .mon files to ContingencySet, SubsystemSet, and MonitoredSet. PowerIO IR is not in the table: it moves only through serialize and deserialize, and parse refuses it.

The gridfm and sincal cargo features gate their formats. The facade leaves gridfm off and turns sincal on by default; the CLI and the Python wheel include both. The format guide says what each reader keeps, what each writer reports, and how each is checked against its reference implementation.

Packages

Start with powerio in an application. The component crates let libraries depend on just the layer they use.

Crate Provides
powerio PioValue, parse, emit, serialize, deserialize
powerio-core Source, PioModule, diagnostics, collections, destinations
powerio-tx BalancedNetwork and balanced format readers and writers
powerio-dist MulticonductorNetwork and OpenDSS, PMD, BMOPF, CIM converters
powerio-prob Operating points, updates, calculation instances and solutions
powerio-matrix Sparse matrices, sensitivities, DC OPF bundles and graph data
powerio-cli The powerio command and its terminal interface
powerio-py The native extension used by the Python package
powerio-capi C ABI 7, used by Julia and other FFI bindings

powerio-tx and powerio-dist share powerio-core and nothing else, so a distribution consumer pulls in no transmission code. powerio-prob is matrix free. The powerio facade re-exports the component crates, with powerio-matrix behind its matrix feature. Native SINCAL support is the sincal feature, on by default; it brings in SQLite, so a wasm32-unknown-unknown build with it needs a C compiler with a WebAssembly backend, and default-features = false leaves it out.

Documentation

License

Apache License 2.0 or MIT License, at your option.

Metadata

Release files for powerio 0.11.7

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for powerio 0.11.7
File Size Uploaded Provenance Actions
powerio-0.11.7.tar.gz 3.0 MB With provenance Details for powerio-0.11.7.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for powerio 0.11.7
File Actions
powerio-0.11.7-cp39-abi3-win_amd64.whl CPython 3.9 abi3 Windows x86-64 Details for powerio-0.11.7-cp39-abi3-win_amd64.whl
powerio-0.11.7-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.9 abi3 Linux glibc 2.17+ x86-64 Details for powerio-0.11.7-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
powerio-0.11.7-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.9 abi3 Linux glibc 2.17+ ARM64 Details for powerio-0.11.7-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
powerio-0.11.7-cp39-abi3-macosx_11_0_arm64.whl CPython 3.9 abi3 macOS 11.0+ ARM64 Details for powerio-0.11.7-cp39-abi3-macosx_11_0_arm64.whl
powerio-0.11.7-cp39-abi3-macosx_10_12_x86_64.whl CPython 3.9 abi3 macOS 10.12+ x86-64 Details for powerio-0.11.7-cp39-abi3-macosx_10_12_x86_64.whl

Total release size: 68.8 MB

Release files / powerio-0.11.7.tar.gz

Download URL powerio-0.11.7.tar.gz
Size 3.0 MB
Tags Source
SHA-256 checksum
How to use checksums
2bfb0ed0cf0558e846b89e3d50cef59b9cf0639152165af82f35e79fa7e7a2a2
BLAKE2b-256 checksum
How to use checksums
9b0d3fdd20c0ffa7e3959caa19dd4343887a3e3091686127ff8167749b8ea0a0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 28, 2026.

Transparency log

Release files / powerio-0.11.7-cp39-abi3-win_amd64.whl

Download URL powerio-0.11.7-cp39-abi3-win_amd64.whl
Size 14.4 MB
Tags CPython 3.9 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
3f49c8cce8a77a6f81b4e49900c8b26498dcff701bcf647e0d4172c670dcf9a5
BLAKE2b-256 checksum
How to use checksums
6bcb8164d30156aa31f913be5b019fc279629ef00c61ba6167139287dbbc49f6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 28, 2026.

Transparency log

Release files / powerio-0.11.7-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL powerio-0.11.7-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 13.7 MB
Tags CPython 3.9 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
815ca4cdfd9f750dbe7c5b22aec87ab419803f4b1261a2c6c308355d86d157bf
BLAKE2b-256 checksum
How to use checksums
0fc4c26d20ad65442039d4cc05f713e41108121ce05bb3e37a7feb3c3d5aedfb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 28, 2026.

Transparency log

Release files / powerio-0.11.7-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL powerio-0.11.7-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 12.4 MB
Tags CPython 3.9 Linux glibc 2.17+ ARM64 abi3
SHA-256 checksum
How to use checksums
90b7f9c369c2cf2a11012d45e2bfb7fceb5cd17cc2fc535d923c1a55e212343d
BLAKE2b-256 checksum
How to use checksums
7819481c8a351847f25cb908bd5f7e44b4ed9000115cfe2fcd9b10b173c1ef70
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 28, 2026.

Transparency log

Release files / powerio-0.11.7-cp39-abi3-macosx_11_0_arm64.whl

Download URL powerio-0.11.7-cp39-abi3-macosx_11_0_arm64.whl
Size 12.0 MB
Tags CPython 3.9 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
cdd59e71a6b53df40c9989c14722a3171b59d263bcfa1f4433de21d9cbf72d14
BLAKE2b-256 checksum
How to use checksums
dc144ff01e72f8191c6c248b39d5e154052eca997d2493852b82b17c78807bcb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 28, 2026.

Transparency log

Release files / powerio-0.11.7-cp39-abi3-macosx_10_12_x86_64.whl

Download URL powerio-0.11.7-cp39-abi3-macosx_10_12_x86_64.whl
Size 13.3 MB
Tags CPython 3.9 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
c60c925c54cdf05b73e7c61b2c4e9d7357ca751dbf99aba88a8b7c5a10ce7d62
BLAKE2b-256 checksum
How to use checksums
1d45b0e5f337e70069c426c5bdadf44b09d49780f35f7c084f88b80d82da8c3f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 28, 2026.

Transparency log

Security for powerio 0.11.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 6 files in this release have been uploaded with provenance metadata.

Select from 6 files

Attestation for powerio-0.11.7.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 28, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.11.7 This release

6 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page