Metadata-Version: 2.4
Name: esapp
Version: 0.1.2
Summary: ESA++ is an open-source power-grid toolkit.
Author-email: Adam Birchfield <abirchfield@tamu.edu>, Luke Lowery <wyattluke.lowery@tamu.edu>
License: Apache License 2.0
Project-URL: Homepage, https://github.com/lukelowry/ESApp
Keywords: Python,PowerWorld,PowerWorld Simulator,Simulator,PowerWorld Simulation Automation Server,SimAuto,Automation,Power Systems,Electric Power,Power,Easy SimAuto,ESA,ESAplus,Smart Grid
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Operating System :: Microsoft :: Windows
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Win32 (MS Windows)
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Education
Classifier: Intended Audience :: Science/Research
Classifier: Natural Language :: English
Classifier: Topic :: Education
Classifier: Topic :: Scientific/Engineering
Classifier: Topic :: Software Development
Requires-Python: >=3.7
Description-Content-Type: text/x-rst
License-File: LICENSE
Requires-Dist: pandas
Requires-Dist: numpy<2.0
Requires-Dist: scipy
Requires-Dist: pywin32; sys_platform == "win32"
Requires-Dist: geopandas
Requires-Dist: matplotlib
Provides-Extra: test
Requires-Dist: pytest>=7.0; extra == "test"
Requires-Dist: pytest-cov>=4.0; extra == "test"
Requires-Dist: pytest-xdist>=3.0; extra == "test"
Requires-Dist: pytest-timeout>=2.1; extra == "test"
Requires-Dist: pytest-mock>=3.10; extra == "test"
Requires-Dist: pytest-order>=1.2; extra == "test"
Provides-Extra: dev
Requires-Dist: matplotlib; extra == "dev"
Requires-Dist: pytest>=7.0; extra == "dev"
Requires-Dist: pytest-cov>=4.0; extra == "dev"
Requires-Dist: pytest-order>=1.2; extra == "dev"
Provides-Extra: docs
Requires-Dist: sphinx; extra == "docs"
Requires-Dist: sphinx-rtd-theme; extra == "docs"
Requires-Dist: sphinx-copybutton; extra == "docs"
Requires-Dist: nbsphinx; extra == "docs"
Requires-Dist: ipykernel; extra == "docs"
Requires-Dist: matplotlib; extra == "docs"
Dynamic: license-file

ESA++
=====

.. image:: https://img.shields.io/badge/License-Apache%202.0-blue.svg
   :target: https://opensource.org/licenses/Apache-2.0
   :alt: License

.. image:: https://img.shields.io/badge/python-3.9%2B-blue.svg
   :target: https://www.python.org/downloads/
   :alt: Python 3.9+

.. image:: https://img.shields.io/badge/docs-Read%20the%20Docs-blue.svg
   :target: https://esapp.readthedocs.io/
   :alt: Documentation

.. image:: https://img.shields.io/badge/coverage-98%25-brightgreen.svg
   :alt: Coverage 98%

An open-source Python toolkit for power system automation, providing a
high-performance wrapper for PowerWorld's Simulator Automation Server
(SimAuto). Transforms complex COM calls into intuitive, Pythonic operations.

- **Intuitive Indexing** -- Access grid data with ``pw[Bus, "BusPUVolt"]`` syntax
- **Full SimAuto Coverage** -- All PowerWorld API functions through modular mixins
- **Pandas Integration** -- Every query returns a DataFrame
- **Pythonic Settings** -- Solver and GIC options as descriptor attributes (``pw.max_iterations = 250``)
- **Convenience Methods** -- Flows, overloads, PTDF/LODF, snapshot context manager, case summary
- **Transient Stability** -- Fluent API with ``TS`` field intellisense
- **Analysis Utilities** -- Built-in GIC, network topology, and contingency tools

Installation
------------

Requires Windows with PowerWorld Simulator (SimAuto enabled) and Python 3.9+.

.. code-block:: bash

    pip install esapp

Quick Example
-------------

.. code-block:: python

    from esapp import PowerWorld
    from esapp.components import *

    pw = PowerWorld("path/to/case.pwb")

    # Read data
    bus_data = pw[Bus, ["BusName", "BusPUVolt"]]

    # Solve power flow
    V = pw.pflow()

    # Inspect and modify
    violations = pw.violations(v_min=0.95)
    pw[Gen, "GenMW"] = 100.0

Documentation
-------------

Full tutorials, API reference, and examples at `esapp.readthedocs.io <https://esapp.readthedocs.io/>`_.

Testing
-------

.. code-block:: bash

    pip install .[test]
    pytest tests/

Citation
--------

.. code-block:: bibtex

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

Developed by **Luke Lowery** and **Adam Birchfield** at Texas A&M University
(`Birchfield Research Group <https://birchfield.engr.tamu.edu/>`_).

License
-------

Distributed under the `Apache License 2.0 <https://www.apache.org/licenses/LICENSE-2.0>`_.
