ltbams 1.0.8__tar.gz → 1.0.9__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 (200) hide show
  1. {ltbams-1.0.8/ltbams.egg-info → ltbams-1.0.9}/PKG-INFO +3 -3
  2. {ltbams-1.0.8 → ltbams-1.0.9}/README.md +2 -2
  3. {ltbams-1.0.8 → ltbams-1.0.9}/ams/_version.py +3 -3
  4. {ltbams-1.0.8 → ltbams-1.0.9}/ams/io/matpower.py +170 -18
  5. {ltbams-1.0.8 → ltbams-1.0.9}/ams/io/pypower.py +14 -0
  6. {ltbams-1.0.8 → ltbams-1.0.9}/ams/models/group.py +0 -69
  7. {ltbams-1.0.8 → ltbams-1.0.9}/ams/report.py +3 -4
  8. {ltbams-1.0.8 → ltbams-1.0.9}/ams/shared.py +4 -1
  9. {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/getting_started/formats/matpower.rst +135 -0
  10. {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/getting_started/formats/pypower.rst +1 -2
  11. {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/release-notes.rst +8 -0
  12. {ltbams-1.0.8 → ltbams-1.0.9/ltbams.egg-info}/PKG-INFO +3 -3
  13. ltbams-1.0.9/tests/test_io.py +130 -0
  14. ltbams-1.0.8/tests/test_io.py +0 -56
  15. {ltbams-1.0.8 → ltbams-1.0.9}/CONTRIBUTING.rst +0 -0
  16. {ltbams-1.0.8 → ltbams-1.0.9}/LICENSE +0 -0
  17. {ltbams-1.0.8 → ltbams-1.0.9}/MANIFEST.in +0 -0
  18. {ltbams-1.0.8 → ltbams-1.0.9}/ams/__init__.py +0 -0
  19. {ltbams-1.0.8 → ltbams-1.0.9}/ams/__main__.py +0 -0
  20. {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/5bus/pjm5bus_demo.xlsx +0 -0
  21. {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/5bus/pjm5bus_ev.xlsx +0 -0
  22. {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/5bus/pjm5bus_jumper.xlsx +0 -0
  23. {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/hawaii40/Hawaii40.m +0 -0
  24. {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/ieee123/ieee123.xlsx +0 -0
  25. {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/ieee123/ieee123_regcv1.xlsx +0 -0
  26. {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/ieee14/ieee14.json +0 -0
  27. {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/ieee14/ieee14.raw +0 -0
  28. {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/ieee14/ieee14_conn.xlsx +0 -0
  29. {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/ieee14/ieee14_uced.xlsx +0 -0
  30. {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/ieee39/ieee39.xlsx +0 -0
  31. {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/ieee39/ieee39_uced.xlsx +0 -0
  32. {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/ieee39/ieee39_uced_esd1.xlsx +0 -0
  33. {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/ieee39/ieee39_uced_pvd1.xlsx +0 -0
  34. {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/ieee39/ieee39_uced_vis.xlsx +0 -0
  35. {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/matpower/benchmark.json +0 -0
  36. {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/matpower/case118.m +0 -0
  37. {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/matpower/case14.m +0 -0
  38. {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/matpower/case300.m +0 -0
  39. {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/matpower/case39.m +0 -0
  40. {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/matpower/case5.m +0 -0
  41. {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/matpower/case_ACTIVSg2000.m +0 -0
  42. {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/npcc/npcc.m +0 -0
  43. {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/npcc/npcc_uced.xlsx +0 -0
  44. {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/pglib/pglib_opf_case39_epri__api.m +0 -0
  45. {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/wecc/wecc.m +0 -0
  46. {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/wecc/wecc_uced.xlsx +0 -0
  47. {ltbams-1.0.8 → ltbams-1.0.9}/ams/cli.py +0 -0
  48. {ltbams-1.0.8 → ltbams-1.0.9}/ams/core/__init__.py +0 -0
  49. {ltbams-1.0.8 → ltbams-1.0.9}/ams/core/documenter.py +0 -0
  50. {ltbams-1.0.8 → ltbams-1.0.9}/ams/core/matprocessor.py +0 -0
  51. {ltbams-1.0.8 → ltbams-1.0.9}/ams/core/model.py +0 -0
  52. {ltbams-1.0.8 → ltbams-1.0.9}/ams/core/param.py +0 -0
  53. {ltbams-1.0.8 → ltbams-1.0.9}/ams/core/service.py +0 -0
  54. {ltbams-1.0.8 → ltbams-1.0.9}/ams/core/symprocessor.py +0 -0
  55. {ltbams-1.0.8 → ltbams-1.0.9}/ams/core/var.py +0 -0
  56. {ltbams-1.0.8 → ltbams-1.0.9}/ams/extension/__init__.py +0 -0
  57. {ltbams-1.0.8 → ltbams-1.0.9}/ams/extension/eva.py +0 -0
  58. {ltbams-1.0.8 → ltbams-1.0.9}/ams/interface.py +0 -0
  59. {ltbams-1.0.8 → ltbams-1.0.9}/ams/io/__init__.py +0 -0
  60. {ltbams-1.0.8 → ltbams-1.0.9}/ams/io/json.py +0 -0
  61. {ltbams-1.0.8 → ltbams-1.0.9}/ams/io/psse.py +0 -0
  62. {ltbams-1.0.8 → ltbams-1.0.9}/ams/io/xlsx.py +0 -0
  63. {ltbams-1.0.8 → ltbams-1.0.9}/ams/main.py +0 -0
  64. {ltbams-1.0.8 → ltbams-1.0.9}/ams/models/__init__.py +0 -0
  65. {ltbams-1.0.8 → ltbams-1.0.9}/ams/models/area.py +0 -0
  66. {ltbams-1.0.8 → ltbams-1.0.9}/ams/models/bus.py +0 -0
  67. {ltbams-1.0.8 → ltbams-1.0.9}/ams/models/cost.py +0 -0
  68. {ltbams-1.0.8 → ltbams-1.0.9}/ams/models/distributed/__init__.py +0 -0
  69. {ltbams-1.0.8 → ltbams-1.0.9}/ams/models/distributed/esd1.py +0 -0
  70. {ltbams-1.0.8 → ltbams-1.0.9}/ams/models/distributed/ev.py +0 -0
  71. {ltbams-1.0.8 → ltbams-1.0.9}/ams/models/distributed/pvd1.py +0 -0
  72. {ltbams-1.0.8 → ltbams-1.0.9}/ams/models/info.py +0 -0
  73. {ltbams-1.0.8 → ltbams-1.0.9}/ams/models/line.py +0 -0
  74. {ltbams-1.0.8 → ltbams-1.0.9}/ams/models/renewable/__init__.py +0 -0
  75. {ltbams-1.0.8 → ltbams-1.0.9}/ams/models/renewable/regc.py +0 -0
  76. {ltbams-1.0.8 → ltbams-1.0.9}/ams/models/reserve.py +0 -0
  77. {ltbams-1.0.8 → ltbams-1.0.9}/ams/models/shunt.py +0 -0
  78. {ltbams-1.0.8 → ltbams-1.0.9}/ams/models/static/__init__.py +0 -0
  79. {ltbams-1.0.8 → ltbams-1.0.9}/ams/models/static/gen.py +0 -0
  80. {ltbams-1.0.8 → ltbams-1.0.9}/ams/models/static/pq.py +0 -0
  81. {ltbams-1.0.8 → ltbams-1.0.9}/ams/models/timeslot.py +0 -0
  82. {ltbams-1.0.8 → ltbams-1.0.9}/ams/models/zone.py +0 -0
  83. {ltbams-1.0.8 → ltbams-1.0.9}/ams/opt/__init__.py +0 -0
  84. {ltbams-1.0.8 → ltbams-1.0.9}/ams/opt/constraint.py +0 -0
  85. {ltbams-1.0.8 → ltbams-1.0.9}/ams/opt/exprcalc.py +0 -0
  86. {ltbams-1.0.8 → ltbams-1.0.9}/ams/opt/expression.py +0 -0
  87. {ltbams-1.0.8 → ltbams-1.0.9}/ams/opt/objective.py +0 -0
  88. {ltbams-1.0.8 → ltbams-1.0.9}/ams/opt/omodel.py +0 -0
  89. {ltbams-1.0.8 → ltbams-1.0.9}/ams/opt/optzbase.py +0 -0
  90. {ltbams-1.0.8 → ltbams-1.0.9}/ams/opt/param.py +0 -0
  91. {ltbams-1.0.8 → ltbams-1.0.9}/ams/opt/var.py +0 -0
  92. {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/__init__.py +0 -0
  93. {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/_compat.py +0 -0
  94. {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/core/__init__.py +0 -0
  95. {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/core/pips.py +0 -0
  96. {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/core/ppoption.py +0 -0
  97. {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/core/ppver.py +0 -0
  98. {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/core/solver.py +0 -0
  99. {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/eps.py +0 -0
  100. {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/idx.py +0 -0
  101. {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/io.py +0 -0
  102. {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/make/__init__.py +0 -0
  103. {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/make/matrices.py +0 -0
  104. {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/make/pdv.py +0 -0
  105. {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/routines/__init__.py +0 -0
  106. {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/routines/cpf.py +0 -0
  107. {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/routines/cpf_callbacks.py +0 -0
  108. {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/routines/opf.py +0 -0
  109. {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/routines/opffcns.py +0 -0
  110. {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/routines/pflow.py +0 -0
  111. {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/toggle.py +0 -0
  112. {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/utils.py +0 -0
  113. {ltbams-1.0.8 → ltbams-1.0.9}/ams/routines/__init__.py +0 -0
  114. {ltbams-1.0.8 → ltbams-1.0.9}/ams/routines/acopf.py +0 -0
  115. {ltbams-1.0.8 → ltbams-1.0.9}/ams/routines/cpf.py +0 -0
  116. {ltbams-1.0.8 → ltbams-1.0.9}/ams/routines/dcopf.py +0 -0
  117. {ltbams-1.0.8 → ltbams-1.0.9}/ams/routines/dcopf2.py +0 -0
  118. {ltbams-1.0.8 → ltbams-1.0.9}/ams/routines/dcpf.py +0 -0
  119. {ltbams-1.0.8 → ltbams-1.0.9}/ams/routines/dcpf0.py +0 -0
  120. {ltbams-1.0.8 → ltbams-1.0.9}/ams/routines/dopf.py +0 -0
  121. {ltbams-1.0.8 → ltbams-1.0.9}/ams/routines/ed.py +0 -0
  122. {ltbams-1.0.8 → ltbams-1.0.9}/ams/routines/pflow.py +0 -0
  123. {ltbams-1.0.8 → ltbams-1.0.9}/ams/routines/pflow0.py +0 -0
  124. {ltbams-1.0.8 → ltbams-1.0.9}/ams/routines/routine.py +0 -0
  125. {ltbams-1.0.8 → ltbams-1.0.9}/ams/routines/rted.py +0 -0
  126. {ltbams-1.0.8 → ltbams-1.0.9}/ams/routines/type.py +0 -0
  127. {ltbams-1.0.8 → ltbams-1.0.9}/ams/routines/uc.py +0 -0
  128. {ltbams-1.0.8 → ltbams-1.0.9}/ams/system.py +0 -0
  129. {ltbams-1.0.8 → ltbams-1.0.9}/ams/utils/__init__.py +0 -0
  130. {ltbams-1.0.8 → ltbams-1.0.9}/ams/utils/misc.py +0 -0
  131. {ltbams-1.0.8 → ltbams-1.0.9}/ams/utils/paths.py +0 -0
  132. {ltbams-1.0.8 → ltbams-1.0.9}/docs/Makefile +0 -0
  133. {ltbams-1.0.8 → ltbams-1.0.9}/docs/make.bat +0 -0
  134. {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/_templates/autosummary/base.rst +0 -0
  135. {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/_templates/autosummary/class.rst +0 -0
  136. {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/_templates/autosummary/module.rst +0 -0
  137. {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/_templates/autosummary/module_toctree.rst +0 -0
  138. {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/api.rst +0 -0
  139. {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/conf.py +0 -0
  140. {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/examples/index.rst +0 -0
  141. {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/genmodelref.py +0 -0
  142. {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/genroutineref.py +0 -0
  143. {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/getting_started/copyright.rst +0 -0
  144. {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/getting_started/formats/index.rst +0 -0
  145. {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/getting_started/formats/psse.rst +0 -0
  146. {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/getting_started/formats/xlsx.png +0 -0
  147. {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/getting_started/formats/xlsx.rst +0 -0
  148. {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/getting_started/index.rst +0 -0
  149. {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/getting_started/install.rst +0 -0
  150. {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/getting_started/overview.rst +0 -0
  151. {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/getting_started/testcase.rst +0 -0
  152. {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/getting_started/verification.rst +0 -0
  153. {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/images/curent.ico +0 -0
  154. {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/images/dcopf_time.png +0 -0
  155. {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/images/sponsors/CURENT_Logo_NameOnTrans.png +0 -0
  156. {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/images/sponsors/CURENT_Logo_Transparent.png +0 -0
  157. {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/images/sponsors/CURENT_Logo_Transparent_Name.png +0 -0
  158. {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/images/sponsors/doe.png +0 -0
  159. {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/index.rst +0 -0
  160. {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/modeling/example.rst +0 -0
  161. {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/modeling/index.rst +0 -0
  162. {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/modeling/model.rst +0 -0
  163. {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/modeling/routine.rst +0 -0
  164. {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/modeling/system.rst +0 -0
  165. {ltbams-1.0.8 → ltbams-1.0.9}/ltbams.egg-info/SOURCES.txt +0 -0
  166. {ltbams-1.0.8 → ltbams-1.0.9}/ltbams.egg-info/dependency_links.txt +0 -0
  167. {ltbams-1.0.8 → ltbams-1.0.9}/ltbams.egg-info/entry_points.txt +0 -0
  168. {ltbams-1.0.8 → ltbams-1.0.9}/ltbams.egg-info/requires.txt +0 -0
  169. {ltbams-1.0.8 → ltbams-1.0.9}/ltbams.egg-info/top_level.txt +0 -0
  170. {ltbams-1.0.8 → ltbams-1.0.9}/pyproject.toml +0 -0
  171. {ltbams-1.0.8 → ltbams-1.0.9}/requirements-dev.txt +0 -0
  172. {ltbams-1.0.8 → ltbams-1.0.9}/requirements.txt +0 -0
  173. {ltbams-1.0.8 → ltbams-1.0.9}/setup.cfg +0 -0
  174. {ltbams-1.0.8 → ltbams-1.0.9}/setup.py +0 -0
  175. {ltbams-1.0.8 → ltbams-1.0.9}/tests/__init__.py +0 -0
  176. {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_1st_system.py +0 -0
  177. {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_addressing.py +0 -0
  178. {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_case.py +0 -0
  179. {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_cli.py +0 -0
  180. {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_export_csv.py +0 -0
  181. {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_group.py +0 -0
  182. {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_interface.py +0 -0
  183. {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_jumper.py +0 -0
  184. {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_known_good.py +0 -0
  185. {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_matp.py +0 -0
  186. {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_model.py +0 -0
  187. {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_omodel.py +0 -0
  188. {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_paths.py +0 -0
  189. {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_report.py +0 -0
  190. {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_repr.py +0 -0
  191. {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_routine.py +0 -0
  192. {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_rtn_dcopf.py +0 -0
  193. {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_rtn_dcopf2.py +0 -0
  194. {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_rtn_dcpf.py +0 -0
  195. {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_rtn_ed.py +0 -0
  196. {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_rtn_pflow.py +0 -0
  197. {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_rtn_rted.py +0 -0
  198. {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_rtn_uc.py +0 -0
  199. {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_service.py +0 -0
  200. {ltbams-1.0.8 → ltbams-1.0.9}/versioneer.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ltbams
3
- Version: 1.0.8
3
+ Version: 1.0.9
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
@@ -52,9 +52,9 @@ Python Software for Power System Scheduling Modeling and Co-Simulation with Dyna
52
52
 
53
53
  <img src="docs/source/images/sponsors/CURENT_Logo_NameOnTrans.png" alt="CURENT ERC Logo" width="300" height="auto">
54
54
 
55
- | | Stable | Latest |
55
+ | | Stable | Develop |
56
56
  |---------------|-----------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------|
57
- | Documentation | [![Documentation Status](https://readthedocs.org/projects/ams/badge/?version=stable)](https://ams.readthedocs.io/en/stable/?badge=stable) | [![Latest Documentation](https://readthedocs.org/projects/ams/badge/?version=latest)](https://ams.readthedocs.io/en/latest/?badge=latest) |
57
+ | Documentation | [![Documentation Status](https://readthedocs.org/projects/ams/badge/?version=stable)](https://ams.readthedocs.io/en/stable/?badge=stable) | [![Develop Documentation](https://readthedocs.org/projects/ams/badge/?version=develop)](https://ams.readthedocs.io/en/develop/?badge=develop) |
58
58
 
59
59
 
60
60
  | Badges | | |
@@ -24,9 +24,9 @@ Python Software for Power System Scheduling Modeling and Co-Simulation with Dyna
24
24
 
25
25
  <img src="docs/source/images/sponsors/CURENT_Logo_NameOnTrans.png" alt="CURENT ERC Logo" width="300" height="auto">
26
26
 
27
- | | Stable | Latest |
27
+ | | Stable | Develop |
28
28
  |---------------|-----------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------|
29
- | Documentation | [![Documentation Status](https://readthedocs.org/projects/ams/badge/?version=stable)](https://ams.readthedocs.io/en/stable/?badge=stable) | [![Latest Documentation](https://readthedocs.org/projects/ams/badge/?version=latest)](https://ams.readthedocs.io/en/latest/?badge=latest) |
29
+ | Documentation | [![Documentation Status](https://readthedocs.org/projects/ams/badge/?version=stable)](https://ams.readthedocs.io/en/stable/?badge=stable) | [![Develop Documentation](https://readthedocs.org/projects/ams/badge/?version=develop)](https://ams.readthedocs.io/en/develop/?badge=develop) |
30
30
 
31
31
 
32
32
  | Badges | | |
@@ -8,11 +8,11 @@ import json
8
8
 
9
9
  version_json = '''
10
10
  {
11
- "date": "2025-04-20T09:18:49-0400",
11
+ "date": "2025-04-23T12:23:08-0400",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "4bda2874669399db2c37d0a4bf6ae10e324d96a7",
15
- "version": "1.0.8"
14
+ "full-revisionid": "248188b6caf31eaf1089b55a84e41aaa6115df78",
15
+ "version": "1.0.9"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -6,8 +6,12 @@ import re
6
6
  import numpy as np
7
7
 
8
8
  from andes.io import read_file_like
9
+ from andes.io.xlsx import confirm_overwrite
9
10
  from andes.shared import deg2rad, rad2deg
10
11
 
12
+ from ams import __version__ as version
13
+ from ams.shared import copyright_msg, nowarranty_msg, report_time
14
+
11
15
  logger = logging.getLogger(__name__)
12
16
 
13
17
 
@@ -396,14 +400,24 @@ def mpc2system(mpc: dict, system) -> bool:
396
400
  c2=c2, c1=c1, c0=c0
397
401
  )
398
402
 
403
+ # --- Area ---
404
+ area_id = np.unique(system.Bus.area.v).astype(int)
405
+ for area in area_id:
406
+ area_idx = f'AREA_{area}'
407
+ system.add('Area', idx=area_idx, name=area)
408
+ bus_area = system.Bus.area.v
409
+ bus_area = [f'AREA_{int(area)}' for area in bus_area]
410
+ system.Bus.area.v = bus_area
411
+
399
412
  # --- Zone ---
400
413
  zone_id = np.unique(system.Bus.zone.v).astype(int)
401
414
  for zone in zone_id:
402
415
  zone_idx = f'ZONE_{zone}'
403
- system.add('Zone', idx=zone_idx, name=None)
416
+ system.add('Zone', idx=zone_idx, name=zone)
404
417
  bus_zone = system.Bus.zone.v
405
418
  bus_zone = [f'ZONE_{int(zone)}' for zone in bus_zone]
406
419
  system.Bus.zone.v = bus_zone
420
+
407
421
  return True
408
422
 
409
423
 
@@ -429,25 +443,29 @@ def _get_bus_id_caller(bus):
429
443
 
430
444
  def system2mpc(system) -> dict:
431
445
  """
432
- Convert data from an AMS system to an mpc dict.
446
+ Convert a **setup** AMS system to a MATPOWER mpc dictionary.
447
+
448
+ This function is revised from ``andes.io.matpower.system2mpc``.
433
449
 
434
- In the ``gen`` section, slack generators preceeds PV generators.
450
+ In the ``gen`` section, slack generators are listed before PV generators.
435
451
 
436
- Compared to the ``andes.io.matpower.system2mpc``,
437
- this function includes the generator cost data in the ``gencost``
438
- section.
439
- Additionally, ``c2`` and ``c1`` are scaled by ``base_mva`` to match
440
- MATPOWER unit ``MW``.
452
+ In the converted MPC, the indices of area (bus[:, 6]) and zone (bus[:, 10])
453
+ may differ from the original MPC. However, the mapping relationship is preserved.
454
+ For example, if the original MPC numbers areas starting from 1, the converted
455
+ MPC may number them starting from 0.
456
+
457
+ The coefficients ``c2`` and ``c1`` in the generator cost data are scaled by
458
+ ``base_mva`` to match MATPOWER's unit convention (MW).
441
459
 
442
460
  Parameters
443
461
  ----------
444
462
  system : ams.core.system.System
445
- AMS system
463
+ The AMS system to be converted.
446
464
 
447
465
  Returns
448
466
  -------
449
- mpc: dict
450
- MATPOWER mpc dict
467
+ mpc : dict
468
+ A dictionary in MATPOWER format representing the converted AMS system.
451
469
  """
452
470
 
453
471
  mpc = dict(version='2',
@@ -458,12 +476,16 @@ def system2mpc(system) -> dict:
458
476
  gencost=np.zeros((system.GCost.n, 7), dtype=np.float64),
459
477
  )
460
478
 
479
+ if not system.is_setup:
480
+ logger.warning("System is not setup and will be setup now.")
481
+ system.setup()
482
+
461
483
  if system.Bus.name.v is not None:
462
484
  mpc['bus_name'] = system.Bus.name.v
463
485
 
464
486
  base_mva = system.config.mva
465
487
 
466
- # --- bus ---
488
+ # --- Bus ---
467
489
  bus = mpc['bus']
468
490
  gen = mpc['gen']
469
491
 
@@ -471,18 +493,16 @@ def system2mpc(system) -> dict:
471
493
 
472
494
  bus[:, 0] = to_busid(system.Bus.idx.v)
473
495
  bus[:, 1] = 1
496
+ if system.Area.n > 0:
497
+ bus[:, 6] = system.Area.idx2uid(system.Bus.area.v)
474
498
  bus[:, 7] = system.Bus.v0.v
475
499
  bus[:, 8] = system.Bus.a0.v * rad2deg
476
500
  bus[:, 9] = system.Bus.Vn.v
501
+ if system.Zone.n > 0:
502
+ bus[:, 10] = system.Zone.idx2uid(system.Bus.zone.v)
477
503
  bus[:, 11] = system.Bus.vmax.v
478
504
  bus[:, 12] = system.Bus.vmin.v
479
505
 
480
- # --- zone ---
481
- ZONE_I = system.Zone.idx.v
482
- if len(ZONE_I) > 0:
483
- mapping = {busi0: i for i, busi0 in enumerate(ZONE_I)}
484
- bus[:, 10] = np.array([mapping[busi0] for busi0 in system.Bus.zone.v])
485
-
486
506
  # --- PQ ---
487
507
  if system.PQ.n > 0:
488
508
  pq_pos = system.Bus.idx2uid(system.PQ.bus.v)
@@ -568,4 +588,136 @@ def system2mpc(system) -> dict:
568
588
  else:
569
589
  mpc.pop('gencost')
570
590
 
591
+ # --- gentype ---
592
+ stg = system.StaticGen.get_all_idxes()
593
+ gentype = system.StaticGen.get(src='gentype', attr='v', idx=stg)
594
+ if any(gentype):
595
+ mpc['gentype'] = np.array(gentype)
596
+
597
+ # --- genfuel ---
598
+ genfuel = system.StaticGen.get(src='genfuel', attr='v', idx=stg)
599
+ if any(genfuel):
600
+ mpc['genfuel'] = np.array(genfuel)
601
+
602
+ # --- Bus Name ---
603
+ if any(system.Bus.name.v):
604
+ mpc['bus_name'] = np.array(system.Bus.name.v)
605
+
571
606
  return mpc
607
+
608
+
609
+ def mpc2m(mpc: dict, outfile: str) -> str:
610
+ """
611
+ Write a MATPOWER mpc dict to a M-file.
612
+
613
+ Parameters
614
+ ----------
615
+ mpc : dict
616
+ MATPOWER mpc dictionary.
617
+ outfile : str
618
+ Path to the output M-file.
619
+ """
620
+ with open(outfile, 'w') as f:
621
+ # Add version info
622
+ f.write(f"%% Converted by AMS {version}\n")
623
+ f.write(f"%% {copyright_msg}\n\n")
624
+ f.write(f"%% {nowarranty_msg}\n")
625
+ f.write(f"%% Convert time: {report_time}\n\n")
626
+
627
+ f.write("function mpc = mpc_case\n")
628
+ f.write("mpc.version = '2';\n\n")
629
+
630
+ # Write baseMVA
631
+ f.write(f"%% system MVA base\nmpc.baseMVA = {mpc['baseMVA']};\n\n")
632
+
633
+ # Write bus data
634
+ f.write("%% bus data\n")
635
+ f.write("%% bus_i type Pd Qd Gs Bs area Vm Va baseKV zone Vmax Vmin\n")
636
+ f.write("mpc.bus = [\n")
637
+ for row in mpc['bus']:
638
+ f.write(" " + "\t".join(f"{val:.6g}" for val in row) + ";\n")
639
+ f.write("];\n\n")
640
+
641
+ # Write generator data
642
+ f.write("%% generator data\n")
643
+ f.write("%% bus Pg Qg Qmax Qmin Vg mBase status Pmax Pmin\n")
644
+ f.write("%% Pc1 Pc2 Qc1min Qc1max Qc2min Qc2max ramp_agc ramp_10 ramp_30 ramp_q apf\n")
645
+ f.write("mpc.gen = [\n")
646
+ for row in mpc['gen']:
647
+ f.write(" " + "\t".join(f"{val:.6g}" for val in row) + ";\n")
648
+ f.write("];\n\n")
649
+
650
+ # Write branch data
651
+ f.write("%% branch data\n")
652
+ f.write("%% fbus tbus r x b rateA rateB rateC ratio angle status angmin angmax PF QF PT QT\n")
653
+ f.write("mpc.branch = [\n")
654
+ for row in mpc['branch']:
655
+ f.write(" " + "\t".join(f"{val:.6g}" for val in row) + ";\n")
656
+ f.write("];\n\n")
657
+
658
+ # Write generator cost data if available
659
+ if 'gencost' in mpc:
660
+ f.write("%% generator cost data\n")
661
+ f.write("%% 1 startup shutdown n x1 y1 ... xn yn\n")
662
+ f.write("%% 2 startup shutdown n c(n-1) ... c0\n")
663
+ f.write("mpc.gencost = [\n")
664
+ for row in mpc['gencost']:
665
+ f.write(" " + "\t".join(f"{val:.6g}" for val in row) + ";\n")
666
+ f.write("];\n\n")
667
+
668
+ # Write bus names if available and not all None
669
+ if 'bus_name' in mpc and any(mpc['bus_name']):
670
+ f.write("%% bus names\n")
671
+ f.write("mpc.bus_name = {\n")
672
+ for name in mpc['bus_name']:
673
+ f.write(f" '{name}';\n")
674
+ f.write("};\n\n")
675
+
676
+ # Write generator types if available and not all None
677
+ if 'gentype' in mpc and any(mpc['gentype']):
678
+ f.write("%% generator types\n")
679
+ f.write("mpc.gentype = {\n")
680
+ for gentype in mpc['gentype']:
681
+ f.write(f" '{gentype}';\n")
682
+ f.write("};\n\n")
683
+
684
+ # Write generator fuels if available and not all None
685
+ if 'genfuel' in mpc and any(mpc['genfuel']):
686
+ f.write("%% generator fuels\n")
687
+ f.write("mpc.genfuel = {\n")
688
+ for genfuel in mpc['genfuel']:
689
+ f.write(f" '{genfuel}';\n")
690
+ f.write("};\n\n")
691
+
692
+ logger.info(f"Finished writing MATPOWER case to {outfile}")
693
+ return outfile
694
+
695
+
696
+ def write(system, outfile: str, overwrite: bool = None) -> bool:
697
+ """
698
+ Export an AMS system to a MATPOWER mpc file.
699
+
700
+ This function converts an AMS system object into a MATPOWER-compatible
701
+ mpc dictionary and writes it to a specified output file in MATPOWER format.
702
+
703
+ Parameters
704
+ ----------
705
+ system : ams.system.System
706
+ A loaded system.
707
+ outfile : str
708
+ Path to the output file.
709
+ overwrite : bool, optional
710
+ None to prompt for overwrite selection; True to overwrite; False to not overwrite.
711
+
712
+ Returns
713
+ -------
714
+ bool
715
+ True if the file was successfully written, False otherwise.
716
+ """
717
+ if not confirm_overwrite(outfile, overwrite=overwrite):
718
+ return False
719
+
720
+ mpc = system2mpc(system)
721
+ mpc2m(mpc, outfile)
722
+ logger.info('MATPOWER m case file written to "%s"', outfile)
723
+ return True
@@ -101,3 +101,17 @@ def system2ppc(system) -> dict:
101
101
  mpc['branch'][:, 0] = np.array([bus_map[busi0] for busi0 in mpc['branch'][:, 0].astype(int)])
102
102
  mpc['branch'][:, 1] = np.array([bus_map[busi0] for busi0 in mpc['branch'][:, 1].astype(int)])
103
103
  return mpc
104
+
105
+
106
+ def ppc2py(ppc: dict, outfile: str) -> str:
107
+ """
108
+ Placeholder.
109
+ """
110
+ return NotImplemented
111
+
112
+
113
+ def write(system, outfile: str) -> bool:
114
+ """
115
+ Placeholder.
116
+ """
117
+ return NotImplemented
@@ -179,75 +179,6 @@ class StaticGen(GroupBase):
179
179
 
180
180
  The generator types and fuel types are referenced from MATPOWER.
181
181
 
182
- Generator Types
183
- ---------------
184
- The following codes represent the types of generators:
185
- - BA : Energy Storage, Battery
186
- - CE : Energy Storage, Compressed Air
187
- - CP : Energy Storage, Concentrated Solar Power
188
- - FW : Energy Storage, Flywheel
189
- - PS : Hydraulic Turbine, Reversible (pumped storage)
190
- - ES : Energy Storage, Other
191
- - ST : Steam Turbine (includes nuclear, geothermal, and solar steam)
192
- - GT : Combustion (Gas) Turbine
193
- - IC : Internal Combustion Engine (diesel, piston, reciprocating)
194
- - CA : Combined Cycle Steam Part
195
- - CT : Combined Cycle Combustion Turbine Part
196
- - CS : Combined Cycle Single Shaft
197
- - CC : Combined Cycle Total Unit
198
- - HA : Hydrokinetic, Axial Flow Turbine
199
- - HB : Hydrokinetic, Wave Buoy
200
- - HK : Hydrokinetic, Other
201
- - HY : Hydroelectric Turbine
202
- - BT : Turbines Used in a Binary Cycle
203
- - PV : Photovoltaic
204
- - WT : Wind Turbine, Onshore
205
- - WS : Wind Turbine, Offshore
206
- - FC : Fuel Cell
207
- - OT : Other
208
- - UN : Unknown
209
- - JE : Jet Engine
210
- - NB : ST - Boiling Water Nuclear Reactor
211
- - NG : ST - Graphite Nuclear Reactor
212
- - NH : ST - High Temperature Gas Nuclear Reactor
213
- - NP : ST - Pressurized Water Nuclear Reactor
214
- - IT : Internal Combustion Turbo Charged
215
- - SC : Synchronous Condenser
216
- - DC : DC ties
217
- - MP : Motor/Pump
218
- - W1 : Wind Turbine, Type 1
219
- - W2 : Wind Turbine, Type 2
220
- - W3 : Wind Turbine, Type 3
221
- - W4 : Wind Turbine, Type 4
222
- - SV : Static Var Compensator
223
- - DL : Dispatchable Load
224
-
225
- Fuel Types
226
- ----------
227
- The following codes represent the fuel types:
228
- - biomass : Biomass
229
- - coal : Coal
230
- - dfo : Distillate Fuel Oil
231
- - geothermal : Geothermal
232
- - hydro : Hydro
233
- - hydrops : Hydro Pumped Storage
234
- - jetfuel : Jet Fuel
235
- - lng : Liquefied Natural Gas
236
- - ng : Natural Gas
237
- - nuclear : Nuclear
238
- - oil : Unspecified Oil
239
- - refuse : Refuse, Municipal Solid Waste
240
- - rfo : Residual Fuel Oil
241
- - solar : Solar
242
- - syncgen : Synchronous Condenser
243
- - wasteheat : Waste Heat
244
- - wind : Wind
245
- - wood : Wood or Wood Waste
246
- - other : Other
247
- - unknown : Unknown
248
- - dl : Dispatchable Load
249
- - ess : Energy Storage System
250
-
251
182
  Notes
252
183
  -----
253
184
  For co-simulation with ANDES, refer to the `ANDES StaticGen Documentation
@@ -3,7 +3,6 @@ Module for report generation.
3
3
  """
4
4
  import logging
5
5
  from collections import OrderedDict
6
- from time import strftime
7
6
  from typing import List, Dict, Optional
8
7
 
9
8
  from andes.io.txt import dump_data
@@ -11,7 +10,7 @@ from andes.shared import np
11
10
  from andes.utils.misc import elapsed
12
11
 
13
12
  from ams import __version__ as version
14
- from ams.shared import copyright_msg
13
+ from ams.shared import copyright_msg, nowarranty_msg, report_time
15
14
 
16
15
  logger = logging.getLogger(__name__)
17
16
 
@@ -23,9 +22,9 @@ def report_info(system) -> list:
23
22
  info = list()
24
23
  info.append('AMS' + ' ' + version + '\n')
25
24
  info.append(f'{copyright_msg}\n\n')
26
- info.append('AMS comes with ABSOLUTELY NO WARRANTY\n')
25
+ info.append(f"{nowarranty_msg}\n")
27
26
  info.append('Case file: ' + str(system.files.case) + '\n')
28
- info.append('Report time: ' + strftime("%m/%d/%Y %I:%M:%S %p") + '\n\n')
27
+ info.append(f'Report time: {report_time}\n\n')
29
28
  return info
30
29
 
31
30
 
@@ -7,6 +7,7 @@ import logging
7
7
  import unittest
8
8
  from functools import wraps
9
9
  from collections import OrderedDict
10
+ from time import strftime
10
11
 
11
12
  import cvxpy as cp
12
13
 
@@ -35,7 +36,9 @@ _prefix = r" - --------------> | " # NOQA
35
36
  _max_length = 80 # NOQA
36
37
 
37
38
  # NOTE: copyright
38
- copyright_msg = 'Copyright (C) 2023-2025 Jinning Wang'
39
+ copyright_msg = "Copyright (C) 2023-2025 Jinning Wang"
40
+ nowarranty_msg = "AMS comes with ABSOLUTELY NO WARRANTY"
41
+ report_time = strftime("%m/%d/%Y %I:%M:%S %p")
39
42
 
40
43
  # NOTE: copied from CVXPY documentation, last checked on 2024/10/30, v1.5
41
44
  mip_solvers = ['CBC', 'COPT', 'GLPK_MI', 'CPLEX', 'GUROBI',
@@ -181,3 +181,138 @@ Generator Cost Data
181
181
 
182
182
  #. Not currently used by any Matpower functions.
183
183
  #. MODEL = 1, :math:`f(p)` is defined by the coordinates :math:`(p_1, f_1), (p_2, f_2), . . . , (p_N , f_N)`; MODEL = 2, :math:`f(p) = c_{n}p^{n} + ... + c_{1}p^{1} + c_{0}`.
184
+
185
+
186
+ Generator Types
187
+ ~~~~~~~~~~~~~~~~~~~~
188
+ +------+---------------------------------------------------------------+
189
+ | code | description |
190
+ +------+---------------------------------------------------------------+
191
+ | BA | Energy Storage, Battery |
192
+ +------+---------------------------------------------------------------+
193
+ | CE | Energy Storage, Compressed Air |
194
+ +------+---------------------------------------------------------------+
195
+ | CP | Energy Storage, Concentrated Solar Power |
196
+ +------+---------------------------------------------------------------+
197
+ | FW | Energy Storage, Flywheel |
198
+ +------+---------------------------------------------------------------+
199
+ | PS | Hydraulic Turbine, Reversible (pumped storage) |
200
+ +------+---------------------------------------------------------------+
201
+ | ES | Energy Storage, Other |
202
+ +------+---------------------------------------------------------------+
203
+ | ST | Steam Turbine (includes nuclear, geothermal, and solar steam) |
204
+ +------+---------------------------------------------------------------+
205
+ | GT | Combustion (Gas) Turbine |
206
+ +------+---------------------------------------------------------------+
207
+ | IC | Internal Combustion Engine (diesel, piston, reciprocating) |
208
+ +------+---------------------------------------------------------------+
209
+ | CA | Combined Cycle Steam Part |
210
+ +------+---------------------------------------------------------------+
211
+ | CT | Combined Cycle Combustion Turbine Part |
212
+ +------+---------------------------------------------------------------+
213
+ | CS | Combined Cycle Single Shaft |
214
+ +------+---------------------------------------------------------------+
215
+ | CC | Combined Cycle Total Unit |
216
+ +------+---------------------------------------------------------------+
217
+ | HA | Hydrokinetic, Axial Flow Turbine |
218
+ +------+---------------------------------------------------------------+
219
+ | HB | Hydrokinetic, Wave Buoy |
220
+ +------+---------------------------------------------------------------+
221
+ | HK | Hydrokinetic, Other |
222
+ +------+---------------------------------------------------------------+
223
+ | HY | Hydroelectric Turbine |
224
+ +------+---------------------------------------------------------------+
225
+ | BT | Turbines Used in a Binary Cycle |
226
+ +------+---------------------------------------------------------------+
227
+ | PV | Photovoltaic |
228
+ +------+---------------------------------------------------------------+
229
+ | WT | Wind Turbine, Onshore |
230
+ +------+---------------------------------------------------------------+
231
+ | WS | Wind Turbine, Offshore |
232
+ +------+---------------------------------------------------------------+
233
+ | FC | Fuel Cell |
234
+ +------+---------------------------------------------------------------+
235
+ | OT | Other |
236
+ +------+---------------------------------------------------------------+
237
+ | UN | Unknown |
238
+ +------+---------------------------------------------------------------+
239
+ | JE | Jet Engine |
240
+ +------+---------------------------------------------------------------+
241
+ | NB | ST - Boiling Water Nuclear Reactor |
242
+ +------+---------------------------------------------------------------+
243
+ | NG | ST - Graphite Nuclear Reactor |
244
+ +------+---------------------------------------------------------------+
245
+ | NH | ST - High Temperature Gas Nuclear Reactor |
246
+ +------+---------------------------------------------------------------+
247
+ | NP | ST - Pressurized Water Nuclear Reactor |
248
+ +------+---------------------------------------------------------------+
249
+ | IT | Internal Combustion Turbo Charged |
250
+ +------+---------------------------------------------------------------+
251
+ | SC | Synchronous Condenser |
252
+ +------+---------------------------------------------------------------+
253
+ | DC | DC ties |
254
+ +------+---------------------------------------------------------------+
255
+ | MP | Motor/Pump |
256
+ +------+---------------------------------------------------------------+
257
+ | W1 | Wind Turbine, Type 1 |
258
+ +------+---------------------------------------------------------------+
259
+ | W2 | Wind Turbine, Type 2 |
260
+ +------+---------------------------------------------------------------+
261
+ | W3 | Wind Turbine, Type 3 |
262
+ +------+---------------------------------------------------------------+
263
+ | W4 | Wind Turbine, Type 4 |
264
+ +------+---------------------------------------------------------------+
265
+ | SV | Static Var Compensator |
266
+ +------+---------------------------------------------------------------+
267
+ | DL | Dispatchable Load |
268
+ +------+---------------------------------------------------------------+
269
+
270
+ Fuel Types
271
+ ~~~~~~~~~~~~~~~~
272
+ +-------------+---------------------------------------+
273
+ | code | description |
274
+ +-------------+---------------------------------------+
275
+ | biomass | Biomass |
276
+ +-------------+---------------------------------------+
277
+ | coal | Coal |
278
+ +-------------+---------------------------------------+
279
+ | dfo | Distillate Fuel Oil |
280
+ +-------------+---------------------------------------+
281
+ | geothermal | Geothermal |
282
+ +-------------+---------------------------------------+
283
+ | hydro | Hydro |
284
+ +-------------+---------------------------------------+
285
+ | hydrops | Hydro Pumped Storage |
286
+ +-------------+---------------------------------------+
287
+ | jetfuel | Jet Fuel |
288
+ +-------------+---------------------------------------+
289
+ | lng | Liquefied Natural Gas |
290
+ +-------------+---------------------------------------+
291
+ | ng | Natural Gas |
292
+ +-------------+---------------------------------------+
293
+ | nuclear | Nuclear |
294
+ +-------------+---------------------------------------+
295
+ | oil | Unspecified Oil |
296
+ +-------------+---------------------------------------+
297
+ | refuse | Refuse, Municipal Solid Waste |
298
+ +-------------+---------------------------------------+
299
+ | rfo | Residual Fuel Oil |
300
+ +-------------+---------------------------------------+
301
+ | solar | Solar |
302
+ +-------------+---------------------------------------+
303
+ | syncgen | Synchronous Condenser |
304
+ +-------------+---------------------------------------+
305
+ | wasteheat | Waste Heat |
306
+ +-------------+---------------------------------------+
307
+ | wind | Wind |
308
+ +-------------+---------------------------------------+
309
+ | wood | Wood or Wood Waste |
310
+ +-------------+---------------------------------------+
311
+ | other | Other |
312
+ +-------------+---------------------------------------+
313
+ | unknown | Unknown |
314
+ +-------------+---------------------------------------+
315
+ | dl | Dispatchable Load |
316
+ +-------------+---------------------------------------+
317
+ | ess | Energy Storage System |
318
+ +-------------+---------------------------------------+
@@ -3,8 +3,7 @@
3
3
  PYPOWER
4
4
  --------
5
5
 
6
- AMS includes `PYPOWER cases <https://github.com/CURENT/ams/tree/develop/ams/cases/pypower>`_
7
- in version 2 for scheduling modeling and analysis. PYPOWER cases follow the same format as MATPOWER.
6
+ AMS supports PYPOWER PY case file. PYPOWER cases follow a similar format as MATPOWER.
8
7
 
9
8
  The PYPOWER case is defined as a Python dictionary that includes ``bus``, ``gen``, ``branch``,
10
9
  ``areas``, and ``gencost``.
@@ -9,6 +9,14 @@ The APIs before v3.0.0 are in beta and may change without prior notice.
9
9
  v1.0
10
10
  ==========
11
11
 
12
+ v1.0.9 (2024-04-23)
13
+ --------------------
14
+
15
+ Improve MATPOWER file converter:
16
+
17
+ - Add a M file case writer
18
+ - Include Area and Zone in both MATPOWER read and write
19
+
12
20
  v1.0.8 (2024-04-20)
13
21
  --------------------
14
22
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ltbams
3
- Version: 1.0.8
3
+ Version: 1.0.9
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
@@ -52,9 +52,9 @@ Python Software for Power System Scheduling Modeling and Co-Simulation with Dyna
52
52
 
53
53
  <img src="docs/source/images/sponsors/CURENT_Logo_NameOnTrans.png" alt="CURENT ERC Logo" width="300" height="auto">
54
54
 
55
- | | Stable | Latest |
55
+ | | Stable | Develop |
56
56
  |---------------|-----------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------|
57
- | Documentation | [![Documentation Status](https://readthedocs.org/projects/ams/badge/?version=stable)](https://ams.readthedocs.io/en/stable/?badge=stable) | [![Latest Documentation](https://readthedocs.org/projects/ams/badge/?version=latest)](https://ams.readthedocs.io/en/latest/?badge=latest) |
57
+ | Documentation | [![Documentation Status](https://readthedocs.org/projects/ams/badge/?version=stable)](https://ams.readthedocs.io/en/stable/?badge=stable) | [![Develop Documentation](https://readthedocs.org/projects/ams/badge/?version=develop)](https://ams.readthedocs.io/en/develop/?badge=develop) |
58
58
 
59
59
 
60
60
  | Badges | | |