Skip to main content

⚡ enerdatasynth

PyPI Python 3.10+ Tests: 252 passing License: MIT

enerdatasynth generates synthetic energy-resource profiles — electric load and wind — from trained conditional generative models, behind one shared Python interface. You describe the conditions (season, temperature, calendar type); it returns a realistic profile.

Generators

Two resources, one interface: enerdatasynth.model(<name>, zone=...) works the same way for both, regardless of what's running underneath.

PJM Electric Load

Conditional diffusion model for 24-hour PJM load profiles (zone PS), conditioned on month, day-of-week, holiday, and temperature. → PJM Load model report

Wind

Conditional diffusion model for 24-hour (5-minute resolution) wind profiles across three channel presets (1ch/2ch/3ch), conditioned on calendar, temperature, and wind regime. → Wind model report

Quick Start

pip install enerdatasynth
import enerdatasynth

load = enerdatasynth.model("pjm_load", zone="PS")
load.set(month=7, Tmax=86, Tmin=70, weekday=True)
samples = load.sample(n=100, seed=0)     # (100, 24) ndarray, MW

wind = enerdatasynth.model("wind", zone="1ch")
wind.set(wind_regime="mid", month=7, temp_min=10, temp_max=22)
samples = wind.sample(n=10, seed=0)      # (10, 288, 2) ndarray, m/s + degrees — wind sampling is CPU-slow at large n, see docs/models/wind.md

pip install enerdatasynth installs the library only — it does not ship trained checkpoints or data. The example above works as-is if you clone this repository and run from its root (checkpoints are bundled); see docs/installation.md for every install path and docs/quickstart.md for training your own checkpoint from scratch. Note: the version on PyPI today (0.4.1) predates this repository's wind support; install from source for wind.

How It Works

data → conditioning → generative model → synthetic profile → evaluation

Raw data is cleaned and reduced to a conditioning vector (calendar + weather). A conditional diffusion model — a separate, independently-implemented pipeline per resource, since load and wind differ too much scientifically to share one — denoises pure noise into a profile matching that conditioning. Generated profiles are compared against real ones using a metric suite (resource-specific — the two are not the same suite), and — for load — a small post-hoc bias correction. The pipeline differs by resource; the interface you call does not. Full technical detail (architectures, sampling, conditioning schemas, and exactly why the two pipelines differ) lives in the architecture docs and the two model reports, not here.

Model Reports

Each resource has a model report documenting its input data, representation, conditioning, architecture, generative model, training, evaluation, quantitative results, real-vs-generated examples, and known limitations:

These reports are the primary scientific documentation for this project — start there for anything beyond basic usage.

Documentation

Installation Quick Start
API Reference Architecture
Evaluation Extending (add a resource)
PJM Load Model Report Wind Model Report
Model Card Data Card
Developer Guide FAQ

Full documentation map: docs/README.md.

Data & Reproducibility

No raw or source data is distributed with this package or repository — it ships trained checkpoints and the generation interface, not the datasets behind them.

Resource Source
PJM load PJM hourly metered load (hrl_load_metered), via PJM Data Miner 2
Temperature (PJM load conditioning) NOAA Integrated Surface Database (ISD), fetched per zone's constituent weather stations
Wind A separately-developed, previously-published research pipeline (wind_diffusion) — see its model report for what is and isn't known about its original data source

PJM load's cleaning, conditioning, and reproduction steps are fully documented in its model report and data card; bring your own copy of the source data to data/raw/pjm_load/ to reproduce preprocessing end-to-end (see the placeholder file there). Wind currently has no raw data or reproduction path in this repository at all — its report says so directly. There is no separate public data archive (e.g. Zenodo) for this project today.

Citation

No accompanying paper has been published yet. If you use this software, please cite the repository:

@software{enerdatasynth,
  title  = {enerdatasynth: A Research SDK for Synthetic PJM Energy Resource Profiles},
  author = {Sharma, Sonakshi and Tikkawar, Pranav and Mieth, Robert},
  year   = {2026},
  note   = {Software}
}

License

MIT © 2026 Sonakshi Sharma

Metadata

Release files for enerdatasynth 0.7.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for enerdatasynth 0.7.0
File Size Uploaded
enerdatasynth-0.7.0.tar.gz 135.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for enerdatasynth 0.7.0
File Interpreter ABI Platform
enerdatasynth-0.7.0-py3-none-any.whl Python 3 none any Details

Total release size: 292.7 kB

Release files / enerdatasynth-0.7.0.tar.gz

Download URL enerdatasynth-0.7.0.tar.gz
Size 135.9 kB
Tags Source
SHA-256 checksum
How to use checksums
093949d0bf4fc5dffbf719a518d1bbb4b0c3354be3a293c37735f98ce5afbc06
BLAKE2b-256 checksum
How to use checksums
2ac3ee1598000116ddafe4963c48b83e5cd926467dcaad68cae19c1bf638dcf0
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 Aug 14, 2026.

Transparency log

Release files / enerdatasynth-0.7.0-py3-none-any.whl

Download URL enerdatasynth-0.7.0-py3-none-any.whl
Size 156.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ac7398bc5118f0c099bb81fb5a0bd2a942c9b7ca782bde0cbbdeb1994950e6a3
BLAKE2b-256 checksum
How to use checksums
17c50cf2326b0ae92e893a02530f48ac724bf437bc4c55a2e5fa0279ecd6096e
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 Aug 14, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.7.0 This release

2 release files

0.4.1

2 release 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