Skip to main content

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

Project description

License Python 3.9+ Documentation Coverage 90%

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

The ESA++ package is available on PyPI

pip install esapp

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 docs/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.1.tar.gz (2.2 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.1-py3-none-any.whl (2.2 MB view details)

Uploaded Python 3

File details

Details for the file esapp-0.1.1.tar.gz.

File metadata

  • Download URL: esapp-0.1.1.tar.gz
  • Upload date:
  • Size: 2.2 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.1.tar.gz
Algorithm Hash digest
SHA256 8639b039b70da71b45eb282aa65f8b9c1887a27a5368c54aad75c01dde32b9c8
MD5 b0b71f41b4d817487c62f498372dcabb
BLAKE2b-256 20f98d8a04ef7a59367abcd6b546f7da52d9152de9f00396d21c68e1a1491ece

See more details on using hashes here.

Provenance

The following attestation bundles were made for esapp-0.1.1.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.1-py3-none-any.whl.

File metadata

  • Download URL: esapp-0.1.1-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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ea81b5213bd7d97e00c46cae932726d0d704abc20b9f3c01077f14307260ccc4
MD5 4428a8b692bb16a20d58d2b3f1fcb6b9
BLAKE2b-256 03dc052b59265f9e1ea49de47524f09c9b5bdacaeacbf0f78ad66c864de29efc

See more details on using hashes here.

Provenance

The following attestation bundles were made for esapp-0.1.1-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