Extensible framework for building power system model translators with plugin architecture
Project description
r2x-core
Extensible framework for power system model translation
R2X Core is a model-agnostic framework for building power system model translators. It provides the core infrastructure, data models, plugin architecture, and APIs that enable translation between different power system modeling platforms.
About R2X Core
R2X Core serves as the foundation for building translators between power system models like ReEDS, PLEXOS, SWITCH, Sienna, and more. It provides a plugin-based architecture where you can register parsers, exporters, and transformations to create custom translation workflows.
Features
- Plugin-based architecture - Singleton registry with automatic discovery and registration of parsers, exporters, system modifiers, and filters
- Standardized component models - Power system components via infrasys
- Multiple file format support - Native support for CSV, HDF5, Parquet, JSON, and XML
- Type-safe configuration - Pydantic-based
PluginConfigfor model-specific parameters with defaults loading - Data transformation pipeline - Built-in filters, column mapping, and reshaping operations
- Abstract base classes -
BaseParserandBaseExporterfor implementing translators - Flexible data store - Automatic format detection and intelligent caching
- Entry point discovery - External packages can register plugins via setuptools/pyproject.toml entry points
Installation
pip install r2x-core
Or with uv:
uv add r2x-core
Python version support: 3.11, 3.12, 3.13
Quick Start
Using the DataStore
The DataStore provides a high-level interface for managing and loading data files:
from r2x_core import DataStore, DataFile
# Create a DataStore pointing to your data directory
store = DataStore(path="/path/to/data")
# Add files to the store
data_file = DataFile(name="generators", fpath="gen.csv")
store.add_data(data_file)
# Or add multiple files at once
files = [
DataFile(name="generators", fpath="gen.csv"),
DataFile(name="loads", fpath="load.csv"),
DataFile(name="buses", fpath="buses.h5")
]
store.add_data(*files)
# Read data from the store
gen_data = store.read_data("generators")
# List all available data files
available_files = store.list_data()
# Remove a data file
store.remove_data("generators")
Building a Model Translator
Create parsers and exporters for your power system model:
from r2x_core import BaseParser, BaseExporter, PluginConfig, DataStore
# Define type-safe configuration
class MyModelConfig(PluginConfig):
folder: str
year: int
# Implement your parser
class MyModelParser(BaseParser):
def build_system_components(self):
# Load data and build system components
gen_data = self.data_store.read_data("generators")
# ... create system components
return Ok(None)
def build_time_series(self):
# Attach time series data
return Ok(None)
# Create a data store and parser
config = MyModelConfig(folder="/path/to/data", year=2030)
store = DataStore(path=config.folder)
parser = MyModelParser(config, data_store=store)
system = parser.build_system()
Plugin Registration and Discovery
Create a manifest that describes each plugin explicitly:
from r2x_core import PluginManifest, PluginSpec
manifest = PluginManifest(package="my-model")
manifest.add(
PluginSpec.parser(
name="my-model.parser",
entry="my_package.parser:MyModelParser",
config="my_package.config:MyModelConfig",
)
)
manifest.add(
PluginSpec.exporter(
name="my-model.exporter",
entry="my_package.exporter:MyModelExporter",
config="my_package.config:MyModelConfig",
config_optional=True,
)
)
Make plugins discoverable via pyproject.toml:
[project.entry-points.r2x_plugins]
my_model = "my_package.plugins:manifest"
Documentation
Comprehensive documentation is available at nrel.github.io/r2x-core:
- Getting Started Tutorial - Step-by-step guide to building your first translator
- Installation Guide - Detailed installation instructions and options
- How-To Guides - Task-oriented guides for common workflows:
- Explanations - Deep dives into key concepts:
- API Reference - Complete API documentation
Roadmap
Curious about what we're working on? Check out the roadmap:
- Active issues - Issues that we are actively working on
- Prioritized backlog - Issues we'll be working on next
- Nice-to-have - Features or fixes anyone can start working on (please let us know before you do)
- Ideas - Future work or ideas for R2X Core
Contributing
We welcome contributions! Please see our Contributing Guide for guidelines on how to contribute to R2X Core.
License
R2X Core is released under the BSD 3-Clause License. See LICENSE.txt for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file r2x_core-0.2.4.tar.gz.
File metadata
- Download URL: r2x_core-0.2.4.tar.gz
- Upload date:
- Size: 69.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
87f9a9927fea37d8f0e2030fb19a2489ea81c9facec8082108d794e19e263ec7
|
|
| MD5 |
8ab9188bf06f23545fdcbdb8bfda2c11
|
|
| BLAKE2b-256 |
b0b4deb31f7d7f302dda9565042aa3584c67ad17340454700dcb6594d409da90
|
Provenance
The following attestation bundles were made for r2x_core-0.2.4.tar.gz:
Publisher:
release.yaml on NREL/r2x-core
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
r2x_core-0.2.4.tar.gz -
Subject digest:
87f9a9927fea37d8f0e2030fb19a2489ea81c9facec8082108d794e19e263ec7 - Sigstore transparency entry: 754717449
- Sigstore integration time:
-
Permalink:
NREL/r2x-core@9c855705e567efaa118ac58d8ed146e3c3c860d0 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/NREL
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yaml@9c855705e567efaa118ac58d8ed146e3c3c860d0 -
Trigger Event:
push
-
Statement type:
File details
Details for the file r2x_core-0.2.4-py3-none-any.whl.
File metadata
- Download URL: r2x_core-0.2.4-py3-none-any.whl
- Upload date:
- Size: 85.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7c49e68a3f0390b64db1aab4411c2850008f6d55bac4b5c7af3007408098babc
|
|
| MD5 |
df9521fd46d02bd301c62eb35d56fb75
|
|
| BLAKE2b-256 |
16a1d972bb6c3d8dd8976d161e729b37d5a60da4c0aa1adad60ed14af8c00af0
|
Provenance
The following attestation bundles were made for r2x_core-0.2.4-py3-none-any.whl:
Publisher:
release.yaml on NREL/r2x-core
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
r2x_core-0.2.4-py3-none-any.whl -
Subject digest:
7c49e68a3f0390b64db1aab4411c2850008f6d55bac4b5c7af3007408098babc - Sigstore transparency entry: 754717479
- Sigstore integration time:
-
Permalink:
NREL/r2x-core@9c855705e567efaa118ac58d8ed146e3c3c860d0 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/NREL
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yaml@9c855705e567efaa118ac58d8ed146e3c3c860d0 -
Trigger Event:
push
-
Statement type: