From a5e3e61c91be73228d0b7bf0b197d4164949e3f0 Mon Sep 17 00:00:00 2001 From: jinningwang Date: Fri, 13 Dec 2024 14:13:12 -0500 Subject: [PATCH 01/28] Remove idx sort in get_idx of GroupBase --- ams/models/group.py | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/ams/models/group.py b/ams/models/group.py index 70f398de..c822cd54 100644 --- a/ams/models/group.py +++ b/ams/models/group.py @@ -29,20 +29,7 @@ def get_idx(self): which handles varying length strings with letters and numbers. """ all_idx = [mdl.idx.v for mdl in self.models.values()] - - # Custom sorting function to handle varying length strings with letters and numbers - def custom_sort_key(item): - try: - return int(item) # Try to convert to integer for pure numeric strings - except ValueError: - try: - # Extract numeric part for strings with letters and numbers - return int(''.join(filter(str.isdigit, item))) - except ValueError: - return item # Return as is if not numeric - - group_idx = [sorted(mdl_idx, key=custom_sort_key) for mdl_idx in all_idx] - flat_list = [item for sublist in group_idx for item in sublist] + flat_list = [item for sublist in all_idx for item in sublist] return flat_list def _check_src(self, src: str): From 107728b8f10dd11456fc7a440de45ebaa3ea71ff Mon Sep 17 00:00:00 2001 From: jinningwang Date: Fri, 13 Dec 2024 14:17:52 -0500 Subject: [PATCH 02/28] Format --- ams/core/model.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/ams/core/model.py b/ams/core/model.py index 77655cc1..17409dcf 100644 --- a/ams/core/model.py +++ b/ams/core/model.py @@ -51,10 +51,6 @@ def __init__(self, system=None, config=None): ))) self.docum = Documenter(self) - # TODO: duplicate from ANDES, disable for now - # self.syms = SymProcessor(self) # symbolic processor instance - # self.docum = Documenter(self) - def _all_vars(self): """ An OrderedDict of States, ExtStates, Algebs, ExtAlgebs From ca09a05d382369d8abae52241df006fcc460b71d Mon Sep 17 00:00:00 2001 From: jinningwang Date: Fri, 13 Dec 2024 14:19:51 -0500 Subject: [PATCH 03/28] Add two more guesses for idx_guess in module interface --- ams/interface.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ams/interface.py b/ams/interface.py index 012ade1a..092a7b03 100644 --- a/ams/interface.py +++ b/ams/interface.py @@ -47,7 +47,9 @@ 'busf': 'BusFreq', 'zone': 'Zone', 'gen': 'StaticGen', - 'pq': 'PQ', } + 'pq': 'PQ', + 'vsg': 'VSG', + 'regc': 'VSG', } def sync_adsys(amsys, adsys): From f6d5247f656942dee7c5160f45c86e33401eb1dc Mon Sep 17 00:00:00 2001 From: jinningwang Date: Fri, 13 Dec 2024 14:35:48 -0500 Subject: [PATCH 04/28] Reset df index to follow pandas convention, in module interface func make_link_table --- ams/interface.py | 4 ++-- ams/system.py | 52 ++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 43 insertions(+), 13 deletions(-) diff --git a/ams/interface.py b/ams/interface.py index 092a7b03..5e17eb6b 100644 --- a/ams/interface.py +++ b/ams/interface.py @@ -109,7 +109,7 @@ def _to_andes_pflow(system, no_output=False, default_config=True, **kwargs): def to_andes(system, addfile=None, setup=False, no_output=False, default_config=True, - verify=True, tol=1e-3, + verify=False, tol=1e-3, **kwargs): """ Convert the AMS system to an ANDES system. @@ -993,7 +993,7 @@ def make_link_table(adsys): dyr = ssa_key0['syg_idx'] + ssa_key0['dg_idx'] + ssa_key0['rg_idx'] non_dyr = np.logical_not(dyr) - ssa_dyr0 = ssa_key0[non_dyr] + ssa_dyr0 = ssa_key0[non_dyr].reset_index(drop=True) ssa_dyr0['gammap'] = 1 ssa_dyr0['gammaq'] = 1 diff --git a/ams/system.py b/ams/system.py index 789655bf..06d0eb14 100644 --- a/ams/system.py +++ b/ams/system.py @@ -542,7 +542,11 @@ def connectivity(self, info=True): raise NotImplementedError - def to_andes(self, setup=True, addfile=None, **kwargs): + def to_andes(self, addfile=None, + setup=False, no_output=False, + default_config=True, + verify=False, tol=1e-3, + **kwargs): """ Convert the AMS system to an ANDES system. @@ -552,30 +556,56 @@ def to_andes(self, setup=True, addfile=None, **kwargs): 3. Power flow models are in the same shape as the AMS system. 4. Dynamic models, if any, are in the same shape as the AMS system. + This function is wrapped as the ``System`` class method ``to_andes()``. + Using the file conversion ``to_andes()`` will automatically + link the AMS system instance to the converted ANDES system instance + in the AMS system attribute ``dyn``. + + It should be noted that detailed dynamic simualtion requires extra + dynamic models to be added to the ANDES system, which can be passed + through the ``addfile`` argument. + Parameters ---------- - setup : bool, optional - Whether to call `setup()` after the conversion. Default is True. + system : System + The AMS system to be converted to ANDES format. addfile : str, optional The additional file to be converted to ANDES dynamic mdoels. - **kwargs : dict - Keyword arguments to be passed to `andes.system.System`. + setup : bool, optional + Whether to call `setup()` after the conversion. Default is True. + no_output : bool, optional + To ANDES system. + default_config : bool, optional + To ANDES system. + verify : bool + If True, the converted ANDES system will be verified with the source + AMS system using AC power flow. + tol : float + The tolerance of error. Returns ------- - andes : andes.system.System + adsys : andes.system.System The converted ANDES system. Examples -------- >>> import ams >>> import andes - >>> sp = ams.load(ams.get_case('ieee14/ieee14_rted.xlsx'), setup=True) - >>> sa = sp.to_andes(setup=False, - ... addfile=andes.get_case('ieee14/ieee14_wt3.xlsx'), - ... overwrite=True, no_keep=True, no_output=True) + >>> sp = ams.load(ams.get_case('ieee14/ieee14_uced.xlsx'), setup=True) + >>> sa = sp.to_andes(addfile=andes.get_case('ieee14/ieee14_full.xlsx'), + ... setup=False, overwrite=True, no_output=True) + + Notes + ----- + 1. Power flow models in the addfile will be skipped and only dynamic models will be used. + 2. The addfile format is guessed based on the file extension. Currently only ``xlsx`` is supported. + 3. Index in the addfile is automatically adjusted when necessary. """ - return to_andes(self, setup=setup, addfile=addfile, + return to_andes(system=self, addfile=addfile, + setup=setup, no_output=no_output, + default_config=default_config, + verify=verify, tol=tol, **kwargs) def summary(self): From c22d21241889af7e53db523cd2c8dbd483dd9392 Mon Sep 17 00:00:00 2001 From: jinningwang Date: Fri, 13 Dec 2024 14:48:12 -0500 Subject: [PATCH 05/28] [WIP] PFlow1, using pyoptinterface --- ams/routines/__init__.py | 1 + ams/routines/pflow1.py | 156 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 157 insertions(+) create mode 100644 ams/routines/pflow1.py diff --git a/ams/routines/__init__.py b/ams/routines/__init__.py index ad5be239..740e0749 100644 --- a/ams/routines/__init__.py +++ b/ams/routines/__init__.py @@ -17,6 +17,7 @@ ('dopf', ['DOPF', 'DOPFVIS']), ('pflow0', ['PFlow0']), ('dcpf0', ['DCPF0']), + ('pflow1', ['PFlow1']), ]) class_names = list_flatten(list(all_routines.values())) diff --git a/ams/routines/pflow1.py b/ams/routines/pflow1.py new file mode 100644 index 00000000..18d0f06f --- /dev/null +++ b/ams/routines/pflow1.py @@ -0,0 +1,156 @@ +""" +Power flow routines using PyOptInterface +""" +from pyoptinterface import nlfunc, ipopt +import pyoptinterface as poi +import math + +import logging +from typing import Optional, Union, Type +from collections import OrderedDict + +import numpy as np + +from andes.utils.misc import elapsed + +from ams.core.param import RParam +from ams.routines.routine import RoutineBase +from ams.opt import Var, Expression, Objective + +logger = logging.getLogger(__name__) + + +class PFlow1(RoutineBase): + """ + UNDER DEVELOPMENT! + + Power flow analysis using PyOptInterface. + + References + ---------- + [1] Y. Yang, C. Lin, L. Xu, X. Yang, W. Wu and B. Wang, "Accelerating Optimal Power Flow with + Structure-aware Automatic Differentiation and Code Generation," in IEEE Transactions on Power Systems + + [2] Y. Yang, C. Lin, L. Xu, and W. Wu, "PyOptInterface: Design and implementation of an efficient + modeling language for mathematical optimization," arXiv, 2024. + """ + + def __init__(self, system, config): + RoutineBase.__init__(self, system, config) + self.info = 'AC Power Flow' + self.type = 'PF' + self._adsys = None + + self.config.add(OrderedDict((('tol', 1e-6), + ))) + self.config.add_extra("_help", + tol="convergence tolerance", + ) + self.config.add_extra("_alt", + tol="float", + ) + + self.Bf = RParam(info='Bf matrix', + name='Bf', tex_name=r'B_{f}', + model='mats', src='Bf', + no_parse=True, sparse=True,) + self.Pfinj = RParam(info='Line power injection vector', + name='Pfinj', tex_name=r'P_{f}^{inj}', + model='mats', src='Pfinj', + no_parse=True,) + + self.pg = Var(info='Gen active power', + unit='p.u.', + name='pg', tex_name=r'p_g', + model='StaticGen', src='p') + self.qg = Var(info='Gen reactive power', + unit='p.u.', + name='qg', tex_name=r'q_g', + model='StaticGen', src='q') + self.aBus = Var(info='Bus voltage angle', + unit='rad', + name='aBus', tex_name=r'\theta_{bus}', + model='Bus', src='a',) + self.vBus = Var(info='Bus voltage magnitude', + unit='p.u.', + name='vBus', tex_name=r'V_{bus}', + model='Bus', src='v',) + self.plf = Expression(info='Line flow', + name='plf', tex_name=r'p_{lf}', + unit='p.u.', + e_str='Bf@aBus + Pfinj', + model='Line', src=None,) + + self.obj = Objective(name='obj', + info='place holder', unit='$', + sense='min', e_str='0',) + + def enable(self, name): + raise NotImplementedError + + def disable(self, name): + raise NotImplementedError + + def addRParam(self, + name: str, + tex_name: Optional[str] = None, + info: Optional[str] = None, + src: Optional[str] = None, + unit: Optional[str] = None, + model: Optional[str] = None, + v: Optional[np.ndarray] = None, + indexer: Optional[str] = None, + imodel: Optional[str] = None,): + """ + Not supported! + """ + raise NotImplementedError + + def addService(self, + name: str, + value: np.ndarray, + tex_name: str = None, + unit: str = None, + info: str = None, + vtype: Type = None,): + """ + Not supported! + """ + raise NotImplementedError + + def addConstrs(self, + name: str, + e_str: str, + info: Optional[str] = None, + is_eq: Optional[str] = False,): + """ + Not supported! + """ + raise NotImplementedError + + def addVars(self, + name: str, + model: Optional[str] = None, + shape: Optional[Union[int, tuple]] = None, + tex_name: Optional[str] = None, + info: Optional[str] = None, + src: Optional[str] = None, + unit: Optional[str] = None, + horizon: Optional[RParam] = None, + nonneg: Optional[bool] = False, + nonpos: Optional[bool] = False, + cplx: Optional[bool] = False, + imag: Optional[bool] = False, + symmetric: Optional[bool] = False, + diag: Optional[bool] = False, + psd: Optional[bool] = False, + nsd: Optional[bool] = False, + hermitian: Optional[bool] = False, + boolean: Optional[bool] = False, + integer: Optional[bool] = False, + pos: Optional[bool] = False, + neg: Optional[bool] = False,): + """ + Not supported! + """ + raise NotImplementedError From e10c0199703b3b1dfb59fcb2a7284611dc8fb449 Mon Sep 17 00:00:00 2001 From: jinningwang Date: Mon, 30 Dec 2024 13:01:05 -0500 Subject: [PATCH 06/28] Update the table of cost benchmark in README --- README.md | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 1cfbc48f..175e36a8 100644 --- a/README.md +++ b/README.md @@ -43,13 +43,20 @@ and solved with third-party solvers. AMS produces credible scheduling results and competitive performance. The following results show the comparison of DCOPF between AMS and other tools. -| Cost [\$] | AMS | MATPOWER | pandapower | -|----------------:|--------------:|------------:|-----------:| -| PEGASE 1354-Bus | 1,173,590.63 | 1,173,590.63 | 1,173,590.63 | -| PEGASE 2869-Bus | 2,338,915.61 | 2,338,915.61 | 2,338,915.61 | -| GOC 4020-Bus | 793,634.11 | 793,634.11 | 793,634.11 | -| EPIGRIDS 5658-Bus| 1,195,466.12 | 1,195,466.12 | 1,195,466.12 | -| EPIGRIDS 7336-Bus| 1,855,870.94 | 1,855,870.94 | 1,855,870.94 | +| Cost [\$] | AMS | pandapower | MATPOWER | +|-----------------------|--------------|--------------|--------------| +| IEEE 14-Bus | 7,642.59 | 7,642.59 | 7,642.59 | +| IEEE 39-Bus | 41,263.94 | 41,263.94 | 41,263.94 | +| PEGASE 89-Bus | 5,733.37 | 5,733.37 | 5,733.37 | +| IEEE 118-Bus | 125,947.88 | 125,947.88 | 125,947.88 | +| NPCC 140-Bus | 810,033.37 | 810,016.06 | 810,033.37 | +| WECC 179-Bus | 411,706.13 | 411,706.13 | 411,706.13 | +| IEEE 300-Bus | 706,292.32 | 706,292.32 | 706,292.32 | +| PEGASE 1354-Bus | 1,218,096.86 | 1,218,096.86 | 1,218,096.86 | +| PEGASE 2869-Bus | 2,386,235.33 | 2,386,235.33 | 2,386,235.33 | +| GOC 4020-Bus | 793,634.11 | 793,634.11 | 793,634.11 | +| EPIGRIDS 5658-Bus | 1,195,466.12 | 1,195,466.12 | 1,195,466.12 | +| EPIGRIDS 7336-Bus | 1,855,870.94 | 1,855,870.94 | 1,855,870.94 | DCOPF Time From bcd7f3e0fcacf66e9cff2dfde091aac88fd5e79e Mon Sep 17 00:00:00 2001 From: jinningwang Date: Mon, 30 Dec 2024 13:02:26 -0500 Subject: [PATCH 07/28] Update installation notes in README --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 175e36a8..1c079e35 100644 --- a/README.md +++ b/README.md @@ -75,12 +75,6 @@ Use the following resources to get involved. # Installation -***NOTE:*** -- Version **0.9.9** has known issues and has been yanked from PyPI -- `kvxopt` is recommended to install via `conda` as sometimes ``pip`` struggles to set the correct path for compiled libraries -- `cvxpy` versions **below 1.5** are incompatible with `numpy` versions **2.0 and above** -- If solver `SCIP` run into import error, try to reinstall its Python interface by running `pip install pyscipopt --no-binary scip --force` - AMS is released as ``ltbams`` on PyPI and conda-forge. Install from PyPI using pip: @@ -100,6 +94,12 @@ Install from GitHub source: pip install git+https://github.com/CURENT/ams.git ``` +***NOTE:*** +- Version **0.9.9** has known issues and has been yanked from PyPI +- `kvxopt` is recommended to install via `conda` as sometimes ``pip`` struggles to set the correct path for compiled libraries +- `cvxpy` versions **below 1.5** are incompatible with `numpy` versions **2.0 and above** +- If solver `SCIP` run into import error, try to reinstall its Python interface by running `pip install pyscipopt --no-binary scip --force` + # Example Usage ```python From 9d2755740ddd1a47bd3243248ccba5f2ef515288 Mon Sep 17 00:00:00 2001 From: jinningwang Date: Mon, 30 Dec 2024 13:05:44 -0500 Subject: [PATCH 08/28] In README, update target audience --- README.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 1c079e35..70f2edc3 100644 --- a/README.md +++ b/README.md @@ -32,9 +32,11 @@ Python Software for Power System Scheduling Modeling and Co-Simulation with Dyna With the built-in interface with ANDES, AMS enables **Dynamics Incorporated** **Stability-Constrained Scheduling**. -This package can be helpful for power system engineers, researchers, and students -who need to conduct scheduling studies and transient stability studies at given -operating points. +This package is helpful for power system engineers, researchers, and students conducting +scheduling and transient stability studies at specific operating points. It also benefits +those interested in developing new scheduling formulations and algorithms, particularly +by extending existing formulations to include new decision variables, constraints, and +objective functions. AMS is a **Modeling Framework** that provides a descriptive way to formulate scheduling problems. The optimization problems are then handled by **CVXPY** From 83d76a7f7c580474db28e5d59a513a58fb8e0488 Mon Sep 17 00:00:00 2001 From: jinningwang Date: Mon, 30 Dec 2024 13:12:47 -0500 Subject: [PATCH 09/28] In README, update citation info --- README.md | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 70f2edc3..93aeeddd 100644 --- a/README.md +++ b/README.md @@ -73,7 +73,8 @@ Use the following resources to get involved. - Submit contributions using [pull requests][GitHub pull requests] - Read release notes highlighted [here][release notes] - Try in Jupyter Notebook on [Binder][Binder] - +- Check out the source code used for [benchmark][benchmark] +- Check out and and cite our [paper][paper] # Installation @@ -123,6 +124,13 @@ sa >>> ``` +# Citing AMS +If you use AMS for research or consulting, please cite the following paper in your publication that uses AMS: + +``` +H. Cui, F. Li and K. Tomsovic, "Hybrid Symbolic-Numeric Framework for Power System Modeling and Analysis," in IEEE Transactions on Power Systems, vol. 36, no. 2, pp. 1373-1384, March 2021, doi: 10.1109/TPWRS.2020.3017019. +``` + # Sponsors and Contributors AMS is the scheduling simulation engine for the CURENT Largescale Testbed (LTB). More information about CURENT LTB can be found at the [LTB Repository][LTB Repository]. @@ -157,4 +165,6 @@ Some commercial solvers provide academic licenses, such as COPT, GUROBI, CPLEX, [examples]: https://github.com/CURENT/ams/tree/master/examples [verification]: https://github.com/CURENT/ams/tree/master/examples/verification [Binder]: https://mybinder.org/v2/gh/curent/ams/master -[LTB Repository]: https://github.com/CURENT \ No newline at end of file +[LTB Repository]: https://github.com/CURENT +[benchmark]: https://github.com/CURENT/demo/tree/master/demo/ams_benchmark +[paper]: https://ieeexplore.ieee.org/document/9169830 \ No newline at end of file From 900ceeec4cf031285a361d39bebbcbeefa0700bb Mon Sep 17 00:00:00 2001 From: jinningwang Date: Mon, 30 Dec 2024 13:30:28 -0500 Subject: [PATCH 10/28] In README, update benchmark figure --- README.md | 19 ++++++++++++++++--- docs/source/images/dcopf_time.png | Bin 52102 -> 196221 bytes 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 93aeeddd..cab35fa9 100644 --- a/README.md +++ b/README.md @@ -29,8 +29,8 @@ Python Software for Power System Scheduling Modeling and Co-Simulation with Dyna # Why AMS -With the built-in interface with ANDES, AMS enables **Dynamics Incorporated** -**Stability-Constrained Scheduling**. +AMS facilitates **Dynamics Incorporated Scheduling** and **Scheduling-Dynamics Co-Simulation** +through an integrated interface with ANDES. This package is helpful for power system engineers, researchers, and students conducting scheduling and transient stability studies at specific operating points. It also benefits @@ -60,7 +60,20 @@ The following results show the comparison of DCOPF between AMS and other tools. | EPIGRIDS 5658-Bus | 1,195,466.12 | 1,195,466.12 | 1,195,466.12 | | EPIGRIDS 7336-Bus | 1,855,870.94 | 1,855,870.94 | 1,855,870.94 | -DCOPF Time +
+ DCOPF Time +

Figure: Computation time of OPF on small-scale cases.

+
+ +In the bar chart, the gray bar labeled "AMS Symbolic Processing" represents the time spent +on symbolic processing, while the wheat-colored bar "AMS Numeric Evaluation" represents the +time spent on system matrices calculation and optimization model construction. +The orange bar labeled "AMS GUROBI" represents the optimization-solving time using the GUROBI solver. +Similarly, the red bar labeled "AMS MOSEK" and the pink bar labeled "AMS PIQP" represent the +time used by the solvers MOSEK and PIQP, respectively. +Regarding the baselines, the blue and green bars represent the running time of MATPOWER using +solver MIPS and pandapower using solver PIPS, respectively. +The results for AMS, pandapower, and matpower are the average time consumed over ten repeat tests. AMS is currently under active development. Use the following resources to get involved. diff --git a/docs/source/images/dcopf_time.png b/docs/source/images/dcopf_time.png index c4d306cbbc22f16357e7911a4f4f32fb7ab534d2..4f4f74846ef5708bcd718851c6e9f242083d0773 100644 GIT binary patch literal 196221 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℞jB&DP-18J<3j* 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 From 13fec9a63a4d0061474e776cf54ec789c490ad12 Mon Sep 17 00:00:00 2001 From: jinningwang Date: Mon, 30 Dec 2024 13:32:00 -0500 Subject: [PATCH 11/28] Update release-notes --- docs/source/release-notes.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/source/release-notes.rst b/docs/source/release-notes.rst index 6644f441..f780eae7 100644 --- a/docs/source/release-notes.rst +++ b/docs/source/release-notes.rst @@ -16,6 +16,7 @@ v0.9.14 (2024-xx-xx) files without modification can run into error. - Fix bugs in ``RTED.dc2ac`` - Minor refacot ``OptzBase.get_idx`` to reduce duplication +- Update benchamrk figure in README v0.9.13 (2024-12-05) -------------------- From a1106822d256092a59a509b007419a87d6b5ddec Mon Sep 17 00:00:00 2001 From: jinningwang Date: Mon, 6 Jan 2025 15:38:38 -0500 Subject: [PATCH 12/28] Update ANDES requirement to 1.9.3 --- pyproject.toml | 2 +- requirements-extra.txt | 2 +- requirements.txt | 4 ++-- setup.cfg | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 9758d91f..d93996f4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,7 +30,7 @@ dependencies = [ "matplotlib", "psutil", "openpyxl", - "andes>=1.8.7", + "andes>=1.9.3", "pybind11", "cvxpy" ] diff --git a/requirements-extra.txt b/requirements-extra.txt index 2b4798bd..20f25c8a 100644 --- a/requirements-extra.txt +++ b/requirements-extra.txt @@ -1,4 +1,4 @@ -# Generated on 2024-11-11. +# Generated on 2025-01-06. pytest # dev pytest-cov # dev coverage # dev diff --git a/requirements.txt b/requirements.txt index 5ceafe9f..ad49fa84 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -# Generated on 2024-11-11. +# Generated on 2025-01-06. kvxopt>=1.3.2.1 numpy scipy @@ -7,6 +7,6 @@ pandas matplotlib psutil openpyxl -andes>=1.8.7 +andes>=1.9.3 pybind11 cvxpy diff --git a/setup.cfg b/setup.cfg index be71e22f..3c9bf64b 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,4 +1,4 @@ -# Generated on 2024-11-11. +# Generated on 2025-01-06. [versioneer] VCS = git style = pep440-post From d0cd585be7f829203b2da9d05997e00755e505a6 Mon Sep 17 00:00:00 2001 From: jinningwang Date: Mon, 6 Jan 2025 15:41:27 -0500 Subject: [PATCH 13/28] Update release notes --- docs/source/release-notes.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/source/release-notes.rst b/docs/source/release-notes.rst index f780eae7..794ad97f 100644 --- a/docs/source/release-notes.rst +++ b/docs/source/release-notes.rst @@ -17,6 +17,7 @@ v0.9.14 (2024-xx-xx) - Fix bugs in ``RTED.dc2ac`` - Minor refacot ``OptzBase.get_idx`` to reduce duplication - Update benchamrk figure in README +- Update ANDES requirement to v1.9.3 v0.9.13 (2024-12-05) -------------------- From 2457a072f81d264b329e839bf0f7f737a5736f3f Mon Sep 17 00:00:00 2001 From: jinningwang Date: Mon, 6 Jan 2025 19:30:11 -0500 Subject: [PATCH 14/28] Add methods get_all_idxes in classes Model, Param, and OptzBase --- ams/core/model.py | 14 ++++++++++++++ ams/core/param.py | 42 ++++++++++++++++++++++++++++++++++++++++++ ams/opt/optbase.py | 21 +++++++++++++++++++++ 3 files changed, 77 insertions(+) diff --git a/ams/core/model.py b/ams/core/model.py index 17409dcf..a3f66dec 100644 --- a/ams/core/model.py +++ b/ams/core/model.py @@ -307,6 +307,20 @@ def get_idx(self): """ return self.idx.v + def get_all_idxes(self): + """ + Return all the indexes of this model. + + .. note:: + New in version 1.0.0. Add to follow the group method ``get_all_idxes``. + + Returns + ------- + list + A list of indexes. + """ + return self.idx.v + def __repr__(self): dev_text = 'device' if self.n == 1 else 'devices' diff --git a/ams/core/param.py b/ams/core/param.py index dbefba49..dbe71822 100644 --- a/ams/core/param.py +++ b/ams/core/param.py @@ -275,3 +275,45 @@ def get_idx(self): msg += 'likely a modeling error.' raise AttributeError(msg) return sorted_idx + + def get_all_idxes(self): + """ + Get all the indexes of the parameter. + + .. note:: + New in version 1.0.0. + + Returns + ------- + idx : list + Index of the parameter. + + Notes + ----- + - The value will sort by the indexer if indexed. + """ + if self.indexer is None: + if self.is_group: + return self.owner.get_all_idxes() + elif self.owner is None: + logger.info(f'Param <{self.name}> has no owner.') + return None + elif hasattr(self.owner, 'idx'): + return self.owner.idx.v + else: + logger.info(f'Param <{self.name}> owner <{self.owner.class_name}> has no idx.') + return None + else: + try: + imodel = getattr(self.rtn.system, self.imodel) + except AttributeError: + msg = f'Indexer source model <{self.imodel}> not found, ' + msg += 'likely a modeling error.' + raise AttributeError(msg) + try: + sorted_idx = self.owner.find_idx(keys=self.indexer, values=imodel.get_all_idxes()) + except AttributeError: + msg = f'Indexer <{self.indexer}> not found in <{self.imodel}>, ' + msg += 'likely a modeling error.' + raise AttributeError(msg) + return sorted_idx diff --git a/ams/opt/optbase.py b/ams/opt/optbase.py index 310de8eb..d92efdb3 100644 --- a/ams/opt/optbase.py +++ b/ams/opt/optbase.py @@ -166,3 +166,24 @@ def get_idx(self): return None else: return self.owner.idx.v + + def get_all_idxes(self): + """ + Return all the indexes of this item. + + .. note:: + New in version 1.0.0. + + Returns + ------- + list + A list of indexes. + """ + + if self.is_group: + return self.owner.get_all_idxes() + elif self.owner is None: + logger.info(f'{self.class_name} <{self.name}> has no owner.') + return None + else: + return self.owner.idx.v From a7507712fe4c75c7f1bc61b1a5177f81a18823d2 Mon Sep 17 00:00:00 2001 From: jinningwang Date: Mon, 6 Jan 2025 19:31:53 -0500 Subject: [PATCH 15/28] Rename module optbase as optzbase for clarity --- ams/opt/__init__.py | 2 +- ams/opt/omodel.py | 2 +- ams/opt/{optbase.py => optzbase.py} | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename ams/opt/{optbase.py => optzbase.py} (100%) diff --git a/ams/opt/__init__.py b/ams/opt/__init__.py index 83b5268f..6d4b435d 100644 --- a/ams/opt/__init__.py +++ b/ams/opt/__init__.py @@ -2,7 +2,7 @@ Module for optimization modeling. """ -from ams.opt.optbase import OptzBase, ensure_symbols, ensure_mats_and_parsed # NOQA +from ams.opt.optzbase import OptzBase, ensure_symbols, ensure_mats_and_parsed # NOQA from ams.opt.var import Var # NOQA from ams.opt.exprcalc import ExpressionCalc # NOQA from ams.opt.param import Param # NOQA diff --git a/ams/opt/omodel.py b/ams/opt/omodel.py index e0aca8b9..964504f1 100644 --- a/ams/opt/omodel.py +++ b/ams/opt/omodel.py @@ -10,7 +10,7 @@ import cvxpy as cp -from ams.opt.optbase import ensure_symbols, ensure_mats_and_parsed +from ams.opt.optzbase import ensure_symbols, ensure_mats_and_parsed logger = logging.getLogger(__name__) diff --git a/ams/opt/optbase.py b/ams/opt/optzbase.py similarity index 100% rename from ams/opt/optbase.py rename to ams/opt/optzbase.py From 6c9a3cca5dd43b6298f3b54187393b3ab89bc1e6 Mon Sep 17 00:00:00 2001 From: jinningwang Date: Mon, 6 Jan 2025 19:34:55 -0500 Subject: [PATCH 16/28] Remove unused attribute dual from class Constraint --- ams/opt/constraint.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/ams/opt/constraint.py b/ams/opt/constraint.py index 6335a3ff..a8ce451f 100644 --- a/ams/opt/constraint.py +++ b/ams/opt/constraint.py @@ -45,8 +45,6 @@ class Constraint(OptzBase): The owner routine instance. is_disabled : bool, optional Flag indicating if the constraint is disabled, False by default. - dual : float, optional - The dual value of the constraint. code : str, optional The code string for the constraint """ @@ -61,7 +59,6 @@ def __init__(self, self.e_str = e_str self.is_eq = is_eq self.is_disabled = False - self.dual = None self.code = None def get_idx(self): From 925ec3f9e15ca7efee62a90c9909e3b6533f0fd1 Mon Sep 17 00:00:00 2001 From: jinningwang Date: Mon, 6 Jan 2025 19:39:27 -0500 Subject: [PATCH 17/28] Switch from method get_idx to get_all_idxes --- ams/core/matprocessor.py | 2 +- ams/core/param.py | 8 ++++---- ams/core/service.py | 8 ++++---- ams/interface.py | 6 +++--- ams/opt/optzbase.py | 2 +- ams/report.py | 2 +- ams/routines/dcopf.py | 2 +- ams/routines/dcpf.py | 6 +++--- ams/routines/dcpf0.py | 4 ++-- ams/routines/pflow.py | 8 ++++---- ams/routines/routine.py | 6 +++--- ams/routines/rted.py | 4 ++-- ams/system.py | 2 +- tests/test_group.py | 2 +- tests/test_interface.py | 4 ++-- tests/test_rtn_dcopf.py | 4 ++-- tests/test_rtn_ed.py | 6 +++--- tests/test_rtn_rted.py | 8 ++++---- 18 files changed, 42 insertions(+), 42 deletions(-) diff --git a/ams/core/matprocessor.py b/ams/core/matprocessor.py index bf0e4ac1..369e4027 100644 --- a/ams/core/matprocessor.py +++ b/ams/core/matprocessor.py @@ -262,7 +262,7 @@ def build_cg(self): ng = system.StaticGen.n # bus indices: idx -> uid - idx_gen = system.StaticGen.get_idx() + idx_gen = system.StaticGen.get_all_idxes() u_gen = system.StaticGen.get(src='u', attr='v', idx=idx_gen) on_gen = np.flatnonzero(u_gen) # uid of online generators on_gen_idx = [idx_gen[i] for i in on_gen] # idx of online generators diff --git a/ams/core/param.py b/ams/core/param.py index dbe71822..440656d5 100644 --- a/ams/core/param.py +++ b/ams/core/param.py @@ -168,7 +168,7 @@ def v(self): out = self._v elif self.is_group: out = self.owner.get(src=self.src, attr='v', - idx=self.owner.get_idx()) + idx=self.owner.get_all_idxes()) else: src_param = getattr(self.owner, self.src) out = getattr(src_param, 'v') @@ -180,7 +180,7 @@ def v(self): msg += 'likely a modeling error.' raise AttributeError(msg) try: - sorted_idx = self.owner.find_idx(keys=self.indexer, values=imodel.get_idx()) + sorted_idx = self.owner.find_idx(keys=self.indexer, values=imodel.get_all_idxes()) except AttributeError: sorted_idx = self.owner.idx.v except Exception as e: @@ -252,7 +252,7 @@ def get_idx(self): """ if self.indexer is None: if self.is_group: - return self.owner.get_idx() + return self.owner.get_all_idxes() elif self.owner is None: logger.info(f'Param <{self.name}> has no owner.') return None @@ -269,7 +269,7 @@ def get_idx(self): msg += 'likely a modeling error.' raise AttributeError(msg) try: - sorted_idx = self.owner.find_idx(keys=self.indexer, values=imodel.get_idx()) + sorted_idx = self.owner.find_idx(keys=self.indexer, values=imodel.get_all_idxes()) except AttributeError: msg = f'Indexer <{self.indexer}> not found in <{self.imodel}>, ' msg += 'likely a modeling error.' diff --git a/ams/core/service.py b/ams/core/service.py index d016d6ab..b210f30b 100644 --- a/ams/core/service.py +++ b/ams/core/service.py @@ -217,7 +217,7 @@ def __init__(self, @property def v(self): sys = self.rtn.system - u_idx = self.u.get_idx() + u_idx = self.u.get_all_idxes() ue = self.u.owner.get(src='u', attr='v', idx=u_idx) u_bus = self.u.owner.get(src='bus', attr='v', idx=u_idx) u_zone = sys.Bus.get(src='zone', attr='v', idx=u_bus) @@ -671,7 +671,7 @@ def v0(self): try: ridx = zone_mdl.idx.v except AttributeError: - ridx = zone_mdl.get_idx() + ridx = zone_mdl.get_all_idxes() row, col = np.meshgrid(self.u.v, ridx) # consistency check @@ -759,7 +759,7 @@ def v0(self): group = model = None if indexer.model in self.rtn.system.groups.keys(): group = self.rtn.system.groups[indexer.model] - group_idx = group.get_idx() + group_idx = group.get_all_idxes() try: ref = group.get(src=indexer.src, attr='v', idx=group_idx) except AttributeError: @@ -774,7 +774,7 @@ def v0(self): raise AttributeError(f'Indexer source model {indexer.model} has no ref.') try: - uidx = self.u.get_idx() + uidx = self.u.get_all_idxes() except AttributeError: raise AttributeError(f'Input {self.u.name} has no idx, likey a modeling error.') diff --git a/ams/interface.py b/ams/interface.py index 5e17eb6b..20f34595 100644 --- a/ams/interface.py +++ b/ams/interface.py @@ -627,14 +627,14 @@ def send(self, adsys=None, routine=None): continue var_ams = getattr(rtn, vname_ams) # instance of AMS routine var - idx_ads = var_ams.get_idx() # use AMS idx as target ANDES idx + idx_ads = var_ams.get_all_idxes() # use AMS idx as target ANDES idx # --- special scenarios --- # 0. send PV bus voltage to StaticGen.v0 if not PFlow yet and AC converted cond_vpv = (mname_ads == 'Bus') and (pname_ads == 'v0') if cond_vpv and (not self.is_tds) and (rtn.converted): # --- StaticGen --- - stg_idx = sp.StaticGen.get_idx() + stg_idx = sp.StaticGen.get_all_idxes() bus_stg = sp.StaticGen.get(src='bus', attr='v', idx=stg_idx) vBus = rtn.get(src='vBus', attr='v', idx=bus_stg) sa.StaticGen.set(src='v0', idx=stg_idx, attr='v', value=vBus) @@ -738,7 +738,7 @@ def receive(self, adsys=None, routine=None, no_update=False): logger.debug(f'ANDES model <{mname_ads}> is empty.') continue - idx_ads = rtn.__dict__[vname_ams].get_idx() # use AMS idx as target ANDES idx + idx_ads = rtn.__dict__[vname_ams].get_all_idxes() # use AMS idx as target ANDES idx # --- special scenarios --- # 1. gen online status; in TDS running, take from dynamic generator diff --git a/ams/opt/optzbase.py b/ams/opt/optzbase.py index d92efdb3..6d8ae761 100644 --- a/ams/opt/optzbase.py +++ b/ams/opt/optzbase.py @@ -160,7 +160,7 @@ def __repr__(self): def get_idx(self): if self.is_group: - return self.owner.get_idx() + return self.owner.get_all_idxes() elif self.owner is None: logger.info(f'{self.class_name} <{self.name}> has no owner.') return None diff --git a/ams/report.py b/ams/report.py index 8aa6695e..3d904e9e 100644 --- a/ams/report.py +++ b/ams/report.py @@ -347,7 +347,7 @@ def collect_owners(rtn): for key, val in owners.items(): owner = getattr(rtn.system, key) - idx_v = owner.get_idx() + idx_v = owner.get_all_idxes() val['idx'] = idx_v val['name'] = owner.get(src='name', attr='v', idx=idx_v) val['header'].append('Name') diff --git a/ams/routines/dcopf.py b/ams/routines/dcopf.py index 38edb7b9..49632ebf 100644 --- a/ams/routines/dcopf.py +++ b/ams/routines/dcopf.py @@ -162,7 +162,7 @@ def dc2ac(self, kloss=1.0, **kwargs): # --- ACOPF --- # scale up load - pq_idx = self.system.StaticLoad.get_idx() + pq_idx = self.system.StaticLoad.get_all_idxes() pd0 = self.system.StaticLoad.get(src='p0', attr='v', idx=pq_idx).copy() qd0 = self.system.StaticLoad.get(src='q0', attr='v', idx=pq_idx).copy() self.system.StaticLoad.set(src='p0', idx=pq_idx, attr='v', value=pd0 * kloss) diff --git a/ams/routines/dcpf.py b/ams/routines/dcpf.py index 6a5e503e..408c34d6 100644 --- a/ams/routines/dcpf.py +++ b/ams/routines/dcpf.py @@ -138,7 +138,7 @@ def unpack(self, **kwargs): continue else: try: - idx = var.owner.get_idx() + idx = var.owner.get_all_idxes() except AttributeError: idx = var.owner.idx.v @@ -156,7 +156,7 @@ def unpack(self, **kwargs): continue else: try: - idx = exprc.owner.get_idx() + idx = exprc.owner.get_all_idxes() except AttributeError: idx = exprc.owner.idx.v @@ -177,7 +177,7 @@ def _post_solve(self): for expr in self.exprs.values(): if expr.owner and expr.src: expr.owner.set(src=expr.src, attr='v', - idx=expr.get_idx(), value=expr.v) + idx=expr.get_all_idxes(), value=expr.v) return True diff --git a/ams/routines/dcpf0.py b/ams/routines/dcpf0.py index 5102ee7d..883a4cc8 100644 --- a/ams/routines/dcpf0.py +++ b/ams/routines/dcpf0.py @@ -107,9 +107,9 @@ def unpack(self, res): continue elif hasattr(owner, 'group'): # if owner is a Model instance grp = getattr(system, owner.group) - idx = grp.get_idx() + idx = grp.get_all_idxes() elif hasattr(owner, 'get_idx'): # if owner is a Group instance - idx = owner.get_idx() + idx = owner.get_all_idxes() else: msg = f"Failed to find valid source variable `{owner.class_name}.{var.src}` for " msg += f"{self.class_name}.{vname}, skip unpacking." diff --git a/ams/routines/pflow.py b/ams/routines/pflow.py index 2dc02afc..da50c84a 100644 --- a/ams/routines/pflow.py +++ b/ams/routines/pflow.py @@ -165,10 +165,10 @@ def unpack(self, **kwargs): sys.Slack.set(src='q', attr='v', idx=slack_idx, value=self._adsys.Slack.get(src='q', attr='v', idx=slack_idx)) # --- routine results --- - self.pg.optz.value = sys.StaticGen.get(src='p', attr='v', idx=self.pg.get_idx()) - self.qg.optz.value = sys.StaticGen.get(src='q', attr='v', idx=self.qg.get_idx()) - self.aBus.optz.value = sys.Bus.get(src='a', attr='v', idx=self.aBus.get_idx()) - self.vBus.optz.value = sys.Bus.get(src='v', attr='v', idx=self.vBus.get_idx()) + self.pg.optz.value = sys.StaticGen.get(src='p', attr='v', idx=self.pg.get_all_idxes()) + self.qg.optz.value = sys.StaticGen.get(src='q', attr='v', idx=self.qg.get_all_idxes()) + self.aBus.optz.value = sys.Bus.get(src='a', attr='v', idx=self.aBus.get_all_idxes()) + self.vBus.optz.value = sys.Bus.get(src='v', attr='v', idx=self.vBus.get_all_idxes()) return True def update(self, params=None, build_mats=False): diff --git a/ams/routines/routine.py b/ams/routines/routine.py index e4c6e66f..a7bb2df2 100644 --- a/ams/routines/routine.py +++ b/ams/routines/routine.py @@ -160,7 +160,7 @@ def get(self, src: str, idx, attr: str = 'v', if not hasattr(item, attr): raise ValueError(f"{attr} does not exist in {self.class_name}.{src}.") - idx_all = item.get_idx() + idx_all = item.get_all_idxes() if idx_all is None: raise ValueError(f"<{self.class_name}> item <{src}> has no idx.") @@ -185,7 +185,7 @@ def get(self, src: str, idx, attr: str = 'v', if horizon is not None: if item.horizon is None: raise ValueError(f"horizon is not defined for {self.class_name}.{src}.") - horizon_all = item.horizon.get_idx() + horizon_all = item.horizon.get_all_idxes() if not isinstance(horizon, list): raise TypeError(f"horizon must be a list, not {type(horizon)}.") loc_h = [ @@ -1023,7 +1023,7 @@ def collect_data(rtn: RoutineBase, data_dict: Dict, items: Dict, attr: str): for key, item in items.items(): if item.owner is None: continue - idx_v = item.get_idx() + idx_v = item.get_all_idxes() try: data_v = rtn.get(src=key, attr=attr, idx=idx_v, horizon=rtn.timeslot.v if hasattr(rtn, 'timeslot') else None).round(6) diff --git a/ams/routines/rted.py b/ams/routines/rted.py index 908a93b9..4f4ad57e 100644 --- a/ams/routines/rted.py +++ b/ams/routines/rted.py @@ -189,14 +189,14 @@ def dc2ac(self, kloss=1.0, **kwargs): logger.warning(f'{self.class_name} is not executed successfully, quit conversion.') return False # set pru and prd into pmin and pmax - pr_idx = self.pru.get_idx() + pr_idx = self.pru.get_all_idxes() pmin0 = self.system.StaticGen.get(src='pmin', attr='v', idx=pr_idx) pmax0 = self.system.StaticGen.get(src='pmax', attr='v', idx=pr_idx) p00 = self.system.StaticGen.get(src='p0', attr='v', idx=pr_idx) # --- ACOPF --- # scale up load - pq_idx = self.system.StaticLoad.get_idx() + pq_idx = self.system.StaticLoad.get_all_idxes() pd0 = self.system.StaticLoad.get(src='p0', attr='v', idx=pq_idx).copy() qd0 = self.system.StaticLoad.get(src='q0', attr='v', idx=pq_idx).copy() self.system.StaticLoad.set(src='p0', idx=pq_idx, attr='v', value=pd0 * kloss) diff --git a/ams/system.py b/ams/system.py index 06d0eb14..fba493d6 100644 --- a/ams/system.py +++ b/ams/system.py @@ -457,7 +457,7 @@ def setup(self): self.mats.CftT.col_names = self.Bus.idx.v self.mats.CftT.row_names = self.Line.idx.v - self.mats.Cg.col_names = self.StaticGen.get_idx() + self.mats.Cg.col_names = self.StaticGen.get_all_idxes() self.mats.Cg.row_names = self.Bus.idx.v self.mats.Cl.col_names = self.PQ.idx.v diff --git a/tests/test_group.py b/tests/test_group.py index fa1d3d7e..af209cd5 100644 --- a/tests/test_group.py +++ b/tests/test_group.py @@ -73,7 +73,7 @@ def test_group_access(self): (100.0,)]),) # --- get group idx --- - self.assertListEqual(ss.DG.get_idx(), ss.ESD1.idx.v) + self.assertListEqual(ss.DG.get_all_idxes(), ss.ESD1.idx.v) def test_group_repr(self): """ diff --git a/tests/test_interface.py b/tests/test_interface.py index 5c8d37a3..785f7ceb 100644 --- a/tests/test_interface.py +++ b/tests/test_interface.py @@ -80,7 +80,7 @@ def test_convert(self): addfile=andes.get_case(ad_case)) sa.setup() set1 = set(sa.GENROU.gen.v) - set2 = set(sp.StaticGen.get_idx()) + set2 = set(sp.StaticGen.get_all_idxes()) # set2 includes set1, ensure GENROU.gen are all in StaticGen.idx self.assertEqual(set1, set1 & set2) @@ -184,7 +184,7 @@ def setUp(self) -> None: default_config=True,) self.sp.RTED.run(solver='CLARABEL') self.sp.RTED.dc2ac() - self.stg_idx = self.sp.RTED.pg.get_idx() + self.stg_idx = self.sp.RTED.pg.get_all_idxes() def test_data_exchange(self): """ diff --git a/tests/test_rtn_dcopf.py b/tests/test_rtn_dcopf.py index 765907c7..32dd0d19 100644 --- a/tests/test_rtn_dcopf.py +++ b/tests/test_rtn_dcopf.py @@ -86,12 +86,12 @@ def test_dc2ac(self): self.assertTrue(self.ss.DCOPF.converted, "AC conversion failed!") self.assertTrue(self.ss.DCOPF.exec_time > 0, "Execution time is not greater than 0.") - stg_idx = self.ss.StaticGen.get_idx() + stg_idx = self.ss.StaticGen.get_all_idxes() pg_dcopf = self.ss.DCOPF.get(src='pg', attr='v', idx=stg_idx) pg_acopf = self.ss.ACOPF.get(src='pg', attr='v', idx=stg_idx) np.testing.assert_almost_equal(pg_dcopf, pg_acopf, decimal=3) - bus_idx = self.ss.Bus.get_idx() + bus_idx = self.ss.Bus.get_all_idxes() v_dcopf = self.ss.DCOPF.get(src='vBus', attr='v', idx=bus_idx) v_acopf = self.ss.ACOPF.get(src='vBus', attr='v', idx=bus_idx) np.testing.assert_almost_equal(v_dcopf, v_acopf, decimal=3) diff --git a/tests/test_rtn_ed.py b/tests/test_rtn_ed.py index 8f41ba24..d6e2cc51 100644 --- a/tests/test_rtn_ed.py +++ b/tests/test_rtn_ed.py @@ -29,7 +29,7 @@ def test_trip_gen(self): # a) ensure EDTSlot.ug takes effect # NOTE: manually chang ug.v for testing purpose stg = 'PV_1' - stg_uid = self.ss.ED.pg.get_idx().index(stg) + stg_uid = self.ss.ED.pg.get_all_idxes().index(stg) loc_offtime = np.array([0, 2, 4]) self.ss.EDTSlot.ug.v[loc_offtime, stg_uid] = 0 @@ -120,7 +120,7 @@ def test_trip_gen(self): # a) ensure EDTSlot.ug takes effect # NOTE: manually chang ug.v for testing purpose stg = 'PV_1' - stg_uid = self.ss.EDDG.pg.get_idx().index(stg) + stg_uid = self.ss.EDDG.pg.get_all_idxes().index(stg) loc_offtime = np.array([0, 2, 4]) self.ss.EDTSlot.ug.v[loc_offtime, stg_uid] = 0 @@ -211,7 +211,7 @@ def test_trip_gen(self): # a) ensure EDTSlot.ug takes effect # NOTE: manually chang ug.v for testing purpose stg = 'PV_1' - stg_uid = self.ss.EDES.pg.get_idx().index(stg) + stg_uid = self.ss.EDES.pg.get_all_idxes().index(stg) loc_offtime = np.array([0, 2]) self.ss.EDTSlot.ug.v[loc_offtime, stg_uid] = 0 diff --git a/tests/test_rtn_rted.py b/tests/test_rtn_rted.py index 316e6430..c363882c 100644 --- a/tests/test_rtn_rted.py +++ b/tests/test_rtn_rted.py @@ -86,12 +86,12 @@ def test_dc2ac(self): self.assertTrue(self.ss.RTED.converted, "AC conversion failed!") self.assertTrue(self.ss.RTED.exec_time > 0, "Execution time is not greater than 0.") - stg_idx = self.ss.StaticGen.get_idx() + stg_idx = self.ss.StaticGen.get_all_idxes() pg_rted = self.ss.RTED.get(src='pg', attr='v', idx=stg_idx) pg_acopf = self.ss.ACOPF.get(src='pg', attr='v', idx=stg_idx) np.testing.assert_almost_equal(pg_rted, pg_acopf, decimal=3) - bus_idx = self.ss.Bus.get_idx() + bus_idx = self.ss.Bus.get_all_idxes() v_rted = self.ss.RTED.get(src='vBus', attr='v', idx=bus_idx) v_acopf = self.ss.ACOPF.get(src='vBus', attr='v', idx=bus_idx) np.testing.assert_almost_equal(v_rted, v_acopf, decimal=3) @@ -182,12 +182,12 @@ def test_dc2ac(self): self.assertTrue(self.ss.RTEDDG.converted, "AC conversion failed!") self.assertTrue(self.ss.RTEDDG.exec_time > 0, "Execution time is not greater than 0.") - stg_idx = self.ss.StaticGen.get_idx() + stg_idx = self.ss.StaticGen.get_all_idxes() pg_rted = self.ss.RTEDDG.get(src='pg', attr='v', idx=stg_idx) pg_acopf = self.ss.ACOPF.get(src='pg', attr='v', idx=stg_idx) np.testing.assert_almost_equal(pg_rted, pg_acopf, decimal=3) - bus_idx = self.ss.Bus.get_idx() + bus_idx = self.ss.Bus.get_all_idxes() v_rted = self.ss.RTEDDG.get(src='vBus', attr='v', idx=bus_idx) v_acopf = self.ss.ACOPF.get(src='vBus', attr='v', idx=bus_idx) np.testing.assert_almost_equal(v_rted, v_acopf, decimal=3) From 5b8482da91147850d2fe81ec410caf017045cb9d Mon Sep 17 00:00:00 2001 From: jinningwang Date: Mon, 6 Jan 2025 19:41:59 -0500 Subject: [PATCH 18/28] In examples, switch from method get_idx to get_all_idxes --- examples/demonstration/demo_AGC.ipynb | 12 ++++++------ examples/ex1.ipynb | 4 ++-- examples/ex6.ipynb | 2 +- examples/ex8.ipynb | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/examples/demonstration/demo_AGC.ipynb b/examples/demonstration/demo_AGC.ipynb index f661a213..c61c91ef 100644 --- a/examples/demonstration/demo_AGC.ipynb +++ b/examples/demonstration/demo_AGC.ipynb @@ -818,13 +818,13 @@ " break\n", " else: # --- init TDS ---\n", " # set pg to StaticGen.p0\n", - " sa.StaticGen.set(src='p0', idx=sp.RTED.pg.get_idx(), attr='v', value=sp.RTED.pg.v)\n", + " sa.StaticGen.set(src='p0', idx=sp.RTED.pg.get_all_idxes(), attr='v', value=sp.RTED.pg.v)\n", " # set Bus.v to StaticGen.v\n", - " bus_stg = sp.StaticGen.get(src='bus', attr='v', idx=sp.StaticGen.get_idx())\n", + " bus_stg = sp.StaticGen.get(src='bus', attr='v', idx=sp.StaticGen.get_all_idxes())\n", " v_stg = sp.Bus.get(src='v', attr='v', idx=bus_stg)\n", - " sa.StaticGen.set(src='v0', idx=sp.StaticGen.get_idx(), attr='v', value=v_stg)\n", + " sa.StaticGen.set(src='v0', idx=sp.StaticGen.get_all_idxes(), attr='v', value=v_stg)\n", " # set vBus to Bus\n", - " sa.Bus.set(src='v0', idx=sp.RTED.vBus.get_idx(), attr='v', value=sp.RTED.vBus.v)\n", + " sa.Bus.set(src='v0', idx=sp.RTED.vBus.get_all_idxes(), attr='v', value=sp.RTED.vBus.v)\n", " # set load into PQ.p0 and PQ.q0\n", " sa.PQ.set(src='p0', idx=pq_idx, attr='v', value=load_coeff[t] * p0_sa)\n", " sa.PQ.set(src='q0', idx=pq_idx, attr='v', value=load_coeff[t] * q0_sa)\n", @@ -1212,7 +1212,7 @@ ], "metadata": { "kernelspec": { - "display_name": "amsre", + "display_name": "amst", "language": "python", "name": "python3" }, @@ -1226,7 +1226,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.0" + "version": "3.10.0" }, "orig_nbformat": 4 }, diff --git a/examples/ex1.ipynb b/examples/ex1.ipynb index 20accc68..e63e02ec 100644 --- a/examples/ex1.ipynb +++ b/examples/ex1.ipynb @@ -514,7 +514,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Here, ``get_idx()`` can be used to get the index of a variable." + "Here, ``get_all_idxes()`` can be used to get the index of a variable." ] }, { @@ -534,7 +534,7 @@ } ], "source": [ - "sp.RTED.pg.get_idx()" + "sp.RTED.pg.get_all_idxes()" ] }, { diff --git a/examples/ex6.ipynb b/examples/ex6.ipynb index 5034a77f..7a25177e 100644 --- a/examples/ex6.ipynb +++ b/examples/ex6.ipynb @@ -419,7 +419,7 @@ } ], "source": [ - "sp.StaticGen.get_idx()" + "sp.StaticGen.get_all_idxes()" ] }, { diff --git a/examples/ex8.ipynb b/examples/ex8.ipynb index 4ff75c84..325cbafc 100644 --- a/examples/ex8.ipynb +++ b/examples/ex8.ipynb @@ -257,7 +257,7 @@ "outputs": [], "source": [ "# get the generator indices\n", - "stg_idx = sp.DCOPF.pg.get_idx()\n", + "stg_idx = sp.DCOPF.pg.get_all_idxes()\n", "\n", "# get the value of pmax\n", "pmax = sp.DCOPF.get(src='pmax', attr='v', idx=stg_idx)\n", From 0ac13fa40aa9efeedbad7dd16af0b50733c24df2 Mon Sep 17 00:00:00 2001 From: jinningwang Date: Mon, 6 Jan 2025 19:56:23 -0500 Subject: [PATCH 19/28] Refactor module ams.utils for simplicity --- ams/utils/__init__.py | 58 +------------------------------------------ ams/utils/misc.py | 56 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 57 deletions(-) create mode 100644 ams/utils/misc.py diff --git a/ams/utils/__init__.py b/ams/utils/__init__.py index a6877af8..1a0cacc2 100644 --- a/ams/utils/__init__.py +++ b/ams/utils/__init__.py @@ -1,59 +1,3 @@ -from andes.utils.misc import elapsed -from ams.utils import paths # NOQA from ams.utils.paths import get_case # NOQA - - -def timer(func): - def wrapper(*args, **kwargs): - t0, _ = elapsed() - result = func(*args, **kwargs) - _, s = elapsed(t0) - return result, s - return wrapper - - -def create_entry(*fields, three_params=True): - """ - Helper function to create a list of fields for a model entry. - - Parameters - ---------- - fields : tuple - Additional fields to include in the list. - three_params : bool, optional - Whether to include 'idx', 'u', 'name' in the list (default is True). - - Returns - ------- - list - A list of fields for the model entry. - """ - base_fields = ['idx', 'u', 'name'] if three_params else [] - return base_fields + list(fields) - - -def pretty_long_message(message, prefix="", max_length=80): - """ - Pretty print a long message. - - Parameters - ---------- - message : str - The message to format. - prefix : str, optional - A prefix to add to each line of the message. - max_length : int, optional - The maximum length of each line. - - Returns - ------- - str - The formatted message. - """ - if len(message) <= max_length: - return message - else: - lines = [message[i:i+max_length] for i in range(0, len(message), max_length)] - formatted_message = lines[0] + "\n" + "\n".join([prefix + line for line in lines[1:]]) - return formatted_message +from ams.utils.misc import timer, create_entry, pretty_long_message # NOQA diff --git a/ams/utils/misc.py b/ams/utils/misc.py new file mode 100644 index 00000000..c9a88a36 --- /dev/null +++ b/ams/utils/misc.py @@ -0,0 +1,56 @@ +from andes.utils.misc import elapsed + + +def timer(func): + def wrapper(*args, **kwargs): + t0, _ = elapsed() + result = func(*args, **kwargs) + _, s = elapsed(t0) + return result, s + return wrapper + + +def create_entry(*fields, three_params=True): + """ + Helper function to create a list of fields for a model entry. + + Parameters + ---------- + fields : tuple + Additional fields to include in the list. + three_params : bool, optional + Whether to include 'idx', 'u', 'name' in the list (default is True). + + Returns + ------- + list + A list of fields for the model entry. + """ + base_fields = ['idx', 'u', 'name'] if three_params else [] + return base_fields + list(fields) + + +def pretty_long_message(message, prefix="", max_length=80): + """ + Pretty print a long message. + + Parameters + ---------- + message : str + The message to format. + prefix : str, optional + A prefix to add to each line of the message. + max_length : int, optional + The maximum length of each line. + + Returns + ------- + str + The formatted message. + """ + if len(message) <= max_length: + return message + else: + lines = [message[i:i+max_length] for i in range(0, len(message), max_length)] + formatted_message = lines[0] + "\n" + "\n".join([prefix + line for line in lines[1:]]) + return formatted_message From 41c671e3ad7e797427f625fac761132d322b075c Mon Sep 17 00:00:00 2001 From: jinningwang Date: Mon, 6 Jan 2025 20:03:25 -0500 Subject: [PATCH 20/28] Add deprecation warning for method get_idx --- ams/core/model.py | 3 +++ ams/core/param.py | 3 +++ ams/opt/optzbase.py | 3 +++ ams/utils/misc.py | 21 +++++++++++++++++++++ 4 files changed, 30 insertions(+) diff --git a/ams/core/model.py b/ams/core/model.py index a3f66dec..b5d5eac4 100644 --- a/ams/core/model.py +++ b/ams/core/model.py @@ -15,6 +15,8 @@ from ams.core.documenter import Documenter from ams.core.var import Algeb +from ams.utils.misc import deprec_get_idx + logger = logging.getLogger(__name__) @@ -299,6 +301,7 @@ def doc(self, max_width=78, export='plain'): """ return self.docum.get(max_width=max_width, export=export) + @deprec_get_idx def get_idx(self): """ Return the index of the model instance. diff --git a/ams/core/param.py b/ams/core/param.py index 440656d5..a223172f 100644 --- a/ams/core/param.py +++ b/ams/core/param.py @@ -12,6 +12,8 @@ from ams.opt import Param +from ams.utils.misc import deprec_get_idx + logger = logging.getLogger(__name__) @@ -237,6 +239,7 @@ def __repr__(self): postfix = '' if self.src is None else f'.{self.src}' return f'{self.__class__.__name__}: {owner}' + postfix + @deprec_get_idx def get_idx(self): """ Get the index of the parameter. diff --git a/ams/opt/optzbase.py b/ams/opt/optzbase.py index 6d8ae761..283a81d5 100644 --- a/ams/opt/optzbase.py +++ b/ams/opt/optzbase.py @@ -5,6 +5,8 @@ from typing import Optional +from ams.utils.misc import deprec_get_idx + logger = logging.getLogger(__name__) @@ -158,6 +160,7 @@ def size(self): def __repr__(self): return f'{self.__class__.__name__}: {self.name}' + @deprec_get_idx def get_idx(self): if self.is_group: return self.owner.get_all_idxes() diff --git a/ams/utils/misc.py b/ams/utils/misc.py index c9a88a36..5c7a4bcb 100644 --- a/ams/utils/misc.py +++ b/ams/utils/misc.py @@ -1,3 +1,6 @@ +import warnings +import functools + from andes.utils.misc import elapsed @@ -54,3 +57,21 @@ def pretty_long_message(message, prefix="", max_length=80): lines = [message[i:i+max_length] for i in range(0, len(message), max_length)] formatted_message = lines[0] + "\n" + "\n".join([prefix + line for line in lines[1:]]) return formatted_message + + +def deprecated(message="This function is deprecated and will be removed in a future version."): + def decorator(func): + @functools.wraps(func) + def wrapper(*args, **kwargs): + warnings.warn( + message, + category=DeprecationWarning, + stacklevel=2 + ) + return func(*args, **kwargs) + return wrapper + return decorator + + +deprec_get_idx = deprecated( + "get_idx() is deprecated and will be removed in a future version. Please use get_all_idxes() instead.") From 00beb172a846766a73354f0f6068367d3ed89324 Mon Sep 17 00:00:00 2001 From: jinningwang Date: Mon, 6 Jan 2025 20:07:53 -0500 Subject: [PATCH 21/28] Update release notes --- docs/source/release-notes.rst | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/source/release-notes.rst b/docs/source/release-notes.rst index 794ad97f..30b5ca9a 100644 --- a/docs/source/release-notes.rst +++ b/docs/source/release-notes.rst @@ -15,9 +15,11 @@ v0.9.14 (2024-xx-xx) - **Breaking Change**: rename model ``Region`` to ``Zone`` for clarity. Prior case files without modification can run into error. - Fix bugs in ``RTED.dc2ac`` -- Minor refacot ``OptzBase.get_idx`` to reduce duplication +- Minor refacotr ``OptzBase.get_idx`` to reduce duplication +- Rename module ``OptBase`` to ``OptzBase`` for clarity - Update benchamrk figure in README -- Update ANDES requirement to v1.9.3 +- Set ANDES requirement to v1.9.3 +- Deprecate method ``get_idx`` and suggest using ``get_all_idxes`` instead v0.9.13 (2024-12-05) -------------------- From 528571bcf6d6f7fcceeac9ee2e2edaa5b8a6438e Mon Sep 17 00:00:00 2001 From: jinningwang Date: Mon, 6 Jan 2025 21:11:52 -0500 Subject: [PATCH 22/28] [WIP] connman, add a case for ConnMan testing --- ams/cases/ieee14/ieee14_conn.xlsx | Bin 0 -> 19291 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 ams/cases/ieee14/ieee14_conn.xlsx diff --git a/ams/cases/ieee14/ieee14_conn.xlsx b/ams/cases/ieee14/ieee14_conn.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..e495158f9178912ed0b1243b80dd87b40ad822a7 GIT binary patch literal 19291 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 Date: Fri, 10 Jan 2025 19:45:44 -0500 Subject: [PATCH 23/28] Update citation info with AMS paper --- CITATION.bib | 19 +++++++++---------- README.md | 2 +- docs/source/index.rst | 9 ++++----- 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/CITATION.bib b/CITATION.bib index f4b3a333..3d1ddcad 100644 --- a/CITATION.bib +++ b/CITATION.bib @@ -1,10 +1,9 @@ -@article{andes_2021, - author = {Cui, Hantao and Li, Fangxing and Tomsovic, Kevin}, - journal = {IEEE Transactions on Power Systems}, - title = {Hybrid Symbolic-Numeric Framework for Power System Modeling and Analysis}, - year = {2021}, - volume = {36}, - number = {2}, - pages = {1373-1384}, - doi = {10.1109/TPWRS.2020.3017019} -} \ No newline at end of file +@article{10836855, + author={Wang, Jinning and Li, Fangxing and Fang, Xin and Cui, Hantao and She, Buxin and Shuai, Hang and Zhang, Qiwei and Tomsovic, Kevin}, + journal={IEEE Transactions on Sustainable Energy}, + title={Dynamics-incorporated Modeling Framework for Stability Constrained Scheduling Under High-penetration of Renewable Energy}, + year={2025}, + volume={}, + number={}, + pages={1-13}, + doi={10.1109/TSTE.2025.3528027}} \ No newline at end of file diff --git a/README.md b/README.md index cab35fa9..5dd2be8f 100644 --- a/README.md +++ b/README.md @@ -141,7 +141,7 @@ sa If you use AMS for research or consulting, please cite the following paper in your publication that uses AMS: ``` -H. Cui, F. Li and K. Tomsovic, "Hybrid Symbolic-Numeric Framework for Power System Modeling and Analysis," in IEEE Transactions on Power Systems, vol. 36, no. 2, pp. 1373-1384, March 2021, doi: 10.1109/TPWRS.2020.3017019. +J. Wang et al., "Dynamics-incorporated Modeling Framework for Stability Constrained Scheduling Under High-penetration of Renewable Energy," in IEEE Transactions on Sustainable Energy, doi: 10.1109/TSTE.2025.3528027. ``` # Sponsors and Contributors diff --git a/docs/source/index.rst b/docs/source/index.rst index 6c0c5987..e2d52970 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -85,14 +85,13 @@ dynamic simulator ANDES. Using AMS for Research? ^^^^^^^^^^^^^^^^^^^^^^^^^ - Please cite our paper [Cui2021]_ if AMS is used in your research for + Please cite our paper [Wang2025]_ if AMS is used in your research for publication. -.. [Cui2021] H. Cui, F. Li and K. Tomsovic, "Hybrid Symbolic-Numeric Framework - for Power System Modeling and Analysis," in IEEE Transactions on Power - Systems, vol. 36, no. 2, pp. 1373-1384, March 2021, doi: - 10.1109/TPWRS.2020.3017019. +.. [Wang2025] J. Wang et al., "Dynamics-incorporated Modeling Framework for Stability + Constrained Scheduling Under High-penetration of Renewable Energy," in IEEE + Transactions on Sustainable Energy, doi: 10.1109/TSTE.2025.3528027. .. toctree:: From bb3cf3b460b5123b5323877e92264da4c70ae63a Mon Sep 17 00:00:00 2001 From: jinningwang Date: Fri, 24 Jan 2025 13:40:02 -0500 Subject: [PATCH 24/28] Update release notes --- ams/routines/acopf.py | 2 +- ams/routines/dcpf0.py | 2 +- ams/routines/pflow.py | 2 +- ams/routines/pflow0.py | 2 +- ams/routines/pflow1.py | 2 +- docs/source/release-notes.rst | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/ams/routines/acopf.py b/ams/routines/acopf.py index 69f5f784..25c1887a 100644 --- a/ams/routines/acopf.py +++ b/ams/routines/acopf.py @@ -1,5 +1,5 @@ """ -ACOPF routines. +ACOPF routines using PYPOWER. """ import logging from collections import OrderedDict diff --git a/ams/routines/dcpf0.py b/ams/routines/dcpf0.py index 883a4cc8..c9bd0ef8 100644 --- a/ams/routines/dcpf0.py +++ b/ams/routines/dcpf0.py @@ -1,5 +1,5 @@ """ -Power flow routines. +DC power flow routines using PYPOWER. """ import logging diff --git a/ams/routines/pflow.py b/ams/routines/pflow.py index da50c84a..f514c465 100644 --- a/ams/routines/pflow.py +++ b/ams/routines/pflow.py @@ -1,5 +1,5 @@ """ -Power flow routines independent from PYPOWER. +Power flow routines using ANDES. """ import logging from typing import Optional, Union, Type diff --git a/ams/routines/pflow0.py b/ams/routines/pflow0.py index 74f079fc..73f11f2e 100644 --- a/ams/routines/pflow0.py +++ b/ams/routines/pflow0.py @@ -1,5 +1,5 @@ """ -Power flow routines. +Power flow routines using PYPOWER. """ import logging from collections import OrderedDict diff --git a/ams/routines/pflow1.py b/ams/routines/pflow1.py index 18d0f06f..8cc6fe23 100644 --- a/ams/routines/pflow1.py +++ b/ams/routines/pflow1.py @@ -1,5 +1,5 @@ """ -Power flow routines using PyOptInterface +Power flow routines using PyOptInterface. """ from pyoptinterface import nlfunc, ipopt import pyoptinterface as poi diff --git a/docs/source/release-notes.rst b/docs/source/release-notes.rst index 30b5ca9a..9a62ddf0 100644 --- a/docs/source/release-notes.rst +++ b/docs/source/release-notes.rst @@ -9,7 +9,7 @@ The APIs before v3.0.0 are in beta and may change without prior notice. Pre-v1.0.0 ========== -v0.9.14 (2024-xx-xx) +v1.0.0 (2024-01-24) -------------------- - **Breaking Change**: rename model ``Region`` to ``Zone`` for clarity. Prior case From 78eafe16fc4aa7ce1965d964a83ac0a5dd4fa93c Mon Sep 17 00:00:00 2001 From: jinningwang Date: Fri, 24 Jan 2025 13:51:00 -0500 Subject: [PATCH 25/28] Skip importing experimental routines --- ams/routines/__init__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/ams/routines/__init__.py b/ams/routines/__init__.py index 740e0749..ad5be239 100644 --- a/ams/routines/__init__.py +++ b/ams/routines/__init__.py @@ -17,7 +17,6 @@ ('dopf', ['DOPF', 'DOPFVIS']), ('pflow0', ['PFlow0']), ('dcpf0', ['DCPF0']), - ('pflow1', ['PFlow1']), ]) class_names = list_flatten(list(all_routines.values())) From 45cd1bc81aca46f728f4cc26641a8a4a1beb2e59 Mon Sep 17 00:00:00 2001 From: jinningwang Date: Fri, 24 Jan 2025 13:57:31 -0500 Subject: [PATCH 26/28] Remove module benchmarks --- ams/benchmarks.py | 302 ---------------------------------- docs/source/release-notes.rst | 1 + tests/test_benchmarks.py | 149 ----------------- 3 files changed, 1 insertion(+), 451 deletions(-) delete mode 100644 ams/benchmarks.py delete mode 100644 tests/test_benchmarks.py diff --git a/ams/benchmarks.py b/ams/benchmarks.py deleted file mode 100644 index b80bf6cd..00000000 --- a/ams/benchmarks.py +++ /dev/null @@ -1,302 +0,0 @@ -""" -Benchmark functions. -""" - -import datetime -import sys -import importlib.metadata as importlib_metadata -import logging - -try: - import pandapower as pdp - PANDAPOWER_AVAILABLE = True -except ImportError: - PANDAPOWER_AVAILABLE = False - logging.warning("pandapower is not available. Some functionalities will be disabled.") - -from andes.utils.misc import elapsed - -import ams - -logger = logging.getLogger(__name__) - -_failed_time = -1 -_failed_obj = -1 - -cols_pre = ['ams_mats', 'ams_parse', 'ams_eval', 'ams_final', 'ams_postinit'] - - -def get_tool_versions(tools=None): - """ - Get the current time, Python version, and versions of specified tools. - - Parameters - ---------- - tools : list of str, optional - List of tool names to check versions. If None, a default list of tools is used. - - Returns - ------- - dict - A dictionary containing the tool names and their versions. - """ - if tools is None: - tools = ['ltbams', 'andes', 'cvxpy', - 'gurobipy', 'mosek', 'piqp', - 'pandapower', 'numba'] - - # Get current time and Python version - last_run_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") - python_version = sys.version - - # Collect tool versions - tool_versions = {} - for tool in tools: - try: - version = importlib_metadata.version(tool) - tool_versions[tool] = version - except importlib_metadata.PackageNotFoundError: - logger.error(f"Package {tool} not found.") - tool_versions[tool] = "Not installed" - - # Print the results in a formatted way - logger.warning(f"Last run time: {last_run_time}") - logger.warning(f"Python: {python_version}\n") - - # Calculate the width of the columns - max_tool_length = max(len(tool) for tool in tool_versions) - max_version_length = max(len(version) for version in tool_versions.values()) - - # Print the header - logger.warning(f"{'Tool':<{max_tool_length}} {'Version':<{max_version_length}}") - logger.warning(f"{'-' * max_tool_length} {'-' * max_version_length}") - - # Print each tool and its version - for tool, version in tool_versions.items(): - logger.warning(f"{tool:<{max_tool_length}} {version:<{max_version_length}}") - - return tool_versions - - -def time_routine_solve(system, routine='DCOPF', **kwargs): - """ - Run the specified routine with the given solver and method. - - Parameters - ---------- - system : ams.System - The system object containing the routine. - routine : str, optional - The name of the routine to run. Defaults to 'DCOPF'. - - Other Parameters - ---------------- - solver : str, optional - The solver to use. - ignore_dpp : bool, optional - Whether to ignore DPP. Defaults to True. - - Returns - ------- - tuple - A tuple containing the elapsed time (s) and the objective value ($). - """ - rtn = system.routines[routine] - solver = kwargs.get('solver', None) - try: - t, _ = elapsed() - rtn.run(**kwargs) - _, s0 = elapsed(t) - elapsed_time = float(s0.split(' ')[0]) - obj_value = rtn.obj.v - except Exception as e: - logger.error(f"Error running routine {routine} with solver {solver}: {e}") - elapsed_time = _failed_time - obj_value = _failed_obj - return elapsed_time, obj_value - - -def pre_solve(system, routine): - """ - Time the routine preparation process. - - Parameters - ---------- - system : ams.System - The system object containing the routine. - routine : str - The name of the routine to prepare - - Returns - ------- - dict - A dictionary containing the preparation times in seconds for each step: - 'mats', 'parse', 'evaluate', 'finalize', 'postinit'. - """ - rtn = system.routines[routine] - - # Initialize AMS - # --- matrices build --- - t_mats, _ = elapsed() - system.mats.build(force=True) - _, s_mats = elapsed(t_mats) - - # --- code generation --- - t_parse, _ = elapsed() - rtn.om.parse(force=True) - _, s_parse = elapsed(t_parse) - - # --- code evaluation --- - t_evaluate, _ = elapsed() - rtn.om.evaluate(force=True) - _, s_evaluate = elapsed(t_evaluate) - - # --- problem finalization --- - t_finalize, _ = elapsed() - rtn.om.finalize(force=True) - _, s_finalize = elapsed(t_finalize) - - # --- rest init process --- - t_postinit, _ = elapsed() - rtn.init() - _, s_postinit = elapsed(t_postinit) - - s_float = [float(s.split(' ')[0]) for s in [s_mats, s_parse, s_evaluate, s_finalize, s_postinit]] - - pre_time = dict(zip(cols_pre, s_float)) - return pre_time - - -def time_pdp_dcopf(ppn): - """ - Test the execution time of DCOPF using pandapower. - - Parameters - ---------- - ppn : pandapowerNet - The pandapower network object. - - Returns - ------- - tuple - A tuple containing the elapsed time (s) and the objective value ($). - """ - try: - t_pdp, _ = elapsed() - pdp.rundcopp(ppn) - _, s_pdp = elapsed(t_pdp) - elapsed_time = float(s_pdp.split(' ')[0]) - obj_value = ppn.res_cost - except Exception as e: - logger.error(f"Error running pandapower: {e}") - elapsed_time = _failed_time - obj_value = _failed_obj - return elapsed_time, obj_value - - -def time_routine(system, routine='DCOPF', solvers=['CLARABEL'], - **kwargs): - """ - Time the specified routine with the given solvers. - - Parameters - ---------- - system : ams.System - The system object containing the routine. - routine : str, optional - The name of the routine to run. Defaults to 'DCOPF'. - solvers : list of str, optional - List of solvers to use. Defaults to ['CLARABEL']. - - Other Parameters - ---------------- - ignore_dpp : bool, optional - Whether to ignore DPP. Defaults to True. - - Returns - ------- - tuple - A tuple containing the preparation times and the solution times in - seconds for each solver. - """ - pre_time = pre_solve(system, routine) - sol = {f'{solver}': {'time': 0, 'obj': 0} for solver in solvers} - - for solver in solvers: - if solver != 'pandapower': - s, obj = time_routine_solve(system, routine, solver=solver, **kwargs) - sol[solver]['time'] = s - sol[solver]['obj'] = obj - elif solver == 'pandapower' and PANDAPOWER_AVAILABLE and routine == 'DCOPF': - ppc = ams.io.pypower.system2ppc(system) - ppn = pdp.converter.from_ppc(ppc, f_hz=system.config.freq) - s, obj = time_pdp_dcopf(ppn) - sol[solver]['time'] = s - sol[solver]['obj'] = obj - else: - sol[solver]['time'] = _failed_time - sol[solver]['obj'] = _failed_obj - - return pre_time, sol - - -def time_dcopf_with_lf(system, solvers=['CLARABEL'], load_factors=[1], ignore_dpp=False): - """ - Time the execution of DCOPF with varying load factors. - - Parameters - ---------- - system : ams.System - The system object containing the routine. - solvers : list of str, optional - List of solvers to use. Defaults to ['CLARABEL']. - load_factors : list of float, optional - List of load factors to apply. Defaults to None. - ignore_dpp : bool, optional - Whether to ignore DPP. - - Returns - ------- - tuple - A tuple containing the list of times and the list of objective values. - """ - pre_time = pre_solve(system, 'DCOPF') - sol = {f'{solver}': {'time': 0, 'obj': 0} for solver in solvers} - - pd0 = system.PQ.p0.v.copy() - pq_idx = system.PQ.idx.v - - for solver in solvers: - if solver != 'pandapower': - obj_all = 0 - t_all, _ = elapsed() - for lf_k in load_factors: - system.PQ.set(src='p0', attr='v', idx=pq_idx, value=lf_k * pd0) - system.DCOPF.update(params=['pd']) - _, obj = time_routine_solve(system, 'DCOPF', - solver=solver, ignore_dpp=ignore_dpp) - obj_all += obj - _, s_all = elapsed(t_all) - system.PQ.set(src='p0', attr='v', idx=pq_idx, value=pd0) - s = float(s_all.split(' ')[0]) - sol[solver]['time'] = s - sol[solver]['obj'] = obj_all - elif solver == 'pandapower' and PANDAPOWER_AVAILABLE: - ppc = ams.io.pypower.system2ppc(system) - ppn = pdp.converter.from_ppc(ppc, f_hz=system.config.freq) - p_mw0 = ppn.load['p_mw'].copy() - t_all, _ = elapsed() - obj_all = 0 - for lf_k in load_factors: - ppn.load['p_mw'] = lf_k * p_mw0 - _, obj = time_pdp_dcopf(ppn) - obj_all += obj - _, s_all = elapsed(t_all) - s = float(s_all.split(' ')[0]) - sol[solver]['time'] = s - sol[solver]['obj'] = obj_all - else: - sol[solver]['time'] = _failed_time - sol[solver]['obj'] = _failed_obj - - return pre_time, sol diff --git a/docs/source/release-notes.rst b/docs/source/release-notes.rst index 9a62ddf0..2849f0f0 100644 --- a/docs/source/release-notes.rst +++ b/docs/source/release-notes.rst @@ -20,6 +20,7 @@ v1.0.0 (2024-01-24) - Update benchamrk figure in README - Set ANDES requirement to v1.9.3 - Deprecate method ``get_idx`` and suggest using ``get_all_idxes`` instead +- Remove module ``benchmarks.py`` and its tests for simplicity v0.9.13 (2024-12-05) -------------------- diff --git a/tests/test_benchmarks.py b/tests/test_benchmarks.py deleted file mode 100644 index 66c57af8..00000000 --- a/tests/test_benchmarks.py +++ /dev/null @@ -1,149 +0,0 @@ -import unittest - -import ams -import ams.benchmarks as bp - - -def are_packages_available(*packages): - """ - Check if the specified packages are available. - - Parameters - ---------- - *packages : str - Names of the packages to check. - - Returns - ------- - bool - True if all packages are available, False otherwise. - """ - for package in packages: - try: - __import__(package) - except ImportError: - return False - return True - - -def require_packages(*packages): - """ - Decorator to skip a test if the specified packages are not available. - - Parameters - ---------- - *packages : str - Names of the packages required for the test. - - Returns - ------- - function - The decorated test function. - """ - def decorator(test_func): - return unittest.skipIf( - not are_packages_available(*packages), - f"Skipping test because one or more required packages are not available: {', '.join(packages)}" - )(test_func) - return decorator - - -class TestBenchmarks(unittest.TestCase): - """ - Test module for benchmarks.py. - """ - - def test_get_tool_versions(self): - self.assertIsInstance(bp.get_tool_versions(), dict) - - def test_pre_solve_rted(self): - ss = ams.load(ams.get_case('5bus/pjm5bus_demo.xlsx'), - setup=True, default_config=True, no_output=True) - pre_time = bp.pre_solve(ss, 'RTED') - self.assertIsInstance(pre_time, dict) - self.assertEqual(len(pre_time), len(bp.cols_pre)) - for v in pre_time.values(): - self.assertIsInstance(v, float) - - def test_dcopf_solve(self): - ss = ams.load(ams.get_case('matpower/case5.m'), - setup=True, default_config=True, no_output=True) - s, obj = bp.time_routine_solve(ss, routine='DCOPF', solver='CLARABEL', ignore_dpp=False) - self.assertGreater(s, 0) - self.assertGreater(obj, 0) - - def test_pre_solve_ed(self): - ss = ams.load(ams.get_case('5bus/pjm5bus_demo.xlsx'), - setup=True, default_config=True, no_output=True) - pre_time = bp.pre_solve(ss, 'ED') - self.assertIsInstance(pre_time, dict) - self.assertEqual(len(pre_time), len(bp.cols_pre)) - for v in pre_time.values(): - self.assertIsInstance(v, float) - - def test_ed_solve(self): - ss = ams.load(ams.get_case('5bus/pjm5bus_demo.xlsx'), - setup=True, default_config=True, no_output=True) - s, obj = bp.time_routine_solve(ss, 'ED', solver='CLARABEL', ignore_dpp=True) - self.assertGreater(s, 0) - self.assertGreater(obj, 0) - - @require_packages('pandapower') - def time_pdp_dcopf(self): - ss = ams.load(ams.get_case('matpower/case5.m'), - setup=True, default_config=True, no_output=True) - ppc = ams.io.pypower.system2ppc(ss) - ppn = ams.io.pandapower.converter.from_ppc(ppc, f_hz=ss.config.freq) - s, obj = bp.time_pdp_dcopf(ppn) - self.assertGreater(s, 0) - self.assertGreater(obj, 0) - - def test_time_dcopf(self): - ss = ams.load(ams.get_case('matpower/case5.m'), - setup=True, default_config=True, no_output=True) - pre_time, sol = bp.time_routine(ss, - routine='DCOPF', - solvers=['CLARABEL', 'SCIP', 'pandapower'], ignore_dpp=False) - for v in pre_time.values(): - self.assertGreaterEqual(v, 0) - - self.assertGreater(sol['CLARABEL']['time'], 0) - self.assertGreater(sol['SCIP']['time'], 0) - self.assertAlmostEqual(sol['CLARABEL']['obj'], - sol['SCIP']['obj'], - places=2) - if not are_packages_available('pandapower'): - self.assertEqual(sol['pandapower']['time'], -1) - self.assertEqual(sol['pandapower']['obj'], -1) - else: - self.assertGreater(sol['pandapower']['obj'], 0) - self.assertAlmostEqual(sol['CLARABEL']['obj'], - sol['pandapower']['obj'], - places=2) - - def test_time_rted(self): - ss = ams.load(ams.get_case('5bus/pjm5bus_demo.xlsx'), - setup=True, default_config=True, no_output=True) - pre_time, sol = bp.time_routine(ss, - routine='RTED', - solvers=['CLARABEL', 'SCIP', 'pandapower'], ignore_dpp=False) - for v in pre_time.values(): - self.assertGreaterEqual(v, 0) - - self.assertGreater(sol['CLARABEL']['time'], 0) - self.assertGreater(sol['SCIP']['time'], 0) - self.assertAlmostEqual(sol['CLARABEL']['obj'], - sol['SCIP']['obj'], - places=2) - self.assertEqual(sol['pandapower']['time'], -1) - self.assertEqual(sol['pandapower']['obj'], -1) - - def test_time_dcopf_with_lf(self): - ss = ams.load(ams.get_case('matpower/case5.m'), - setup=True, default_config=True, no_output=True) - pre_time, sol = bp.time_dcopf_with_lf(ss, solvers=['CLARABEL', 'SCIP'], load_factors=[ - 1, 0.5, 0.25], ignore_dpp=False) - self.assertEqual(len(pre_time), len(bp.cols_pre)) - self.assertAlmostEqual(sol['CLARABEL']['obj'], - sol['SCIP']['obj'], - places=2) From ca3cd55747d904956db4227c06811c1a3fcc6eef Mon Sep 17 00:00:00 2001 From: jinningwang Date: Fri, 24 Jan 2025 15:07:26 -0500 Subject: [PATCH 27/28] Fix github actions for installation of pysciopt --- .github/workflows/codecov.yml | 2 +- .github/workflows/pythonapp.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/codecov.yml b/.github/workflows/codecov.yml index 93b82e0b..f389af0e 100644 --- a/.github/workflows/codecov.yml +++ b/.github/workflows/codecov.yml @@ -24,7 +24,7 @@ jobs: run: | mamba install -y nbmake pytest-xdist line_profiler # add'l packages for notebook tests. mamba install --file requirements.txt --file requirements-extra.txt - python -m pip install pyscipopt + python -m pip install pyscipopt --no-binary scip --force python -m pip install -e . - shell: bash -el {0} name: Test with pytest and collect coverage diff --git a/.github/workflows/pythonapp.yml b/.github/workflows/pythonapp.yml index 11cb14dd..58520cad 100644 --- a/.github/workflows/pythonapp.yml +++ b/.github/workflows/pythonapp.yml @@ -25,7 +25,7 @@ jobs: run: | mamba install -y nbmake pytest-xdist line_profiler # add'l packages for notebook tests. mamba install --file requirements.txt --file requirements-extra.txt - python -m pip install pyscipopt + python -m pip install pyscipopt --no-binary scip --force python -m pip install -e . - shell: bash -el {0} name: Run pip check From e9acc7107f01720e05a21e7364db5b7eff86e51a Mon Sep 17 00:00:00 2001 From: jinningwang Date: Fri, 24 Jan 2025 15:12:36 -0500 Subject: [PATCH 28/28] Fix github actions for installation of pysciopt in AMS Tests --- .github/workflows/pythonapp.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pythonapp.yml b/.github/workflows/pythonapp.yml index 58520cad..e782fb6e 100644 --- a/.github/workflows/pythonapp.yml +++ b/.github/workflows/pythonapp.yml @@ -66,7 +66,7 @@ jobs: run: | mamba install -y nbmake pytest-xdist line_profiler # add'l packages for notebook tests. mamba install --file requirements.txt --file requirements-extra.txt - python -m pip install pyscipopt + python -m pip install pyscipopt --no-binary scip --force python -m pip install -e . - shell: bash -el {0} name: Run pip check