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.
Files changed (182) hide show
  1. {ltbams-1.0.13/ltbams.egg-info → ltbams-1.0.14}/PKG-INFO +18 -22
  2. {ltbams-1.0.13 → ltbams-1.0.14}/README.md +17 -21
  3. {ltbams-1.0.13 → ltbams-1.0.14}/ams/_version.py +3 -3
  4. {ltbams-1.0.13 → ltbams-1.0.14}/ams/cli.py +2 -7
  5. {ltbams-1.0.13 → ltbams-1.0.14}/ams/core/common.py +7 -3
  6. {ltbams-1.0.13 → ltbams-1.0.14}/ams/core/documenter.py +2 -1
  7. {ltbams-1.0.13 → ltbams-1.0.14}/ams/core/matprocessor.py +4 -4
  8. {ltbams-1.0.13 → ltbams-1.0.14}/ams/core/model.py +14 -6
  9. {ltbams-1.0.13 → ltbams-1.0.14}/ams/core/param.py +5 -3
  10. {ltbams-1.0.13 → ltbams-1.0.14}/ams/core/symprocessor.py +8 -2
  11. {ltbams-1.0.13 → ltbams-1.0.14}/ams/core/var.py +1 -1
  12. {ltbams-1.0.13 → ltbams-1.0.14}/ams/extension/eva.py +11 -7
  13. {ltbams-1.0.13 → ltbams-1.0.14}/ams/interface.py +7 -7
  14. {ltbams-1.0.13 → ltbams-1.0.14}/ams/io/json.py +20 -16
  15. {ltbams-1.0.13 → ltbams-1.0.14}/ams/io/matpower.py +6 -6
  16. {ltbams-1.0.13 → ltbams-1.0.14}/ams/io/psse.py +2 -1
  17. {ltbams-1.0.13 → ltbams-1.0.14}/ams/io/xlsx.py +21 -16
  18. {ltbams-1.0.13 → ltbams-1.0.14}/ams/main.py +53 -45
  19. {ltbams-1.0.13 → ltbams-1.0.14}/ams/models/distributed/esd1.py +4 -7
  20. {ltbams-1.0.13 → ltbams-1.0.14}/ams/models/distributed/ev.py +10 -6
  21. {ltbams-1.0.13 → ltbams-1.0.14}/ams/models/distributed/pvd1.py +4 -7
  22. {ltbams-1.0.13 → ltbams-1.0.14}/ams/models/group.py +17 -18
  23. {ltbams-1.0.13 → ltbams-1.0.14}/ams/models/renewable/regc.py +14 -22
  24. {ltbams-1.0.13 → ltbams-1.0.14}/ams/models/timeslot.py +30 -0
  25. {ltbams-1.0.13 → ltbams-1.0.14}/ams/models/zone.py +2 -4
  26. {ltbams-1.0.13 → ltbams-1.0.14}/ams/opt/optzbase.py +4 -3
  27. {ltbams-1.0.13 → ltbams-1.0.14}/ams/report.py +2 -7
  28. {ltbams-1.0.13 → ltbams-1.0.14}/ams/routines/dcopf.py +7 -4
  29. {ltbams-1.0.13 → ltbams-1.0.14}/ams/routines/dcopf2.py +14 -4
  30. {ltbams-1.0.13 → ltbams-1.0.14}/ams/routines/dopf.py +2 -2
  31. {ltbams-1.0.13 → ltbams-1.0.14}/ams/routines/ed.py +5 -5
  32. {ltbams-1.0.13 → ltbams-1.0.14}/ams/routines/pflow.py +1 -1
  33. {ltbams-1.0.13 → ltbams-1.0.14}/ams/routines/routine.py +8 -1
  34. {ltbams-1.0.13 → ltbams-1.0.14}/ams/routines/rted.py +5 -5
  35. {ltbams-1.0.13 → ltbams-1.0.14}/ams/routines/uc.py +2 -2
  36. {ltbams-1.0.13 → ltbams-1.0.14}/ams/shared.py +69 -0
  37. {ltbams-1.0.13 → ltbams-1.0.14}/ams/system.py +93 -18
  38. {ltbams-1.0.13 → ltbams-1.0.14}/ams/utils/paths.py +6 -10
  39. {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/genroutineref.py +12 -0
  40. {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/release-notes.rst +6 -0
  41. {ltbams-1.0.13 → ltbams-1.0.14/ltbams.egg-info}/PKG-INFO +18 -22
  42. {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_export_json.py +2 -2
  43. {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_matp.py +1 -1
  44. {ltbams-1.0.13 → ltbams-1.0.14}/CONTRIBUTING.rst +0 -0
  45. {ltbams-1.0.13 → ltbams-1.0.14}/LICENSE +0 -0
  46. {ltbams-1.0.13 → ltbams-1.0.14}/MANIFEST.in +0 -0
  47. {ltbams-1.0.13 → ltbams-1.0.14}/ams/__init__.py +0 -0
  48. {ltbams-1.0.13 → ltbams-1.0.14}/ams/__main__.py +0 -0
  49. {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/5bus/pjm5bus_demo.json +0 -0
  50. {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/5bus/pjm5bus_demo.xlsx +0 -0
  51. {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/5bus/pjm5bus_ev.xlsx +0 -0
  52. {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/5bus/pjm5bus_jumper.xlsx +0 -0
  53. {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/hawaii40/Hawaii40.m +0 -0
  54. {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/ieee123/ieee123.xlsx +0 -0
  55. {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/ieee123/ieee123_regcv1.xlsx +0 -0
  56. {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/ieee14/ieee14.json +0 -0
  57. {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/ieee14/ieee14.raw +0 -0
  58. {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/ieee14/ieee14_conn.xlsx +0 -0
  59. {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/ieee14/ieee14_uced.xlsx +0 -0
  60. {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/ieee39/ieee39.xlsx +0 -0
  61. {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/ieee39/ieee39_uced.xlsx +0 -0
  62. {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/ieee39/ieee39_uced_esd1.xlsx +0 -0
  63. {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/ieee39/ieee39_uced_pvd1.xlsx +0 -0
  64. {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/ieee39/ieee39_uced_vis.xlsx +0 -0
  65. {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/matpower/benchmark.json +0 -0
  66. {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/matpower/case118.m +0 -0
  67. {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/matpower/case14.m +0 -0
  68. {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/matpower/case300.m +0 -0
  69. {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/matpower/case39.m +0 -0
  70. {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/matpower/case5.m +0 -0
  71. {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/matpower/case_ACTIVSg2000.m +0 -0
  72. {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/npcc/npcc.m +0 -0
  73. {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/npcc/npcc_uced.xlsx +0 -0
  74. {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/pglib/pglib_opf_case39_epri__api.m +0 -0
  75. {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/wecc/wecc.m +0 -0
  76. {ltbams-1.0.13 → ltbams-1.0.14}/ams/cases/wecc/wecc_uced.xlsx +0 -0
  77. {ltbams-1.0.13 → ltbams-1.0.14}/ams/core/__init__.py +0 -0
  78. {ltbams-1.0.13 → ltbams-1.0.14}/ams/core/service.py +0 -0
  79. {ltbams-1.0.13 → ltbams-1.0.14}/ams/extension/__init__.py +0 -0
  80. {ltbams-1.0.13 → ltbams-1.0.14}/ams/io/__init__.py +0 -0
  81. {ltbams-1.0.13 → ltbams-1.0.14}/ams/io/pypower.py +0 -0
  82. {ltbams-1.0.13 → ltbams-1.0.14}/ams/models/__init__.py +0 -0
  83. {ltbams-1.0.13 → ltbams-1.0.14}/ams/models/area.py +0 -0
  84. {ltbams-1.0.13 → ltbams-1.0.14}/ams/models/bus.py +0 -0
  85. {ltbams-1.0.13 → ltbams-1.0.14}/ams/models/cost.py +0 -0
  86. {ltbams-1.0.13 → ltbams-1.0.14}/ams/models/distributed/__init__.py +0 -0
  87. {ltbams-1.0.13 → ltbams-1.0.14}/ams/models/info.py +0 -0
  88. {ltbams-1.0.13 → ltbams-1.0.14}/ams/models/line.py +0 -0
  89. {ltbams-1.0.13 → ltbams-1.0.14}/ams/models/renewable/__init__.py +0 -0
  90. {ltbams-1.0.13 → ltbams-1.0.14}/ams/models/reserve.py +0 -0
  91. {ltbams-1.0.13 → ltbams-1.0.14}/ams/models/shunt.py +0 -0
  92. {ltbams-1.0.13 → ltbams-1.0.14}/ams/models/static/__init__.py +0 -0
  93. {ltbams-1.0.13 → ltbams-1.0.14}/ams/models/static/gen.py +0 -0
  94. {ltbams-1.0.13 → ltbams-1.0.14}/ams/models/static/pq.py +0 -0
  95. {ltbams-1.0.13 → ltbams-1.0.14}/ams/opt/__init__.py +0 -0
  96. {ltbams-1.0.13 → ltbams-1.0.14}/ams/opt/constraint.py +0 -0
  97. {ltbams-1.0.13 → ltbams-1.0.14}/ams/opt/exprcalc.py +0 -0
  98. {ltbams-1.0.13 → ltbams-1.0.14}/ams/opt/expression.py +0 -0
  99. {ltbams-1.0.13 → ltbams-1.0.14}/ams/opt/objective.py +0 -0
  100. {ltbams-1.0.13 → ltbams-1.0.14}/ams/opt/omodel.py +0 -0
  101. {ltbams-1.0.13 → ltbams-1.0.14}/ams/opt/param.py +0 -0
  102. {ltbams-1.0.13 → ltbams-1.0.14}/ams/opt/var.py +0 -0
  103. {ltbams-1.0.13 → ltbams-1.0.14}/ams/routines/__init__.py +0 -0
  104. {ltbams-1.0.13 → ltbams-1.0.14}/ams/routines/acopf.py +0 -0
  105. {ltbams-1.0.13 → ltbams-1.0.14}/ams/routines/dcpf.py +0 -0
  106. {ltbams-1.0.13 → ltbams-1.0.14}/ams/routines/grbopt.py +0 -0
  107. {ltbams-1.0.13 → ltbams-1.0.14}/ams/routines/pypower.py +0 -0
  108. {ltbams-1.0.13 → ltbams-1.0.14}/ams/routines/type.py +0 -0
  109. {ltbams-1.0.13 → ltbams-1.0.14}/ams/utils/__init__.py +0 -0
  110. {ltbams-1.0.13 → ltbams-1.0.14}/ams/utils/misc.py +0 -0
  111. {ltbams-1.0.13 → ltbams-1.0.14}/docs/Makefile +0 -0
  112. {ltbams-1.0.13 → ltbams-1.0.14}/docs/make.bat +0 -0
  113. {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/_templates/autosummary/base.rst +0 -0
  114. {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/_templates/autosummary/class.rst +0 -0
  115. {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/_templates/autosummary/module.rst +0 -0
  116. {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/_templates/autosummary/module_toctree.rst +0 -0
  117. {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/api.rst +0 -0
  118. {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/conf.py +0 -0
  119. {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/examples/index.rst +0 -0
  120. {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/genmodelref.py +0 -0
  121. {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/getting_started/copyright.rst +0 -0
  122. {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/getting_started/formats/index.rst +0 -0
  123. {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/getting_started/formats/matpower.rst +0 -0
  124. {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/getting_started/formats/psse.rst +0 -0
  125. {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/getting_started/formats/pypower.rst +0 -0
  126. {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/getting_started/formats/xlsx.png +0 -0
  127. {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/getting_started/formats/xlsx.rst +0 -0
  128. {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/getting_started/index.rst +0 -0
  129. {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/getting_started/install.rst +0 -0
  130. {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/getting_started/overview.rst +0 -0
  131. {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/getting_started/testcase.rst +0 -0
  132. {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/getting_started/verification.rst +0 -0
  133. {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/images/curent.ico +0 -0
  134. {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/images/dcopf_time.png +0 -0
  135. {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/images/educ_pie.png +0 -0
  136. {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/images/sponsors/CURENT_Logo_NameOnTrans.png +0 -0
  137. {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/images/sponsors/CURENT_Logo_Transparent.png +0 -0
  138. {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/images/sponsors/CURENT_Logo_Transparent_Name.png +0 -0
  139. {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/images/sponsors/doe.png +0 -0
  140. {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/index.rst +0 -0
  141. {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/modeling/example.rst +0 -0
  142. {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/modeling/index.rst +0 -0
  143. {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/modeling/model.rst +0 -0
  144. {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/modeling/routine.rst +0 -0
  145. {ltbams-1.0.13 → ltbams-1.0.14}/docs/source/modeling/system.rst +0 -0
  146. {ltbams-1.0.13 → ltbams-1.0.14}/ltbams.egg-info/SOURCES.txt +0 -0
  147. {ltbams-1.0.13 → ltbams-1.0.14}/ltbams.egg-info/dependency_links.txt +0 -0
  148. {ltbams-1.0.13 → ltbams-1.0.14}/ltbams.egg-info/entry_points.txt +0 -0
  149. {ltbams-1.0.13 → ltbams-1.0.14}/ltbams.egg-info/requires.txt +0 -0
  150. {ltbams-1.0.13 → ltbams-1.0.14}/ltbams.egg-info/top_level.txt +0 -0
  151. {ltbams-1.0.13 → ltbams-1.0.14}/pyproject.toml +0 -0
  152. {ltbams-1.0.13 → ltbams-1.0.14}/requirements-dev.txt +0 -0
  153. {ltbams-1.0.13 → ltbams-1.0.14}/requirements.txt +0 -0
  154. {ltbams-1.0.13 → ltbams-1.0.14}/setup.cfg +0 -0
  155. {ltbams-1.0.13 → ltbams-1.0.14}/setup.py +0 -0
  156. {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_1st_system.py +0 -0
  157. {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_addressing.py +0 -0
  158. {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_case.py +0 -0
  159. {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_cli.py +0 -0
  160. {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_export_csv.py +0 -0
  161. {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_group.py +0 -0
  162. {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_interface.py +0 -0
  163. {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_io.py +0 -0
  164. {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_jumper.py +0 -0
  165. {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_known_good.py +0 -0
  166. {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_model.py +0 -0
  167. {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_omodel.py +0 -0
  168. {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_paths.py +0 -0
  169. {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_report.py +0 -0
  170. {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_repr.py +0 -0
  171. {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_routine.py +0 -0
  172. {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_rtn_acopf.py +0 -0
  173. {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_rtn_dcopf.py +0 -0
  174. {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_rtn_dcopf2.py +0 -0
  175. {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_rtn_ed.py +0 -0
  176. {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_rtn_opf.py +0 -0
  177. {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_rtn_pflow.py +0 -0
  178. {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_rtn_pypower.py +0 -0
  179. {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_rtn_rted.py +0 -0
  180. {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_rtn_uc.py +0 -0
  181. {ltbams-1.0.13 → ltbams-1.0.14}/tests/test_service.py +0 -0
  182. {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.13
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
  ![License: GPL-3.0](https://img.shields.io/badge/License-GPL--3.0-blue.svg)
57
59
  [![DOI:10.1109/TSTE.2025.3528027](https://zenodo.org/badge/DOI/10.1109/TSTE.2025.3528027.svg)](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 | ![Project Status: Active](https://www.repostatus.org/badges/latest/active.svg) | ![Repo Size](https://img.shields.io/github/repo-size/CURENT/ams) |
@@ -66,16 +66,16 @@ Python Software for Power System Scheduling Modeling and Co-Simulation with Dyna
66
66
  | Tag | [![GitHub Tag](https://img.shields.io/github/v/tag/CURENT/ams)](https://github.com/CURENT/ams/tags) | ![GitHub commits since latest release (branch)](https://img.shields.io/github/commits-since/curent/ams/latest/develop) |
67
67
  | Documentation | [![Read the Docs](https://img.shields.io/readthedocs/ams?label=stable)](https://ltb.readthedocs.io/projects/ams/en/stable/?badge=stable) | [![Read the Docs](https://img.shields.io/readthedocs/ams?label=develop)](https://ltb.readthedocs.io/projects/ams/en/develop/?badge=develop) |
68
68
  | Download | [![PyPI - Downloads](https://img.shields.io/pypi/dm/ltbams)](https://pypi.org/project/ltbams/) | [![Anaconda-Server Badge](https://anaconda.org/conda-forge/ltbams/badges/downloads.svg)](https://anaconda.org/conda-forge/ltbams) |
69
- | Code Quality | ![Codacy Badge](https://app.codacy.com/project/badge/Grade/69456da1b8634f2f984bd769e35f0050) | ![Codacy Badge](https://app.codacy.com/project/badge/Coverage/69456da1b8634f2f984bd769e35f0050) |
70
- | Code Cov | ![codecov](https://codecov.io/gh/CURENT/ams/graph/badge.svg?token=RZI5GLLBQH) | |
69
+ | Quality | ![Codacy Badge](https://app.codacy.com/project/badge/Grade/69456da1b8634f2f984bd769e35f0050) | [![codebeat badge](https://codebeat.co/badges/6c8a53d2-cffd-4787-8c49-d59742a95205)](https://codebeat.co/projects/github-com-curent-ams-master) |
70
+ | Coverage | ![Codacy Badge](https://app.codacy.com/project/badge/Coverage/69456da1b8634f2f984bd769e35f0050) | ![codecov](https://codecov.io/gh/CURENT/ams/graph/badge.svg?token=RZI5GLLBQH) |
71
71
  | Last Commit | ![GitHub last commit (master)](https://img.shields.io/github/last-commit/CURENT/ams/master?label=last%20commit%20to%20master) | ![GitHub last commit (develop)](https://img.shields.io/github/last-commit/CURENT/ams/develop?label=last%20commit%20to%20develop) |
72
- | CI | [![Compatibility](https://github.com/CURENT/ams/actions/workflows/compatibility.yml/badge.svg)](https://github.com/CURENT/ams/actions/workflows/compatibility.yml) | [![Build Status](https://dev.azure.com/curentltb/ams/_apis/build/status%2FCURENT.ams?branchName=scuc)](https://dev.azure.com/curentltb/ams/_build/latest?definitionId=2&branchName=scuc) |
73
- | CD | [![Publish](https://github.com/CURENT/ams/actions/workflows/publish-pypi.yml/badge.svg)](https://github.com/CURENT/ams/actions/workflows/publish-pypi.yml) | |
72
+ | CI | [![Compatibility](https://github.com/CURENT/ams/actions/workflows/compatibility.yml/badge.svg)](https://github.com/CURENT/ams/actions/workflows/compatibility.yml) | [![Build Status](https://dev.azure.com/curentltb/ams/_apis/build/status%2FCURENT.ams?branchName=master)](https://dev.azure.com/curentltb/ams/_build/latest?definitionId=2&branchName=master) |
73
+ | CD | [![Publish](https://github.com/CURENT/ams/actions/workflows/publish-pypi.yml/badge.svg)](https://github.com/CURENT/ams/actions/workflows/publish-pypi.yml) | [![Build Status](https://dev.azure.com/conda-forge/feedstock-builds/_apis/build/status/ltbams-feedstock?branchName=main)](https://dev.azure.com/conda-forge/feedstock-builds/_build/latest?definitionId=21708&branchName=main) |
74
74
  | Structure | [![Structure](https://img.shields.io/badge/code_base-visualize-blue)](https://mango-dune-07a8b7110.1.azurestaticapps.net/?repo=CURENT%2Fams) | [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/CURENT/ams) |
75
75
  | Dependency | [![libraries](https://img.shields.io/librariesio/release/pypi/ltbams)](https://libraries.io/pypi/ltbams) | |
76
76
  | Try on Binder | [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/curent/ams/master) | |
77
77
 
78
- # Why AMS
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 and cite our [paper][paper]
153
+ - Check out and cite our [paper][paper]
154
154
 
155
- # Installation
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` is recommended to install via `conda` as sometimes ``pip`` struggles to set the correct path for compiled libraries, more detailes can be found in this closed issue [Bug with dependency kvxopt 1.3.2.0](https://github.com/CURENT/andes/issues/508)
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
- # Example Usage
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
- # Citing AMS
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
- # Sponsors and Contributors
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
- # License
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
  ![License: GPL-3.0](https://img.shields.io/badge/License-GPL--3.0-blue.svg)
6
8
  [![DOI:10.1109/TSTE.2025.3528027](https://zenodo.org/badge/DOI/10.1109/TSTE.2025.3528027.svg)](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 | ![Project Status: Active](https://www.repostatus.org/badges/latest/active.svg) | ![Repo Size](https://img.shields.io/github/repo-size/CURENT/ams) |
@@ -15,16 +15,16 @@ Python Software for Power System Scheduling Modeling and Co-Simulation with Dyna
15
15
  | Tag | [![GitHub Tag](https://img.shields.io/github/v/tag/CURENT/ams)](https://github.com/CURENT/ams/tags) | ![GitHub commits since latest release (branch)](https://img.shields.io/github/commits-since/curent/ams/latest/develop) |
16
16
  | Documentation | [![Read the Docs](https://img.shields.io/readthedocs/ams?label=stable)](https://ltb.readthedocs.io/projects/ams/en/stable/?badge=stable) | [![Read the Docs](https://img.shields.io/readthedocs/ams?label=develop)](https://ltb.readthedocs.io/projects/ams/en/develop/?badge=develop) |
17
17
  | Download | [![PyPI - Downloads](https://img.shields.io/pypi/dm/ltbams)](https://pypi.org/project/ltbams/) | [![Anaconda-Server Badge](https://anaconda.org/conda-forge/ltbams/badges/downloads.svg)](https://anaconda.org/conda-forge/ltbams) |
18
- | Code Quality | ![Codacy Badge](https://app.codacy.com/project/badge/Grade/69456da1b8634f2f984bd769e35f0050) | ![Codacy Badge](https://app.codacy.com/project/badge/Coverage/69456da1b8634f2f984bd769e35f0050) |
19
- | Code Cov | ![codecov](https://codecov.io/gh/CURENT/ams/graph/badge.svg?token=RZI5GLLBQH) | |
18
+ | Quality | ![Codacy Badge](https://app.codacy.com/project/badge/Grade/69456da1b8634f2f984bd769e35f0050) | [![codebeat badge](https://codebeat.co/badges/6c8a53d2-cffd-4787-8c49-d59742a95205)](https://codebeat.co/projects/github-com-curent-ams-master) |
19
+ | Coverage | ![Codacy Badge](https://app.codacy.com/project/badge/Coverage/69456da1b8634f2f984bd769e35f0050) | ![codecov](https://codecov.io/gh/CURENT/ams/graph/badge.svg?token=RZI5GLLBQH) |
20
20
  | Last Commit | ![GitHub last commit (master)](https://img.shields.io/github/last-commit/CURENT/ams/master?label=last%20commit%20to%20master) | ![GitHub last commit (develop)](https://img.shields.io/github/last-commit/CURENT/ams/develop?label=last%20commit%20to%20develop) |
21
- | CI | [![Compatibility](https://github.com/CURENT/ams/actions/workflows/compatibility.yml/badge.svg)](https://github.com/CURENT/ams/actions/workflows/compatibility.yml) | [![Build Status](https://dev.azure.com/curentltb/ams/_apis/build/status%2FCURENT.ams?branchName=scuc)](https://dev.azure.com/curentltb/ams/_build/latest?definitionId=2&branchName=scuc) |
22
- | CD | [![Publish](https://github.com/CURENT/ams/actions/workflows/publish-pypi.yml/badge.svg)](https://github.com/CURENT/ams/actions/workflows/publish-pypi.yml) | |
21
+ | CI | [![Compatibility](https://github.com/CURENT/ams/actions/workflows/compatibility.yml/badge.svg)](https://github.com/CURENT/ams/actions/workflows/compatibility.yml) | [![Build Status](https://dev.azure.com/curentltb/ams/_apis/build/status%2FCURENT.ams?branchName=master)](https://dev.azure.com/curentltb/ams/_build/latest?definitionId=2&branchName=master) |
22
+ | CD | [![Publish](https://github.com/CURENT/ams/actions/workflows/publish-pypi.yml/badge.svg)](https://github.com/CURENT/ams/actions/workflows/publish-pypi.yml) | [![Build Status](https://dev.azure.com/conda-forge/feedstock-builds/_apis/build/status/ltbams-feedstock?branchName=main)](https://dev.azure.com/conda-forge/feedstock-builds/_build/latest?definitionId=21708&branchName=main) |
23
23
  | Structure | [![Structure](https://img.shields.io/badge/code_base-visualize-blue)](https://mango-dune-07a8b7110.1.azurestaticapps.net/?repo=CURENT%2Fams) | [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/CURENT/ams) |
24
24
  | Dependency | [![libraries](https://img.shields.io/librariesio/release/pypi/ltbams)](https://libraries.io/pypi/ltbams) | |
25
25
  | Try on Binder | [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/curent/ams/master) | |
26
26
 
27
- # Why AMS
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 and cite our [paper][paper]
102
+ - Check out and cite our [paper][paper]
103
103
 
104
- # Installation
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` is recommended to install via `conda` as sometimes ``pip`` struggles to set the correct path for compiled libraries, more detailes can be found in this closed issue [Bug with dependency kvxopt 1.3.2.0](https://github.com/CURENT/andes/issues/508)
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
- # Example Usage
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
- # Citing AMS
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
- # Sponsors and Contributors
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
- # License
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-18T15:13:43-0700",
11
+ "date": "2025-08-31T23:37:40-0700",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "1aab83cb951d517c906fe117499d482da8b6e66b",
15
- "version": "1.0.13"
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 AndesConfig
3
+ from andes.core.common import Config as adConfig
4
4
 
5
5
  logger = logging.getLogger(__name__)
6
6
 
7
7
 
8
- class Config(AndesConfig):
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):
@@ -13,7 +13,8 @@ logger = logging.getLogger(__name__)
13
13
 
14
14
  class Documenter:
15
15
  """
16
- Helper class for documenting models.
16
+ Helper class for documenting models, inspired by
17
+ `andes.core.documenter.Documenter`.
17
18
 
18
19
  Parameters
19
20
  ----------
@@ -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' row names and col names are assigned in `System.setup()`.
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
- New in version 0.9.14: Added the signature `attr` to alter specific attributes.
239
- This feature is useful when you need to manipulate parameter values in the system
240
- base and ensure that these changes are reflected in the dumped case file.
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
- This module is revised from ``andes.core.symprocessor``.
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
@@ -14,7 +14,7 @@ class Algeb:
14
14
  """
15
15
  Algebraic variable class.
16
16
 
17
- This class is simplified from ``andes.core.var.Algeb``.
17
+ Simplified from `andes.core.var.Algeb`.
18
18
  """
19
19
 
20
20
  def __init__(self,
@@ -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
- 1. Power flow models in the addfile will be skipped and only dynamic models will be used.
181
- 2. The addfile format is guessed based on the file extension. Currently only ``xlsx`` is supported.
182
- 3. Index in the addfile is automatically adjusted when necessary.
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
- 1. Using the file conversion ``to_andes()`` will automatically
450
- link the AMS system to the converted ANDES system in the
451
- attribute ``dyn``.
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
- 1. AGC power reference ``paux`` is not included in this function.
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 empty_adsys, ad_models
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
- Revise function ``andes.io.json.write`` to skip non-andes models.
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
- if skip_empty and instance.n == 0:
71
+ df = model2df(instance, skip_empty, to_andes=to_andes)
72
+ if df is None:
68
73
  continue
69
- if to_andes:
70
- if name not in ad_models:
71
- continue
72
- # NOTE: ommit parameters that are not in ANDES
73
- skip_params = []
74
- ams_params = list(instance.params.keys())
75
- andes_params = list(empty_adsys.models[name].params.keys())
76
- skip_params = list(set(ams_params) - set(andes_params))
77
- df = instance.cache.df_in.drop(skip_params, axis=1, errors='ignore')
78
- out[name] = df.to_dict(orient=orient)
79
- else:
80
- df = instance.cache.df_in
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. It is revised from ``andes.io.matpower.m2mpc``.
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
- This function is revised from ``andes.io.matpower.system2mpc``.
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 ``andes.io.psse.read`` to complete model ``Zone`` when necessary.
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