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, a calculation instance, a solution, a time series, a scenario set, or a geographic layer.

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 uses PowerIO IR generation 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
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 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 0.1.0, 0.2.0 0.2.0
Geographic layer .geo.json geo-json yes yes

The balanced transmission formats parse to BalancedNetwork, and OpenDSS, PMD, and BMOPF parse to 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>, and a PyPSA directory with several snapshots to a TimeSeries. 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 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.

Documentation

License

Apache License 2.0 or MIT License, at your option.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

powerio-0.11.0.tar.gz (1.8 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

powerio-0.11.0-cp39-abi3-win_amd64.whl (9.7 MB view details)

Uploaded CPython 3.9+Windows x86-64

powerio-0.11.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (9.1 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ x86-64

powerio-0.11.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (8.1 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ ARM64

powerio-0.11.0-cp39-abi3-macosx_11_0_arm64.whl (7.9 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

powerio-0.11.0-cp39-abi3-macosx_10_12_x86_64.whl (8.8 MB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

Details for the file powerio-0.11.0.tar.gz.

File metadata

  • Download URL: powerio-0.11.0.tar.gz
  • Upload date:
  • Size: 1.8 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for powerio-0.11.0.tar.gz
Algorithm Hash digest
SHA256 9eb549930d87530ccf8af24d46290744c476a448927871fcd0aa1d5df41bf52f
MD5 4e5cfc62ac82ad7346226b3173390041
BLAKE2b-256 9096c4b9c4171c3a2ffc3ab14753443a33b98c3bce2a03f42041b279d0fc182b

See more details on using hashes here.

Provenance

The following attestation bundles were made for powerio-0.11.0.tar.gz:

Publisher: python.yml on eigenergy/powerio

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file powerio-0.11.0-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: powerio-0.11.0-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 9.7 MB
  • Tags: CPython 3.9+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for powerio-0.11.0-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 8aff873678dd63a9d7bd1bb385bd464f86a822f187aa5ff415405c2653fca7ac
MD5 be8cfab108722000aef073b100b8a7ac
BLAKE2b-256 3e5a712e7542fbcaea100f39a8ac79decb766dcf26abce3b5eec802940a878c9

See more details on using hashes here.

Provenance

The following attestation bundles were made for powerio-0.11.0-cp39-abi3-win_amd64.whl:

Publisher: python.yml on eigenergy/powerio

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file powerio-0.11.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for powerio-0.11.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b42aacae2376ea3920739283e04c925d78ee83888311e1685e1fd8ed74ffbbfb
MD5 ac003243f58266995eef6fea195f1cdd
BLAKE2b-256 e2f95a1db08ca92fa290254a6b01738dce59db99cee4df253ac662382df3758e

See more details on using hashes here.

Provenance

The following attestation bundles were made for powerio-0.11.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: python.yml on eigenergy/powerio

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file powerio-0.11.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for powerio-0.11.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 cebfccf6ee7afd4759b1617057512a5705ed7580006ddfc6280de941654a969a
MD5 fa91e4e09f66cb89b57c61474fbe56e5
BLAKE2b-256 b7dc98bb5105924c9781f359965e610a5cc4f5e98dfcc7b82a0544c5c8c966b1

See more details on using hashes here.

Provenance

The following attestation bundles were made for powerio-0.11.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: python.yml on eigenergy/powerio

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file powerio-0.11.0-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for powerio-0.11.0-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f5474946af85dcaed2949c5cc801f6fc32a6153ddf280ea07dd30c9cb86287c9
MD5 57ee267c9672661644259aba9f488122
BLAKE2b-256 07c6a34af45263d83e7ad45cf0fbc8682f70b053de459c3c564c4f781b7a101b

See more details on using hashes here.

Provenance

The following attestation bundles were made for powerio-0.11.0-cp39-abi3-macosx_11_0_arm64.whl:

Publisher: python.yml on eigenergy/powerio

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file powerio-0.11.0-cp39-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for powerio-0.11.0-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 370a60e95ad0592313bb7d93256db8101eb6703d841531c590c1174c6c305276
MD5 8ba7b2237032fb2d2f9edcbfcbd2f004
BLAKE2b-256 fc0f7781990f405ed96ce1e39ba5bf5266cd80602c268280b1bd33dbc70c804b

See more details on using hashes here.

Provenance

The following attestation bundles were made for powerio-0.11.0-cp39-abi3-macosx_10_12_x86_64.whl:

Publisher: python.yml on eigenergy/powerio

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.11.2

6 files

0.11.1

6 files

This release

0.11.0 This release

6 files

0.10.0

6 files

0.9.0

6 files

0.8.3

6 files

0.8.2

6 files

0.8.1

6 files

0.7.3

6 files

0.7.2

6 files

0.7.1

6 files

0.7.0

6 files

0.6.3

6 files

0.6.2

6 files

0.6.1

6 files

0.6.0

6 files

0.5.1

6 files

0.5.0

6 files

0.4.0

6 files

0.3.3

6 files

0.3.2

6 files

0.3.1

6 files

0.3.0

6 files

0.2.4

6 files

0.2.3

6 files

0.2.2

6 files

0.2.1

6 files

0.2.0

6 files

0.1.1

6 files

0.1.0

6 files

0.0.1

6 files

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