PowerIO
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.4 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 |
| 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
- Guide
- Core concepts
- Formats and fidelity
- Matrices and graphs
- Rust, Python, Julia, and C
- Rust API reference
- PowerIO.jl
License
Apache License 2.0 or MIT License, at your option.
Metadata
Release files for powerio 0.11.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| powerio-0.11.4.tar.gz | 2.0 MB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| powerio-0.11.4-cp39-abi3-win_amd64.whl | CPython 3.9 | abi3 | Windows x86-64 | Details |
| powerio-0.11.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | CPython 3.9 | abi3 | Linux glibc 2.17+ x86-64 | Details |
| powerio-0.11.4-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl | CPython 3.9 | abi3 | Linux glibc 2.17+ ARM64 | Details |
| powerio-0.11.4-cp39-abi3-macosx_11_0_arm64.whl | CPython 3.9 | abi3 | macOS 11.0+ ARM64 | Details |
| powerio-0.11.4-cp39-abi3-macosx_10_12_x86_64.whl | CPython 3.9 | abi3 | macOS 10.12+ x86-64 | Details |
Total release size: 49.1 MB
Release files / powerio-0.11.4.tar.gz
| Download URL | powerio-0.11.4.tar.gz |
|---|---|
| Size | 2.0 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1f59f7e450965d92523a185aa9fb404bb8755944b971c024881c30b65097d085
|
|
BLAKE2b-256 checksum How to use checksums |
4bd62a13fc21d774ceb4990f9c49c25d036a0122351efb811ea2c5f2520a1ff7
|
| 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 2, 2026.
Transparency logRelease files / powerio-0.11.4-cp39-abi3-win_amd64.whl
| Download URL | powerio-0.11.4-cp39-abi3-win_amd64.whl |
|---|---|
| Size | 10.5 MB |
| Tags | CPython 3.9 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
3aa6d0412342990aeca1a1e1344d6e2828d271127e5d064e74f654f353fd2bf3
|
|
BLAKE2b-256 checksum How to use checksums |
c0ac0393fc91a660cc4a353a54a70f7c598256fb144f654fa72d4528350bffc5
|
| 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 2, 2026.
Transparency logRelease files / powerio-0.11.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | powerio-0.11.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 9.9 MB |
| Tags | CPython 3.9 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
ac1570dbe6562c4e7da35e9c0e9cdc7c096ca8f4feb6ce5bdcea26633e88597f
|
|
BLAKE2b-256 checksum How to use checksums |
064ae05216358c2119b253b420156b514d9e9cfa1ebf0ac4d908ed7874d3e231
|
| 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 2, 2026.
Transparency logRelease files / powerio-0.11.4-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | powerio-0.11.4-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 8.8 MB |
| Tags | CPython 3.9 Linux glibc 2.17+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
abbcda9d6b28fcfe220d04ed0f96ff20241b3b0d5acc8a7db2bcb85b8d656255
|
|
BLAKE2b-256 checksum How to use checksums |
d1fd3ecc34eb6f362ae73f830b8f59489aed50b7e73b6622467a9aa4767f8b6f
|
| 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 2, 2026.
Transparency logRelease files / powerio-0.11.4-cp39-abi3-macosx_11_0_arm64.whl
| Download URL | powerio-0.11.4-cp39-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 8.5 MB |
| Tags | CPython 3.9 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
98522d8328b5a49390418a972a9a66a70a98b15243b429b6fb2a90ad177e3898
|
|
BLAKE2b-256 checksum How to use checksums |
f01c120fffc61f230a58c69607570f0811d27f6d093ea713bbf566c35ca81454
|
| 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 2, 2026.
Transparency logRelease files / powerio-0.11.4-cp39-abi3-macosx_10_12_x86_64.whl
| Download URL | powerio-0.11.4-cp39-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 9.5 MB |
| Tags | CPython 3.9 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
60429d9f404fd26caea3a17b8ec5af43a10a3682fac8d663c1ded430ac05ad9e
|
|
BLAKE2b-256 checksum How to use checksums |
ee10e5e4b7a1eb43816ccf6a2802d7f26dabe68a07b3cbe235e6fde44be7b55b
|
| 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 2, 2026.
Transparency log