Source code for ams.io.pypower

"""
PYPOWER reader for AMS.
"""
import logging

import numpy as np

from ams.io.matpower import mpc2system, system2mpc

logger = logging.getLogger(__name__)


[docs] def testlines(infile): """ Test if this file is in the PYPOWER format. NOT YET IMPLEMENTED. """ return True
[docs] def read(system, file): """ Read a PYPOWER case file into ppc and return an AMS system by calling ``ppc2system``. Parameters ---------- system : ams.system Empty AMS system to load data into. file : str The path to the PYPOWER file. Returns ------- system : ams.system.System The AMS system that loaded the data. """ ppc = py2ppc(file) return ppc2system(ppc, system)
[docs] def py2ppc(infile: str) -> dict: """ Parse PYPOWER file and return a dictionary with the data. Parameters ---------- infile : str The path to the PYPOWER file. Returns ------- ppc : dict The PYPOWER case dict. """ exec(open(f"{infile}").read()) for name, value in locals().items(): # Check if the variable name starts with "case" if name.startswith("case"): ppc = value() return ppc
[docs] def ppc2system(ppc: dict, system) -> bool: """ Alias for ``mpc2system``. Refer to :py:mod:`ams.io.matpower.mpc2system` for more details. Load an PYPOWER case dict into an empth AMS system. Parameters ---------- ppc : dict The PYPOWER case dict. system : ams.system Empty AMS system to load data into. Returns ------- bool True if successful; False otherwise. """ return mpc2system(ppc, system)
[docs] def system2ppc(system) -> dict: """ Alias for ``system2mpc``. Refer to :py:mod:`ams.io.matpower.system2mpc` for more details. Convert data from an AMS system to an mpc dict. In the ``gen`` section, slack generators preceeds PV generators. """ mpc = system2mpc(system) np.set_printoptions(suppress=True) # Map the original bus indices to consecutive values # Adjust discontinuous bus indices BUS_I = mpc['bus'][:, 0].astype(int) bus_map = {busi0: i for i, busi0 in enumerate(BUS_I)} mpc['bus'][:, 0] = np.array([bus_map[busi0] for busi0 in BUS_I]) mpc['gen'][:, 0] = np.array([bus_map[busi0] for busi0 in mpc['gen'][:, 0].astype(int)]) mpc['branch'][:, 0] = np.array([bus_map[busi0] for busi0 in mpc['branch'][:, 0].astype(int)]) mpc['branch'][:, 1] = np.array([bus_map[busi0] for busi0 in mpc['branch'][:, 1].astype(int)]) return mpc
[docs] def ppc2py(ppc: dict, outfile: str) -> str: """ Placeholder. """ return NotImplemented
[docs] def write(system, outfile: str) -> bool: """ Placeholder. """ return NotImplemented