ESA++ is an open-source power-grid toolkit.
Project description
An open-source Python toolkit for power system automation, providing a high-performance “syntax-sugar” fork of Easy SimAuto (ESA). This library streamlines interaction with PowerWorld’s Simulator Automation Server (SimAuto), transforming complex COM calls into intuitive, Pythonic operations.
Key Features
Intuitive Indexing Syntax: Access and modify grid components using a unique indexing system (e.g., wb[Bus, "BusPUVolt"]) that feels like native Python.
Comprehensive SimAuto Wrapper: Full coverage of PowerWorld’s API through the SAW class, organized into modular mixins for power flow, contingencies, transients, and more.
High-Level Adapter Interface: A collection of simplified “one-liner” functions for common tasks like GIC calculation, fault analysis, and voltage violation detection.
Native Pandas Integration: Every data retrieval operation returns a Pandas DataFrame or Series, enabling immediate analysis, filtering, and visualization.
Advanced Analysis Apps: Built-in specialized modules for Network topology analysis, Geomagnetically Induced Currents (GIC), and Forced Oscillation detection.
Installation
For local development and the latest features, install the package in editable mode from the root directory:
python -m pip install esapp -e .
Documentation
For a comprehensive tutorial, usage guides, and the full API reference, please visit our documentation website.
Usage Example
Here is a quick example of how ESA++ simplifies data access and power flow analysis.
from esapp import GridWorkBench
from esapp.grid import *
# Open Case
wb = GridWorkBench("path/to/case.pwb")
# Retrieve data
bus_data = wb[Bus, ["BusName", "BusPUVolt"]]
# Solve power flow
V = wb.pflow()
# Do some action, write to PW
violations = wb.find_violations(v_min=0.95)
wb[Gen, "GenMW"] = 100.0
# Save case
wb.save()
Why ESA++?
Traditional automation of PowerWorld Simulator often involves verbose COM calls and manual data parsing. ESA++ abstracts these complexities:
Speed: Optimized data transfer between Python and SimAuto.
Clarity: Code that reads like the engineering operations it performs.
Ecosystem: Built on top of the proven ESA library, adding modern Python features and better integration with the SciPy stack.
More Examples
The examples/ directory contains a gallery of demonstrations, including:
Object Field Access: Reduce the time you spend searching for field names with ESA++ IDE typehints for objects and fields.
Matrix Extraction: Retrieving Y-Bus, Jacobian, and GIC conductance matrices for external mathematical modeling.
Testing
ESA++ includes an extensive test suite covering both offline mocks and live PowerWorld connections. To run the tests, install the test dependencies and execute pytest:
pip install .[test]
pytest tests/test_saw.py
Citation
If you use this toolkit in your research or industrial projects, please cite the original ESA work and this fork:
@article{esa2020,
title={Easy SimAuto (ESA): A Python Package for PowerWorld Simulator Automation},
author={Mao, Zeyu and Thayer, Brandon and Liu, Yijing and Birchfield, Adam},
year={2020}
}
License
Distributed under the Apache License 2.0.
Project details
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 esapp-0.1.0.tar.gz.
File metadata
- Download URL: esapp-0.1.0.tar.gz
- Upload date:
- Size: 2.1 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e29913e64d06f39356b1c1b50f056f8c6db254c37f77447a47976f7bb810d11d
|
|
| MD5 |
aed290d1d7172da1c27df561f9a6d90f
|
|
| BLAKE2b-256 |
e245efacd997990b81b12d66169148d0601b2c7c9dbb5dc3aff88534b823ab5d
|
Provenance
The following attestation bundles were made for esapp-0.1.0.tar.gz:
Publisher:
python-publish.yml on lukelowry/ESApp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
esapp-0.1.0.tar.gz -
Subject digest:
e29913e64d06f39356b1c1b50f056f8c6db254c37f77447a47976f7bb810d11d - Sigstore transparency entry: 808784784
- Sigstore integration time:
-
Permalink:
lukelowry/ESApp@80d53186685ecd4b9286bfacd1d917f4b50de874 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/lukelowry
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@80d53186685ecd4b9286bfacd1d917f4b50de874 -
Trigger Event:
release
-
Statement type:
File details
Details for the file esapp-0.1.0-py3-none-any.whl.
File metadata
- Download URL: esapp-0.1.0-py3-none-any.whl
- Upload date:
- Size: 2.2 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0e3da5ee7c6f28ebdf539914249ac645ae001f02ea2033440d850e3e5aba033e
|
|
| MD5 |
7774f86a446cdc5624e70ce16c54a627
|
|
| BLAKE2b-256 |
664aaf6c91baee7f26fda9bda8e817e2bce6898664741e5fac23cc17e6c67936
|
Provenance
The following attestation bundles were made for esapp-0.1.0-py3-none-any.whl:
Publisher:
python-publish.yml on lukelowry/ESApp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
esapp-0.1.0-py3-none-any.whl -
Subject digest:
0e3da5ee7c6f28ebdf539914249ac645ae001f02ea2033440d850e3e5aba033e - Sigstore transparency entry: 808784789
- Sigstore integration time:
-
Permalink:
lukelowry/ESApp@80d53186685ecd4b9286bfacd1d917f4b50de874 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/lukelowry
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@80d53186685ecd4b9286bfacd1d917f4b50de874 -
Trigger Event:
release
-
Statement type: