ltbams 1.0.13__tar.gz → 1.0.15__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.15}/PKG-INFO +19 -22
- {ltbams-1.0.13 → ltbams-1.0.15}/README.md +18 -21
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/_version.py +3 -3
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/cli.py +2 -7
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/core/common.py +7 -3
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/core/documenter.py +2 -1
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/core/matprocessor.py +4 -4
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/core/model.py +14 -6
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/core/param.py +5 -3
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/core/symprocessor.py +8 -2
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/core/var.py +1 -1
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/extension/eva.py +11 -7
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/interface.py +7 -7
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/io/json.py +20 -16
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/io/matpower.py +6 -6
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/io/psse.py +2 -1
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/io/xlsx.py +21 -16
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/main.py +53 -45
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/models/distributed/esd1.py +4 -7
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/models/distributed/ev.py +10 -6
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/models/distributed/pvd1.py +4 -7
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/models/group.py +17 -18
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/models/renewable/regc.py +14 -22
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/models/timeslot.py +46 -1
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/models/zone.py +2 -4
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/opt/exprcalc.py +5 -3
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/opt/optzbase.py +4 -3
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/report.py +2 -7
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/routines/dcopf.py +7 -4
- ltbams-1.0.15/ams/routines/dcopf2.py +120 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/routines/dcpf.py +5 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/routines/dopf.py +2 -2
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/routines/ed.py +5 -5
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/routines/pflow.py +1 -1
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/routines/routine.py +20 -4
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/routines/rted.py +5 -5
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/routines/uc.py +2 -2
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/shared.py +69 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/system.py +93 -18
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/utils/paths.py +6 -10
- {ltbams-1.0.13 → ltbams-1.0.15}/docs/source/examples/index.rst +1 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/docs/source/genroutineref.py +24 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/docs/source/release-notes.rst +15 -0
- {ltbams-1.0.13 → ltbams-1.0.15/ltbams.egg-info}/PKG-INFO +19 -22
- {ltbams-1.0.13 → ltbams-1.0.15}/tests/test_export_json.py +2 -2
- {ltbams-1.0.13 → ltbams-1.0.15}/tests/test_matp.py +1 -1
- {ltbams-1.0.13 → ltbams-1.0.15}/tests/test_rtn_dcopf2.py +33 -0
- ltbams-1.0.13/ams/routines/dcopf2.py +0 -95
- {ltbams-1.0.13 → ltbams-1.0.15}/CONTRIBUTING.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/LICENSE +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/MANIFEST.in +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/__init__.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/__main__.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/cases/5bus/pjm5bus_demo.json +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/cases/5bus/pjm5bus_demo.xlsx +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/cases/5bus/pjm5bus_ev.xlsx +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/cases/5bus/pjm5bus_jumper.xlsx +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/cases/hawaii40/Hawaii40.m +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/cases/ieee123/ieee123.xlsx +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/cases/ieee123/ieee123_regcv1.xlsx +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/cases/ieee14/ieee14.json +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/cases/ieee14/ieee14.raw +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/cases/ieee14/ieee14_conn.xlsx +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/cases/ieee14/ieee14_uced.xlsx +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/cases/ieee39/ieee39.xlsx +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/cases/ieee39/ieee39_uced.xlsx +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/cases/ieee39/ieee39_uced_esd1.xlsx +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/cases/ieee39/ieee39_uced_pvd1.xlsx +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/cases/ieee39/ieee39_uced_vis.xlsx +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/cases/matpower/benchmark.json +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/cases/matpower/case118.m +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/cases/matpower/case14.m +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/cases/matpower/case300.m +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/cases/matpower/case39.m +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/cases/matpower/case5.m +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/cases/matpower/case_ACTIVSg2000.m +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/cases/npcc/npcc.m +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/cases/npcc/npcc_uced.xlsx +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/cases/pglib/pglib_opf_case39_epri__api.m +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/cases/wecc/wecc.m +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/cases/wecc/wecc_uced.xlsx +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/core/__init__.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/core/service.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/extension/__init__.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/io/__init__.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/io/pypower.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/models/__init__.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/models/area.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/models/bus.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/models/cost.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/models/distributed/__init__.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/models/info.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/models/line.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/models/renewable/__init__.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/models/reserve.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/models/shunt.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/models/static/__init__.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/models/static/gen.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/models/static/pq.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/opt/__init__.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/opt/constraint.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/opt/expression.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/opt/objective.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/opt/omodel.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/opt/param.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/opt/var.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/routines/__init__.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/routines/acopf.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/routines/grbopt.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/routines/pypower.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/routines/type.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/utils/__init__.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ams/utils/misc.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/docs/Makefile +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/docs/make.bat +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/docs/source/_templates/autosummary/base.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/docs/source/_templates/autosummary/class.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/docs/source/_templates/autosummary/module.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/docs/source/_templates/autosummary/module_toctree.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/docs/source/api.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/docs/source/conf.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/docs/source/genmodelref.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/docs/source/getting_started/copyright.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/docs/source/getting_started/formats/index.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/docs/source/getting_started/formats/matpower.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/docs/source/getting_started/formats/psse.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/docs/source/getting_started/formats/pypower.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/docs/source/getting_started/formats/xlsx.png +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/docs/source/getting_started/formats/xlsx.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/docs/source/getting_started/index.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/docs/source/getting_started/install.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/docs/source/getting_started/overview.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/docs/source/getting_started/testcase.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/docs/source/getting_started/verification.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/docs/source/images/curent.ico +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/docs/source/images/dcopf_time.png +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/docs/source/images/educ_pie.png +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/docs/source/images/sponsors/CURENT_Logo_NameOnTrans.png +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/docs/source/images/sponsors/CURENT_Logo_Transparent.png +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/docs/source/images/sponsors/CURENT_Logo_Transparent_Name.png +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/docs/source/images/sponsors/doe.png +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/docs/source/index.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/docs/source/modeling/example.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/docs/source/modeling/index.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/docs/source/modeling/model.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/docs/source/modeling/routine.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/docs/source/modeling/system.rst +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ltbams.egg-info/SOURCES.txt +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ltbams.egg-info/dependency_links.txt +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ltbams.egg-info/entry_points.txt +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ltbams.egg-info/requires.txt +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/ltbams.egg-info/top_level.txt +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/pyproject.toml +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/requirements-dev.txt +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/requirements.txt +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/setup.cfg +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/setup.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/tests/test_1st_system.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/tests/test_addressing.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/tests/test_case.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/tests/test_cli.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/tests/test_export_csv.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/tests/test_group.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/tests/test_interface.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/tests/test_io.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/tests/test_jumper.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/tests/test_known_good.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/tests/test_model.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/tests/test_omodel.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/tests/test_paths.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/tests/test_report.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/tests/test_repr.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/tests/test_routine.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/tests/test_rtn_acopf.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/tests/test_rtn_dcopf.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/tests/test_rtn_ed.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/tests/test_rtn_opf.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/tests/test_rtn_pflow.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/tests/test_rtn_pypower.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/tests/test_rtn_rted.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/tests/test_rtn_uc.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/tests/test_service.py +0 -0
- {ltbams-1.0.13 → ltbams-1.0.15}/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.15
|
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,12 +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
|
-
|
59
|
-
<img src="docs/source/images/sponsors/CURENT_Logo_NameOnTrans.png" alt="CURENT ERC Logo" width="300" height="auto">
|
60
|
+
[](https://github.com/pyOpenSci/software-review/issues/174)
|
60
61
|
|
61
62
|
| Badges | | |
|
62
63
|
|---|---|---|
|
@@ -66,16 +67,16 @@ Python Software for Power System Scheduling Modeling and Co-Simulation with Dyna
|
|
66
67
|
| Tag | [](https://github.com/CURENT/ams/tags) |  |
|
67
68
|
| Documentation | [](https://ltb.readthedocs.io/projects/ams/en/stable/?badge=stable) | [](https://ltb.readthedocs.io/projects/ams/en/develop/?badge=develop) |
|
68
69
|
| Download | [](https://pypi.org/project/ltbams/) | [](https://anaconda.org/conda-forge/ltbams) |
|
69
|
-
|
|
70
|
-
|
|
70
|
+
| Quality |  | [](https://codebeat.co/projects/github-com-curent-ams-master) |
|
71
|
+
| Coverage |  |  |
|
71
72
|
| Last Commit |  |  |
|
72
|
-
| CI | [](https://github.com/CURENT/ams/actions/workflows/compatibility.yml) | [](https://github.com/CURENT/ams/actions/workflows/publish-pypi.yml) |
|
73
|
+
| CI | [](https://github.com/CURENT/ams/actions/workflows/compatibility.yml) | [](https://dev.azure.com/curentltb/ams/_build/latest?definitionId=2&branchName=master) |
|
74
|
+
| 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
75
|
| Structure | [](https://mango-dune-07a8b7110.1.azurestaticapps.net/?repo=CURENT%2Fams) | [](https://deepwiki.com/CURENT/ams) |
|
75
76
|
| Dependency | [](https://libraries.io/pypi/ltbams) | |
|
76
77
|
| Try on Binder | [](https://mybinder.org/v2/gh/curent/ams/master) | |
|
77
78
|
|
78
|
-
|
79
|
+
## Why AMS
|
79
80
|
|
80
81
|
AMS facilitates **Dynamics Incorporated Scheduling** and **Scheduling-Dynamics Co-Simulation**
|
81
82
|
through an integrated interface with ANDES.
|
@@ -150,9 +151,9 @@ Use the following resources to get involved.
|
|
150
151
|
- Read release notes highlighted [here][release notes]
|
151
152
|
- Try in Jupyter Notebook on [Binder][Binder]
|
152
153
|
- Check out the source code used for [benchmark][benchmark]
|
153
|
-
- Check out and
|
154
|
+
- Check out and cite our [paper][paper]
|
154
155
|
|
155
|
-
|
156
|
+
## Installation
|
156
157
|
|
157
158
|
AMS is released as ``ltbams`` on PyPI and conda-forge.
|
158
159
|
Install from PyPI using pip:
|
@@ -191,11 +192,11 @@ pip install git+https://github.com/CURENT/ams.git
|
|
191
192
|
- `cvxpy` is distributed with the open source solvers CLARABEL, OSQP, and SCS, but MIP-capable solvers need separate installation
|
192
193
|
- `cvxpy` versions **below 1.5** are incompatible with `numpy` versions **2.0 and above**
|
193
194
|
- 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
|
195
|
+
- 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
196
|
- Versions **1.0.0** and **1.0.1** are only available on PyPI
|
196
197
|
- Version **0.9.9** has known issues and has been yanked from PyPI
|
197
198
|
|
198
|
-
|
199
|
+
## Example Usage
|
199
200
|
|
200
201
|
```python
|
201
202
|
import ams
|
@@ -216,12 +217,15 @@ sa
|
|
216
217
|
>>> <andes.system.System at 0x14bd98190>
|
217
218
|
```
|
218
219
|
|
219
|
-
|
220
|
+
Here, RTED stands for Real-Time Economic Dispatch.
|
221
|
+
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).
|
222
|
+
|
223
|
+
## Citing AMS
|
220
224
|
If you use AMS for research or consulting, please cite the following paper in your publication that uses AMS:
|
221
225
|
|
222
226
|
> 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
227
|
|
224
|
-
|
228
|
+
## Sponsors and Contributors
|
225
229
|
AMS is the scheduling simulation engine for the CURENT Largescale Testbed (LTB).
|
226
230
|
More information about CURENT LTB can be found at the [LTB Repository][LTB Repository].
|
227
231
|
|
@@ -232,16 +236,9 @@ This work was supported in part by the Advanced Grid Research and Development Pr
|
|
232
236
|
|
233
237
|
See [GitHub contributors][GitHub contributors] for the contributor list.
|
234
238
|
|
235
|
-
|
239
|
+
## License
|
236
240
|
AMS is licensed under the [GPL v3 License](./LICENSE).
|
237
241
|
|
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
242
|
* * *
|
246
243
|
|
247
244
|
[GitHub releases]: https://github.com/CURENT/ams/releases
|
@@ -1,11 +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
|
-
|
8
|
-
<img src="docs/source/images/sponsors/CURENT_Logo_NameOnTrans.png" alt="CURENT ERC Logo" width="300" height="auto">
|
9
|
+
[](https://github.com/pyOpenSci/software-review/issues/174)
|
9
10
|
|
10
11
|
| Badges | | |
|
11
12
|
|---|---|---|
|
@@ -15,16 +16,16 @@ Python Software for Power System Scheduling Modeling and Co-Simulation with Dyna
|
|
15
16
|
| Tag | [](https://github.com/CURENT/ams/tags) |  |
|
16
17
|
| Documentation | [](https://ltb.readthedocs.io/projects/ams/en/stable/?badge=stable) | [](https://ltb.readthedocs.io/projects/ams/en/develop/?badge=develop) |
|
17
18
|
| Download | [](https://pypi.org/project/ltbams/) | [](https://anaconda.org/conda-forge/ltbams) |
|
18
|
-
|
|
19
|
-
|
|
19
|
+
| Quality |  | [](https://codebeat.co/projects/github-com-curent-ams-master) |
|
20
|
+
| Coverage |  |  |
|
20
21
|
| Last Commit |  |  |
|
21
|
-
| CI | [](https://github.com/CURENT/ams/actions/workflows/compatibility.yml) | [](https://github.com/CURENT/ams/actions/workflows/publish-pypi.yml) |
|
22
|
+
| CI | [](https://github.com/CURENT/ams/actions/workflows/compatibility.yml) | [](https://dev.azure.com/curentltb/ams/_build/latest?definitionId=2&branchName=master) |
|
23
|
+
| 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
24
|
| Structure | [](https://mango-dune-07a8b7110.1.azurestaticapps.net/?repo=CURENT%2Fams) | [](https://deepwiki.com/CURENT/ams) |
|
24
25
|
| Dependency | [](https://libraries.io/pypi/ltbams) | |
|
25
26
|
| Try on Binder | [](https://mybinder.org/v2/gh/curent/ams/master) | |
|
26
27
|
|
27
|
-
|
28
|
+
## Why AMS
|
28
29
|
|
29
30
|
AMS facilitates **Dynamics Incorporated Scheduling** and **Scheduling-Dynamics Co-Simulation**
|
30
31
|
through an integrated interface with ANDES.
|
@@ -99,9 +100,9 @@ Use the following resources to get involved.
|
|
99
100
|
- Read release notes highlighted [here][release notes]
|
100
101
|
- Try in Jupyter Notebook on [Binder][Binder]
|
101
102
|
- Check out the source code used for [benchmark][benchmark]
|
102
|
-
- Check out and
|
103
|
+
- Check out and cite our [paper][paper]
|
103
104
|
|
104
|
-
|
105
|
+
## Installation
|
105
106
|
|
106
107
|
AMS is released as ``ltbams`` on PyPI and conda-forge.
|
107
108
|
Install from PyPI using pip:
|
@@ -140,11 +141,11 @@ pip install git+https://github.com/CURENT/ams.git
|
|
140
141
|
- `cvxpy` is distributed with the open source solvers CLARABEL, OSQP, and SCS, but MIP-capable solvers need separate installation
|
141
142
|
- `cvxpy` versions **below 1.5** are incompatible with `numpy` versions **2.0 and above**
|
142
143
|
- 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
|
144
|
+
- 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
145
|
- Versions **1.0.0** and **1.0.1** are only available on PyPI
|
145
146
|
- Version **0.9.9** has known issues and has been yanked from PyPI
|
146
147
|
|
147
|
-
|
148
|
+
## Example Usage
|
148
149
|
|
149
150
|
```python
|
150
151
|
import ams
|
@@ -165,12 +166,15 @@ sa
|
|
165
166
|
>>> <andes.system.System at 0x14bd98190>
|
166
167
|
```
|
167
168
|
|
168
|
-
|
169
|
+
Here, RTED stands for Real-Time Economic Dispatch.
|
170
|
+
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).
|
171
|
+
|
172
|
+
## Citing AMS
|
169
173
|
If you use AMS for research or consulting, please cite the following paper in your publication that uses AMS:
|
170
174
|
|
171
175
|
> 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
176
|
|
173
|
-
|
177
|
+
## Sponsors and Contributors
|
174
178
|
AMS is the scheduling simulation engine for the CURENT Largescale Testbed (LTB).
|
175
179
|
More information about CURENT LTB can be found at the [LTB Repository][LTB Repository].
|
176
180
|
|
@@ -181,16 +185,9 @@ This work was supported in part by the Advanced Grid Research and Development Pr
|
|
181
185
|
|
182
186
|
See [GitHub contributors][GitHub contributors] for the contributor list.
|
183
187
|
|
184
|
-
|
188
|
+
## License
|
185
189
|
AMS is licensed under the [GPL v3 License](./LICENSE).
|
186
190
|
|
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
191
|
* * *
|
195
192
|
|
196
193
|
[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-
|
11
|
+
"date": "2025-09-28T19:06:51-0700",
|
12
12
|
"dirty": false,
|
13
13
|
"error": null,
|
14
|
-
"full-revisionid": "
|
15
|
-
"version": "1.0.
|
14
|
+
"full-revisionid": "ae8b4bef43d5202301b5ec84628d164420473a2f",
|
15
|
+
"version": "1.0.15"
|
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
|