ltbams 0.9.9__py3-none-any.whl → 1.0.0__py3-none-any.whl

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 (728) hide show
  1. ams/__init__.py +4 -11
  2. ams/_version.py +4 -4
  3. ams/cases/5bus/pjm5bus_demo.xlsx +0 -0
  4. ams/cases/5bus/pjm5bus_jumper.xlsx +0 -0
  5. ams/cases/5bus/pjm5bus_uced.json +1062 -0
  6. ams/cases/5bus/pjm5bus_uced.xlsx +0 -0
  7. ams/cases/5bus/pjm5bus_uced_esd1.xlsx +0 -0
  8. ams/cases/5bus/pjm5bus_uced_ev.xlsx +0 -0
  9. ams/cases/ieee123/ieee123.xlsx +0 -0
  10. ams/cases/ieee123/ieee123_regcv1.xlsx +0 -0
  11. ams/cases/ieee14/ieee14.json +1166 -0
  12. ams/cases/ieee14/ieee14.raw +92 -0
  13. ams/cases/ieee14/ieee14_conn.xlsx +0 -0
  14. ams/cases/ieee14/ieee14_uced.xlsx +0 -0
  15. ams/cases/ieee39/ieee39.xlsx +0 -0
  16. ams/cases/ieee39/ieee39_uced.xlsx +0 -0
  17. ams/cases/ieee39/ieee39_uced_esd1.xlsx +0 -0
  18. ams/cases/ieee39/ieee39_uced_pvd1.xlsx +0 -0
  19. ams/cases/ieee39/ieee39_uced_vis.xlsx +0 -0
  20. ams/cases/matpower/benchmark.json +1594 -0
  21. ams/cases/matpower/case118.m +787 -0
  22. ams/cases/matpower/case14.m +129 -0
  23. ams/cases/matpower/case300.m +1315 -0
  24. ams/cases/matpower/case39.m +205 -0
  25. ams/cases/matpower/case5.m +62 -0
  26. ams/cases/matpower/case_ACTIVSg2000.m +9460 -0
  27. ams/cases/npcc/npcc.m +644 -0
  28. ams/cases/npcc/npcc_uced.xlsx +0 -0
  29. ams/cases/pglib/pglib_opf_case39_epri__api.m +243 -0
  30. ams/cases/wecc/wecc.m +714 -0
  31. ams/cases/wecc/wecc_uced.xlsx +0 -0
  32. ams/cli.py +6 -0
  33. ams/core/__init__.py +2 -0
  34. ams/core/documenter.py +652 -0
  35. ams/core/matprocessor.py +782 -0
  36. ams/core/model.py +330 -0
  37. ams/core/param.py +322 -0
  38. ams/core/service.py +918 -0
  39. ams/core/symprocessor.py +224 -0
  40. ams/core/var.py +59 -0
  41. ams/extension/__init__.py +5 -0
  42. ams/extension/eva.py +401 -0
  43. ams/interface.py +1085 -0
  44. ams/io/__init__.py +133 -0
  45. ams/io/json.py +82 -0
  46. ams/io/matpower.py +406 -0
  47. ams/io/psse.py +6 -0
  48. ams/io/pypower.py +103 -0
  49. ams/io/xlsx.py +80 -0
  50. ams/main.py +83 -4
  51. ams/models/__init__.py +24 -0
  52. ams/models/area.py +40 -0
  53. ams/models/bus.py +52 -0
  54. ams/models/cost.py +169 -0
  55. ams/models/distributed/__init__.py +3 -0
  56. ams/models/distributed/esd1.py +71 -0
  57. ams/models/distributed/ev.py +60 -0
  58. ams/models/distributed/pvd1.py +67 -0
  59. ams/models/group.py +231 -0
  60. ams/models/info.py +26 -0
  61. ams/models/line.py +238 -0
  62. ams/models/renewable/__init__.py +5 -0
  63. ams/models/renewable/regc.py +119 -0
  64. ams/models/reserve.py +94 -0
  65. ams/models/shunt.py +14 -0
  66. ams/models/static/__init__.py +2 -0
  67. ams/models/static/gen.py +165 -0
  68. ams/models/static/pq.py +61 -0
  69. ams/models/timeslot.py +69 -0
  70. ams/models/zone.py +49 -0
  71. ams/opt/__init__.py +12 -0
  72. ams/opt/constraint.py +175 -0
  73. ams/opt/exprcalc.py +127 -0
  74. ams/opt/expression.py +188 -0
  75. ams/opt/objective.py +174 -0
  76. ams/opt/omodel.py +432 -0
  77. ams/opt/optzbase.py +192 -0
  78. ams/opt/param.py +156 -0
  79. ams/opt/var.py +233 -0
  80. ams/pypower/__init__.py +8 -0
  81. ams/pypower/_compat.py +9 -0
  82. ams/pypower/core/__init__.py +8 -0
  83. ams/pypower/core/pips.py +894 -0
  84. ams/pypower/core/ppoption.py +244 -0
  85. ams/pypower/core/ppver.py +18 -0
  86. ams/pypower/core/solver.py +2451 -0
  87. ams/pypower/eps.py +6 -0
  88. ams/pypower/idx.py +174 -0
  89. ams/pypower/io.py +604 -0
  90. ams/pypower/make/__init__.py +11 -0
  91. ams/pypower/make/matrices.py +665 -0
  92. ams/pypower/make/pdv.py +506 -0
  93. ams/pypower/routines/__init__.py +7 -0
  94. ams/pypower/routines/cpf.py +513 -0
  95. ams/pypower/routines/cpf_callbacks.py +114 -0
  96. ams/pypower/routines/opf.py +1803 -0
  97. ams/pypower/routines/opffcns.py +1946 -0
  98. ams/pypower/routines/pflow.py +852 -0
  99. ams/pypower/toggle.py +1098 -0
  100. ams/pypower/utils.py +293 -0
  101. ams/report.py +212 -50
  102. ams/routines/__init__.py +23 -0
  103. ams/routines/acopf.py +117 -0
  104. ams/routines/cpf.py +65 -0
  105. ams/routines/dcopf.py +241 -0
  106. ams/routines/dcpf.py +209 -0
  107. ams/routines/dcpf0.py +196 -0
  108. ams/routines/dopf.py +150 -0
  109. ams/routines/ed.py +312 -0
  110. ams/routines/pflow.py +255 -0
  111. ams/routines/pflow0.py +113 -0
  112. ams/routines/pflow1.py +156 -0
  113. ams/routines/routine.py +1033 -0
  114. ams/routines/rted.py +519 -0
  115. ams/routines/type.py +160 -0
  116. ams/routines/uc.py +376 -0
  117. ams/shared.py +34 -9
  118. ams/system.py +61 -22
  119. ams/utils/__init__.py +3 -0
  120. ams/utils/misc.py +77 -0
  121. ams/utils/paths.py +257 -0
  122. docs/Makefile +21 -0
  123. docs/build/doctrees/nbsphinx/_examples_demo_demo_AGC_20_1.png +0 -0
  124. docs/build/doctrees/nbsphinx/_examples_demo_demo_AGC_37_1.png +0 -0
  125. docs/build/doctrees/nbsphinx/_examples_demo_demo_AGC_39_1.png +0 -0
  126. docs/build/html/_images/_examples_demo_demo_AGC_20_1.png +0 -0
  127. docs/build/html/_images/_examples_demo_demo_AGC_37_1.png +0 -0
  128. docs/build/html/_images/_examples_demo_demo_AGC_39_1.png +0 -0
  129. docs/build/html/_images/xlsx.png +0 -0
  130. docs/build/html/_static/file.png +0 -0
  131. docs/build/html/_static/minus.png +0 -0
  132. docs/build/html/_static/plus.png +0 -0
  133. docs/make.bat +35 -0
  134. docs/source/_generated/_generated/ams.core.model.Model.alter.rst +6 -0
  135. docs/source/_generated/_generated/ams.core.model.Model.class_name.rst +6 -0
  136. docs/source/_generated/_generated/ams.core.model.Model.doc.rst +6 -0
  137. docs/source/_generated/_generated/ams.core.model.Model.get.rst +6 -0
  138. docs/source/_generated/_generated/ams.core.model.Model.get_idx.rst +6 -0
  139. docs/source/_generated/_generated/ams.core.model.Model.idx2uid.rst +6 -0
  140. docs/source/_generated/_generated/ams.core.model.Model.list2array.rst +6 -0
  141. docs/source/_generated/_generated/ams.core.model.Model.set.rst +6 -0
  142. docs/source/_generated/_generated/ams.core.model.Model.set_backref.rst +6 -0
  143. docs/source/_generated/_generated/ams.core.param.RParam.class_name.rst +6 -0
  144. docs/source/_generated/_generated/ams.core.param.RParam.dtype.rst +6 -0
  145. docs/source/_generated/_generated/ams.core.param.RParam.evaluate.rst +6 -0
  146. docs/source/_generated/_generated/ams.core.param.RParam.get_idx.rst +6 -0
  147. docs/source/_generated/_generated/ams.core.param.RParam.n.rst +6 -0
  148. docs/source/_generated/_generated/ams.core.param.RParam.parse.rst +6 -0
  149. docs/source/_generated/_generated/ams.core.param.RParam.shape.rst +6 -0
  150. docs/source/_generated/_generated/ams.core.param.RParam.size.rst +6 -0
  151. docs/source/_generated/_generated/ams.core.param.RParam.update.rst +6 -0
  152. docs/source/_generated/_generated/ams.core.param.RParam.v.rst +6 -0
  153. docs/source/_generated/_generated/ams.core.service.LoadScale.assign_memory.rst +6 -0
  154. docs/source/_generated/_generated/ams.core.service.LoadScale.class_name.rst +6 -0
  155. docs/source/_generated/_generated/ams.core.service.LoadScale.evaluate.rst +6 -0
  156. docs/source/_generated/_generated/ams.core.service.LoadScale.get_names.rst +6 -0
  157. docs/source/_generated/_generated/ams.core.service.LoadScale.n.rst +6 -0
  158. docs/source/_generated/_generated/ams.core.service.LoadScale.parse.rst +6 -0
  159. docs/source/_generated/_generated/ams.core.service.LoadScale.shape.rst +6 -0
  160. docs/source/_generated/_generated/ams.core.service.LoadScale.size.rst +6 -0
  161. docs/source/_generated/_generated/ams.core.service.LoadScale.update.rst +6 -0
  162. docs/source/_generated/_generated/ams.core.service.LoadScale.v.rst +6 -0
  163. docs/source/_generated/_generated/ams.core.service.MinDur.assign_memory.rst +6 -0
  164. docs/source/_generated/_generated/ams.core.service.MinDur.class_name.rst +6 -0
  165. docs/source/_generated/_generated/ams.core.service.MinDur.evaluate.rst +6 -0
  166. docs/source/_generated/_generated/ams.core.service.MinDur.get_names.rst +6 -0
  167. docs/source/_generated/_generated/ams.core.service.MinDur.n.rst +6 -0
  168. docs/source/_generated/_generated/ams.core.service.MinDur.parse.rst +6 -0
  169. docs/source/_generated/_generated/ams.core.service.MinDur.shape.rst +6 -0
  170. docs/source/_generated/_generated/ams.core.service.MinDur.size.rst +6 -0
  171. docs/source/_generated/_generated/ams.core.service.MinDur.update.rst +6 -0
  172. docs/source/_generated/_generated/ams.core.service.MinDur.v.rst +6 -0
  173. docs/source/_generated/_generated/ams.core.service.MinDur.v0.rst +6 -0
  174. docs/source/_generated/_generated/ams.core.service.MinDur.v1.rst +6 -0
  175. docs/source/_generated/_generated/ams.core.service.NumExpandDim.assign_memory.rst +6 -0
  176. docs/source/_generated/_generated/ams.core.service.NumExpandDim.class_name.rst +6 -0
  177. docs/source/_generated/_generated/ams.core.service.NumExpandDim.evaluate.rst +6 -0
  178. docs/source/_generated/_generated/ams.core.service.NumExpandDim.get_names.rst +6 -0
  179. docs/source/_generated/_generated/ams.core.service.NumExpandDim.n.rst +6 -0
  180. docs/source/_generated/_generated/ams.core.service.NumExpandDim.parse.rst +6 -0
  181. docs/source/_generated/_generated/ams.core.service.NumExpandDim.shape.rst +6 -0
  182. docs/source/_generated/_generated/ams.core.service.NumExpandDim.size.rst +6 -0
  183. docs/source/_generated/_generated/ams.core.service.NumExpandDim.update.rst +6 -0
  184. docs/source/_generated/_generated/ams.core.service.NumExpandDim.v.rst +6 -0
  185. docs/source/_generated/_generated/ams.core.service.NumExpandDim.v0.rst +6 -0
  186. docs/source/_generated/_generated/ams.core.service.NumExpandDim.v1.rst +6 -0
  187. docs/source/_generated/_generated/ams.core.service.NumHstack.assign_memory.rst +6 -0
  188. docs/source/_generated/_generated/ams.core.service.NumHstack.class_name.rst +6 -0
  189. docs/source/_generated/_generated/ams.core.service.NumHstack.evaluate.rst +6 -0
  190. docs/source/_generated/_generated/ams.core.service.NumHstack.get_names.rst +6 -0
  191. docs/source/_generated/_generated/ams.core.service.NumHstack.n.rst +6 -0
  192. docs/source/_generated/_generated/ams.core.service.NumHstack.parse.rst +6 -0
  193. docs/source/_generated/_generated/ams.core.service.NumHstack.shape.rst +6 -0
  194. docs/source/_generated/_generated/ams.core.service.NumHstack.size.rst +6 -0
  195. docs/source/_generated/_generated/ams.core.service.NumHstack.update.rst +6 -0
  196. docs/source/_generated/_generated/ams.core.service.NumHstack.v.rst +6 -0
  197. docs/source/_generated/_generated/ams.core.service.NumHstack.v0.rst +6 -0
  198. docs/source/_generated/_generated/ams.core.service.NumHstack.v1.rst +6 -0
  199. docs/source/_generated/_generated/ams.core.service.NumOp.assign_memory.rst +6 -0
  200. docs/source/_generated/_generated/ams.core.service.NumOp.class_name.rst +6 -0
  201. docs/source/_generated/_generated/ams.core.service.NumOp.evaluate.rst +6 -0
  202. docs/source/_generated/_generated/ams.core.service.NumOp.get_names.rst +6 -0
  203. docs/source/_generated/_generated/ams.core.service.NumOp.n.rst +6 -0
  204. docs/source/_generated/_generated/ams.core.service.NumOp.parse.rst +6 -0
  205. docs/source/_generated/_generated/ams.core.service.NumOp.shape.rst +6 -0
  206. docs/source/_generated/_generated/ams.core.service.NumOp.size.rst +6 -0
  207. docs/source/_generated/_generated/ams.core.service.NumOp.update.rst +6 -0
  208. docs/source/_generated/_generated/ams.core.service.NumOp.v.rst +6 -0
  209. docs/source/_generated/_generated/ams.core.service.NumOp.v0.rst +6 -0
  210. docs/source/_generated/_generated/ams.core.service.NumOp.v1.rst +6 -0
  211. docs/source/_generated/_generated/ams.core.service.NumOpDual.assign_memory.rst +6 -0
  212. docs/source/_generated/_generated/ams.core.service.NumOpDual.class_name.rst +6 -0
  213. docs/source/_generated/_generated/ams.core.service.NumOpDual.evaluate.rst +6 -0
  214. docs/source/_generated/_generated/ams.core.service.NumOpDual.get_names.rst +6 -0
  215. docs/source/_generated/_generated/ams.core.service.NumOpDual.n.rst +6 -0
  216. docs/source/_generated/_generated/ams.core.service.NumOpDual.parse.rst +6 -0
  217. docs/source/_generated/_generated/ams.core.service.NumOpDual.shape.rst +6 -0
  218. docs/source/_generated/_generated/ams.core.service.NumOpDual.size.rst +6 -0
  219. docs/source/_generated/_generated/ams.core.service.NumOpDual.update.rst +6 -0
  220. docs/source/_generated/_generated/ams.core.service.NumOpDual.v.rst +6 -0
  221. docs/source/_generated/_generated/ams.core.service.NumOpDual.v0.rst +6 -0
  222. docs/source/_generated/_generated/ams.core.service.NumOpDual.v1.rst +6 -0
  223. docs/source/_generated/_generated/ams.core.service.RBaseService.assign_memory.rst +6 -0
  224. docs/source/_generated/_generated/ams.core.service.RBaseService.class_name.rst +6 -0
  225. docs/source/_generated/_generated/ams.core.service.RBaseService.evaluate.rst +6 -0
  226. docs/source/_generated/_generated/ams.core.service.RBaseService.get_names.rst +6 -0
  227. docs/source/_generated/_generated/ams.core.service.RBaseService.n.rst +6 -0
  228. docs/source/_generated/_generated/ams.core.service.RBaseService.parse.rst +6 -0
  229. docs/source/_generated/_generated/ams.core.service.RBaseService.shape.rst +6 -0
  230. docs/source/_generated/_generated/ams.core.service.RBaseService.size.rst +6 -0
  231. docs/source/_generated/_generated/ams.core.service.RBaseService.update.rst +6 -0
  232. docs/source/_generated/_generated/ams.core.service.RBaseService.v.rst +6 -0
  233. docs/source/_generated/_generated/ams.core.service.ROperationService.assign_memory.rst +6 -0
  234. docs/source/_generated/_generated/ams.core.service.ROperationService.class_name.rst +6 -0
  235. docs/source/_generated/_generated/ams.core.service.ROperationService.evaluate.rst +6 -0
  236. docs/source/_generated/_generated/ams.core.service.ROperationService.get_names.rst +6 -0
  237. docs/source/_generated/_generated/ams.core.service.ROperationService.n.rst +6 -0
  238. docs/source/_generated/_generated/ams.core.service.ROperationService.parse.rst +6 -0
  239. docs/source/_generated/_generated/ams.core.service.ROperationService.shape.rst +6 -0
  240. docs/source/_generated/_generated/ams.core.service.ROperationService.size.rst +6 -0
  241. docs/source/_generated/_generated/ams.core.service.ROperationService.update.rst +6 -0
  242. docs/source/_generated/_generated/ams.core.service.ROperationService.v.rst +6 -0
  243. docs/source/_generated/_generated/ams.core.service.RampSub.assign_memory.rst +6 -0
  244. docs/source/_generated/_generated/ams.core.service.RampSub.class_name.rst +6 -0
  245. docs/source/_generated/_generated/ams.core.service.RampSub.evaluate.rst +6 -0
  246. docs/source/_generated/_generated/ams.core.service.RampSub.get_names.rst +6 -0
  247. docs/source/_generated/_generated/ams.core.service.RampSub.n.rst +6 -0
  248. docs/source/_generated/_generated/ams.core.service.RampSub.parse.rst +6 -0
  249. docs/source/_generated/_generated/ams.core.service.RampSub.shape.rst +6 -0
  250. docs/source/_generated/_generated/ams.core.service.RampSub.size.rst +6 -0
  251. docs/source/_generated/_generated/ams.core.service.RampSub.update.rst +6 -0
  252. docs/source/_generated/_generated/ams.core.service.RampSub.v.rst +6 -0
  253. docs/source/_generated/_generated/ams.core.service.RampSub.v0.rst +6 -0
  254. docs/source/_generated/_generated/ams.core.service.RampSub.v1.rst +6 -0
  255. docs/source/_generated/_generated/ams.core.service.ValueService.assign_memory.rst +6 -0
  256. docs/source/_generated/_generated/ams.core.service.ValueService.class_name.rst +6 -0
  257. docs/source/_generated/_generated/ams.core.service.ValueService.evaluate.rst +6 -0
  258. docs/source/_generated/_generated/ams.core.service.ValueService.get_names.rst +6 -0
  259. docs/source/_generated/_generated/ams.core.service.ValueService.n.rst +6 -0
  260. docs/source/_generated/_generated/ams.core.service.ValueService.parse.rst +6 -0
  261. docs/source/_generated/_generated/ams.core.service.ValueService.shape.rst +6 -0
  262. docs/source/_generated/_generated/ams.core.service.ValueService.size.rst +6 -0
  263. docs/source/_generated/_generated/ams.core.service.ValueService.update.rst +6 -0
  264. docs/source/_generated/_generated/ams.core.service.ValueService.v.rst +6 -0
  265. docs/source/_generated/_generated/ams.core.service.VarReduction.assign_memory.rst +6 -0
  266. docs/source/_generated/_generated/ams.core.service.VarReduction.class_name.rst +6 -0
  267. docs/source/_generated/_generated/ams.core.service.VarReduction.evaluate.rst +6 -0
  268. docs/source/_generated/_generated/ams.core.service.VarReduction.get_names.rst +6 -0
  269. docs/source/_generated/_generated/ams.core.service.VarReduction.n.rst +6 -0
  270. docs/source/_generated/_generated/ams.core.service.VarReduction.parse.rst +6 -0
  271. docs/source/_generated/_generated/ams.core.service.VarReduction.shape.rst +6 -0
  272. docs/source/_generated/_generated/ams.core.service.VarReduction.size.rst +6 -0
  273. docs/source/_generated/_generated/ams.core.service.VarReduction.update.rst +6 -0
  274. docs/source/_generated/_generated/ams.core.service.VarReduction.v.rst +6 -0
  275. docs/source/_generated/_generated/ams.core.service.VarReduction.v0.rst +6 -0
  276. docs/source/_generated/_generated/ams.core.service.VarReduction.v1.rst +6 -0
  277. docs/source/_generated/_generated/ams.core.service.VarSelect.assign_memory.rst +6 -0
  278. docs/source/_generated/_generated/ams.core.service.VarSelect.class_name.rst +6 -0
  279. docs/source/_generated/_generated/ams.core.service.VarSelect.evaluate.rst +6 -0
  280. docs/source/_generated/_generated/ams.core.service.VarSelect.get_names.rst +6 -0
  281. docs/source/_generated/_generated/ams.core.service.VarSelect.n.rst +6 -0
  282. docs/source/_generated/_generated/ams.core.service.VarSelect.parse.rst +6 -0
  283. docs/source/_generated/_generated/ams.core.service.VarSelect.shape.rst +6 -0
  284. docs/source/_generated/_generated/ams.core.service.VarSelect.size.rst +6 -0
  285. docs/source/_generated/_generated/ams.core.service.VarSelect.update.rst +6 -0
  286. docs/source/_generated/_generated/ams.core.service.VarSelect.v.rst +6 -0
  287. docs/source/_generated/_generated/ams.core.service.VarSelect.v0.rst +6 -0
  288. docs/source/_generated/_generated/ams.core.service.VarSelect.v1.rst +6 -0
  289. docs/source/_generated/_generated/ams.core.service.ZonalSum.assign_memory.rst +6 -0
  290. docs/source/_generated/_generated/ams.core.service.ZonalSum.class_name.rst +6 -0
  291. docs/source/_generated/_generated/ams.core.service.ZonalSum.evaluate.rst +6 -0
  292. docs/source/_generated/_generated/ams.core.service.ZonalSum.get_names.rst +6 -0
  293. docs/source/_generated/_generated/ams.core.service.ZonalSum.n.rst +6 -0
  294. docs/source/_generated/_generated/ams.core.service.ZonalSum.parse.rst +6 -0
  295. docs/source/_generated/_generated/ams.core.service.ZonalSum.shape.rst +6 -0
  296. docs/source/_generated/_generated/ams.core.service.ZonalSum.size.rst +6 -0
  297. docs/source/_generated/_generated/ams.core.service.ZonalSum.update.rst +6 -0
  298. docs/source/_generated/_generated/ams.core.service.ZonalSum.v.rst +6 -0
  299. docs/source/_generated/_generated/ams.core.service.ZonalSum.v0.rst +6 -0
  300. docs/source/_generated/_generated/ams.core.service.ZonalSum.v1.rst +6 -0
  301. docs/source/_generated/_generated/ams.interface.Dynamic.is_tds.rst +6 -0
  302. docs/source/_generated/_generated/ams.interface.Dynamic.link_andes.rst +6 -0
  303. docs/source/_generated/_generated/ams.interface.Dynamic.receive.rst +6 -0
  304. docs/source/_generated/_generated/ams.interface.Dynamic.send.rst +6 -0
  305. docs/source/_generated/_generated/ams.opt.constraint.Constraint.class_name.rst +6 -0
  306. docs/source/_generated/_generated/ams.opt.constraint.Constraint.e.rst +6 -0
  307. docs/source/_generated/_generated/ams.opt.constraint.Constraint.evaluate.rst +6 -0
  308. docs/source/_generated/_generated/ams.opt.constraint.Constraint.n.rst +6 -0
  309. docs/source/_generated/_generated/ams.opt.constraint.Constraint.parse.rst +6 -0
  310. docs/source/_generated/_generated/ams.opt.constraint.Constraint.shape.rst +6 -0
  311. docs/source/_generated/_generated/ams.opt.constraint.Constraint.size.rst +6 -0
  312. docs/source/_generated/_generated/ams.opt.constraint.Constraint.v.rst +6 -0
  313. docs/source/_generated/_generated/ams.opt.exprcalc.ExpressionCalc.class_name.rst +6 -0
  314. docs/source/_generated/_generated/ams.opt.exprcalc.ExpressionCalc.e.rst +6 -0
  315. docs/source/_generated/_generated/ams.opt.exprcalc.ExpressionCalc.evaluate.rst +6 -0
  316. docs/source/_generated/_generated/ams.opt.exprcalc.ExpressionCalc.get_idx.rst +6 -0
  317. docs/source/_generated/_generated/ams.opt.exprcalc.ExpressionCalc.n.rst +6 -0
  318. docs/source/_generated/_generated/ams.opt.exprcalc.ExpressionCalc.parse.rst +6 -0
  319. docs/source/_generated/_generated/ams.opt.exprcalc.ExpressionCalc.shape.rst +6 -0
  320. docs/source/_generated/_generated/ams.opt.exprcalc.ExpressionCalc.size.rst +6 -0
  321. docs/source/_generated/_generated/ams.opt.exprcalc.ExpressionCalc.v.rst +6 -0
  322. docs/source/_generated/_generated/ams.opt.expression.Expression.class_name.rst +6 -0
  323. docs/source/_generated/_generated/ams.opt.expression.Expression.e.rst +6 -0
  324. docs/source/_generated/_generated/ams.opt.expression.Expression.evaluate.rst +6 -0
  325. docs/source/_generated/_generated/ams.opt.expression.Expression.get_idx.rst +6 -0
  326. docs/source/_generated/_generated/ams.opt.expression.Expression.n.rst +6 -0
  327. docs/source/_generated/_generated/ams.opt.expression.Expression.parse.rst +6 -0
  328. docs/source/_generated/_generated/ams.opt.expression.Expression.shape.rst +6 -0
  329. docs/source/_generated/_generated/ams.opt.expression.Expression.size.rst +6 -0
  330. docs/source/_generated/_generated/ams.opt.expression.Expression.v.rst +6 -0
  331. docs/source/_generated/_generated/ams.opt.objective.Objective.class_name.rst +6 -0
  332. docs/source/_generated/_generated/ams.opt.objective.Objective.e.rst +6 -0
  333. docs/source/_generated/_generated/ams.opt.objective.Objective.evaluate.rst +6 -0
  334. docs/source/_generated/_generated/ams.opt.objective.Objective.n.rst +6 -0
  335. docs/source/_generated/_generated/ams.opt.objective.Objective.parse.rst +6 -0
  336. docs/source/_generated/_generated/ams.opt.objective.Objective.shape.rst +6 -0
  337. docs/source/_generated/_generated/ams.opt.objective.Objective.size.rst +6 -0
  338. docs/source/_generated/_generated/ams.opt.objective.Objective.v.rst +6 -0
  339. docs/source/_generated/_generated/ams.opt.omodel.OModel.class_name.rst +6 -0
  340. docs/source/_generated/_generated/ams.opt.omodel.OModel.evaluate.rst +6 -0
  341. docs/source/_generated/_generated/ams.opt.omodel.OModel.finalize.rst +6 -0
  342. docs/source/_generated/_generated/ams.opt.omodel.OModel.init.rst +6 -0
  343. docs/source/_generated/_generated/ams.opt.omodel.OModel.initialized.rst +6 -0
  344. docs/source/_generated/_generated/ams.opt.omodel.OModel.parse.rst +6 -0
  345. docs/source/_generated/_generated/ams.opt.omodel.OModel.update.rst +6 -0
  346. docs/source/_generated/_generated/ams.opt.omodel.OModelBase.class_name.rst +6 -0
  347. docs/source/_generated/_generated/ams.opt.omodel.OModelBase.evaluate.rst +6 -0
  348. docs/source/_generated/_generated/ams.opt.omodel.OModelBase.finalize.rst +6 -0
  349. docs/source/_generated/_generated/ams.opt.omodel.OModelBase.init.rst +6 -0
  350. docs/source/_generated/_generated/ams.opt.omodel.OModelBase.initialized.rst +6 -0
  351. docs/source/_generated/_generated/ams.opt.omodel.OModelBase.parse.rst +6 -0
  352. docs/source/_generated/_generated/ams.opt.omodel.OModelBase.update.rst +6 -0
  353. docs/source/_generated/_generated/ams.opt.optbase.OptzBase.class_name.rst +6 -0
  354. docs/source/_generated/_generated/ams.opt.optbase.OptzBase.evaluate.rst +6 -0
  355. docs/source/_generated/_generated/ams.opt.optbase.OptzBase.n.rst +6 -0
  356. docs/source/_generated/_generated/ams.opt.optbase.OptzBase.parse.rst +6 -0
  357. docs/source/_generated/_generated/ams.opt.optbase.OptzBase.shape.rst +6 -0
  358. docs/source/_generated/_generated/ams.opt.optbase.OptzBase.size.rst +6 -0
  359. docs/source/_generated/_generated/ams.opt.param.Param.class_name.rst +6 -0
  360. docs/source/_generated/_generated/ams.opt.param.Param.evaluate.rst +6 -0
  361. docs/source/_generated/_generated/ams.opt.param.Param.n.rst +6 -0
  362. docs/source/_generated/_generated/ams.opt.param.Param.parse.rst +6 -0
  363. docs/source/_generated/_generated/ams.opt.param.Param.shape.rst +6 -0
  364. docs/source/_generated/_generated/ams.opt.param.Param.size.rst +6 -0
  365. docs/source/_generated/_generated/ams.opt.param.Param.update.rst +6 -0
  366. docs/source/_generated/_generated/ams.opt.var.Var.class_name.rst +6 -0
  367. docs/source/_generated/_generated/ams.opt.var.Var.evaluate.rst +6 -0
  368. docs/source/_generated/_generated/ams.opt.var.Var.get_idx.rst +6 -0
  369. docs/source/_generated/_generated/ams.opt.var.Var.n.rst +6 -0
  370. docs/source/_generated/_generated/ams.opt.var.Var.parse.rst +6 -0
  371. docs/source/_generated/_generated/ams.opt.var.Var.shape.rst +6 -0
  372. docs/source/_generated/_generated/ams.opt.var.Var.size.rst +6 -0
  373. docs/source/_generated/_generated/ams.opt.var.Var.v.rst +6 -0
  374. docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.addConstrs.rst +6 -0
  375. docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.addRParam.rst +6 -0
  376. docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.addService.rst +6 -0
  377. docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.addVars.rst +6 -0
  378. docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.class_name.rst +6 -0
  379. docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.dc2ac.rst +6 -0
  380. docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.disable.rst +6 -0
  381. docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.doc.rst +6 -0
  382. docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.enable.rst +6 -0
  383. docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.export_csv.rst +6 -0
  384. docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.get.rst +6 -0
  385. docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.init.rst +6 -0
  386. docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.run.rst +6 -0
  387. docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.set.rst +6 -0
  388. docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.solve.rst +6 -0
  389. docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.summary.rst +6 -0
  390. docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.unpack.rst +6 -0
  391. docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.update.rst +6 -0
  392. docs/source/_generated/_generated/ams.routines.pflow.PFlow.addConstrs.rst +6 -0
  393. docs/source/_generated/_generated/ams.routines.pflow.PFlow.addRParam.rst +6 -0
  394. docs/source/_generated/_generated/ams.routines.pflow.PFlow.addService.rst +6 -0
  395. docs/source/_generated/_generated/ams.routines.pflow.PFlow.addVars.rst +6 -0
  396. docs/source/_generated/_generated/ams.routines.pflow.PFlow.class_name.rst +6 -0
  397. docs/source/_generated/_generated/ams.routines.pflow.PFlow.dc2ac.rst +6 -0
  398. docs/source/_generated/_generated/ams.routines.pflow.PFlow.disable.rst +6 -0
  399. docs/source/_generated/_generated/ams.routines.pflow.PFlow.doc.rst +6 -0
  400. docs/source/_generated/_generated/ams.routines.pflow.PFlow.enable.rst +6 -0
  401. docs/source/_generated/_generated/ams.routines.pflow.PFlow.export_csv.rst +6 -0
  402. docs/source/_generated/_generated/ams.routines.pflow.PFlow.get.rst +6 -0
  403. docs/source/_generated/_generated/ams.routines.pflow.PFlow.init.rst +6 -0
  404. docs/source/_generated/_generated/ams.routines.pflow.PFlow.run.rst +6 -0
  405. docs/source/_generated/_generated/ams.routines.pflow.PFlow.set.rst +6 -0
  406. docs/source/_generated/_generated/ams.routines.pflow.PFlow.solve.rst +6 -0
  407. docs/source/_generated/_generated/ams.routines.pflow.PFlow.summary.rst +6 -0
  408. docs/source/_generated/_generated/ams.routines.pflow.PFlow.unpack.rst +6 -0
  409. docs/source/_generated/_generated/ams.routines.pflow.PFlow.update.rst +6 -0
  410. docs/source/_generated/_generated/ams.routines.routine.RoutineBase.addConstrs.rst +6 -0
  411. docs/source/_generated/_generated/ams.routines.routine.RoutineBase.addRParam.rst +6 -0
  412. docs/source/_generated/_generated/ams.routines.routine.RoutineBase.addService.rst +6 -0
  413. docs/source/_generated/_generated/ams.routines.routine.RoutineBase.addVars.rst +6 -0
  414. docs/source/_generated/_generated/ams.routines.routine.RoutineBase.class_name.rst +6 -0
  415. docs/source/_generated/_generated/ams.routines.routine.RoutineBase.dc2ac.rst +6 -0
  416. docs/source/_generated/_generated/ams.routines.routine.RoutineBase.disable.rst +6 -0
  417. docs/source/_generated/_generated/ams.routines.routine.RoutineBase.doc.rst +6 -0
  418. docs/source/_generated/_generated/ams.routines.routine.RoutineBase.enable.rst +6 -0
  419. docs/source/_generated/_generated/ams.routines.routine.RoutineBase.export_csv.rst +6 -0
  420. docs/source/_generated/_generated/ams.routines.routine.RoutineBase.get.rst +6 -0
  421. docs/source/_generated/_generated/ams.routines.routine.RoutineBase.init.rst +6 -0
  422. docs/source/_generated/_generated/ams.routines.routine.RoutineBase.run.rst +6 -0
  423. docs/source/_generated/_generated/ams.routines.routine.RoutineBase.set.rst +6 -0
  424. docs/source/_generated/_generated/ams.routines.routine.RoutineBase.solve.rst +6 -0
  425. docs/source/_generated/_generated/ams.routines.routine.RoutineBase.summary.rst +6 -0
  426. docs/source/_generated/_generated/ams.routines.routine.RoutineBase.unpack.rst +6 -0
  427. docs/source/_generated/_generated/ams.routines.routine.RoutineBase.update.rst +6 -0
  428. docs/source/_generated/_generated/ams.system.System.add.rst +6 -0
  429. docs/source/_generated/_generated/ams.system.System.as_dict.rst +6 -0
  430. docs/source/_generated/_generated/ams.system.System.calc_pu_coeff.rst +6 -0
  431. docs/source/_generated/_generated/ams.system.System.call_models.rst +6 -0
  432. docs/source/_generated/_generated/ams.system.System.collect_config.rst +6 -0
  433. docs/source/_generated/_generated/ams.system.System.collect_ref.rst +6 -0
  434. docs/source/_generated/_generated/ams.system.System.connectivity.rst +6 -0
  435. docs/source/_generated/_generated/ams.system.System.e_clear.rst +6 -0
  436. docs/source/_generated/_generated/ams.system.System.f_update.rst +6 -0
  437. docs/source/_generated/_generated/ams.system.System.fg_to_dae.rst +6 -0
  438. docs/source/_generated/_generated/ams.system.System.find_devices.rst +6 -0
  439. docs/source/_generated/_generated/ams.system.System.find_models.rst +6 -0
  440. docs/source/_generated/_generated/ams.system.System.from_ipysheet.rst +6 -0
  441. docs/source/_generated/_generated/ams.system.System.g_islands.rst +6 -0
  442. docs/source/_generated/_generated/ams.system.System.g_update.rst +6 -0
  443. docs/source/_generated/_generated/ams.system.System.get_z.rst +6 -0
  444. docs/source/_generated/_generated/ams.system.System.import_groups.rst +6 -0
  445. docs/source/_generated/_generated/ams.system.System.import_models.rst +6 -0
  446. docs/source/_generated/_generated/ams.system.System.import_routines.rst +6 -0
  447. docs/source/_generated/_generated/ams.system.System.import_types.rst +6 -0
  448. docs/source/_generated/_generated/ams.system.System.init.rst +6 -0
  449. docs/source/_generated/_generated/ams.system.System.j_islands.rst +6 -0
  450. docs/source/_generated/_generated/ams.system.System.j_update.rst +6 -0
  451. docs/source/_generated/_generated/ams.system.System.l_update_eq.rst +6 -0
  452. docs/source/_generated/_generated/ams.system.System.l_update_var.rst +6 -0
  453. docs/source/_generated/_generated/ams.system.System.link_ext_param.rst +6 -0
  454. docs/source/_generated/_generated/ams.system.System.precompile.rst +6 -0
  455. docs/source/_generated/_generated/ams.system.System.prepare.rst +6 -0
  456. docs/source/_generated/_generated/ams.system.System.reload.rst +6 -0
  457. docs/source/_generated/_generated/ams.system.System.remove_pycapsule.rst +6 -0
  458. docs/source/_generated/_generated/ams.system.System.report.rst +6 -0
  459. docs/source/_generated/_generated/ams.system.System.reset.rst +6 -0
  460. docs/source/_generated/_generated/ams.system.System.s_update_post.rst +6 -0
  461. docs/source/_generated/_generated/ams.system.System.s_update_var.rst +6 -0
  462. docs/source/_generated/_generated/ams.system.System.save_config.rst +6 -0
  463. docs/source/_generated/_generated/ams.system.System.set_address.rst +6 -0
  464. docs/source/_generated/_generated/ams.system.System.set_config.rst +6 -0
  465. docs/source/_generated/_generated/ams.system.System.set_dae_names.rst +6 -0
  466. docs/source/_generated/_generated/ams.system.System.set_output_subidx.rst +6 -0
  467. docs/source/_generated/_generated/ams.system.System.set_var_arrays.rst +6 -0
  468. docs/source/_generated/_generated/ams.system.System.setup.rst +6 -0
  469. docs/source/_generated/_generated/ams.system.System.store_adder_setter.rst +6 -0
  470. docs/source/_generated/_generated/ams.system.System.store_existing.rst +6 -0
  471. docs/source/_generated/_generated/ams.system.System.store_no_check_init.rst +6 -0
  472. docs/source/_generated/_generated/ams.system.System.store_sparse_pattern.rst +6 -0
  473. docs/source/_generated/_generated/ams.system.System.store_switch_times.rst +6 -0
  474. docs/source/_generated/_generated/ams.system.System.summary.rst +6 -0
  475. docs/source/_generated/_generated/ams.system.System.supported_models.rst +6 -0
  476. docs/source/_generated/_generated/ams.system.System.supported_routines.rst +6 -0
  477. docs/source/_generated/_generated/ams.system.System.switch_action.rst +6 -0
  478. docs/source/_generated/_generated/ams.system.System.to_andes.rst +6 -0
  479. docs/source/_generated/_generated/ams.system.System.to_ipysheet.rst +6 -0
  480. docs/source/_generated/_generated/ams.system.System.undill.rst +6 -0
  481. docs/source/_generated/_generated/ams.system.System.vars_to_dae.rst +6 -0
  482. docs/source/_generated/_generated/ams.system.System.vars_to_models.rst +6 -0
  483. docs/source/_generated/_generated/ams.utils.paths.DisplayablePath.display_filename_prefix_last.rst +6 -0
  484. docs/source/_generated/_generated/ams.utils.paths.DisplayablePath.display_filename_prefix_middle.rst +6 -0
  485. docs/source/_generated/_generated/ams.utils.paths.DisplayablePath.display_parent_prefix_last.rst +6 -0
  486. docs/source/_generated/_generated/ams.utils.paths.DisplayablePath.display_parent_prefix_middle.rst +6 -0
  487. docs/source/_generated/_generated/ams.utils.paths.DisplayablePath.displayable.rst +6 -0
  488. docs/source/_generated/_generated/ams.utils.paths.DisplayablePath.displayname.rst +6 -0
  489. docs/source/_generated/_generated/ams.utils.paths.DisplayablePath.make_tree.rst +6 -0
  490. docs/source/_generated/ams.cli.create_parser.rst +6 -0
  491. docs/source/_generated/ams.cli.main.rst +6 -0
  492. docs/source/_generated/ams.cli.preamble.rst +6 -0
  493. docs/source/_generated/ams.cli.rst +32 -0
  494. docs/source/_generated/ams.core.model.Model.rst +56 -0
  495. docs/source/_generated/ams.core.model.rst +30 -0
  496. docs/source/_generated/ams.core.param.RParam.rst +49 -0
  497. docs/source/_generated/ams.core.param.rst +30 -0
  498. docs/source/_generated/ams.core.service.LoadScale.rst +51 -0
  499. docs/source/_generated/ams.core.service.MinDur.rst +53 -0
  500. docs/source/_generated/ams.core.service.NumExpandDim.rst +53 -0
  501. docs/source/_generated/ams.core.service.NumHstack.rst +53 -0
  502. docs/source/_generated/ams.core.service.NumOp.rst +53 -0
  503. docs/source/_generated/ams.core.service.NumOpDual.rst +53 -0
  504. docs/source/_generated/ams.core.service.RBaseService.rst +51 -0
  505. docs/source/_generated/ams.core.service.ROperationService.rst +51 -0
  506. docs/source/_generated/ams.core.service.RampSub.rst +53 -0
  507. docs/source/_generated/ams.core.service.ValueService.rst +51 -0
  508. docs/source/_generated/ams.core.service.VarReduction.rst +53 -0
  509. docs/source/_generated/ams.core.service.VarSelect.rst +53 -0
  510. docs/source/_generated/ams.core.service.ZonalSum.rst +53 -0
  511. docs/source/_generated/ams.core.service.rst +42 -0
  512. docs/source/_generated/ams.interface.Dynamic.rst +41 -0
  513. docs/source/_generated/ams.interface.build_group_table.rst +6 -0
  514. docs/source/_generated/ams.interface.make_link_table.rst +6 -0
  515. docs/source/_generated/ams.interface.parse_addfile.rst +6 -0
  516. docs/source/_generated/ams.interface.replace_dev.rst +6 -0
  517. docs/source/_generated/ams.interface.rst +43 -0
  518. docs/source/_generated/ams.interface.sync_adsys.rst +6 -0
  519. docs/source/_generated/ams.interface.to_andes.rst +6 -0
  520. docs/source/_generated/ams.interface.verify_pf.rst +6 -0
  521. docs/source/_generated/ams.io.guess.rst +6 -0
  522. docs/source/_generated/ams.io.json.rst +30 -0
  523. docs/source/_generated/ams.io.json.write.rst +6 -0
  524. docs/source/_generated/ams.io.matpower.mpc2system.rst +6 -0
  525. docs/source/_generated/ams.io.matpower.read.rst +6 -0
  526. docs/source/_generated/ams.io.matpower.rst +33 -0
  527. docs/source/_generated/ams.io.matpower.system2mpc.rst +6 -0
  528. docs/source/_generated/ams.io.matpower.testlines.rst +6 -0
  529. docs/source/_generated/ams.io.parse.rst +6 -0
  530. docs/source/_generated/ams.io.psse.rst +23 -0
  531. docs/source/_generated/ams.io.pypower.ppc2system.rst +6 -0
  532. docs/source/_generated/ams.io.pypower.py2ppc.rst +6 -0
  533. docs/source/_generated/ams.io.pypower.read.rst +6 -0
  534. docs/source/_generated/ams.io.pypower.rst +34 -0
  535. docs/source/_generated/ams.io.pypower.system2ppc.rst +6 -0
  536. docs/source/_generated/ams.io.pypower.testlines.rst +6 -0
  537. docs/source/_generated/ams.io.rst +45 -0
  538. docs/source/_generated/ams.io.xlsx.rst +30 -0
  539. docs/source/_generated/ams.io.xlsx.write.rst +6 -0
  540. docs/source/_generated/ams.main.config_logger.rst +6 -0
  541. docs/source/_generated/ams.main.demo.rst +6 -0
  542. docs/source/_generated/ams.main.doc.rst +6 -0
  543. docs/source/_generated/ams.main.edit_conf.rst +6 -0
  544. docs/source/_generated/ams.main.find_log_path.rst +6 -0
  545. docs/source/_generated/ams.main.load.rst +6 -0
  546. docs/source/_generated/ams.main.misc.rst +6 -0
  547. docs/source/_generated/ams.main.print_license.rst +6 -0
  548. docs/source/_generated/ams.main.remove_output.rst +6 -0
  549. docs/source/_generated/ams.main.rst +44 -0
  550. docs/source/_generated/ams.main.run.rst +6 -0
  551. docs/source/_generated/ams.main.run_case.rst +6 -0
  552. docs/source/_generated/ams.main.save_conf.rst +6 -0
  553. docs/source/_generated/ams.main.selftest.rst +6 -0
  554. docs/source/_generated/ams.main.set_logger_level.rst +6 -0
  555. docs/source/_generated/ams.main.versioninfo.rst +6 -0
  556. docs/source/_generated/ams.opt.constraint.Constraint.rst +43 -0
  557. docs/source/_generated/ams.opt.constraint.rst +30 -0
  558. docs/source/_generated/ams.opt.exprcalc.ExpressionCalc.rst +46 -0
  559. docs/source/_generated/ams.opt.exprcalc.rst +30 -0
  560. docs/source/_generated/ams.opt.expression.Expression.rst +46 -0
  561. docs/source/_generated/ams.opt.expression.rst +30 -0
  562. docs/source/_generated/ams.opt.objective.Objective.rst +43 -0
  563. docs/source/_generated/ams.opt.objective.rst +30 -0
  564. docs/source/_generated/ams.opt.omodel.OModel.rst +48 -0
  565. docs/source/_generated/ams.opt.omodel.OModelBase.rst +48 -0
  566. docs/source/_generated/ams.opt.omodel.rst +31 -0
  567. docs/source/_generated/ams.opt.optbase.OptzBase.rst +41 -0
  568. docs/source/_generated/ams.opt.optbase.ensure_mats_and_parsed.rst +6 -0
  569. docs/source/_generated/ams.opt.optbase.ensure_symbols.rst +6 -0
  570. docs/source/_generated/ams.opt.optbase.rst +38 -0
  571. docs/source/_generated/ams.opt.param.Param.rst +44 -0
  572. docs/source/_generated/ams.opt.param.rst +30 -0
  573. docs/source/_generated/ams.opt.rst +40 -0
  574. docs/source/_generated/ams.opt.var.Var.rst +45 -0
  575. docs/source/_generated/ams.opt.var.rst +30 -0
  576. docs/source/_generated/ams.routines.dcopf.DCOPF.rst +83 -0
  577. docs/source/_generated/ams.routines.dcopf.rst +30 -0
  578. docs/source/_generated/ams.routines.pflow.PFlow.rst +83 -0
  579. docs/source/_generated/ams.routines.pflow.rst +30 -0
  580. docs/source/_generated/ams.routines.routine.RoutineBase.rst +83 -0
  581. docs/source/_generated/ams.routines.routine.collect_data.rst +6 -0
  582. docs/source/_generated/ams.routines.routine.initialize_data_dict.rst +6 -0
  583. docs/source/_generated/ams.routines.routine.rst +38 -0
  584. docs/source/_generated/ams.system.System.rst +189 -0
  585. docs/source/_generated/ams.system.disable_method.rst +6 -0
  586. docs/source/_generated/ams.system.disable_methods.rst +6 -0
  587. docs/source/_generated/ams.system.example.rst +6 -0
  588. docs/source/_generated/ams.system.rst +39 -0
  589. docs/source/_generated/ams.utils.paths.DisplayablePath.rst +42 -0
  590. docs/source/_generated/ams.utils.paths.ams_root.rst +6 -0
  591. docs/source/_generated/ams.utils.paths.cases_root.rst +6 -0
  592. docs/source/_generated/ams.utils.paths.confirm_overwrite.rst +6 -0
  593. docs/source/_generated/ams.utils.paths.get_case.rst +6 -0
  594. docs/source/_generated/ams.utils.paths.get_config_path.rst +6 -0
  595. docs/source/_generated/ams.utils.paths.get_dot_andes_path.rst +6 -0
  596. docs/source/_generated/ams.utils.paths.get_log_dir.rst +6 -0
  597. docs/source/_generated/ams.utils.paths.get_pkl_path.rst +6 -0
  598. docs/source/_generated/ams.utils.paths.get_pycode_path.rst +6 -0
  599. docs/source/_generated/ams.utils.paths.list_cases.rst +6 -0
  600. docs/source/_generated/ams.utils.paths.rst +47 -0
  601. docs/source/_generated/ams.utils.paths.tests_root.rst +6 -0
  602. docs/source/_templates/autosummary/base.rst +5 -0
  603. docs/source/_templates/autosummary/class.rst +35 -0
  604. docs/source/_templates/autosummary/module.rst +65 -0
  605. docs/source/_templates/autosummary/module_toctree.rst +66 -0
  606. docs/source/api.rst +102 -0
  607. docs/source/conf.py +203 -0
  608. docs/source/examples/index.rst +34 -0
  609. docs/source/genmodelref.py +61 -0
  610. docs/source/genroutineref.py +47 -0
  611. docs/source/getting_started/copyright.rst +20 -0
  612. docs/source/getting_started/formats/index.rst +20 -0
  613. docs/source/getting_started/formats/matpower.rst +183 -0
  614. docs/source/getting_started/formats/psse.rst +46 -0
  615. docs/source/getting_started/formats/pypower.rst +223 -0
  616. docs/source/getting_started/formats/xlsx.png +0 -0
  617. docs/source/getting_started/formats/xlsx.rst +23 -0
  618. docs/source/getting_started/index.rst +76 -0
  619. docs/source/getting_started/install.rst +234 -0
  620. docs/source/getting_started/overview.rst +26 -0
  621. docs/source/getting_started/testcase.rst +45 -0
  622. docs/source/getting_started/verification.rst +13 -0
  623. docs/source/groupdoc/ACLine.rst +92 -0
  624. docs/source/groupdoc/ACShort.rst +51 -0
  625. docs/source/groupdoc/ACTopology.rst +66 -0
  626. docs/source/groupdoc/Collection.rst +84 -0
  627. docs/source/groupdoc/Cost.rst +135 -0
  628. docs/source/groupdoc/DG.rst +204 -0
  629. docs/source/groupdoc/Horizon.rst +97 -0
  630. docs/source/groupdoc/Information.rst +36 -0
  631. docs/source/groupdoc/RenGen.rst +63 -0
  632. docs/source/groupdoc/Reserve.rst +135 -0
  633. docs/source/groupdoc/StaticGen.rst +229 -0
  634. docs/source/groupdoc/StaticLoad.rst +53 -0
  635. docs/source/groupdoc/StaticShunt.rst +45 -0
  636. docs/source/groupdoc/Undefined.rst +63 -0
  637. docs/source/groupdoc/VSG.rst +125 -0
  638. docs/source/images/dcopf_time.png +0 -0
  639. docs/source/images/sponsors/CURENT_Logo_NameOnTrans.png +0 -0
  640. docs/source/images/sponsors/CURENT_Logo_Transparent.png +0 -0
  641. docs/source/images/sponsors/CURENT_Logo_Transparent_Name.png +0 -0
  642. docs/source/images/sponsors/doe.png +0 -0
  643. docs/source/index.rst +108 -0
  644. docs/source/modeling/_generated/_generated/ams.opt.Constraint.class_name.rst +6 -0
  645. docs/source/modeling/_generated/_generated/ams.opt.Constraint.e.rst +6 -0
  646. docs/source/modeling/_generated/_generated/ams.opt.Constraint.evaluate.rst +6 -0
  647. docs/source/modeling/_generated/_generated/ams.opt.Constraint.n.rst +6 -0
  648. docs/source/modeling/_generated/_generated/ams.opt.Constraint.parse.rst +6 -0
  649. docs/source/modeling/_generated/_generated/ams.opt.Constraint.shape.rst +6 -0
  650. docs/source/modeling/_generated/_generated/ams.opt.Constraint.size.rst +6 -0
  651. docs/source/modeling/_generated/_generated/ams.opt.Constraint.v.rst +6 -0
  652. docs/source/modeling/_generated/_generated/ams.opt.OModel.class_name.rst +6 -0
  653. docs/source/modeling/_generated/_generated/ams.opt.OModel.evaluate.rst +6 -0
  654. docs/source/modeling/_generated/_generated/ams.opt.OModel.finalize.rst +6 -0
  655. docs/source/modeling/_generated/_generated/ams.opt.OModel.init.rst +6 -0
  656. docs/source/modeling/_generated/_generated/ams.opt.OModel.initialized.rst +6 -0
  657. docs/source/modeling/_generated/_generated/ams.opt.OModel.parse.rst +6 -0
  658. docs/source/modeling/_generated/_generated/ams.opt.OModel.update.rst +6 -0
  659. docs/source/modeling/_generated/_generated/ams.opt.Objective.class_name.rst +6 -0
  660. docs/source/modeling/_generated/_generated/ams.opt.Objective.e.rst +6 -0
  661. docs/source/modeling/_generated/_generated/ams.opt.Objective.evaluate.rst +6 -0
  662. docs/source/modeling/_generated/_generated/ams.opt.Objective.n.rst +6 -0
  663. docs/source/modeling/_generated/_generated/ams.opt.Objective.parse.rst +6 -0
  664. docs/source/modeling/_generated/_generated/ams.opt.Objective.shape.rst +6 -0
  665. docs/source/modeling/_generated/_generated/ams.opt.Objective.size.rst +6 -0
  666. docs/source/modeling/_generated/_generated/ams.opt.Objective.v.rst +6 -0
  667. docs/source/modeling/_generated/_generated/ams.opt.Var.class_name.rst +6 -0
  668. docs/source/modeling/_generated/_generated/ams.opt.Var.evaluate.rst +6 -0
  669. docs/source/modeling/_generated/_generated/ams.opt.Var.get_idx.rst +6 -0
  670. docs/source/modeling/_generated/_generated/ams.opt.Var.n.rst +6 -0
  671. docs/source/modeling/_generated/_generated/ams.opt.Var.parse.rst +6 -0
  672. docs/source/modeling/_generated/_generated/ams.opt.Var.shape.rst +6 -0
  673. docs/source/modeling/_generated/_generated/ams.opt.Var.size.rst +6 -0
  674. docs/source/modeling/_generated/_generated/ams.opt.Var.v.rst +6 -0
  675. docs/source/modeling/_generated/ams.opt.Constraint.rst +43 -0
  676. docs/source/modeling/_generated/ams.opt.OModel.rst +48 -0
  677. docs/source/modeling/_generated/ams.opt.Objective.rst +43 -0
  678. docs/source/modeling/_generated/ams.opt.Var.rst +45 -0
  679. docs/source/modeling/example.rst +159 -0
  680. docs/source/modeling/index.rst +17 -0
  681. docs/source/modeling/model.rst +210 -0
  682. docs/source/modeling/routine.rst +122 -0
  683. docs/source/modeling/system.rst +51 -0
  684. docs/source/modelref.rst +66 -0
  685. docs/source/release-notes.rst +385 -0
  686. docs/source/routineref.rst +38 -0
  687. docs/source/typedoc/ACED.rst +91 -0
  688. docs/source/typedoc/DCED.rst +1869 -0
  689. docs/source/typedoc/DCUC.rst +899 -0
  690. docs/source/typedoc/DED.rst +390 -0
  691. docs/source/typedoc/PF.rst +376 -0
  692. docs/source/typedoc/UndefinedType.rst +8 -0
  693. icebar/ips/ips.py +668 -0
  694. ltbams-1.0.0.dist-info/METADATA +231 -0
  695. ltbams-1.0.0.dist-info/RECORD +725 -0
  696. {ltbams-0.9.9.dist-info → ltbams-1.0.0.dist-info}/WHEEL +1 -1
  697. ltbams-1.0.0.dist-info/top_level.txt +5 -0
  698. tests/__init__.py +0 -0
  699. tests/test_1st_system.py +33 -0
  700. tests/test_addressing.py +40 -0
  701. tests/test_andes_mats.py +61 -0
  702. tests/test_case.py +266 -0
  703. tests/test_cli.py +34 -0
  704. tests/test_export_csv.py +89 -0
  705. tests/test_group.py +83 -0
  706. tests/test_interface.py +216 -0
  707. tests/test_io.py +32 -0
  708. tests/test_jumper.py +27 -0
  709. tests/test_known_good.py +267 -0
  710. tests/test_matp.py +437 -0
  711. tests/test_model.py +54 -0
  712. tests/test_omodel.py +119 -0
  713. tests/test_paths.py +22 -0
  714. tests/test_report.py +245 -0
  715. tests/test_repr.py +21 -0
  716. tests/test_routine.py +178 -0
  717. tests/test_rtn_dcopf.py +101 -0
  718. tests/test_rtn_dcpf.py +77 -0
  719. tests/test_rtn_ed.py +275 -0
  720. tests/test_rtn_pflow.py +219 -0
  721. tests/test_rtn_rted.py +273 -0
  722. tests/test_rtn_uc.py +248 -0
  723. tests/test_service.py +73 -0
  724. ltbams-0.9.9.dist-info/LICENSE +0 -692
  725. ltbams-0.9.9.dist-info/METADATA +0 -859
  726. ltbams-0.9.9.dist-info/RECORD +0 -14
  727. ltbams-0.9.9.dist-info/top_level.txt +0 -1
  728. {ltbams-0.9.9.dist-info → ltbams-1.0.0.dist-info}/entry_points.txt +0 -0
ams/routines/uc.py ADDED
@@ -0,0 +1,376 @@
1
+ """
2
+ Unit commitment routines.
3
+ """
4
+ import logging
5
+ from collections import OrderedDict
6
+ import numpy as np
7
+ import pandas as pd
8
+
9
+ from ams.core.param import RParam
10
+ from ams.core.service import (NumOp, NumOpDual, MinDur)
11
+ from ams.routines.dcopf import DCOPF
12
+ from ams.routines.rted import RTEDBase
13
+ from ams.routines.ed import SRBase, MPBase, ESD1MPBase, DGBase
14
+
15
+ from ams.opt import Var, Constraint
16
+
17
+ logger = logging.getLogger(__name__)
18
+
19
+
20
+ class NSRBase:
21
+ """
22
+ Base class for non-spinning reserve.
23
+ """
24
+
25
+ def __init__(self) -> None:
26
+ self.cnsr = RParam(info='cost for non-spinning reserve',
27
+ name='cnsr', tex_name=r'c_{nsr}',
28
+ model='NSRCost', src='cnsr',
29
+ unit=r'$/(p.u.*h)',
30
+ indexer='gen', imodel='StaticGen',)
31
+ self.dnsrp = RParam(info='non-spinning reserve requirement in percentage',
32
+ name='dnsr', tex_name=r'd_{nsr}',
33
+ model='NSR', src='demand',
34
+ unit='%',)
35
+ self.prns = Var(info='non-spinning reserve',
36
+ name='prns', tex_name=r'p_{r, ns}',
37
+ model='StaticGen', nonneg=True,)
38
+
39
+ self.dnsrpz = NumOpDual(u=self.pdz, u2=self.dnsrp, fun=np.multiply,
40
+ name='dnsrpz', tex_name=r'd_{nsr, p, z}',
41
+ info='zonal non-spinning reserve requirement in percentage',)
42
+ self.dnsr = NumOpDual(u=self.dnsrpz, u2=self.sd, fun=np.multiply,
43
+ rfun=np.transpose,
44
+ name='dnsr', tex_name=r'd_{nsr}',
45
+ info='zonal non-spinning reserve requirement',
46
+ no_parse=True,)
47
+
48
+ # NOTE: define e_str in dispatch model
49
+ self.prnsb = Constraint(info='non-spinning reserve balance',
50
+ name='prnsb', is_eq=True,)
51
+ self.rnsr = Constraint(info='non-spinning reserve requirement',
52
+ name='rnsr', is_eq=False,)
53
+
54
+
55
+ class UC(DCOPF, RTEDBase, MPBase, SRBase, NSRBase):
56
+ """
57
+ DC-based unit commitment (UC):
58
+ The bilinear term in the formulation is linearized with big-M method.
59
+
60
+ Non-negative var `pdu` is introduced as unserved load with its penalty `cdp`.
61
+
62
+ Constraints include power balance, ramping, spinning reserve, non-spinning reserve,
63
+ minimum ON/OFF duration.
64
+ The cost inludes generation cost, startup cost, shutdown cost, spinning reserve cost,
65
+ non-spinning reserve cost, and unserved load penalty.
66
+
67
+ Method ``_initial_guess`` is used to make initial guess for commitment decision if all
68
+ generators are online at initial. It is a simple heuristic method, which may not be optimal.
69
+
70
+ Notes
71
+ -----
72
+ 1. Formulations has been adjusted with interval ``config.t``
73
+
74
+ 3. The tie-line flow has not been implemented in formulations.
75
+
76
+ References
77
+ ----------
78
+ 1. Huang, Y., Pardalos, P. M., & Zheng, Q. P. (2017). Electrical power unit commitment: deterministic and
79
+ two-stage stochastic programming models and algorithms. Springer.
80
+
81
+ 2. D. A. Tejada-Arango, S. Lumbreras, P. Sánchez-Martín and A. Ramos, "Which Unit-Commitment Formulation
82
+ is Best? A Comparison Framework," in IEEE Transactions on Power Systems, vol. 35, no. 4, pp. 2926-2936,
83
+ July 2020, doi: 10.1109/TPWRS.2019.2962024.
84
+ """
85
+
86
+ def __init__(self, system, config):
87
+ DCOPF.__init__(self, system, config)
88
+ RTEDBase.__init__(self)
89
+ MPBase.__init__(self)
90
+ SRBase.__init__(self)
91
+ NSRBase.__init__(self)
92
+
93
+ self.config.add(OrderedDict((('t', 1),
94
+ )))
95
+ self.config.add_extra("_help",
96
+ t="time interval in hours",
97
+ )
98
+ self.config.add_extra("_tex",
99
+ t='T_{cfg}',
100
+ )
101
+
102
+ self.info = 'unit commitment'
103
+ self.type = 'DCUC'
104
+
105
+ # --- Data Section ---
106
+ # update timeslot model to UCTSlot
107
+ self.timeslot.info = 'Time slot for multi-period UC'
108
+ self.timeslot.model = 'UCTSlot'
109
+ # --- reserve cost ---
110
+ self.csu = RParam(info='startup cost',
111
+ name='csu', tex_name=r'c_{su}',
112
+ model='GCost', src='csu',
113
+ unit='$',)
114
+ self.csd = RParam(info='shutdown cost',
115
+ name='csd', tex_name=r'c_{sd}',
116
+ model='GCost', src='csd',
117
+ unit='$',)
118
+ # --- load ---
119
+ self.cdp = RParam(info='penalty for unserved load',
120
+ name='cdp', tex_name=r'c_{d,p}',
121
+ model='DCost', src='cdp',
122
+ no_parse=True,
123
+ unit=r'$/(p.u.*h)',)
124
+ self.dctrl = RParam(info='load controllability',
125
+ name='dctrl', tex_name=r'c_{trl,d}',
126
+ model='StaticLoad', src='ctrl',
127
+ expand_dims=1,
128
+ no_parse=True,)
129
+ # --- gen ---
130
+ self.td1 = RParam(info='minimum ON duration',
131
+ name='td1', tex_name=r't_{d1}',
132
+ model='StaticGen', src='td1',
133
+ unit='h',)
134
+ self.td2 = RParam(info='minimum OFF duration',
135
+ name='td2', tex_name=r't_{d2}',
136
+ model='StaticGen', src='td2',
137
+ unit='h',)
138
+
139
+ self.sd.info = 'zonal load factor for UC'
140
+ self.sd.model = 'UCTSlot'
141
+
142
+ self.ug.expand_dims = 1
143
+ self.amin.expand_dims = 1
144
+ self.amax.expand_dims = 1
145
+
146
+ # --- Model Section ---
147
+ # --- gen ---
148
+ # NOTE: extend pg to 2D matrix, where row for gen and col for timeslot
149
+ self.pg.horizon = self.timeslot
150
+ self.pg.info = '2D Gen power'
151
+ # TODO: havn't test non-controllability?
152
+ self.ctrle.u2 = self.tlv
153
+ self.ctrle.info = 'Reshaped controllability'
154
+ self.nctrle.u2 = self.tlv
155
+ self.nctrle.info = 'Reshaped non-controllability'
156
+ pmaxe = 'mul(mul(nctrl, pg0), ugd) + mul(mul(ctrl, pmax), ugd)'
157
+ self.pmaxe.e_str = pmaxe
158
+ self.pmaxe.horizon = self.timeslot
159
+ pmine = 'mul(mul(ctrl, pmin), ugd) + mul(mul(nctrl, pg0), ugd)'
160
+ self.pmine.e_str = pmine
161
+ self.pmine.horizon = self.timeslot
162
+ self.pglb.e_str = '-pg + pmine'
163
+ self.pgub.e_str = 'pg - pmaxe'
164
+
165
+ self.ugd = Var(info='commitment decision',
166
+ horizon=self.timeslot,
167
+ name='ugd', tex_name=r'u_{g,d}',
168
+ model='StaticGen', src='u',
169
+ boolean=True,)
170
+ self.vgd = Var(info='startup action',
171
+ horizon=self.timeslot,
172
+ name='vgd', tex_name=r'v_{g,d}',
173
+ model='StaticGen', src='u',
174
+ boolean=True,)
175
+ self.wgd = Var(info='shutdown action',
176
+ horizon=self.timeslot,
177
+ name='wgd', tex_name=r'w_{g,d}',
178
+ model='StaticGen', src='u',
179
+ boolean=True,)
180
+ self.zug = Var(info='Aux var, :math:`z_{ug} = u_{g,d} * p_g`',
181
+ horizon=self.timeslot,
182
+ name='zug', tex_name=r'z_{ug}',
183
+ model='StaticGen', pos=True,)
184
+ # NOTE: actions have two parts: initial status and the rest
185
+ self.actv = Constraint(name='actv', is_eq=True,
186
+ info='startup action',
187
+ e_str='ugd @ Mr - vgd[:, 1:]',)
188
+ self.actv0 = Constraint(name='actv0', is_eq=True,
189
+ info='initial startup action',
190
+ e_str='ugd[:, 0] - ug[:, 0] - vgd[:, 0]',)
191
+ self.actw = Constraint(name='actw', is_eq=True,
192
+ info='shutdown action',
193
+ e_str='-ugd @ Mr - wgd[:, 1:]',)
194
+ self.actw0 = Constraint(name='actw0', is_eq=True,
195
+ info='initial shutdown action',
196
+ e_str='-ugd[:, 0] + ug[:, 0] - wgd[:, 0]',)
197
+
198
+ self.prs.horizon = self.timeslot
199
+ self.prs.info = '2D Spinning reserve'
200
+
201
+ self.prns.horizon = self.timeslot
202
+ self.prns.info = '2D Non-spinning reserve'
203
+
204
+ # spinning reserve
205
+ self.prsb.e_str = 'mul(ugd, mul(pmax, tlv)) - zug - prs'
206
+ # spinning reserve requirement
207
+ self.rsr.e_str = '-gs@prs + dsr'
208
+
209
+ # non-spinning reserve
210
+ self.prnsb.e_str = 'mul(1-ugd, mul(pmax, tlv)) - prns'
211
+ # non-spinning reserve requirement
212
+ self.rnsr.e_str = '-gs@prns + dnsr'
213
+
214
+ # --- big M for ugd*pg ---
215
+ self.Mzug = NumOp(info='10 times of max of pmax as big M for zug',
216
+ name='Mzug', tex_name=r'M_{zug}',
217
+ u=self.pmax, fun=np.max,
218
+ rfun=np.dot, rargs=dict(b=10),
219
+ array_out=False,)
220
+ self.zuglb = Constraint(name='zuglb', info='zug lower bound',
221
+ is_eq=False, e_str='- zug + pg')
222
+ self.zugub = Constraint(name='zugub', info='zug upper bound',
223
+ is_eq=False, e_str='zug - pg - Mzug dot (1 - ugd)')
224
+ self.zugub2 = Constraint(name='zugub2', info='zug upper bound',
225
+ is_eq=False, e_str='zug - Mzug dot ugd')
226
+
227
+ # --- minimum ON/OFF duration ---
228
+ self.Con = MinDur(u=self.pg, u2=self.td1,
229
+ name='Con', tex_name=r'T_{on}',
230
+ info='minimum ON coefficient',)
231
+ self.don = Constraint(info='minimum online duration',
232
+ name='don', is_eq=False,
233
+ e_str='multiply(Con, vgd) - ugd')
234
+ self.Coff = MinDur(u=self.pg, u2=self.td2,
235
+ name='Coff', tex_name=r'T_{off}',
236
+ info='minimum OFF coefficient',)
237
+ self.doff = Constraint(info='minimum offline duration',
238
+ name='doff', is_eq=False,
239
+ e_str='multiply(Coff, wgd) - (1 - ugd)')
240
+
241
+ # --- line ---
242
+ self.plf.horizon = self.timeslot
243
+ self.plf.info = '2D Line flow'
244
+ self.plflb.e_str = '-Bf@aBus - Pfinj - mul(rate_a, tlv)'
245
+ self.plfub.e_str = 'Bf@aBus + Pfinj - mul(rate_a, tlv)'
246
+ self.alflb.e_str = '-CftT@aBus - amax@tlv'
247
+ self.alfub.e_str = 'CftT@aBus - amax@tlv'
248
+
249
+ # --- unserved load ---
250
+ self.pdu = Var(info='unserved demand',
251
+ name='pdu', tex_name=r'p_{d,u}',
252
+ model='StaticLoad', unit='p.u.',
253
+ horizon=self.timeslot,
254
+ nonneg=True,)
255
+ self.pdsp = NumOp(u=self.pds, fun=np.clip,
256
+ args=dict(a_min=0, a_max=None),
257
+ info='positive demand',
258
+ name='pdsp', tex_name=r'p_{d,s}^{+}',)
259
+ self.pdumax = Constraint(info='unserved demand upper bound',
260
+ name='pdumax', is_eq=False,
261
+ e_str='pdu - mul(pdsp, dctrl@tlv)')
262
+ # --- power balance ---
263
+ # NOTE: nodal balance is also contributed by unserved load
264
+ pb = 'Bbus@aBus + Pbusinj@tlv + Cl@(pds-pdu) + Csh@gsh@tlv - Cg@pg'
265
+ self.pb.e_str = pb
266
+
267
+ # --- objective ---
268
+ cost = 't**2 dot sum(c2 @ zug**2 + t dot c1 @ zug)'
269
+ cost += '+ sum(mul(ug, c0) @ tlv)'
270
+ _to_sum = 'csu * vgd + csd * wgd + csr @ prs + cnsr @ prns + cdp @ pdu'
271
+ cost += f' + t dot sum({_to_sum})'
272
+ self.obj.e_str = cost
273
+
274
+ def _initial_guess(self):
275
+ """
276
+ Make initial guess for commitment decision with a priority list
277
+ defined by the weighted sum of generation cost and generator capacity.
278
+
279
+ If there are no offline generators, turn off the first 30% of the generators
280
+ on the priority list as initial guess.
281
+ """
282
+ # check trigger condition
283
+ ug0 = self.system.PV.get(src='u', attr='v', idx=self.system.PV.idx.v)
284
+ if (ug0 == 0).any():
285
+ return True
286
+ else:
287
+ logger.warning('All generators are online at initial, make initial guess for commitment.')
288
+
289
+ gen = pd.DataFrame()
290
+ gen['idx'] = self.system.PV.idx.v
291
+ gen['pmax'] = self.system.PV.get(src='pmax', attr='v', idx=gen['idx'])
292
+ gen['bus'] = self.system.PV.get(src='bus', attr='v', idx=gen['idx'])
293
+ gen['zone'] = self.system.PV.get(src='zone', attr='v', idx=gen['idx'])
294
+ gcost_idx = self.system.GCost.find_idx(keys='gen', values=gen['idx'])
295
+ gen['c2'] = self.system.GCost.get(src='c2', attr='v', idx=gcost_idx)
296
+ gen['c1'] = self.system.GCost.get(src='c1', attr='v', idx=gcost_idx)
297
+ gen['c0'] = self.system.GCost.get(src='c0', attr='v', idx=gcost_idx)
298
+ gen['wsum'] = 0.8*gen['pmax'] + 0.05*gen['c2'] + 0.1*gen['c1'] + 0.05*gen['c0']
299
+ gen = gen.sort_values(by='wsum', ascending=True)
300
+
301
+ # Turn off 30% of the generators as initial guess
302
+ priority = gen['idx'].values
303
+ g_idx = priority[0:int(0.3*len(priority))]
304
+ ug0 = np.zeros_like(g_idx)
305
+ # NOTE: if number of generators is too small, turn off the first one
306
+ if len(g_idx) == 0:
307
+ g_idx = priority[0]
308
+ ug0 = 0
309
+ off_gen = f'{g_idx}'
310
+ else:
311
+ off_gen = ', '.join(g_idx)
312
+ self.system.StaticGen.set(src='u', idx=g_idx, attr='v', value=ug0)
313
+ logger.warning(f"As initial commitment guess, turn off StaticGen: {off_gen}")
314
+ return g_idx
315
+
316
+ def init(self, **kwargs):
317
+ self._initial_guess()
318
+ return super().init(**kwargs)
319
+
320
+ def dc2ac(self, **kwargs):
321
+ """
322
+ AC conversion ``dc2ac`` is not implemented yet for
323
+ multi-period scheduling.
324
+ """
325
+ return NotImplementedError
326
+
327
+ def unpack(self, **kwargs):
328
+ """
329
+ Multi-period scheduling will not unpack results from
330
+ solver into devices.
331
+
332
+ # TODO: unpack first period results, and allow input
333
+ # to specify which period to unpack.
334
+ """
335
+ return None
336
+
337
+
338
+ class UCDG(UC, DGBase):
339
+ """
340
+ UC with distributed generation :ref:`DG`.
341
+
342
+ Note that UCDG only inlcudes DG output power. If ESD1 is included,
343
+ UCES should be used instead, otherwise there is no SOC.
344
+ """
345
+
346
+ def __init__(self, system, config):
347
+ UC.__init__(self, system, config)
348
+ DGBase.__init__(self)
349
+
350
+ self.info = 'unit commitment with distributed generation'
351
+ self.type = 'DCUC'
352
+
353
+ # NOTE: extend vars to 2D
354
+ self.pgdg.horizon = self.timeslot
355
+
356
+
357
+ class UCES(UC, ESD1MPBase):
358
+ """
359
+ UC with energy storage :ref:`ESD1`.
360
+ """
361
+
362
+ def __init__(self, system, config):
363
+ UC.__init__(self, system, config)
364
+ ESD1MPBase.__init__(self)
365
+
366
+ self.info = 'unit commitment with energy storage'
367
+ self.type = 'DCUC'
368
+
369
+ self.pgdg.horizon = self.timeslot
370
+ self.SOC.horizon = self.timeslot
371
+ self.pce.horizon = self.timeslot
372
+ self.pde.horizon = self.timeslot
373
+ self.uce.horizon = self.timeslot
374
+ self.ude.horizon = self.timeslot
375
+ self.zce.horizon = self.timeslot
376
+ self.zde.horizon = self.timeslot
ams/shared.py CHANGED
@@ -4,34 +4,46 @@ Shared constants and delayed imports.
4
4
  This module is supplementary to the ``andes.shared`` module.
5
5
  """
6
6
  import logging
7
+ import unittest
7
8
  from functools import wraps
8
- from datetime import datetime
9
9
  from collections import OrderedDict
10
10
 
11
11
  import cvxpy as cp
12
12
 
13
- from andes.shared import pd
14
13
  from andes.utils.lazyimport import LazyImport
15
14
 
15
+ from andes.system import System as adSystem
16
+
17
+
16
18
  logger = logging.getLogger(__name__)
17
19
 
18
20
  sps = LazyImport('import scipy.sparse as sps')
19
21
  np = LazyImport('import numpy as np')
22
+ pd = LazyImport('import pandas as pd')
23
+
24
+ # --- an empty ANDES system ---
25
+ empty_adsys = adSystem(autogen_stale=False)
26
+ ad_models = list(empty_adsys.models.keys())
20
27
 
21
28
  # --- NumPy constants ---
22
29
  # NOTE: In NumPy 2.0, np.Inf and np.NaN are deprecated.
23
30
  inf = np.inf
24
31
  nan = np.nan
25
32
 
26
- # NOTE: copied from CVXPY documentation
27
- MIP_SOLVERS = ['CBC', 'COPT', 'GLPK_MI', 'CPLEX', 'GUROBI',
33
+ # --- misc constants ---
34
+ _prefix = r" - --------------> | " # NOQA
35
+ _max_length = 80 # NOQA
36
+
37
+ # NOTE: copyright
38
+ copyright_msg = 'Copyright (C) 2023-2024 Jinning Wang'
39
+
40
+ # NOTE: copied from CVXPY documentation, last checked on 2024/10/30, v1.5
41
+ mip_solvers = ['CBC', 'COPT', 'GLPK_MI', 'CPLEX', 'GUROBI',
28
42
  'MOSEK', 'SCIP', 'XPRESS', 'SCIPY']
29
43
 
30
- INSTALLED_SOLVERS = cp.installed_solvers()
44
+ installed_solvers = cp.installed_solvers()
31
45
 
32
- # NOTE: copyright
33
- year_end = datetime.now().year
34
- copyright_msg = f'Copyright (C) 2023-{year_end} Jinning Wang'
46
+ installed_mip_solvers = [s for s in installed_solvers if s in mip_solvers]
35
47
 
36
48
 
37
49
  def require_MIP_solver(f):
@@ -41,13 +53,26 @@ def require_MIP_solver(f):
41
53
 
42
54
  @wraps(f)
43
55
  def wrapper(*args, **kwargs):
44
- if not any(s in MIP_SOLVERS for s in INSTALLED_SOLVERS):
56
+ if not any(s in mip_solvers for s in installed_solvers):
45
57
  raise ModuleNotFoundError("No MIP solver is available.")
46
58
  return f(*args, **kwargs)
47
59
 
48
60
  return wrapper
49
61
 
50
62
 
63
+ def skip_unittest_without_MIP(f):
64
+ """
65
+ Decorator for skipping tests that require MIP solver.
66
+ """
67
+ def wrapper(*args, **kwargs):
68
+ if any(s in mip_solvers for s in installed_solvers):
69
+ pass
70
+ else:
71
+ raise unittest.SkipTest("No MIP solver is available.")
72
+ return f(*args, **kwargs)
73
+ return wrapper
74
+
75
+
51
76
  ppc_cols = OrderedDict([
52
77
  ('bus', ['bus_i', 'type', 'pd', 'qd', 'gs', 'bs', 'area', 'vm', 'va',
53
78
  'baseKV', 'zone', 'vmax', 'vmin', 'lam_p', 'lam_q',
ams/system.py CHANGED
@@ -17,14 +17,14 @@ from andes.variables import FileMan
17
17
  from andes.utils.misc import elapsed
18
18
  from andes.utils.tab import Tab
19
19
 
20
- import ams.io
20
+ import ams
21
21
  from ams.models.group import GroupBase
22
22
  from ams.routines.type import TypeBase
23
23
  from ams.models import file_classes
24
24
  from ams.routines import all_routines
25
25
  from ams.utils.paths import get_config_path
26
26
  from ams.core.matprocessor import MatProcessor
27
- from ams.interop.andes import to_andes
27
+ from ams.interface import to_andes
28
28
  from ams.report import Report
29
29
 
30
30
  logger = logging.getLogger(__name__)
@@ -229,10 +229,13 @@ class System(andes_System):
229
229
 
230
230
  def _collect_group_data(self, items):
231
231
  """
232
- Set the owner for routine attributes: ``RParam``, ``Var``, and ``RBaseService``.
232
+ Set the owner for routine attributes: `RParam`, `Var`, `ExpressionCalc`, `Expression`,
233
+ and `RBaseService`.
233
234
  """
234
235
  for item_name, item in items.items():
235
- if item.model in self.groups.keys():
236
+ if item.model is None:
237
+ continue
238
+ elif item.model in self.groups.keys():
236
239
  item.is_group = True
237
240
  item.owner = self.groups[item.model]
238
241
  elif item.model in self.models.keys():
@@ -271,12 +274,18 @@ class System(andes_System):
271
274
  type_instance = self.types[type_name]
272
275
  type_instance.routines[vname] = rtn
273
276
  # self.types[rtn.type].routines[vname] = rtn
274
- # Collect rparams
277
+ # Collect RParams
275
278
  rparams = getattr(rtn, 'rparams')
276
279
  self._collect_group_data(rparams)
277
- # Collect routine vars
280
+ # Collect routine Vars
278
281
  r_vars = getattr(rtn, 'vars')
279
282
  self._collect_group_data(r_vars)
283
+ # Collect ExpressionCalcs
284
+ exprc = getattr(rtn, 'exprcs')
285
+ self._collect_group_data(exprc)
286
+ # Collect Expressions
287
+ expr = getattr(rtn, 'exprs')
288
+ self._collect_group_data(expr)
280
289
 
281
290
  def import_groups(self):
282
291
  """
@@ -436,10 +445,10 @@ class System(andes_System):
436
445
 
437
446
  # assign bus type as placeholder; 1=PQ, 2=PV, 3=ref, 4=isolated
438
447
  if self.Bus.type.v.sum() == self.Bus.n: # if all type are PQ
439
- self.Bus.set(src='type', attr='v', idx=self.PV.bus.v,
440
- value=np.ones(self.PV.n))
441
- self.Bus.set(src='type', attr='v', idx=self.Slack.bus.v,
442
- value=np.ones(self.Slack.n))
448
+ self.Bus.alter(src='type', idx=self.PV.bus.v,
449
+ value=np.ones(self.PV.n))
450
+ self.Bus.alter(src='type', idx=self.Slack.bus.v,
451
+ value=np.ones(self.Slack.n))
443
452
 
444
453
  # --- assign column and row names ---
445
454
  self.mats.Cft.col_names = self.Line.idx.v
@@ -448,7 +457,7 @@ class System(andes_System):
448
457
  self.mats.CftT.col_names = self.Bus.idx.v
449
458
  self.mats.CftT.row_names = self.Line.idx.v
450
459
 
451
- self.mats.Cg.col_names = self.StaticGen.get_idx()
460
+ self.mats.Cg.col_names = self.StaticGen.get_all_idxes()
452
461
  self.mats.Cg.row_names = self.Bus.idx.v
