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, 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.
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 |
yes | 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 |
| MG-RAVENS JSON, balanced and multiconductor profiles | ravens-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 |
| PowerModelsDistribution MATHEMATICAL JSON | pmd-math-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
- Guide
- Core concepts
- Formats and fidelity
- Matrices and graphs
- Rust, Python, Julia, and C
- Migrating from 0.10
- Rust API reference
- PowerIO.jl
- Contributing
License
Apache License 2.0 or MIT License, at your option.
Metadata
Release files for powerio 0.11.11
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| powerio-0.11.11.tar.gz | 3.3 MB | With provenance | Details for powerio-0.11.11.tar.gz |
Built distributions (wheels)
| File | Actions Reset | |||
|---|---|---|---|---|
| powerio-0.11.11-cp311-abi3-win_amd64.whl | CPython 3.11 | abi3 | Windows x86-64 | Details for powerio-0.11.11-cp311-abi3-win_amd64.whl |
| powerio-0.11.11-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl | CPython 3.11 | abi3 | Linux glibc 2.17+ x86-64 | Details for powerio-0.11.11-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl |
| powerio-0.11.11-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl | CPython 3.11 | abi3 | Linux glibc 2.17+ ARM64 | Details for powerio-0.11.11-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl |
| powerio-0.11.11-cp311-abi3-macosx_11_0_arm64.whl | CPython 3.11 | abi3 | macOS 11.0+ ARM64 | Details for powerio-0.11.11-cp311-abi3-macosx_11_0_arm64.whl |
| powerio-0.11.11-cp311-abi3-macosx_10_12_x86_64.whl | CPython 3.11 | abi3 | macOS 10.12+ x86-64 | Details for powerio-0.11.11-cp311-abi3-macosx_10_12_x86_64.whl |
Total release size: 75.5 MB
Release files / powerio-0.11.11.tar.gz
| Download URL | powerio-0.11.11.tar.gz |
|---|---|
| Size | 3.3 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7d251fdc62ea1194b540b1086a9a3fe482da6df33b66115b3d1d9191eb93597c
|
|
BLAKE2b-256 checksum How to use checksums |
64f52a7cfe3df3a833020640313d49f2bfa2f7359dfc9a6877e0415c69f490f3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Nov 10, 2026.
Transparency logRelease files / powerio-0.11.11-cp311-abi3-win_amd64.whl
| Download URL | powerio-0.11.11-cp311-abi3-win_amd64.whl |
|---|---|
| Size | 15.9 MB |
| Tags | CPython 3.11 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
4ab2f0012b3c907c51f220bfa32d1518732cc00ee66ebe77b913db63a8f48cda
|
|
BLAKE2b-256 checksum How to use checksums |
2b47101fed4a796a9ac2dd324460a45ba2212319c6383815e900d8d135b3da27
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Nov 10, 2026.
Transparency logRelease files / powerio-0.11.11-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
| Download URL | powerio-0.11.11-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl |
|---|---|
| Size | 15.1 MB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
9c3f074ff4019df6345fc56ba9d1059b75f250e4abed3d189fcfc922f4487dcd
|
|
BLAKE2b-256 checksum How to use checksums |
700f1ebd0d5a637c64bb389b12af81ef027396158b8186c2e96663e731454b89
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Nov 10, 2026.
Transparency logRelease files / powerio-0.11.11-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
| Download URL | powerio-0.11.11-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl |
|---|---|
| Size | 13.6 MB |
| Tags | CPython 3.11 Linux glibc 2.17+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
8776e5f6f3e9621830c6a2daca73194f86370f6cfc5ec84cb92e902900ae9af3
|
|
BLAKE2b-256 checksum How to use checksums |
aa4d8279cb21c0e7d9e306d0268cd154377677a76995f38047c0a7bb0a0364fe
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Nov 10, 2026.
Transparency logRelease files / powerio-0.11.11-cp311-abi3-macosx_11_0_arm64.whl
| Download URL | powerio-0.11.11-cp311-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 13.2 MB |
| Tags | CPython 3.11 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
eeb51e1decb549e96a98be34e78f4354264601ddf223e366f17f795c26b8fec3
|
|
BLAKE2b-256 checksum How to use checksums |
226d6df9ebcf5255c2ef12f97e9ada4bf47fc5e8013e099b76903f3b4bcbb200
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Nov 10, 2026.
Transparency logRelease files / powerio-0.11.11-cp311-abi3-macosx_10_12_x86_64.whl
| Download URL | powerio-0.11.11-cp311-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 14.6 MB |
| Tags | CPython 3.11 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
0114167073f6eda8c657a9f773c1d338de32b063341022b327039458fdc3ab7c
|
|
BLAKE2b-256 checksum How to use checksums |
b1261b70bbd03e669346fd794f4d097a70fa54462c643633321deead2448f02c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Nov 10, 2026.
Transparency logSecurity for powerio 0.11.11
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.
Attestation for powerio-0.11.11.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 Nov 10, 2026.
Transparency logA 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.