ltbams 1.0.10__tar.gz → 1.0.11__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.10/ltbams.egg-info → ltbams-1.0.11}/PKG-INFO +7 -10
  2. {ltbams-1.0.10 → ltbams-1.0.11}/README.md +6 -9
  3. {ltbams-1.0.10 → ltbams-1.0.11}/ams/_version.py +3 -3
  4. {ltbams-1.0.10 → ltbams-1.0.11}/ams/core/documenter.py +130 -62
  5. {ltbams-1.0.10 → ltbams-1.0.11}/ams/interface.py +2 -2
  6. {ltbams-1.0.10 → ltbams-1.0.11}/ams/routines/grbopt.py +14 -9
  7. {ltbams-1.0.10 → ltbams-1.0.11}/ams/routines/pypower.py +7 -16
  8. {ltbams-1.0.10 → ltbams-1.0.11}/ams/system.py +2 -2
  9. {ltbams-1.0.10 → ltbams-1.0.11}/ams/utils/paths.py +3 -3
  10. {ltbams-1.0.10 → ltbams-1.0.11}/docs/source/examples/index.rst +2 -1
  11. {ltbams-1.0.10 → ltbams-1.0.11}/docs/source/genroutineref.py +1 -1
  12. {ltbams-1.0.10 → ltbams-1.0.11}/docs/source/release-notes.rst +18 -12
  13. {ltbams-1.0.10 → ltbams-1.0.11/ltbams.egg-info}/PKG-INFO +7 -10
  14. {ltbams-1.0.10 → ltbams-1.0.11}/tests/test_1st_system.py +1 -1
  15. {ltbams-1.0.10 → ltbams-1.0.11}/CONTRIBUTING.rst +0 -0
  16. {ltbams-1.0.10 → ltbams-1.0.11}/LICENSE +0 -0
  17. {ltbams-1.0.10 → ltbams-1.0.11}/MANIFEST.in +0 -0
  18. {ltbams-1.0.10 → ltbams-1.0.11}/ams/__init__.py +0 -0
  19. {ltbams-1.0.10 → ltbams-1.0.11}/ams/__main__.py +0 -0
  20. {ltbams-1.0.10 → ltbams-1.0.11}/ams/cases/5bus/pjm5bus_demo.json +0 -0
  21. {ltbams-1.0.10 → ltbams-1.0.11}/ams/cases/5bus/pjm5bus_demo.xlsx +0 -0
  22. {ltbams-1.0.10 → ltbams-1.0.11}/ams/cases/5bus/pjm5bus_ev.xlsx +0 -0
  23. {ltbams-1.0.10 → ltbams-1.0.11}/ams/cases/5bus/pjm5bus_jumper.xlsx +0 -0
  24. {ltbams-1.0.10 → ltbams-1.0.11}/ams/cases/hawaii40/Hawaii40.m +0 -0
  25. {ltbams-1.0.10 → ltbams-1.0.11}/ams/cases/ieee123/ieee123.xlsx +0 -0
  26. {ltbams-1.0.10 → ltbams-1.0.11}/ams/cases/ieee123/ieee123_regcv1.xlsx +0 -0
  27. {ltbams-1.0.10 → ltbams-1.0.11}/ams/cases/ieee14/ieee14.json +0 -0
  28. {ltbams-1.0.10 → ltbams-1.0.11}/ams/cases/ieee14/ieee14.raw +0 -0
  29. {ltbams-1.0.10 → ltbams-1.0.11}/ams/cases/ieee14/ieee14_conn.xlsx +0 -0
  30. {ltbams-1.0.10 → ltbams-1.0.11}/ams/cases/ieee14/ieee14_uced.xlsx +0 -0
  31. {ltbams-1.0.10 → ltbams-1.0.11}/ams/cases/ieee39/ieee39.xlsx +0 -0
  32. {ltbams-1.0.10 → ltbams-1.0.11}/ams/cases/ieee39/ieee39_uced.xlsx +0 -0
  33. {ltbams-1.0.10 → ltbams-1.0.11}/ams/cases/ieee39/ieee39_uced_esd1.xlsx +0 -0
  34. {ltbams-1.0.10 → ltbams-1.0.11}/ams/cases/ieee39/ieee39_uced_pvd1.xlsx +0 -0
  35. {ltbams-1.0.10 → ltbams-1.0.11}/ams/cases/ieee39/ieee39_uced_vis.xlsx +0 -0
  36. {ltbams-1.0.10 → ltbams-1.0.11}/ams/cases/matpower/benchmark.json +0 -0
  37. {ltbams-1.0.10 → ltbams-1.0.11}/ams/cases/matpower/case118.m +0 -0
  38. {ltbams-1.0.10 → ltbams-1.0.11}/ams/cases/matpower/case14.m +0 -0
  39. {ltbams-1.0.10 → ltbams-1.0.11}/ams/cases/matpower/case300.m +0 -0
  40. {ltbams-1.0.10 → ltbams-1.0.11}/ams/cases/matpower/case39.m +0 -0
  41. {ltbams-1.0.10 → ltbams-1.0.11}/ams/cases/matpower/case5.m +0 -0
  42. {ltbams-1.0.10 → ltbams-1.0.11}/ams/cases/matpower/case_ACTIVSg2000.m +0 -0
  43. {ltbams-1.0.10 → ltbams-1.0.11}/ams/cases/npcc/npcc.m +0 -0
  44. {ltbams-1.0.10 → ltbams-1.0.11}/ams/cases/npcc/npcc_uced.xlsx +0 -0
  45. {ltbams-1.0.10 → ltbams-1.0.11}/ams/cases/pglib/pglib_opf_case39_epri__api.m +0 -0
  46. {ltbams-1.0.10 → ltbams-1.0.11}/ams/cases/wecc/wecc.m +0 -0
  47. {ltbams-1.0.10 → ltbams-1.0.11}/ams/cases/wecc/wecc_uced.xlsx +0 -0
  48. {ltbams-1.0.10 → ltbams-1.0.11}/ams/cli.py +0 -0
  49. {ltbams-1.0.10 → ltbams-1.0.11}/ams/core/__init__.py +0 -0
  50. {ltbams-1.0.10 → ltbams-1.0.11}/ams/core/common.py +0 -0
  51. {ltbams-1.0.10 → ltbams-1.0.11}/ams/core/matprocessor.py +0 -0
  52. {ltbams-1.0.10 → ltbams-1.0.11}/ams/core/model.py +0 -0
  53. {ltbams-1.0.10 → ltbams-1.0.11}/ams/core/param.py +0 -0
  54. {ltbams-1.0.10 → ltbams-1.0.11}/ams/core/service.py +0 -0
  55. {ltbams-1.0.10 → ltbams-1.0.11}/ams/core/symprocessor.py +0 -0
  56. {ltbams-1.0.10 → ltbams-1.0.11}/ams/core/var.py +0 -0
  57. {ltbams-1.0.10 → ltbams-1.0.11}/ams/extension/__init__.py +0 -0
  58. {ltbams-1.0.10 → ltbams-1.0.11}/ams/extension/eva.py +0 -0
  59. {ltbams-1.0.10 → ltbams-1.0.11}/ams/io/__init__.py +0 -0
  60. {ltbams-1.0.10 → ltbams-1.0.11}/ams/io/json.py +0 -0
  61. {ltbams-1.0.10 → ltbams-1.0.11}/ams/io/matpower.py +0 -0
  62. {ltbams-1.0.10 → ltbams-1.0.11}/ams/io/psse.py +0 -0
  63. {ltbams-1.0.10 → ltbams-1.0.11}/ams/io/pypower.py +0 -0
  64. {ltbams-1.0.10 → ltbams-1.0.11}/ams/io/xlsx.py +0 -0
  65. {ltbams-1.0.10 → ltbams-1.0.11}/ams/main.py +0 -0
  66. {ltbams-1.0.10 → ltbams-1.0.11}/ams/models/__init__.py +0 -0
  67. {ltbams-1.0.10 → ltbams-1.0.11}/ams/models/area.py +0 -0
  68. {ltbams-1.0.10 → ltbams-1.0.11}/ams/models/bus.py +0 -0
  69. {ltbams-1.0.10 → ltbams-1.0.11}/ams/models/cost.py +0 -0
  70. {ltbams-1.0.10 → ltbams-1.0.11}/ams/models/distributed/__init__.py +0 -0
  71. {ltbams-1.0.10 → ltbams-1.0.11}/ams/models/distributed/esd1.py +0 -0
  72. {ltbams-1.0.10 → ltbams-1.0.11}/ams/models/distributed/ev.py +0 -0
  73. {ltbams-1.0.10 → ltbams-1.0.11}/ams/models/distributed/pvd1.py +0 -0
  74. {ltbams-1.0.10 → ltbams-1.0.11}/ams/models/group.py +0 -0
  75. {ltbams-1.0.10 → ltbams-1.0.11}/ams/models/info.py +0 -0
  76. {ltbams-1.0.10 → ltbams-1.0.11}/ams/models/line.py +0 -0
  77. {ltbams-1.0.10 → ltbams-1.0.11}/ams/models/renewable/__init__.py +0 -0
  78. {ltbams-1.0.10 → ltbams-1.0.11}/ams/models/renewable/regc.py +0 -0
  79. {ltbams-1.0.10 → ltbams-1.0.11}/ams/models/reserve.py +0 -0
  80. {ltbams-1.0.10 → ltbams-1.0.11}/ams/models/shunt.py +0 -0
  81. {ltbams-1.0.10 → ltbams-1.0.11}/ams/models/static/__init__.py +0 -0
  82. {ltbams-1.0.10 → ltbams-1.0.11}/ams/models/static/gen.py +0 -0
  83. {ltbams-1.0.10 → ltbams-1.0.11}/ams/models/static/pq.py +0 -0
  84. {ltbams-1.0.10 → ltbams-1.0.11}/ams/models/timeslot.py +0 -0
  85. {ltbams-1.0.10 → ltbams-1.0.11}/ams/models/zone.py +0 -0
  86. {ltbams-1.0.10 → ltbams-1.0.11}/ams/opt/__init__.py +0 -0
  87. {ltbams-1.0.10 → ltbams-1.0.11}/ams/opt/constraint.py +0 -0
  88. {ltbams-1.0.10 → ltbams-1.0.11}/ams/opt/exprcalc.py +0 -0
  89. {ltbams-1.0.10 → ltbams-1.0.11}/ams/opt/expression.py +0 -0
  90. {ltbams-1.0.10 → ltbams-1.0.11}/ams/opt/objective.py +0 -0
  91. {ltbams-1.0.10 → ltbams-1.0.11}/ams/opt/omodel.py +0 -0
  92. {ltbams-1.0.10 → ltbams-1.0.11}/ams/opt/optzbase.py +0 -0
  93. {ltbams-1.0.10 → ltbams-1.0.11}/ams/opt/param.py +0 -0
  94. {ltbams-1.0.10 → ltbams-1.0.11}/ams/opt/var.py +0 -0
  95. {ltbams-1.0.10 → ltbams-1.0.11}/ams/report.py +0 -0
  96. {ltbams-1.0.10 → ltbams-1.0.11}/ams/routines/__init__.py +0 -0
  97. {ltbams-1.0.10 → ltbams-1.0.11}/ams/routines/acopf.py +0 -0
  98. {ltbams-1.0.10 → ltbams-1.0.11}/ams/routines/dcopf.py +0 -0
  99. {ltbams-1.0.10 → ltbams-1.0.11}/ams/routines/dcopf2.py +0 -0
  100. {ltbams-1.0.10 → ltbams-1.0.11}/ams/routines/dcpf.py +0 -0
  101. {ltbams-1.0.10 → ltbams-1.0.11}/ams/routines/dopf.py +0 -0
  102. {ltbams-1.0.10 → ltbams-1.0.11}/ams/routines/ed.py +0 -0
  103. {ltbams-1.0.10 → ltbams-1.0.11}/ams/routines/pflow.py +0 -0
  104. {ltbams-1.0.10 → ltbams-1.0.11}/ams/routines/routine.py +0 -0
  105. {ltbams-1.0.10 → ltbams-1.0.11}/ams/routines/rted.py +0 -0
  106. {ltbams-1.0.10 → ltbams-1.0.11}/ams/routines/type.py +0 -0
  107. {ltbams-1.0.10 → ltbams-1.0.11}/ams/routines/uc.py +0 -0
  108. {ltbams-1.0.10 → ltbams-1.0.11}/ams/shared.py +0 -0
  109. {ltbams-1.0.10 → ltbams-1.0.11}/ams/utils/__init__.py +0 -0
  110. {ltbams-1.0.10 → ltbams-1.0.11}/ams/utils/misc.py +0 -0
  111. {ltbams-1.0.10 → ltbams-1.0.11}/docs/Makefile +0 -0
  112. {ltbams-1.0.10 → ltbams-1.0.11}/docs/make.bat +0 -0
  113. {ltbams-1.0.10 → ltbams-1.0.11}/docs/source/_templates/autosummary/base.rst +0 -0
  114. {ltbams-1.0.10 → ltbams-1.0.11}/docs/source/_templates/autosummary/class.rst +0 -0
  115. {ltbams-1.0.10 → ltbams-1.0.11}/docs/source/_templates/autosummary/module.rst +0 -0
  116. {ltbams-1.0.10 → ltbams-1.0.11}/docs/source/_templates/autosummary/module_toctree.rst +0 -0
  117. {ltbams-1.0.10 → ltbams-1.0.11}/docs/source/api.rst +0 -0
  118. {ltbams-1.0.10 → ltbams-1.0.11}/docs/source/conf.py +0 -0
  119. {ltbams-1.0.10 → ltbams-1.0.11}/docs/source/genmodelref.py +0 -0
  120. {ltbams-1.0.10 → ltbams-1.0.11}/docs/source/getting_started/copyright.rst +0 -0
  121. {ltbams-1.0.10 → ltbams-1.0.11}/docs/source/getting_started/formats/index.rst +0 -0
  122. {ltbams-1.0.10 → ltbams-1.0.11}/docs/source/getting_started/formats/matpower.rst +0 -0
  123. {ltbams-1.0.10 → ltbams-1.0.11}/docs/source/getting_started/formats/psse.rst +0 -0
  124. {ltbams-1.0.10 → ltbams-1.0.11}/docs/source/getting_started/formats/pypower.rst +0 -0
  125. {ltbams-1.0.10 → ltbams-1.0.11}/docs/source/getting_started/formats/xlsx.png +0 -0
  126. {ltbams-1.0.10 → ltbams-1.0.11}/docs/source/getting_started/formats/xlsx.rst +0 -0
  127. {ltbams-1.0.10 → ltbams-1.0.11}/docs/source/getting_started/index.rst +0 -0
  128. {ltbams-1.0.10 → ltbams-1.0.11}/docs/source/getting_started/install.rst +0 -0
  129. {ltbams-1.0.10 → ltbams-1.0.11}/docs/source/getting_started/overview.rst +0 -0
  130. {ltbams-1.0.10 → ltbams-1.0.11}/docs/source/getting_started/testcase.rst +0 -0
  131. {ltbams-1.0.10 → ltbams-1.0.11}/docs/source/getting_started/verification.rst +0 -0
  132. {ltbams-1.0.10 → ltbams-1.0.11}/docs/source/images/curent.ico +0 -0
  133. {ltbams-1.0.10 → ltbams-1.0.11}/docs/source/images/dcopf_time.png +0 -0
  134. {ltbams-1.0.10 → ltbams-1.0.11}/docs/source/images/educ_pie.png +0 -0
  135. {ltbams-1.0.10 → ltbams-1.0.11}/docs/source/images/sponsors/CURENT_Logo_NameOnTrans.png +0 -0
  136. {ltbams-1.0.10 → ltbams-1.0.11}/docs/source/images/sponsors/CURENT_Logo_Transparent.png +0 -0
  137. {ltbams-1.0.10 → ltbams-1.0.11}/docs/source/images/sponsors/CURENT_Logo_Transparent_Name.png +0 -0
  138. {ltbams-1.0.10 → ltbams-1.0.11}/docs/source/images/sponsors/doe.png +0 -0
  139. {ltbams-1.0.10 → ltbams-1.0.11}/docs/source/index.rst +0 -0
  140. {ltbams-1.0.10 → ltbams-1.0.11}/docs/source/modeling/example.rst +0 -0
  141. {ltbams-1.0.10 → ltbams-1.0.11}/docs/source/modeling/index.rst +0 -0
  142. {ltbams-1.0.10 → ltbams-1.0.11}/docs/source/modeling/model.rst +0 -0
  143. {ltbams-1.0.10 → ltbams-1.0.11}/docs/source/modeling/routine.rst +0 -0
  144. {ltbams-1.0.10 → ltbams-1.0.11}/docs/source/modeling/system.rst +0 -0
  145. {ltbams-1.0.10 → ltbams-1.0.11}/ltbams.egg-info/SOURCES.txt +0 -0
  146. {ltbams-1.0.10 → ltbams-1.0.11}/ltbams.egg-info/dependency_links.txt +0 -0
  147. {ltbams-1.0.10 → ltbams-1.0.11}/ltbams.egg-info/entry_points.txt +0 -0
  148. {ltbams-1.0.10 → ltbams-1.0.11}/ltbams.egg-info/requires.txt +0 -0
  149. {ltbams-1.0.10 → ltbams-1.0.11}/ltbams.egg-info/top_level.txt +0 -0
  150. {ltbams-1.0.10 → ltbams-1.0.11}/pyproject.toml +0 -0
  151. {ltbams-1.0.10 → ltbams-1.0.11}/requirements-dev.txt +0 -0
  152. {ltbams-1.0.10 → ltbams-1.0.11}/requirements.txt +0 -0
  153. {ltbams-1.0.10 → ltbams-1.0.11}/setup.cfg +0 -0
  154. {ltbams-1.0.10 → ltbams-1.0.11}/setup.py +0 -0
  155. {ltbams-1.0.10 → ltbams-1.0.11}/tests/__init__.py +0 -0
  156. {ltbams-1.0.10 → ltbams-1.0.11}/tests/test_addressing.py +0 -0
  157. {ltbams-1.0.10 → ltbams-1.0.11}/tests/test_case.py +0 -0
  158. {ltbams-1.0.10 → ltbams-1.0.11}/tests/test_cli.py +0 -0
  159. {ltbams-1.0.10 → ltbams-1.0.11}/tests/test_export_csv.py +0 -0
  160. {ltbams-1.0.10 → ltbams-1.0.11}/tests/test_group.py +0 -0
  161. {ltbams-1.0.10 → ltbams-1.0.11}/tests/test_interface.py +0 -0
  162. {ltbams-1.0.10 → ltbams-1.0.11}/tests/test_io.py +0 -0
  163. {ltbams-1.0.10 → ltbams-1.0.11}/tests/test_jumper.py +0 -0
  164. {ltbams-1.0.10 → ltbams-1.0.11}/tests/test_known_good.py +0 -0
  165. {ltbams-1.0.10 → ltbams-1.0.11}/tests/test_matp.py +0 -0
  166. {ltbams-1.0.10 → ltbams-1.0.11}/tests/test_model.py +0 -0
  167. {ltbams-1.0.10 → ltbams-1.0.11}/tests/test_omodel.py +0 -0
  168. {ltbams-1.0.10 → ltbams-1.0.11}/tests/test_paths.py +0 -0
  169. {ltbams-1.0.10 → ltbams-1.0.11}/tests/test_report.py +0 -0
  170. {ltbams-1.0.10 → ltbams-1.0.11}/tests/test_repr.py +0 -0
  171. {ltbams-1.0.10 → ltbams-1.0.11}/tests/test_routine.py +0 -0
  172. {ltbams-1.0.10 → ltbams-1.0.11}/tests/test_rtn_acopf.py +0 -0
  173. {ltbams-1.0.10 → ltbams-1.0.11}/tests/test_rtn_dcopf.py +0 -0
  174. {ltbams-1.0.10 → ltbams-1.0.11}/tests/test_rtn_dcopf2.py +0 -0
  175. {ltbams-1.0.10 → ltbams-1.0.11}/tests/test_rtn_ed.py +0 -0
  176. {ltbams-1.0.10 → ltbams-1.0.11}/tests/test_rtn_opf.py +0 -0
  177. {ltbams-1.0.10 → ltbams-1.0.11}/tests/test_rtn_pflow.py +0 -0
  178. {ltbams-1.0.10 → ltbams-1.0.11}/tests/test_rtn_pypower.py +0 -0
  179. {ltbams-1.0.10 → ltbams-1.0.11}/tests/test_rtn_rted.py +0 -0
  180. {ltbams-1.0.10 → ltbams-1.0.11}/tests/test_rtn_uc.py +0 -0
  181. {ltbams-1.0.10 → ltbams-1.0.11}/tests/test_service.py +0 -0
  182. {ltbams-1.0.10 → ltbams-1.0.11}/versioneer.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ltbams
3
- Version: 1.0.10
3
+ Version: 1.0.11
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
@@ -57,21 +57,18 @@ Python Software for Power System Scheduling Modeling and Co-Simulation with Dyna
57
57
 
58
58
  <img src="docs/source/images/sponsors/CURENT_Logo_NameOnTrans.png" alt="CURENT ERC Logo" width="300" height="auto">
59
59
 
60
- | | Stable | Develop |
61
- |---|---|---|
62
- | 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) |
63
-
64
60
  | Badges | | |
65
61
  |---|---|---|
66
62
  | Repo | ![Project Status: Active](https://www.repostatus.org/badges/latest/active.svg) | ![Repo Size](https://img.shields.io/github/repo-size/CURENT/ams) |
67
- | Version | ![PyPI Version](https://img.shields.io/pypi/v/ltbams.svg) | ![Conda Version](https://anaconda.org/conda-forge/ltbams/badges/version.svg) |
63
+ | Version | [![PyPI Version](https://img.shields.io/pypi/v/ltbams.svg)](https://pypi.org/project/ltbams/) | [![Anaconda-Server Badge](https://anaconda.org/conda-forge/ltbams/badges/version.svg)](https://anaconda.org/conda-forge/ltbams) |
68
64
  | 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) |
69
- | Download | ![PyPI - Downloads](https://img.shields.io/pypi/dm/ltbams) | ![Anaconda-Server Badge](https://anaconda.org/conda-forge/ltbams/badges/downloads.svg) |
65
+ | 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) |
66
+ | 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) |
70
67
  | Code Quality | ![Codacy Badge](https://app.codacy.com/project/badge/Grade/69456da1b8634f2f984bd769e35f0050) | ![Codacy Badge](https://app.codacy.com/project/badge/Coverage/69456da1b8634f2f984bd769e35f0050) |
71
68
  | Code Cov | ![codecov](https://codecov.io/gh/CURENT/ams/graph/badge.svg?token=RZI5GLLBQH) | |
72
69
  | 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) |
73
- | CI | ![Compatibility Tests](https://github.com/CURENT/ams/actions/workflows/compatibility.yml/badge.svg) | ![Azure Pipline](https://dev.azure.com/curentltb/ams/_apis/build/status%2FCURENT.ams?branchName=master) |
74
- | CD | ![Publish to TestPyPI and PyPI](https://github.com/CURENT/ams/actions/workflows/publish-pypi.yml/badge.svg?branch=master) | |
70
+ | 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) |
71
+ | CD | [![Publish](https://github.com/CURENT/ams/actions/workflows/publish-pypi.yml/badge.svg)](https://github.com/CURENT/ams/actions/workflows/publish-pypi.yml) | |
75
72
  | 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) |
76
73
  | Dependency | [![libraries](https://img.shields.io/librariesio/release/pypi/ltbams)](https://libraries.io/pypi/ltbams) | |
77
74
  | Try on Binder | [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/curent/ams/master) | |
@@ -237,7 +234,7 @@ See [GitHub contributors][GitHub contributors] for the contributor list.
237
234
  AMS is licensed under the [GPL v3 License](./LICENSE).
238
235
 
239
236
  # Related Projects
240
- - [Popular Open Source Libraries for Power System Analysis](https://github.com/jinningwang/best-of-ps)
237
+ - [Popular Open Source Libraries for Power System Analysis](https://github.com/ps-wiki/best-of-ps)
241
238
  - [G-PST Tools Portal](https://g-pst.github.io/tools/): An open tools portal with a classification approach
242
239
  - [Open Source Software (OSS) for Electricity Market Research, Teaching, and Training](https://www2.econ.iastate.edu/tesfatsi/ElectricOSS.htm)
243
240
 
@@ -7,21 +7,18 @@ Python Software for Power System Scheduling Modeling and Co-Simulation with Dyna
7
7
 
8
8
  <img src="docs/source/images/sponsors/CURENT_Logo_NameOnTrans.png" alt="CURENT ERC Logo" width="300" height="auto">
9
9
 
10
- | | Stable | Develop |
11
- |---|---|---|
12
- | 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) |
13
-
14
10
  | Badges | | |
15
11
  |---|---|---|
16
12
  | Repo | ![Project Status: Active](https://www.repostatus.org/badges/latest/active.svg) | ![Repo Size](https://img.shields.io/github/repo-size/CURENT/ams) |
17
- | Version | ![PyPI Version](https://img.shields.io/pypi/v/ltbams.svg) | ![Conda Version](https://anaconda.org/conda-forge/ltbams/badges/version.svg) |
13
+ | Version | [![PyPI Version](https://img.shields.io/pypi/v/ltbams.svg)](https://pypi.org/project/ltbams/) | [![Anaconda-Server Badge](https://anaconda.org/conda-forge/ltbams/badges/version.svg)](https://anaconda.org/conda-forge/ltbams) |
18
14
  | 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) |
19
- | Download | ![PyPI - Downloads](https://img.shields.io/pypi/dm/ltbams) | ![Anaconda-Server Badge](https://anaconda.org/conda-forge/ltbams/badges/downloads.svg) |
15
+ | 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) |
16
+ | 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) |
20
17
  | Code Quality | ![Codacy Badge](https://app.codacy.com/project/badge/Grade/69456da1b8634f2f984bd769e35f0050) | ![Codacy Badge](https://app.codacy.com/project/badge/Coverage/69456da1b8634f2f984bd769e35f0050) |
21
18
  | Code Cov | ![codecov](https://codecov.io/gh/CURENT/ams/graph/badge.svg?token=RZI5GLLBQH) | |
22
19
  | 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) |
23
- | CI | ![Compatibility Tests](https://github.com/CURENT/ams/actions/workflows/compatibility.yml/badge.svg) | ![Azure Pipline](https://dev.azure.com/curentltb/ams/_apis/build/status%2FCURENT.ams?branchName=master) |
24
- | CD | ![Publish to TestPyPI and PyPI](https://github.com/CURENT/ams/actions/workflows/publish-pypi.yml/badge.svg?branch=master) | |
20
+ | 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) |
21
+ | CD | [![Publish](https://github.com/CURENT/ams/actions/workflows/publish-pypi.yml/badge.svg)](https://github.com/CURENT/ams/actions/workflows/publish-pypi.yml) | |
25
22
  | 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) |
26
23
  | Dependency | [![libraries](https://img.shields.io/librariesio/release/pypi/ltbams)](https://libraries.io/pypi/ltbams) | |
27
24
  | Try on Binder | [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/curent/ams/master) | |
@@ -187,7 +184,7 @@ See [GitHub contributors][GitHub contributors] for the contributor list.
187
184
  AMS is licensed under the [GPL v3 License](./LICENSE).
188
185
 
189
186
  # Related Projects
190
- - [Popular Open Source Libraries for Power System Analysis](https://github.com/jinningwang/best-of-ps)
187
+ - [Popular Open Source Libraries for Power System Analysis](https://github.com/ps-wiki/best-of-ps)
191
188
  - [G-PST Tools Portal](https://g-pst.github.io/tools/): An open tools portal with a classification approach
192
189
  - [Open Source Software (OSS) for Electricity Market Research, Teaching, and Training](https://www2.econ.iastate.edu/tesfatsi/ElectricOSS.htm)
193
190
 
@@ -8,11 +8,11 @@ import json
8
8
 
9
9
  version_json = '''
10
10
  {
11
- "date": "2025-05-23T00:18:06-0400",
11
+ "date": "2025-05-23T17:38:11-0400",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "f467fb0017c81d3946c1c566802adc4f411ad05e",
15
- "version": "1.0.10"
14
+ "full-revisionid": "6d7b555f5f48c751648594a535711b9fd21d2a85",
15
+ "version": "1.0.11"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -6,26 +6,12 @@ import re
6
6
 
7
7
  import logging
8
8
  from collections import OrderedDict
9
- from andes.core.documenter import Documenter as andes_Documenter
10
9
  from andes.utils.tab import make_doc_table, math_wrap
11
10
 
12
11
  logger = logging.getLogger(__name__)
13
12
 
14
13
 
15
- def disable_method(func):
16
- def wrapper(*args, **kwargs):
17
- msg = f"Method `{func.__name__}` is included in ANDES Documenter but not supported in AMS Documenter."
18
- logger.warning(msg)
19
- return None
20
- return wrapper
21
-
22
-
23
- def disable_methods(methods):
24
- for method in methods:
25
- setattr(Documenter, method, disable_method(getattr(Documenter, method)))
26
-
27
-
28
- class Documenter(andes_Documenter):
14
+ class Documenter:
29
15
  """
30
16
  Helper class for documenting models.
31
17
 
@@ -37,16 +23,6 @@ class Documenter(andes_Documenter):
37
23
 
38
24
  def __init__(self, parent):
39
25
  self.parent = parent
40
- self.system = parent.system
41
- self.class_name = parent.class_name
42
- self.config = parent.config
43
- self.params = parent.params
44
- self.algebs = parent.algebs
45
- self.services = parent.services
46
-
47
- func_to_disable = ['_init_doc', '_eq_doc',
48
- '_discrete_doc', '_block_doc']
49
- disable_methods(func_to_disable)
50
26
 
51
27
  def get(self, max_width=78, export='plain'):
52
28
  """
@@ -68,14 +44,15 @@ class Documenter(andes_Documenter):
68
44
  if export == 'rest':
69
45
  max_width = 0
70
46
  model_header = '-' * 80 + '\n'
71
- out += f'.. _{self.class_name}:\n\n'
47
+ out += f'.. _{self.parent.class_name}:\n\n'
72
48
  else:
73
49
  model_header = ''
74
50
 
75
51
  if export == 'rest':
76
- out += model_header + f'{self.class_name}\n' + model_header
52
+ out += model_header + f'{self.parent.class_name}\n' + model_header
77
53
  else:
78
- out += model_header + f'Model <{self.class_name}> in Group <{self.parent.group}>\n' + model_header
54
+ out += model_header + \
55
+ f'Model <{self.parent.class_name}> in Group <{self.parent.group}>\n' + model_header
79
56
 
80
57
  if self.parent.__doc__ is not None:
81
58
  out += inspect.cleandoc(self.parent.__doc__)
@@ -86,20 +63,35 @@ class Documenter(andes_Documenter):
86
63
  out += self._var_doc(max_width=max_width, export=export)
87
64
  out += self._service_doc(max_width=max_width, export=export)
88
65
  # TODO: fix and add the config doc later on
89
- # out += self.config.doc(max_width=max_width, export=export)
66
+ # out += self.parent.config.doc(max_width=max_width, export=export)
90
67
 
91
68
  return out
92
69
 
93
70
  def _var_doc(self, max_width=78, export='plain'):
71
+ """
72
+ Export formatted model variable documentation as a string.
73
+
74
+ Parameters
75
+ ----------
76
+ max_width : int, optional = 80
77
+ Maximum table width. If export format is ``rest`` it will be unlimited.
78
+ export : str, optional = 'plain'
79
+ Export format, 'plain' for plain text, 'rest' for restructuredText.
80
+
81
+ Returns
82
+ -------
83
+ str
84
+ Tabulated output in a string
85
+ """
94
86
  # variable documentation
95
- if len(self.algebs) == 0:
87
+ if len(self.parent.algebs) == 0:
96
88
  return ''
97
89
 
98
90
  names, symbols, units = list(), list(), list()
99
91
  info = list()
100
92
  units_rest, ty = list(), list()
101
93
 
102
- for p in self.algebs.values():
94
+ for p in self.parent.algebs.values():
103
95
  names.append(p.name)
104
96
  ty.append(p.class_name)
105
97
  info.append(p.info if p.info else '')
@@ -110,7 +102,7 @@ class Documenter(andes_Documenter):
110
102
 
111
103
  # replace with latex math expressions if export is ``rest``
112
104
  if export == 'rest':
113
- symbols = [item.tex_name for item in self.algebs.values()]
105
+ symbols = [item.tex_name for item in self.parent.algebs.values()]
114
106
  symbols = math_wrap(symbols, export=export)
115
107
  title = 'Variables\n---------'
116
108
 
@@ -132,14 +124,29 @@ class Documenter(andes_Documenter):
132
124
  rest_dict=rest_dict)
133
125
 
134
126
  def _service_doc(self, max_width=78, export='plain'):
135
- if len(self.services) == 0:
127
+ """
128
+ Export formatted model service documentation as a string.
129
+
130
+ Parameters
131
+ ----------
132
+ max_width : int, optional = 80
133
+ Maximum table width. If export format is ``rest`` it will be unlimited.
134
+ export : str, optional = 'plain'
135
+ Export format, 'plain' for plain text, 'rest' for restructuredText.
136
+
137
+ Returns
138
+ -------
139
+ str
140
+ Tabulated output in a string
141
+ """
142
+ if len(self.parent.services) == 0:
136
143
  return ''
137
144
 
138
145
  names, symbols = list(), list()
139
146
  info = list()
140
147
  class_names = list()
141
148
 
142
- for p in self.services.values():
149
+ for p in self.parent.services.values():
143
150
  names.append(p.name)
144
151
  class_names.append(p.class_name)
145
152
  info.append(p.info if p.info else '')
@@ -165,6 +172,74 @@ class Documenter(andes_Documenter):
165
172
  plain_dict=plain_dict,
166
173
  rest_dict=rest_dict)
167
174
 
175
+ def _param_doc(self, max_width=78, export='plain'):
176
+ """
177
+ Export formatted model parameter documentation as a string.
178
+
179
+ Parameters
180
+ ----------
181
+ max_width : int, optional = 80
182
+ Maximum table width. If export format is ``rest`` it will be unlimited.
183
+
184
+ export : str, optional = 'plain'
185
+ Export format, 'plain' for plain text, 'rest' for restructuredText.
186
+
187
+ Returns
188
+ -------
189
+ str
190
+ Tabulated output in a string
191
+ """
192
+ if len(self.parent.params) == 0:
193
+ return ''
194
+
195
+ # prepare temporary lists
196
+ names, units, class_names = list(), list(), list()
197
+ info, defaults, properties = list(), list(), list()
198
+ units_rest = list()
199
+
200
+ for p in self.parent.params.values():
201
+ names.append(p.name)
202
+ class_names.append(p.class_name)
203
+ info.append(p.info if p.info else '')
204
+ defaults.append(p.default if p.default is not None else '')
205
+ units.append(f'{p.unit}' if p.unit else '')
206
+ units_rest.append(f'*{p.unit}*' if p.unit else '')
207
+
208
+ plist = []
209
+ for key, val in p.property.items():
210
+ if val is True:
211
+ plist.append(key)
212
+ properties.append(','.join(plist))
213
+
214
+ # symbols based on output format
215
+ if export == 'rest':
216
+ symbols = [item.tex_name for item in self.parent.params.values()]
217
+ symbols = math_wrap(symbols, export=export)
218
+ title = 'Parameters\n----------'
219
+ else:
220
+ symbols = [item.name for item in self.parent.params.values()]
221
+ title = 'Parameters'
222
+
223
+ plain_dict = OrderedDict([('Name', names),
224
+ ('Description', info),
225
+ ('Default', defaults),
226
+ ('Unit', units),
227
+ ('Properties', properties)])
228
+
229
+ rest_dict = OrderedDict([('Name', names),
230
+ ('Symbol', symbols),
231
+ ('Description', info),
232
+ ('Default', defaults),
233
+ ('Unit', units_rest),
234
+ ('Properties', properties)])
235
+
236
+ # convert to rows and export as table
237
+ return make_doc_table(title=title,
238
+ max_width=max_width,
239
+ export=export,
240
+ plain_dict=plain_dict,
241
+ rest_dict=rest_dict)
242
+
168
243
 
169
244
  class RDocumenter:
170
245
  """
@@ -172,20 +247,12 @@ class RDocumenter:
172
247
 
173
248
  Parameters
174
249
  ----------
175
- parent : Model
176
- The `Model` instance to document
250
+ parent : ams.core.routine.RoutineBase
251
+ The `RoutineBase` instance to document
177
252
  """
178
253
 
179
254
  def __init__(self, parent):
180
255
  self.parent = parent
181
- self.system = parent.system
182
- self.class_name = parent.class_name
183
- self.config = parent.config
184
- self.services = parent.services
185
- self.rparams = parent.rparams
186
- self.vars = parent.vars
187
- self.constrs = parent.constrs
188
- self.obj = parent.obj
189
256
 
190
257
  def get(self, max_width=78, export='plain'):
191
258
  """
@@ -207,14 +274,15 @@ class RDocumenter:
207
274
  if export == 'rest':
208
275
  max_width = 0
209
276
  model_header = '-' * 80 + '\n'
210
- out += f'.. _{self.class_name}:\n\n'
277
+ out += f'.. _{self.parent.class_name}:\n\n'
211
278
  else:
212
279
  model_header = ''
213
280
 
214
281
  if export == 'rest':
215
- out += model_header + f'{self.class_name}\n' + model_header
282
+ out += model_header + f'{self.parent.class_name}\n' + model_header
216
283
  else:
217
- out += model_header + f'Routine <{self.class_name}> in Type <{self.parent.type}>\n' + model_header
284
+ out += model_header + \
285
+ f'Routine <{self.parent.class_name}> in Type <{self.parent.type}>\n' + model_header
218
286
 
219
287
  if self.parent.__doc__ is not None:
220
288
  out += inspect.cleandoc(self.parent.__doc__)
@@ -229,20 +297,20 @@ class RDocumenter:
229
297
  out += self._exprc_doc(max_width=max_width, export=export)
230
298
  out += self._service_doc(max_width=max_width, export=export)
231
299
  out += self._param_doc(max_width=max_width, export=export)
232
- out += self.config.doc(max_width=max_width, export=export)
300
+ out += self.parent.config.doc(max_width=max_width, export=export)
233
301
 
234
302
  return out
235
303
 
236
304
  def _service_doc(self, max_width=78, export='plain'):
237
305
  # routine service documentation
238
- if len(self.services) == 0:
306
+ if len(self.parent.services) == 0:
239
307
  return ''
240
308
 
241
309
  names, symbols = list(), list()
242
310
  info = list()
243
311
  class_names = list()
244
312
 
245
- for p in self.services.values():
313
+ for p in self.parent.services.values():
246
314
  names.append(p.name)
247
315
  info.append(p.info if p.info else '')
248
316
  class_names.append(p.class_name)
@@ -251,7 +319,7 @@ class RDocumenter:
251
319
 
252
320
  # replace with latex math expressions if export is ``rest``
253
321
  if export == 'rest':
254
- symbols = [item.tex_name for item in self.services.values()]
322
+ symbols = [item.tex_name for item in self.parent.services.values()]
255
323
  symbols = math_wrap(symbols, export=export)
256
324
  title = 'Services\n---------'
257
325
 
@@ -272,13 +340,13 @@ class RDocumenter:
272
340
 
273
341
  def _constr_doc(self, max_width=78, export='plain'):
274
342
  # constraint documentation
275
- if len(self.constrs) == 0:
343
+ if len(self.parent.constrs) == 0:
276
344
  return ''
277
345
 
278
346
  # prepare temporary lists
279
347
  names, class_names, info = list(), list(), list()
280
348
 
281
- for p in self.constrs.values():
349
+ for p in self.parent.constrs.values():
282
350
  names.append(p.name)
283
351
  class_names.append(p.class_name)
284
352
  info.append(p.info if p.info else '')
@@ -286,7 +354,7 @@ class RDocumenter:
286
354
  # expressions based on output format
287
355
  expressions = []
288
356
  if export == 'rest':
289
- for p in self.constrs.values():
357
+ for p in self.parent.constrs.values():
290
358
  expr = _tex_pre(self, p, self.parent.syms.tex_map)
291
359
  if p.is_eq:
292
360
  expr = f'{expr} = 0'
@@ -460,7 +528,7 @@ class RDocumenter:
460
528
  # NOTE: this is for the optimization variables
461
529
  # not the _var_doc for ANDES parameters
462
530
  # variable documentation
463
- if len(self.vars) == 0:
531
+ if len(self.parent.vars) == 0:
464
532
  return ''
465
533
 
466
534
  # prepare temporary lists
@@ -469,7 +537,7 @@ class RDocumenter:
469
537
  sources = list()
470
538
  units_rest = list()
471
539
 
472
- for p in self.vars.values():
540
+ for p in self.parent.vars.values():
473
541
  names.append(p.name)
474
542
  class_names.append(p.class_name)
475
543
  info.append(p.info if p.info else '')
@@ -493,11 +561,11 @@ class RDocumenter:
493
561
 
494
562
  # symbols based on output format
495
563
  if export == 'rest':
496
- symbols = [item.tex_name for item in self.vars.values()]
564
+ symbols = [item.tex_name for item in self.parent.vars.values()]
497
565
  symbols = math_wrap(symbols, export=export)
498
566
  title = 'Vars\n----------------------------------'
499
567
  else:
500
- symbols = [item.name for item in self.vars.values()]
568
+ symbols = [item.name for item in self.parent.vars.values()]
501
569
  title = 'Vars'
502
570
 
503
571
  plain_dict = OrderedDict([('Name', names),
@@ -536,7 +604,7 @@ class RDocumenter:
536
604
  str
537
605
  Tabulated output in a string
538
606
  """
539
- if len(self.rparams) == 0:
607
+ if len(self.parent.rparams) == 0:
540
608
  return ''
541
609
 
542
610
  # prepare temporary lists
@@ -545,7 +613,7 @@ class RDocumenter:
545
613
  sources = list()
546
614
  units_rest = list()
547
615
 
548
- for p in self.rparams.values():
616
+ for p in self.parent.rparams.values():
549
617
  names.append(p.name)
550
618
  class_names.append(p.class_name)
551
619
  info.append(p.info if p.info else '')
@@ -562,11 +630,11 @@ class RDocumenter:
562
630
 
563
631
  # symbols based on output format
564
632
  if export == 'rest':
565
- symbols = [item.tex_name for item in self.rparams.values()]
633
+ symbols = [item.tex_name for item in self.parent.rparams.values()]
566
634
  symbols = math_wrap(symbols, export=export)
567
635
  title = 'Parameters\n----------------------------------'
568
636
  else:
569
- symbols = [item.name for item in self.rparams.values()]
637
+ symbols = [item.name for item in self.parent.rparams.values()]
570
638
  title = 'Parameters'
571
639
 
572
640
  plain_dict = OrderedDict([('Name', names),
@@ -8,7 +8,7 @@ import logging
8
8
  from collections import OrderedDict, Counter
9
9
 
10
10
  from andes.utils.misc import elapsed
11
- from andes.system import System as andes_System
11
+ from andes.system import System as adSystem
12
12
 
13
13
  from ams.utils import create_entry
14
14
  from ams.io import input_formats
@@ -107,7 +107,7 @@ def to_andes_pflow(system, no_output=False, default_config=True, **kwargs):
107
107
  Additional arguments to be passed to ``andes.system.System()``.
108
108
  """
109
109
 
110
- adsys = andes_System(no_outpu=no_output, default_config=default_config, **kwargs)
110
+ adsys = adSystem(no_outpu=no_output, default_config=default_config, **kwargs)
111
111
  # FIXME: is there a systematic way to do this? Other config might be needed
112
112
  adsys.config.freq = system.config.freq
113
113
  adsys.config.mva = system.config.mva
@@ -10,6 +10,8 @@ import scipy.io
10
10
  from andes.shared import np, pd
11
11
  from andes.utils.misc import elapsed
12
12
 
13
+ from ams.core import Config
14
+
13
15
  from ams.io.pypower import system2ppc
14
16
 
15
17
  from ams.opt import Var, Objective
@@ -39,9 +41,13 @@ class OPF(DCPF1):
39
41
  self.info = 'Optimal Power Flow'
40
42
  self.type = 'ACED'
41
43
 
44
+ # Overwrite the config to be empty, as it is not used in this routine
45
+ self.config = Config(self.class_name)
46
+
42
47
  self.obj = Objective(name='obj',
43
48
  info='total cost, placeholder',
44
49
  e_str='sum(c2 * pg**2 + c1 * pg + c0)',
50
+ unit='$',
45
51
  sense='min',)
46
52
 
47
53
  self.pi = Var(info='Lagrange multiplier on real power mismatch',
@@ -97,23 +103,22 @@ class OPF(DCPF1):
97
103
  """
98
104
  Run the OPF routine using gurobi-optimods.
99
105
 
100
- This method invokes `self.solve(**kwargs)`, which internally utilizes
101
- `gurobi-optimods` to solve the OPF problem.
106
+ This method invokes `gurobi-optimods.opf.solve_opf` to solve the OPF problem.
102
107
 
103
- Keyword arguments
104
- -------------------
105
- - ``opftype`` : str
108
+ Parameters
109
+ ----------
110
+ - opftype : str
106
111
  Type of OPF to solve (default: 'AC').
107
- - ``branch_switching`` : bool
112
+ - branch_switching : bool
108
113
  Enable branch switching (default: False).
109
- - ``min_active_branches`` : float
114
+ - min_active_branches : float
110
115
  Defines the minimum number of branches that must be turned on when
111
116
  branch switching is active, i.e. the minimum number of turned on
112
117
  branches is equal to ``numbranches * min_active_branches``. Has no
113
118
  effect if ``branch_switching`` is set to False.
114
- - ``use_mip_start`` : bool
119
+ - use_mip_start : bool
115
120
  Use MIP start (default: False).
116
- - ``time_limit`` : float
121
+ - time_limit : float
117
122
  Time limit for the solver (default: 0.0, no limit).
118
123
  """
119
124
  if not self.initialized:
@@ -147,8 +147,8 @@ class DCPF1(RoutineBase):
147
147
  model='Line',)
148
148
  # --- objective ---
149
149
  self.obj = Objective(name='obj',
150
- info='total cost',
151
- e_str='0',
150
+ info='total cost, placeholder',
151
+ e_str='0', unit='$',
152
152
  sense='min',)
153
153
 
154
154
  # --- total cost ---
@@ -346,16 +346,13 @@ class PFlow1(DCPF1):
346
346
  It leverages PYPOWER's internal power flow solver and maps results back to the
347
347
  AMS system.
348
348
 
349
- Known Issues
350
- ------------
351
- - Fast-Decoupled (XB version) and Fast-Decoupled (BX version) algorithms are
352
- not fully supported yet.
353
-
354
349
  Notes
355
350
  -----
356
351
  - This class does not implement the AMS-style power flow formulation.
357
352
  - For detailed mathematical formulations and algorithmic details, refer to the
358
353
  MATPOWER User's Manual, section on Power Flow.
354
+ - Fast-Decoupled (XB version) and Fast-Decoupled (BX version) algorithms are
355
+ not fully supported yet.
359
356
  """
360
357
 
361
358
  def __init__(self, system, config):
@@ -380,7 +377,7 @@ class PFlow1(DCPF1):
380
377
  pf_max_it="maximum number of iterations for Newton's method",
381
378
  pf_max_it_fd="maximum number of iterations for fast decoupled method",
382
379
  pf_max_it_gs="maximum number of iterations for Gauss-Seidel method",
383
- enforce_q_lims="enforce gen reactive power limits, at expense of |V|",
380
+ enforce_q_lims="enforce gen reactive power limits, at expense of V magnitude",
384
381
  )
385
382
  self.config.add_extra("_alt",
386
383
  pf_alg=(1, 2, 3, 4),
@@ -424,15 +421,12 @@ class DCOPF1(DCPF1):
424
421
  function) is always included in the objective, regardless of the generator's
425
422
  commitment status. See `pypower/opf_costfcn.py` for implementation details.
426
423
 
427
- Known Issues
428
- ------------
429
- - Algorithms 400, 500, 600, and 700 are not fully supported yet.
430
-
431
424
  Notes
432
425
  -----
433
426
  - This class does not implement the AMS-style DC optimal power flow formulation.
434
427
  - For detailed mathematical formulations and algorithmic details, refer to the
435
428
  MATPOWER User's Manual, section on Optimal Power Flow.
429
+ - Algorithms 400, 500, 600, and 700 are not fully supported yet.
436
430
  """
437
431
 
438
432
  def __init__(self, system, config):
@@ -522,10 +516,7 @@ class DCOPF1(DCPF1):
522
516
  scpdipm_red_it=r'o_{scpdipm\_red\_it}',
523
517
  )
524
518
 
525
- self.obj = Objective(name='obj',
526
- info='total cost, placeholder',
527
- e_str='sum(c2 * pg**2 + c1 * pg + c0)',
528
- sense='min',)
519
+ self.obj.e_str = 'sum(c2 * pg**2 + c1 * pg + c0)'
529
520
 
530
521
  self.pi = Var(info='Lagrange multiplier on real power mismatch',
531
522
  name='pi', unit='$/p.u.',
@@ -9,7 +9,7 @@ from typing import Dict, Optional
9
9
 
10
10
  import numpy as np
11
11
 
12
- from andes.system import System as andes_System
12
+ from andes.system import System as adSystem
13
13
  from andes.system import (_config_numpy, load_config_rc)
14
14
  from andes.variables import FileMan
15
15
 
@@ -49,7 +49,7 @@ def disable_methods(methods):
49
49
  setattr(System, method, disable_method(getattr(System, method)))
50
50
 
51
51
 
52
- class System(andes_System):
52
+ class System(adSystem):
53
53
  """
54
54
  A subclass of ``andes.system.System``, this class encapsulates data, models,
55
55
  and routines for scheduling modeling and analysis in power systems.