453
462
 
454
463
  self.mats.Cl.col_names = self.PQ.idx.v
@@ -533,7 +542,11 @@ class System(andes_System):
533
542
 
534
543
  raise NotImplementedError
535
544
 
536
- def to_andes(self, setup=True, addfile=None, **kwargs):
545
+ def to_andes(self, addfile=None,
546
+ setup=False, no_output=False,
547
+ default_config=True,
548
+ verify=False, tol=1e-3,
549
+ **kwargs):
537
550
  """
538
551
  Convert the AMS system to an ANDES system.
539
552
 
@@ -543,30 +556,56 @@ class System(andes_System):
543
556
  3. Power flow models are in the same shape as the AMS system.
544
557
  4. Dynamic models, if any, are in the same shape as the AMS system.
545
558
 
559
+ This function is wrapped as the ``System`` class method ``to_andes()``.
560
+ Using the file conversion ``to_andes()`` will automatically
561
+ link the AMS system instance to the converted ANDES system instance
562
+ in the AMS system attribute ``dyn``.
563
+
564
+ It should be noted that detailed dynamic simualtion requires extra
565
+ dynamic models to be added to the ANDES system, which can be passed
566
+ through the ``addfile`` argument.
567
+
546
568
  Parameters
547
569
  ----------
548
- setup : bool, optional
549
- Whether to call `setup()` after the conversion. Default is True.
570
+ system : System
571
+ The AMS system to be converted to ANDES format.
550
572
  addfile : str, optional
551
573
  The additional file to be converted to ANDES dynamic mdoels.
552
- **kwargs : dict
553
- Keyword arguments to be passed to `andes.system.System`.
574
+ setup : bool, optional
575
+ Whether to call `setup()` after the conversion. Default is True.
576
+ no_output : bool, optional
577
+ To ANDES system.
578
+ default_config : bool, optional
579
+ To ANDES system.
580
+ verify : bool
581
+ If True, the converted ANDES system will be verified with the source
582
+ AMS system using AC power flow.
583
+ tol : float
584
+ The tolerance of error.
554
585
 
555
586
  Returns
556
587
  -------
557
- andes : andes.system.System
588
+ adsys : andes.system.System
558
589
  The converted ANDES system.
559
590
 
560
591
  Examples
561
592
  --------
562
593
  >>> import ams
563
594
  >>> import andes
564
- >>> sp = ams.load(ams.get_case('ieee14/ieee14_rted.xlsx'), setup=True)
565
- >>> sa = sp.to_andes(setup=False,
566
- ... addfile=andes.get_case('ieee14/ieee14_wt3.xlsx'),
567
- ... overwrite=True, no_keep=True, no_output=True)
595
+ >>> sp = ams.load(ams.get_case('ieee14/ieee14_uced.xlsx'), setup=True)
596
+ >>> sa = sp.to_andes(addfile=andes.get_case('ieee14/ieee14_full.xlsx'),
597
+ ... setup=False, overwrite=True, no_output=True)
598
+
599
+ Notes
600
+ -----
601
+ 1. Power flow models in the addfile will be skipped and only dynamic models will be used.
602
+ 2. The addfile format is guessed based on the file extension. Currently only ``xlsx`` is supported.
603
+ 3. Index in the addfile is automatically adjusted when necessary.
568
604
  """
569
- return to_andes(self, setup=setup, addfile=addfile,
605
+ return to_andes(system=self, addfile=addfile,
606
+ setup=setup, no_output=no_output,
607
+ default_config=default_config,
608
+ verify=verify, tol=tol,
570
609
  **kwargs)
571
610
 
572
611
  def summary(self):
ams/utils/__init__.py ADDED
@@ -0,0 +1,3 @@
1
+
2
+ from ams.utils.paths import get_case # NOQA
3
+ from ams.utils.misc import timer, create_entry, pretty_long_message # NOQA