Skip to main content

ESA++ is an open-source power-grid toolkit.

Project description

License Python 3.9+ Documentation Coverage 92%

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}
}

Authors

Luke Lowery developed this module during his PhD studies at Texas A&M University. You can learn more on his research page or view his publications on Google Scholar.

ESA++ is maintained by Luke Lowery and Adam Birchfield at Texas A&M University. You can explore more of our research at the Birchfield Research Group.

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

esapp-0.1.0.tar.gz (2.1 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

esapp-0.1.0-py3-none-any.whl (2.2 MB view details)

Uploaded Python 3

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

Hashes for esapp-0.1.0.tar.gz
Algorithm Hash digest
SHA256 e29913e64d06f39356b1c1b50f056f8c6db254c37f77447a47976f7bb810d11d
MD5 aed290d1d7172da1c27df561f9a6d90f
BLAKE2b-256 e245efacd997990b81b12d66169148d0601b2c7c9dbb5dc3aff88534b823ab5d

See more details on using hashes here.

Provenance

The following attestation bundles were made for esapp-0.1.0.tar.gz:

Publisher: python-publish.yml on lukelowry/ESApp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

Hashes for esapp-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0e3da5ee7c6f28ebdf539914249ac645ae001f02ea2033440d850e3e5aba033e
MD5 7774f86a446cdc5624e70ce16c54a627
BLAKE2b-256 664aaf6c91baee7f26fda9bda8e817e2bce6898664741e5fac23cc17e6c67936

See more details on using hashes here.

Provenance

The following attestation bundles were made for esapp-0.1.0-py3-none-any.whl:

Publisher: python-publish.yml on lukelowry/ESApp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page