ltbams 1.0.13__tar.gz → 1.0.14__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ltbams-1.0.13/ltbams.egg-info → ltbams-1.0.14}/PKG-INFO +18 -22
- {ltbams-1.0.13 → ltbams-1.0.14}/README.md +17 -21
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/_version.py +3 -3
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/cli.py +2 -7
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/core/common.py +7 -3
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/core/documenter.py +2 -1
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/core/matprocessor.py +4 -4
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/core/model.py +14 -6
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/core/param.py +5 -3
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/core/symprocessor.py +8 -2
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/core/var.py +1 -1
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/extension/eva.py +11 -7
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/interface.py +7 -7
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/io/json.py +20 -16
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/io/matpower.py +6 -6
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/io/psse.py +2 -1
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/io/xlsx.py +21 -16
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/main.py +53 -45
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/models/distributed/esd1.py +4 -7
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/models/distributed/ev.py +10 -6
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/models/distributed/pvd1.py +4 -7
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/models/group.py +17 -18
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/models/renewable/regc.py +14 -22
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/models/timeslot.py +30 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/models/zone.py +2 -4
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/opt/optzbase.py +4 -3
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/report.py +2 -7
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/routines/dcopf.py +7 -4
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/routines/dcopf2.py +14 -4
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/routines/dopf.py +2 -2
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/routines/ed.py +5 -5
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/routines/pflow.py +1 -1
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/routines/routine.py +8 -1
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/routines/rted.py +5 -5
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/routines/uc.py +2 -2
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/shared.py +69 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/system.py +93 -18
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/utils/paths.py +6 -10
- {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/genroutineref.py +12 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/release-notes.rst +6 -0
- {ltbams-1.0.13 → ltbams-1.0.14/ltbams.egg-info}/PKG-INFO +18 -22
- {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_export_json.py +2 -2
- {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_matp.py +1 -1
- {ltbams-1.0.13 → ltbams-1.0.14}/CONTRIBUTING.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/LICENSE +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/MANIFEST.in +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/__init__.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/__main__.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/5bus/pjm5bus_demo.json +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/5bus/pjm5bus_demo.xlsx +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/5bus/pjm5bus_ev.xlsx +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/5bus/pjm5bus_jumper.xlsx +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/hawaii40/Hawaii40.m +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/ieee123/ieee123.xlsx +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/ieee123/ieee123_regcv1.xlsx +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/ieee14/ieee14.json +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/ieee14/ieee14.raw +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/ieee14/ieee14_conn.xlsx +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/ieee14/ieee14_uced.xlsx +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/ieee39/ieee39.xlsx +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/ieee39/ieee39_uced.xlsx +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/ieee39/ieee39_uced_esd1.xlsx +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/ieee39/ieee39_uced_pvd1.xlsx +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/ieee39/ieee39_uced_vis.xlsx +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/matpower/benchmark.json +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/matpower/case118.m +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/matpower/case14.m +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/matpower/case300.m +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/matpower/case39.m +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/matpower/case5.m +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/matpower/case_ACTIVSg2000.m +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/npcc/npcc.m +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/npcc/npcc_uced.xlsx +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/pglib/pglib_opf_case39_epri__api.m +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/wecc/wecc.m +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/wecc/wecc_uced.xlsx +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/core/__init__.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/core/service.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/extension/__init__.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/io/__init__.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/io/pypower.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/models/__init__.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/models/area.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/models/bus.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/models/cost.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/models/distributed/__init__.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/models/info.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/models/line.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/models/renewable/__init__.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/models/reserve.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/models/shunt.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/models/static/__init__.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/models/static/gen.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/models/static/pq.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/opt/__init__.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/opt/constraint.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/opt/exprcalc.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/opt/expression.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/opt/objective.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/opt/omodel.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/opt/param.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/opt/var.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/routines/__init__.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/routines/acopf.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/routines/dcpf.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/routines/grbopt.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/routines/pypower.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/routines/type.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/utils/__init__.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ams/utils/misc.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/docs/Makefile +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/docs/make.bat +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/_templates/autosummary/base.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/_templates/autosummary/class.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/_templates/autosummary/module.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/_templates/autosummary/module_toctree.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/api.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/conf.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/examples/index.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/genmodelref.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/getting_started/copyright.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/getting_started/formats/index.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/getting_started/formats/matpower.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/getting_started/formats/psse.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/getting_started/formats/pypower.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/getting_started/formats/xlsx.png +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/getting_started/formats/xlsx.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/getting_started/index.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/getting_started/install.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/getting_started/overview.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/getting_started/testcase.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/getting_started/verification.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/images/curent.ico +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/images/dcopf_time.png +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/images/educ_pie.png +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/images/sponsors/CURENT_Logo_NameOnTrans.png +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/images/sponsors/CURENT_Logo_Transparent.png +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/images/sponsors/CURENT_Logo_Transparent_Name.png +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/images/sponsors/doe.png +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/index.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/modeling/example.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/modeling/index.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/modeling/model.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/modeling/routine.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/modeling/system.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ltbams.egg-info/SOURCES.txt +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ltbams.egg-info/dependency_links.txt +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ltbams.egg-info/entry_points.txt +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ltbams.egg-info/requires.txt +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/ltbams.egg-info/top_level.txt +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/pyproject.toml +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/requirements-dev.txt +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/requirements.txt +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/setup.cfg +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/setup.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_1st_system.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_addressing.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_case.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_cli.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_export_csv.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_group.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_interface.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_io.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_jumper.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_known_good.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_model.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_omodel.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_paths.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_report.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_repr.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_routine.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_rtn_acopf.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_rtn_dcopf.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_rtn_dcopf2.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_rtn_ed.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_rtn_opf.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_rtn_pflow.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_rtn_pypower.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_rtn_rted.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_rtn_uc.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_service.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.14}/versioneer.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: ltbams
|
3
|
-
Version: 1.0.
|
3
|
+
Version: 1.0.14
|
4
4
|
Summary: Python software for scheduling modeling and co-simulation with dynamics.
|
5
5
|
Home-page: https://github.com/CURENT/ams
|
6
6
|
Author: Jinning Wang
|
@@ -51,13 +51,13 @@ Dynamic: home-page
|
|
51
51
|
|
52
52
|
# LTB AMS
|
53
53
|
|
54
|
+
<img src="docs/source/images/sponsors/CURENT_Logo_NameOnTrans.png" alt="CURENT ERC Logo" width="300" height="auto">
|
55
|
+
|
54
56
|
Python Software for Power System Scheduling Modeling and Co-Simulation with Dynamics, serving as the market simulator for the [CURENT Largescale Testbed][LTB Repository].
|
55
57
|
|
56
58
|

|
57
59
|
[](https://ieeexplore.ieee.org/document/10836855)
|
58
60
|
|
59
|
-
<img src="docs/source/images/sponsors/CURENT_Logo_NameOnTrans.png" alt="CURENT ERC Logo" width="300" height="auto">
|
60
|
-
|
61
61
|
| Badges | | |
|
62
62
|
|---|---|---|
|
63
63
|
| Repo |  |  |
|
@@ -66,16 +66,16 @@ Python Software for Power System Scheduling Modeling and Co-Simulation with Dyna
|
|
66
66
|
| Tag | [](https://github.com/CURENT/ams/tags) |  |
|
67
67
|
| Documentation | [](https://ltb.readthedocs.io/projects/ams/en/stable/?badge=stable) | [](https://ltb.readthedocs.io/projects/ams/en/develop/?badge=develop) |
|
68
68
|
| Download | [](https://pypi.org/project/ltbams/) | [](https://anaconda.org/conda-forge/ltbams) |
|
69
|
-
|
|
70
|
-
|
|
69
|
+
| Quality |  | [](https://codebeat.co/projects/github-com-curent-ams-master) |
|
70
|
+
| Coverage |  |  |
|
71
71
|
| Last Commit |  |  |
|
72
|
-
| CI | [](https://github.com/CURENT/ams/actions/workflows/compatibility.yml) | [](https://github.com/CURENT/ams/actions/workflows/publish-pypi.yml) |
|
72
|
+
| CI | [](https://github.com/CURENT/ams/actions/workflows/compatibility.yml) | [](https://dev.azure.com/curentltb/ams/_build/latest?definitionId=2&branchName=master) |
|
73
|
+
| CD | [](https://github.com/CURENT/ams/actions/workflows/publish-pypi.yml) | [](https://dev.azure.com/conda-forge/feedstock-builds/_build/latest?definitionId=21708&branchName=main) |
|
74
74
|
| Structure | [](https://mango-dune-07a8b7110.1.azurestaticapps.net/?repo=CURENT%2Fams) | [](https://deepwiki.com/CURENT/ams) |
|
75
75
|
| Dependency | [](https://libraries.io/pypi/ltbams) | |
|
76
76
|
| Try on Binder | [](https://mybinder.org/v2/gh/curent/ams/master) | |
|
77
77
|
|
78
|
-
|
78
|
+
## Why AMS
|
79
79
|
|
80
80
|
AMS facilitates **Dynamics Incorporated Scheduling** and **Scheduling-Dynamics Co-Simulation**
|
81
81
|
through an integrated interface with ANDES.
|
@@ -150,9 +150,9 @@ Use the following resources to get involved.
|
|
150
150
|
- Read release notes highlighted [here][release notes]
|
151
151
|
- Try in Jupyter Notebook on [Binder][Binder]
|
152
152
|
- Check out the source code used for [benchmark][benchmark]
|
153
|
-
- Check out and
|
153
|
+
- Check out and cite our [paper][paper]
|
154
154
|
|
155
|
-
|
155
|
+
## Installation
|
156
156
|
|
157
157
|
AMS is released as ``ltbams`` on PyPI and conda-forge.
|
158
158
|
Install from PyPI using pip:
|
@@ -191,11 +191,11 @@ pip install git+https://github.com/CURENT/ams.git
|
|
191
191
|
- `cvxpy` is distributed with the open source solvers CLARABEL, OSQP, and SCS, but MIP-capable solvers need separate installation
|
192
192
|
- `cvxpy` versions **below 1.5** are incompatible with `numpy` versions **2.0 and above**
|
193
193
|
- If the solver `SCIP` encounters an import error caused by a missing `libscip.9.1.dylib`, try reinstalling its Python interface by running `pip install pyscipopt --no-binary scip --force`
|
194
|
-
- `kvxopt
|
194
|
+
- For the ImportError related to `kvxopt`, it is recommended to reinstall it via `conda` as sometimes ``pip`` struggles to set the correct path for compiled libraries. More details can be found in this closed issue [Bug with dependency kvxopt 1.3.2.0](https://github.com/CURENT/andes/issues/508)
|
195
195
|
- Versions **1.0.0** and **1.0.1** are only available on PyPI
|
196
196
|
- Version **0.9.9** has known issues and has been yanked from PyPI
|
197
197
|
|
198
|
-
|
198
|
+
## Example Usage
|
199
199
|
|
200
200
|
```python
|
201
201
|
import ams
|
@@ -216,12 +216,15 @@ sa
|
|
216
216
|
>>> <andes.system.System at 0x14bd98190>
|
217
217
|
```
|
218
218
|
|
219
|
-
|
219
|
+
Here, RTED stands for Real-Time Economic Dispatch.
|
220
|
+
For a full list of acronyms used in the library, please consult the [Documentation - Routine Reference](https://ltb.readthedocs.io/projects/ams/en/stable/routineref.html#routine-reference).
|
221
|
+
|
222
|
+
## Citing AMS
|
220
223
|
If you use AMS for research or consulting, please cite the following paper in your publication that uses AMS:
|
221
224
|
|
222
225
|
> J. Wang et al., "Dynamics-Incorporated Modeling Framework for Stability Constrained Scheduling Under High-Penetration of Renewable Energy," in IEEE Transactions on Sustainable Energy, vol. 16, no. 3, pp. 1673-1685, July 2025, doi: 10.1109/TSTE.2025.3528027.
|
223
226
|
|
224
|
-
|
227
|
+
## Sponsors and Contributors
|
225
228
|
AMS is the scheduling simulation engine for the CURENT Largescale Testbed (LTB).
|
226
229
|
More information about CURENT LTB can be found at the [LTB Repository][LTB Repository].
|
227
230
|
|
@@ -232,16 +235,9 @@ This work was supported in part by the Advanced Grid Research and Development Pr
|
|
232
235
|
|
233
236
|
See [GitHub contributors][GitHub contributors] for the contributor list.
|
234
237
|
|
235
|
-
|
238
|
+
## License
|
236
239
|
AMS is licensed under the [GPL v3 License](./LICENSE).
|
237
240
|
|
238
|
-
# Related Projects
|
239
|
-
- [Popular Open Source Libraries for Power System Analysis](https://github.com/ps-wiki/best-of-ps)
|
240
|
-
- [G-PST Tools Portal](https://g-pst.github.io/tools/): An open tools portal with a classification approach
|
241
|
-
- [Open Source Software (OSS) for Electricity Market Research, Teaching, and Training](https://www2.econ.iastate.edu/tesfatsi/ElectricOSS.htm)
|
242
|
-
|
243
|
-
Some commercial solvers provide academic licenses, such as COPT, GUROBI, CPLEX, and MOSEK.
|
244
|
-
|
245
241
|
* * *
|
246
242
|
|
247
243
|
[GitHub releases]: https://github.com/CURENT/ams/releases
|
@@ -1,12 +1,12 @@
|
|
1
1
|
# LTB AMS
|
2
2
|
|
3
|
+
<img src="docs/source/images/sponsors/CURENT_Logo_NameOnTrans.png" alt="CURENT ERC Logo" width="300" height="auto">
|
4
|
+
|
3
5
|
Python Software for Power System Scheduling Modeling and Co-Simulation with Dynamics, serving as the market simulator for the [CURENT Largescale Testbed][LTB Repository].
|
4
6
|
|
5
7
|

|
6
8
|
[](https://ieeexplore.ieee.org/document/10836855)
|
7
9
|
|
8
|
-
<img src="docs/source/images/sponsors/CURENT_Logo_NameOnTrans.png" alt="CURENT ERC Logo" width="300" height="auto">
|
9
|
-
|
10
10
|
| Badges | | |
|
11
11
|
|---|---|---|
|
12
12
|
| Repo |  |  |
|
@@ -15,16 +15,16 @@ Python Software for Power System Scheduling Modeling and Co-Simulation with Dyna
|
|
15
15
|
| Tag | [](https://github.com/CURENT/ams/tags) |  |
|
16
16
|
| Documentation | [](https://ltb.readthedocs.io/projects/ams/en/stable/?badge=stable) | [](https://ltb.readthedocs.io/projects/ams/en/develop/?badge=develop) |
|
17
17
|
| Download | [](https://pypi.org/project/ltbams/) | [](https://anaconda.org/conda-forge/ltbams) |
|
18
|
-
|
|
19
|
-
|
|
18
|
+
| Quality |  | [](https://codebeat.co/projects/github-com-curent-ams-master) |
|
19
|
+
| Coverage |  |  |
|
20
20
|
| Last Commit |  |  |
|
21
|
-
| CI | [](https://github.com/CURENT/ams/actions/workflows/compatibility.yml) | [](https://github.com/CURENT/ams/actions/workflows/publish-pypi.yml) |
|
21
|
+
| CI | [](https://github.com/CURENT/ams/actions/workflows/compatibility.yml) | [](https://dev.azure.com/curentltb/ams/_build/latest?definitionId=2&branchName=master) |
|
22
|
+
| CD | [](https://github.com/CURENT/ams/actions/workflows/publish-pypi.yml) | [](https://dev.azure.com/conda-forge/feedstock-builds/_build/latest?definitionId=21708&branchName=main) |
|
23
23
|
| Structure | [](https://mango-dune-07a8b7110.1.azurestaticapps.net/?repo=CURENT%2Fams) | [](https://deepwiki.com/CURENT/ams) |
|
24
24
|
| Dependency | [](https://libraries.io/pypi/ltbams) | |
|
25
25
|
| Try on Binder | [](https://mybinder.org/v2/gh/curent/ams/master) | |
|
26
26
|
|
27
|
-
|
27
|
+
## Why AMS
|
28
28
|
|
29
29
|
AMS facilitates **Dynamics Incorporated Scheduling** and **Scheduling-Dynamics Co-Simulation**
|
30
30
|
through an integrated interface with ANDES.
|
@@ -99,9 +99,9 @@ Use the following resources to get involved.
|
|
99
99
|
- Read release notes highlighted [here][release notes]
|
100
100
|
- Try in Jupyter Notebook on [Binder][Binder]
|
101
101
|
- Check out the source code used for [benchmark][benchmark]
|
102
|
-
- Check out and
|
102
|
+
- Check out and cite our [paper][paper]
|
103
103
|
|
104
|
-
|
104
|
+
## Installation
|
105
105
|
|
106
106
|
AMS is released as ``ltbams`` on PyPI and conda-forge.
|
107
107
|
Install from PyPI using pip:
|
@@ -140,11 +140,11 @@ pip install git+https://github.com/CURENT/ams.git
|
|
140
140
|
- `cvxpy` is distributed with the open source solvers CLARABEL, OSQP, and SCS, but MIP-capable solvers need separate installation
|
141
141
|
- `cvxpy` versions **below 1.5** are incompatible with `numpy` versions **2.0 and above**
|
142
142
|
- If the solver `SCIP` encounters an import error caused by a missing `libscip.9.1.dylib`, try reinstalling its Python interface by running `pip install pyscipopt --no-binary scip --force`
|
143
|
-
- `kvxopt
|
143
|
+
- For the ImportError related to `kvxopt`, it is recommended to reinstall it via `conda` as sometimes ``pip`` struggles to set the correct path for compiled libraries. More details can be found in this closed issue [Bug with dependency kvxopt 1.3.2.0](https://github.com/CURENT/andes/issues/508)
|
144
144
|
- Versions **1.0.0** and **1.0.1** are only available on PyPI
|
145
145
|
- Version **0.9.9** has known issues and has been yanked from PyPI
|
146
146
|
|
147
|
-
|
147
|
+
## Example Usage
|
148
148
|
|
149
149
|
```python
|
150
150
|
import ams
|
@@ -165,12 +165,15 @@ sa
|
|
165
165
|
>>> <andes.system.System at 0x14bd98190>
|
166
166
|
```
|
167
167
|
|
168
|
-
|
168
|
+
Here, RTED stands for Real-Time Economic Dispatch.
|
169
|
+
For a full list of acronyms used in the library, please consult the [Documentation - Routine Reference](https://ltb.readthedocs.io/projects/ams/en/stable/routineref.html#routine-reference).
|
170
|
+
|
171
|
+
## Citing AMS
|
169
172
|
If you use AMS for research or consulting, please cite the following paper in your publication that uses AMS:
|
170
173
|
|
171
174
|
> J. Wang et al., "Dynamics-Incorporated Modeling Framework for Stability Constrained Scheduling Under High-Penetration of Renewable Energy," in IEEE Transactions on Sustainable Energy, vol. 16, no. 3, pp. 1673-1685, July 2025, doi: 10.1109/TSTE.2025.3528027.
|
172
175
|
|
173
|
-
|
176
|
+
## Sponsors and Contributors
|
174
177
|
AMS is the scheduling simulation engine for the CURENT Largescale Testbed (LTB).
|
175
178
|
More information about CURENT LTB can be found at the [LTB Repository][LTB Repository].
|
176
179
|
|
@@ -181,16 +184,9 @@ This work was supported in part by the Advanced Grid Research and Development Pr
|
|
181
184
|
|
182
185
|
See [GitHub contributors][GitHub contributors] for the contributor list.
|
183
186
|
|
184
|
-
|
187
|
+
## License
|
185
188
|
AMS is licensed under the [GPL v3 License](./LICENSE).
|
186
189
|
|
187
|
-
# Related Projects
|
188
|
-
- [Popular Open Source Libraries for Power System Analysis](https://github.com/ps-wiki/best-of-ps)
|
189
|
-
- [G-PST Tools Portal](https://g-pst.github.io/tools/): An open tools portal with a classification approach
|
190
|
-
- [Open Source Software (OSS) for Electricity Market Research, Teaching, and Training](https://www2.econ.iastate.edu/tesfatsi/ElectricOSS.htm)
|
191
|
-
|
192
|
-
Some commercial solvers provide academic licenses, such as COPT, GUROBI, CPLEX, and MOSEK.
|
193
|
-
|
194
190
|
* * *
|
195
191
|
|
196
192
|
[GitHub releases]: https://github.com/CURENT/ams/releases
|
@@ -8,11 +8,11 @@ import json
|
|
8
8
|
|
9
9
|
version_json = '''
|
10
10
|
{
|
11
|
-
"date": "2025-08-
|
11
|
+
"date": "2025-08-31T23:37:40-0700",
|
12
12
|
"dirty": false,
|
13
13
|
"error": null,
|
14
|
-
"full-revisionid": "
|
15
|
-
"version": "1.0.
|
14
|
+
"full-revisionid": "595ed3a3be7f707c7c4aa79ac73bffa58919dc81",
|
15
|
+
"version": "1.0.14"
|
16
16
|
}
|
17
17
|
''' # END VERSION_JSON
|
18
18
|
|
@@ -23,18 +23,13 @@ command_aliases = {
|
|
23
23
|
|
24
24
|
def create_parser():
|
25
25
|
"""
|
26
|
-
Create a parser for the command-line interface
|
26
|
+
Create a parser for the command-line interface,
|
27
|
+
revised from `andes.cli.create_parser`.
|
27
28
|
|
28
29
|
Returns
|
29
30
|
-------
|
30
31
|
argparse.ArgumentParser
|
31
32
|
Parser with all AMS options
|
32
|
-
|
33
|
-
Notes
|
34
|
-
-----
|
35
|
-
Revised from the ANDES project (https://github.com/CURENT/andes).
|
36
|
-
Original author: Hantao Cui
|
37
|
-
License: GPL3
|
38
33
|
"""
|
39
34
|
|
40
35
|
parser = argparse.ArgumentParser()
|
@@ -1,16 +1,20 @@
|
|
1
1
|
import logging
|
2
2
|
|
3
|
-
from andes.core.common import Config as
|
3
|
+
from andes.core.common import Config as adConfig
|
4
4
|
|
5
5
|
logger = logging.getLogger(__name__)
|
6
6
|
|
7
7
|
|
8
|
-
class Config(
|
8
|
+
class Config(adConfig):
|
9
9
|
"""
|
10
10
|
A class for storing configuration, can be used in system,
|
11
11
|
model, routine, and other modules.
|
12
12
|
|
13
|
-
Revised from `andes.core.common.Config
|
13
|
+
Revised from `andes.core.common.Config`, where update method
|
14
|
+
is modified to ensure values in the dictionary are set
|
15
|
+
in the configuration object.
|
16
|
+
|
17
|
+
.. versionadded:: 1.0.11
|
14
18
|
"""
|
15
19
|
|
16
20
|
def __init__(self, name, dct=None, **kwargs):
|
@@ -244,7 +244,7 @@ class MatProcessor:
|
|
244
244
|
The connectivity matrices `Cft`, `Cg`, `Cl`, and `Csh` ***have taken*** the
|
245
245
|
devices connectivity into account.
|
246
246
|
|
247
|
-
The MParams
|
247
|
+
The MParams row names and col names are assigned in `System.setup()`.
|
248
248
|
"""
|
249
249
|
|
250
250
|
def __init__(self, system):
|
@@ -627,7 +627,7 @@ class MatProcessor:
|
|
627
627
|
luid = [system.Line.idx2uid(line)]
|
628
628
|
self.PTDF.row_names = [line]
|
629
629
|
except ValueError:
|
630
|
-
raise ValueError(f"Line {line} not found.")
|
630
|
+
raise ValueError(f"Line {line} not found.") from None
|
631
631
|
elif isinstance(line, list):
|
632
632
|
luid = system.Line.idx2uid(line)
|
633
633
|
self.PTDF.row_names = line
|
@@ -725,7 +725,7 @@ class MatProcessor:
|
|
725
725
|
try:
|
726
726
|
luid = [system.Line.idx2uid(line)]
|
727
727
|
except ValueError:
|
728
|
-
raise ValueError(f"Line {line} not found.")
|
728
|
+
raise ValueError(f"Line {line} not found.") from None
|
729
729
|
elif isinstance(line, list):
|
730
730
|
luid = system.Line.idx2uid(line)
|
731
731
|
|
@@ -811,7 +811,7 @@ class MatProcessor:
|
|
811
811
|
try:
|
812
812
|
luid = [self.system.Line.idx2uid(line)]
|
813
813
|
except ValueError:
|
814
|
-
raise ValueError(f"Line {line} not found.")
|
814
|
+
raise ValueError(f"Line {line} not found.") from None
|
815
815
|
elif isinstance(line, list):
|
816
816
|
luid = self.system.Line.idx2uid(line)
|
817
817
|
|
@@ -235,9 +235,11 @@ class Model:
|
|
235
235
|
|
236
236
|
Notes
|
237
237
|
-----
|
238
|
-
|
239
|
-
|
240
|
-
|
238
|
+
.. versionchanged:: 0.9.14
|
239
|
+
|
240
|
+
The ``attr`` argument was added to allow altering specific attributes.
|
241
|
+
This is useful when manipulating parameter values in the system base
|
242
|
+
and ensuring that changes are reflected in the dumped case file.
|
241
243
|
"""
|
242
244
|
|
243
245
|
instance = self.__dict__[src]
|
@@ -307,6 +309,11 @@ class Model:
|
|
307
309
|
Return the index of the model instance.
|
308
310
|
Equivalent to ``self.idx.v``, develoepd for consistency with group method
|
309
311
|
``get_idx``.
|
312
|
+
|
313
|
+
Notes
|
314
|
+
-----
|
315
|
+
.. deprecated:: 1.0.0
|
316
|
+
Use ``get_all_idxes`` instead.
|
310
317
|
"""
|
311
318
|
return self.idx.v
|
312
319
|
|
@@ -314,13 +321,14 @@ class Model:
|
|
314
321
|
"""
|
315
322
|
Return all the indexes of this model.
|
316
323
|
|
317
|
-
.. note::
|
318
|
-
New in version 1.0.0. Add to follow the group method ``get_all_idxes``.
|
319
|
-
|
320
324
|
Returns
|
321
325
|
-------
|
322
326
|
list
|
323
327
|
A list of indexes.
|
328
|
+
|
329
|
+
Notes
|
330
|
+
-----
|
331
|
+
.. versionadded:: 1.0.0
|
324
332
|
"""
|
325
333
|
return self.idx.v
|
326
334
|
|
@@ -252,6 +252,9 @@ class RParam(Param):
|
|
252
252
|
Notes
|
253
253
|
-----
|
254
254
|
- The value will sort by the indexer if indexed.
|
255
|
+
|
256
|
+
.. deprecated:: 1.0.0
|
257
|
+
Use ``get_all_idxes`` instead.
|
255
258
|
"""
|
256
259
|
if self.indexer is None:
|
257
260
|
if self.is_group:
|
@@ -283,9 +286,6 @@ class RParam(Param):
|
|
283
286
|
"""
|
284
287
|
Get all the indexes of the parameter.
|
285
288
|
|
286
|
-
.. note::
|
287
|
-
New in version 1.0.0.
|
288
|
-
|
289
289
|
Returns
|
290
290
|
-------
|
291
291
|
idx : list
|
@@ -294,6 +294,8 @@ class RParam(Param):
|
|
294
294
|
Notes
|
295
295
|
-----
|
296
296
|
- The value will sort by the indexer if indexed.
|
297
|
+
|
298
|
+
.. versionadded:: 1.0.0
|
297
299
|
"""
|
298
300
|
if self.indexer is None:
|
299
301
|
if self.is_group:
|
@@ -1,7 +1,13 @@
|
|
1
1
|
"""
|
2
|
-
Symbolic processor class for AMS routines
|
2
|
+
Symbolic processor class for AMS routines,
|
3
|
+
revised from `andes.core.symprocessor`.
|
3
4
|
|
4
|
-
|
5
|
+
Revised from the ANDES project:
|
6
|
+
https://github.com/CURENT/andes
|
7
|
+
|
8
|
+
Original author: Hantao Cui
|
9
|
+
|
10
|
+
License: GNU General Public License v3.0 (GPL-3.0)
|
5
11
|
"""
|
6
12
|
|
7
13
|
import logging
|
@@ -2,13 +2,6 @@
|
|
2
2
|
EV Aggregator module.
|
3
3
|
|
4
4
|
EVD is the generated datasets, and EVA is the aggregator model.
|
5
|
-
|
6
|
-
Reference:
|
7
|
-
[1] J. Wang et al., "Electric Vehicles Charging Time Constrained Deliverable Provision of Secondary
|
8
|
-
Frequency Regulation," in IEEE Transactions on Smart Grid, doi: 10.1109/TSG.2024.3356948.
|
9
|
-
[2] M. Wang, Y. Mu, Q. Shi, H. Jia and F. Li, "Electric Vehicle Aggregator Modeling and Control for
|
10
|
-
Frequency Regulation Considering Progressive State Recovery," in IEEE Transactions on Smart Grid,
|
11
|
-
vol. 11, no. 5, pp. 4176-4189, Sept. 2020, doi: 10.1109/TSG.2020.2981843.
|
12
5
|
"""
|
13
6
|
|
14
7
|
import logging
|
@@ -50,6 +43,17 @@ class EVD(ModelData, Model):
|
|
50
43
|
"""
|
51
44
|
In the EVD, each single EV is recorded as a device with its own parameters.
|
52
45
|
The parameters are generated from given statistical distributions.
|
46
|
+
|
47
|
+
References
|
48
|
+
----------
|
49
|
+
1. J. Wang et al., "Electric Vehicles Charging Time Constrained
|
50
|
+
Deliverable Provision of Secondary Frequency Regulation," in IEEE
|
51
|
+
Transactions on Smart Grid, vol. 15, no. 4, pp. 3892-3903, July
|
52
|
+
2024, doi: 10.1109/TSG.2024.3356948.
|
53
|
+
2. M. Wang, Y. Mu, Q. Shi, H. Jia and F. Li, "Electric Vehicle Aggregator
|
54
|
+
Modeling and Control for Frequency Regulation Considering Progressive
|
55
|
+
State Recovery," in IEEE Transactions on Smart Grid, vol. 11, no. 5,
|
56
|
+
pp. 4176-4189, Sept. 2020, doi: 10.1109/TSG.2020.2981843.
|
53
57
|
"""
|
54
58
|
|
55
59
|
def __init__(self, N=10000, Ns=20, Tagc=4, SOCf=0.2, r=0.5,
|
@@ -177,9 +177,9 @@ def to_andes(system, addfile=None,
|
|
177
177
|
|
178
178
|
Notes
|
179
179
|
-----
|
180
|
-
|
181
|
-
|
182
|
-
|
180
|
+
- Power flow models in the addfile will be skipped and only dynamic models will be used.
|
181
|
+
- The addfile format is guessed based on the file extension. Currently only ``xlsx`` is supported.
|
182
|
+
- Index in the addfile is automatically adjusted when necessary.
|
183
183
|
"""
|
184
184
|
t0, _ = elapsed()
|
185
185
|
|
@@ -446,9 +446,9 @@ class Dynamic:
|
|
446
446
|
|
447
447
|
Notes
|
448
448
|
-----
|
449
|
-
|
450
|
-
|
451
|
-
|
449
|
+
- Using the file conversion ``to_andes()`` will automatically
|
450
|
+
link the AMS system to the converted ANDES system in the
|
451
|
+
attribute ``dyn``.
|
452
452
|
|
453
453
|
Examples
|
454
454
|
--------
|
@@ -503,7 +503,7 @@ class Dynamic:
|
|
503
503
|
|
504
504
|
Notes
|
505
505
|
-----
|
506
|
-
|
506
|
+
- AGC power reference ``paux`` is not included in this function.
|
507
507
|
"""
|
508
508
|
# 1) TurbineGov
|
509
509
|
syg_idx = sp.dyn.link['syg_idx'].dropna().tolist() # SynGen idx
|
@@ -11,7 +11,9 @@ from collections import OrderedDict
|
|
11
11
|
from andes.io.json import (testlines, read) # NOQA
|
12
12
|
from andes.utils.paths import confirm_overwrite
|
13
13
|
|
14
|
-
from ams.shared import
|
14
|
+
from ams.shared import pd
|
15
|
+
from ams.shared import summary_row, summary_name, model2df
|
16
|
+
|
15
17
|
|
16
18
|
logger = logging.getLogger(__name__)
|
17
19
|
|
@@ -24,7 +26,8 @@ def write(system, outfile, skip_empty=True, overwrite=None,
|
|
24
26
|
If to_andes is True, only write models that are in ANDES,
|
25
27
|
but the outfile might not be able to be read back into AMS.
|
26
28
|
|
27
|
-
|
29
|
+
Revised from `andes.io.json.write`, where non-andes models
|
30
|
+
are skipped if `to_andes` is True.
|
28
31
|
|
29
32
|
Parameters
|
30
33
|
----------
|
@@ -63,20 +66,21 @@ def _dump_system(system, skip_empty, orient='records', to_andes=False):
|
|
63
66
|
them all in an OrderedDict.
|
64
67
|
"""
|
65
68
|
out = OrderedDict()
|
69
|
+
summary_found = False
|
66
70
|
for name, instance in system.models.items():
|
67
|
-
|
71
|
+
df = model2df(instance, skip_empty, to_andes=to_andes)
|
72
|
+
if df is None:
|
68
73
|
continue
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
out[name] = df.to_dict(orient=orient)
|
74
|
+
|
75
|
+
if name == summary_name:
|
76
|
+
df = pd.concat([pd.DataFrame([summary_row]), df], ignore_index=True)
|
77
|
+
df.index.name = "uid"
|
78
|
+
summary_found = True
|
79
|
+
out[name] = df.to_dict(orient=orient)
|
80
|
+
|
81
|
+
if not summary_found:
|
82
|
+
df = pd.DataFrame([summary_row])
|
83
|
+
df.index.name = "uid"
|
84
|
+
out[summary_name] = df.to_dict(orient=orient)
|
85
|
+
|
82
86
|
return json.dumps(out, indent=2)
|
@@ -36,10 +36,11 @@ def read(system, file):
|
|
36
36
|
|
37
37
|
def m2mpc(infile: str) -> dict:
|
38
38
|
"""
|
39
|
-
Parse a MATPOWER file and return a dictionary containing the parsed data
|
39
|
+
Parse a MATPOWER file and return a dictionary containing the parsed data,
|
40
|
+
revised from `andes.io.matpower.m2mpc`.
|
40
41
|
|
41
42
|
This function processes MATPOWER case files and extracts relevant fields
|
42
|
-
into a structured dictionary.
|
43
|
+
into a structured dictionary.
|
43
44
|
|
44
45
|
Supported fields include:
|
45
46
|
- `baseMVA`: The system base power in MVA.
|
@@ -181,9 +182,8 @@ def m2mpc(infile: str) -> dict:
|
|
181
182
|
|
182
183
|
def mpc2system(mpc: dict, system) -> bool:
|
183
184
|
"""
|
184
|
-
Load an mpc dict into an empty AMS system
|
185
|
-
|
186
|
-
Revised from ``andes.io.matpower.mpc2system``.
|
185
|
+
Load an mpc dict into an empty AMS system, revised from
|
186
|
+
`andes.io.matpower.mpc2system`.
|
187
187
|
|
188
188
|
Note that `mbase` in mpc is converted to `Sn`, but it is not actually used in
|
189
189
|
MATPOWER nor AMS.
|
@@ -453,7 +453,7 @@ def system2mpc(system) -> dict:
|
|
453
453
|
"""
|
454
454
|
Convert a **setup** AMS system to a MATPOWER mpc dictionary.
|
455
455
|
|
456
|
-
|
456
|
+
Revised from `andes.io.matpower.system2mpc`.
|
457
457
|
|
458
458
|
Parameters
|
459
459
|
----------
|
@@ -16,7 +16,8 @@ def read(system, file):
|
|
16
16
|
"""
|
17
17
|
Read PSS/E RAW file v32/v33 formats.
|
18
18
|
|
19
|
-
Revised from
|
19
|
+
Revised from `andes.io.psse.read`, where model ``Zone`` is completed
|
20
|
+
when necessary.
|
20
21
|
"""
|
21
22
|
ret = ad_read(system, file)
|
22
23
|
# Extract zone data
|