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.1 keeps 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.1.tar.gz (1.9 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.1-cp39-abi3-win_amd64.whl (9.9 MB view details)

Uploaded CPython 3.9+Windows x86-64

powerio-0.11.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (9.2 MB view details)

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

powerio-0.11.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (8.2 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ ARM64

powerio-0.11.1-cp39-abi3-macosx_11_0_arm64.whl (8.0 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

powerio-0.11.1-cp39-abi3-macosx_10_12_x86_64.whl (8.9 MB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: powerio-0.11.1.tar.gz
  • Upload date:
  • Size: 1.9 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.1.tar.gz
Algorithm Hash digest
SHA256 5c6d7b41561395dba98fdae4237ae1bda2b3065f142b0891ce8212f7f26a03e9
MD5 9a243952adf00a8583506c8fe691ca45
BLAKE2b-256 c449da5475dafb84140c39c4e904fc0ad0873a6ec23e49ce9fdf8b8a994d3695

See more details on using hashes here.

Provenance

The following attestation bundles were made for powerio-0.11.1.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.1-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: powerio-0.11.1-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 9.9 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.1-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 86b5381de466431bb3444f053a42d8f9e0d11f6a0e53ada46101ea971b70e036
MD5 843f4e52b64de9bc2b9fa754d31a8c1c
BLAKE2b-256 5597c5884873e6eb55f43dc616367e56a2afd9430d0460eb9f67cd7bae110456

See more details on using hashes here.

Provenance

The following attestation bundles were made for powerio-0.11.1-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.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for powerio-0.11.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5617fc203a48b3d6e18096b2b17ed510b6bd91576458242b6cdab8a2e544d143
MD5 4c203d248989cb46bf959774e013699f
BLAKE2b-256 cf5b4244df694acd6ac47ebde81b28313094aa0954e92be63968beba5ce5ff2f

See more details on using hashes here.

Provenance

The following attestation bundles were made for powerio-0.11.1-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.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for powerio-0.11.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 232ddbb51e57c4997dbbf27b5c3e15090baffa51f7e4a4faf2392ae54108f085
MD5 cf4900432f655e6a9fcaa55d2fedcb07
BLAKE2b-256 1124302b04f207a84323132bdbc1b280ac6904b4a5479388975f2c42e675ccfb

See more details on using hashes here.

Provenance

The following attestation bundles were made for powerio-0.11.1-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.1-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for powerio-0.11.1-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 766a93c4e35c83b7f0154b599bbd3bafbc1139eebbe18726d64b56bee862409a
MD5 3ab10a9518f93933c399f70a05eaa998
BLAKE2b-256 7bce7c1ad1935220365c52c04c2e96e9408aecf631a572ea32e138072051c1e7

See more details on using hashes here.

Provenance

The following attestation bundles were made for powerio-0.11.1-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.1-cp39-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for powerio-0.11.1-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 dfcc115efaf6c330c052c51d1c72284c8e8ba7ec3ad152feb9f4d7957fc0ad33
MD5 2a06fa8a8b2f91c5e06cb74b4053b2a6
BLAKE2b-256 4bb7fe801b535db16a793775d704dae714ee970a968a71fa72ca9ea7b85d5ee1

See more details on using hashes here.

Provenance

The following attestation bundles were made for powerio-0.11.1-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

This release

0.11.1 This release

6 files

0.11.0

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