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
@@ -0,0 +1,665 @@
1
+ """
2
+ Make matrices.
3
+ """
4
+ import logging
5
+
6
+ import numpy as np
7
+
8
+ from numpy import flatnonzero as find
9
+ from scipy.sparse import csr_matrix as c_sparse
10
+ from scipy.sparse import lil_matrix as l_sparse
11
+
12
+ from andes.shared import deg2rad
13
+ from ams.shared import inf
14
+ from ams.pypower.idx import IDX
15
+
16
+ import ams.pypower.utils as putil
17
+
18
+ logger = logging.getLogger(__name__)
19
+
20
+
21
+ def makeAang(baseMVA, branch, nb, ppopt):
22
+ """
23
+ Constructs the parameters for the following linear constraint limiting
24
+ the voltage angle differences across branches, where C{Va} is the vector
25
+ of bus voltage angles. C{nb} is the number of buses::
26
+
27
+ lang <= Aang * Va <= uang
28
+
29
+ Parameters
30
+ ----------
31
+ branch: np.ndarray
32
+ The branch matrix.
33
+ nb : int
34
+ The number of buses.
35
+ ppopt : dict
36
+ PYPOWER options dictionary.
37
+
38
+ Returns
39
+ -------
40
+ Aang: sparse matrix
41
+ The constraint matrix for branch angle difference limits.
42
+ lang: np.ndarray
43
+ The lower bounds on the angle difference limits.
44
+ uang: np.ndarray
45
+ The upper bounds on the angle difference limits.
46
+ iang: np.ndarray
47
+ The indices of the branches with angle difference limits.
48
+ """
49
+ # options
50
+ ignore_ang_lim = ppopt['OPF_IGNORE_ANG_LIM']
51
+
52
+ if ignore_ang_lim:
53
+ Aang = np.zeros((0, nb))
54
+ lang = np.array([])
55
+ uang = np.array([])
56
+ iang = np.array([])
57
+ else:
58
+ iang = find(((branch[:, IDX.branch.ANGMIN] != 0) & (branch[:, IDX.branch.ANGMIN] > -360)) |
59
+ ((branch[:, IDX.branch.ANGMAX] != 0) & (branch[:, IDX.branch.ANGMAX] < 360)))
60
+ iangl = find(branch[iang, IDX.branch.ANGMIN])
61
+ iangh = find(branch[iang, IDX.branch.ANGMAX])
62
+ nang = len(iang)
63
+
64
+ if nang > 0:
65
+ ii = np.r_[np.arange(nang), np.arange(nang)]
66
+ jj = np.r_[branch[iang, IDX.branch.F_BUS], branch[iang, IDX.branch.T_BUS]]
67
+ Aang = c_sparse((np.r_[np.ones(nang), -np.ones(nang)],
68
+ (ii, jj)), (nang, nb))
69
+ uang = inf * np.ones(nang)
70
+ lang = -uang
71
+ lang[iangl] = branch[iang[iangl], IDX.branch.ANGMIN] * deg2rad
72
+ uang[iangh] = branch[iang[iangh], IDX.branch.ANGMAX] * deg2rad
73
+ else:
74
+ Aang = np.zeros((0, nb))
75
+ lang = np.array([])
76
+ uang = np.array([])
77
+
78
+ return Aang, lang, uang, iang
79
+
80
+
81
+ def makeApq(baseMVA, gen):
82
+ """
83
+ Construct linear constraints for generator capability curves,
84
+ where Pg and Qg are the real and reactive generator injections::
85
+
86
+ Apqh * [Pg, Qg] <= ubpqh
87
+ Apql * [Pg, Qg] <= ubpql
88
+
89
+ Parameters
90
+ ----------
91
+ baseMVA: float
92
+ The system base MVA.
93
+ gen: np.ndarray
94
+ The generator matrix.
95
+
96
+ Example
97
+ -------
98
+ >>> Apqh, ubpqh, Apql, ubpql, data = makeApq(baseMVA, gen)
99
+
100
+ C{data} constains additional information as shown below.
101
+
102
+ data['h'] [Qc1max-Qc2max, Pc2-Pc1]
103
+
104
+ data['l'] [Qc2min-Qc1min, Pc1-Pc2]
105
+
106
+ data['ipqh'] indices of gens with general PQ cap curves (upper)
107
+
108
+ data['ipql'] indices of gens with general PQ cap curves (lower)
109
+ """
110
+ data = {}
111
+ # data dimensions
112
+ ng = gen.shape[0] # number of dispatchable injections
113
+
114
+ # which generators require additional linear constraints
115
+ # (in addition to simple box constraints) on (Pg,Qg) to correctly
116
+ # model their PQ capability curves
117
+ ipqh = find(putil.hasPQcap(gen, 'U'))
118
+ ipql = find(putil.hasPQcap(gen, 'L'))
119
+ npqh = ipqh.shape[0] # number of general PQ capability curves (upper)
120
+ npql = ipql.shape[0] # number of general PQ capability curves (lower)
121
+
122
+ # make Apqh if there is a need to add general PQ capability curves
123
+ # use normalized coefficient rows so multipliers have right scaling
124
+ # in $$/pu
125
+ if npqh > 0:
126
+ data["h"] = np.c_[gen[ipqh, IDX.gen.QC1MAX] - gen[ipqh, IDX.gen.QC2MAX],
127
+ gen[ipqh, IDX.gen.PC2] - gen[ipqh, IDX.gen.PC1]]
128
+ ubpqh = data["h"][:, 0] * gen[ipqh, IDX.gen.PC1] + \
129
+ data["h"][:, 1] * gen[ipqh, IDX.gen.QC1MAX]
130
+ for i in range(npqh):
131
+ tmp = np.linalg.norm(data["h"][i, :])
132
+ data["h"][i, :] = data["h"][i, :] / tmp
133
+ ubpqh[i] = ubpqh[i] / tmp
134
+ Apqh = c_sparse((data["h"].flatten('F'),
135
+ (np.r_[np.arange(npqh), np.arange(npqh)], np.r_[ipqh, ipqh+ng])),
136
+ (npqh, 2*ng))
137
+ ubpqh = ubpqh / baseMVA
138
+ else:
139
+ data["h"] = np.array([])
140
+ Apqh = np.zeros((0, 2*ng))
141
+ ubpqh = np.array([])
142
+
143
+ # similarly Apql
144
+ if npql > 0:
145
+ data["l"] = np.c_[gen[ipql, IDX.gen.QC2MIN] - gen[ipql, IDX.gen.QC1MIN],
146
+ gen[ipql, IDX.gen.PC1] - gen[ipql, IDX.gen.PC2]]
147
+ ubpql = data["l"][:, 0] * gen[ipql, IDX.gen.PC1] + \
148
+ data["l"][:, 1] * gen[ipql, IDX.gen.QC1MIN]
149
+ for i in range(npql):
150
+ tmp = np.linalg.norm(data["l"][i, :])
151
+ data["l"][i, :] = data["l"][i, :] / tmp
152
+ ubpql[i] = ubpql[i] / tmp
153
+ Apql = c_sparse((data["l"].flatten('F'),
154
+ (np.r_[np.arange(npql), np.arange(npql)], np.r_[ipql, ipql+ng])),
155
+ (npql, 2*ng))
156
+ ubpql = ubpql / baseMVA
157
+ else:
158
+ data["l"] = np.array([])
159
+ Apql = np.zeros((0, 2*ng))
160
+ ubpql = np.array([])
161
+
162
+ data["ipql"] = ipql
163
+ data["ipqh"] = ipqh
164
+
165
+ return Apqh, ubpqh, Apql, ubpql, data
166
+
167
+
168
+ def makeAvl(baseMVA, gen):
169
+ """
170
+ Constructs parameters for the following linear constraint enforcing a
171
+ constant power factor constraint for dispatchable loads::
172
+
173
+ lvl <= Avl * [Pg, Qg] <= uvl
174
+
175
+ Parameters
176
+ ----------
177
+ baseMVA: float
178
+ The system base MVA.
179
+ gen: np.ndarray
180
+ The generator matrix.
181
+ """
182
+ # data dimensions
183
+ ng = gen.shape[0] # number of dispatchable injections
184
+ Pg = gen[:, IDX.gen.PG] / baseMVA
185
+ Qg = gen[:, IDX.gen.QG] / baseMVA
186
+ Pmin = gen[:, IDX.gen.PMIN] / baseMVA
187
+ Qmin = gen[:, IDX.gen.QMIN] / baseMVA
188
+ Qmax = gen[:, IDX.gen.QMAX] / baseMVA
189
+
190
+ # Find out if any of these "generators" are actually dispatchable loads.
191
+ # (see 'help isload' for details on what constitutes a dispatchable load)
192
+ # Dispatchable loads are modeled as generators with an added constant
193
+ # power factor constraint. The power factor is derived from the original
194
+ # value of Pmin and either Qmin (for inductive loads) or Qmax (for
195
+ # capacitive loads). If both Qmin and Qmax are zero, this implies a unity
196
+ # power factor without the need for an additional constraint.
197
+ # NOTE: C{ivl} is the vector of indices of generators representing variable loads.
198
+ ivl = find(putil.isload(gen) & ((Qmin != 0) | (Qmax != 0)))
199
+ nvl = ivl.shape[0] # number of dispatchable loads
200
+
201
+ # at least one of the Q limits must be zero (corresponding to Pmax == 0)
202
+ if np.any((Qmin[ivl] != 0) & (Qmax[ivl] != 0)):
203
+ logger.debug('makeAvl: either Qmin or Qmax must be equal to zero for '
204
+ 'each dispatchable load.\n')
205
+
206
+ # Initial values of IDX.gen.PG and IDX.gen.QG must be consistent with specified power
207
+ # factor This is to prevent a user from unknowingly using a case file which
208
+ # would have defined a different power factor constraint under a previous
209
+ # version which used IDX.gen.PG and IDX.gen.QG to define the power factor.
210
+ Qlim = (Qmin[ivl] == 0) * Qmax[ivl] + (Qmax[ivl] == 0) * Qmin[ivl]
211
+ if np.any(abs(Qg[ivl] - Pg[ivl] * Qlim / Pmin[ivl]) > 1e-6):
212
+ logger.debug('makeAvl: For a dispatchable load, PG and QG must be '
213
+ 'consistent with the power factor defined by PMIN and '
214
+ 'the Q limits.\n')
215
+
216
+ # make Avl, lvl, uvl, for lvl <= Avl * [Pg Qg] <= uvl
217
+ if nvl > 0:
218
+ xx = Pmin[ivl]
219
+ yy = Qlim
220
+ pftheta = np.arctan2(yy, xx)
221
+ pc = np.sin(pftheta)
222
+ qc = -np.cos(pftheta)
223
+ ii = np.r_[np.arange(nvl), np.arange(nvl)]
224
+ jj = np.r_[ivl, ivl + ng]
225
+ Avl = c_sparse((np.r_[pc, qc], (ii, jj)), (nvl, 2 * ng))
226
+ lvl = np.zeros(nvl)
227
+ uvl = lvl
228
+ else:
229
+ Avl = np.zeros((0, 2*ng))
230
+ lvl = np.array([])
231
+ uvl = np.array([])
232
+
233
+ return Avl, lvl, uvl, ivl
234
+
235
+
236
+ def makeB(baseMVA, bus, branch, alg):
237
+ """
238
+ Builds the FDPF matrices, B prime and B double prime.
239
+
240
+ Parameters
241
+ ----------
242
+ baseMVA: float
243
+ The system base MVA.
244
+ bus: np.ndarray
245
+ The bus matrix.
246
+ branch: np.ndarray
247
+ The branch matrix.
248
+ alg: int
249
+ The power flow algorithm, value of the C{PF_ALG} option, see L{runpf}.
250
+
251
+ Returns
252
+ -------
253
+ Bp: np.ndarray
254
+ The B prime matrix.
255
+ Bpp: np.ndarray
256
+ The B double prime matrix.
257
+ """
258
+ # constants
259
+ nb = bus.shape[0] # number of buses
260
+ nl = branch.shape[0] # number of lines
261
+
262
+ # ----- form Bp (B prime) -----
263
+ temp_branch = np.copy(branch) # modify a copy of branch
264
+ temp_bus = np.copy(bus) # modify a copy of bus
265
+ temp_bus[:, IDX.bus.BS] = np.zeros(nb) # zero out shunts at buses
266
+ temp_branch[:, IDX.branch.BR_B] = np.zeros(nl) # zero out line charging shunts
267
+ temp_branch[:, IDX.branch.TAP] = np.ones(nl) # cancel out taps
268
+ if alg == 2: # if XB method
269
+ temp_branch[:, IDX.branch.BR_R] = np.zeros(nl) # zero out line resistance
270
+ Bp = -1 * makeYbus(baseMVA, temp_bus, temp_branch)[0].imag
271
+
272
+ # ----- form Bpp (B double prime) -----
273
+ temp_branch = np.copy(branch) # modify a copy of branch
274
+ temp_branch[:, IDX.branch.SHIFT] = np.zeros(nl) # zero out phase shifters
275
+ if alg == 3: # if BX method
276
+ temp_branch[:, IDX.branch.BR_R] = np.zeros(nl) # zero out line resistance
277
+ Bpp = -1 * makeYbus(baseMVA, bus, temp_branch)[0].imag
278
+
279
+ return Bp, Bpp
280
+
281
+
282
+ def makeBdc(baseMVA, bus, branch):
283
+ """
284
+ Returns the B matrices and phase shift injection vectors needed for a
285
+ DC power flow.
286
+ The bus real power injections are related to bus voltage angles by::
287
+
288
+ P = Bbus * Va + PBusinj
289
+
290
+ The real power flows at the from end the lines are related to the bus
291
+ voltage angles by::
292
+
293
+ Pf = Bf * Va + Pfinj
294
+
295
+ Parameters
296
+ ----------
297
+ baseMVA: float
298
+ The system base MVA.
299
+ bus: np.ndarray
300
+ The bus matrix.
301
+ branch: np.ndarray
302
+ The branch matrix.
303
+
304
+ Returns
305
+ -------
306
+ Bbus: np.ndarray
307
+ The B matrix.
308
+ Bf: np.ndarray
309
+ The Bf matrix.
310
+ PBusinj: np.ndarray
311
+ The real power injection vector at each bus.
312
+ Pfinj: np.ndarray
313
+ The real power injection vector at the "from" end of each branch.
314
+ Qfinj: np.ndarray
315
+ The reactive power injection vector at the "from" end of each branch.
316
+ """
317
+ # constants
318
+ nb = bus.shape[0] # number of buses
319
+ nl = branch.shape[0] # number of lines
320
+
321
+ # check that bus numbers are equal to indices to bus (one set of bus nums)
322
+ if np.any(bus[:, IDX.bus.BUS_I] != list(range(nb))):
323
+ logger.debug('makeBdc: buses must be numbered consecutively in '
324
+ 'bus matrix\n')
325
+
326
+ # for each branch, compute the elements of the branch B matrix and the phase
327
+ # shift "quiescent" injections, where
328
+ ##
329
+ # | Pf | | Bff Bft | | Vaf | | Pfinj |
330
+ # | | = | | * | | + | |
331
+ # | Pt | | Btf Btt | | Vat | | Ptinj |
332
+ ##
333
+ stat = branch[:, IDX.branch.BR_STATUS] # ones at in-service branches
334
+ b = stat / branch[:, IDX.branch.BR_X] # series susceptance
335
+ tap = np.ones(nl) # default tap ratio = 1
336
+ i = find(branch[:, IDX.branch.TAP]) # indices of non-zero tap ratios
337
+ tap[i] = branch[i, IDX.branch.TAP] # assign non-zero tap ratios
338
+ b = b / tap
339
+
340
+ # build connection matrix Cft = Cf - Ct for line and from - to buses
341
+ f = branch[:, IDX.branch.F_BUS] # list of "from" buses
342
+ t = branch[:, IDX.branch.T_BUS] # list of "to" buses
343
+ i = np.r_[range(nl), range(nl)] # double set of row indices
344
+ # connection matrix
345
+ Cft = c_sparse((np.r_[np.ones(nl), -np.ones(nl)], (i, np.r_[f, t])), (nl, nb))
346
+
347
+ # build Bf such that Bf * Va is the vector of real branch powers injected
348
+ # at each branch's "from" bus
349
+ Bf = c_sparse((np.r_[b, -b], (i, np.r_[f, t])), shape=(nl, nb)) # = spdiags(b, 0, nl, nl) * Cft
350
+
351
+ # build Bbus
352
+ Bbus = Cft.T * Bf
353
+
354
+ # build phase shift injection vectors
355
+ Pfinj = b * (-branch[:, IDX.branch.SHIFT] * deg2rad) # injected at the from bus ...
356
+ # Ptinj = -Pfinj ## and extracted at the to bus
357
+ Pbusinj = Cft.T * Pfinj # Pbusinj = Cf * Pfinj + Ct * Ptinj
358
+
359
+ return Bbus, Bf, Pbusinj, Pfinj, Cft
360
+
361
+
362
+ def makeLODF(branch, PTDF):
363
+ """
364
+ Builds the line outage distribution factor matrix.
365
+
366
+ Parameters
367
+ ----------
368
+ branch: np.ndarray
369
+ The branch matrix.
370
+ PTDF: np.ndarray
371
+ The PTDF matrix.
372
+
373
+ Returns
374
+ -------
375
+ LODF: np.ndarray
376
+ The DC line outage distribution factor matrix for a given PTDF.
377
+ The matrix is C{nbr x nbr}, where C{nbr} is the number of branches.
378
+
379
+ Example
380
+ -------
381
+ >>> H = makePTDF(baseMVA, bus, branch)
382
+ >>> LODF = makeLODF(branch, H)
383
+ """
384
+ nl, nb = PTDF.shape
385
+ f = branch[:, IDX.branch.F_BUS]
386
+ t = branch[:, IDX.branch.T_BUS]
387
+ Cft = c_sparse((np.r_[np.ones(nl), -np.ones(nl)],
388
+ (np.r_[f, t], np.r_[np.arange(nl), np.arange(nl)])), (nb, nl))
389
+
390
+ H = PTDF * Cft
391
+ h = np.diag(H, 0)
392
+ LODF = H / (np.ones((nl, nl)) - np.ones((nl, 1)) * h.T)
393
+ LODF = LODF - np.diag(np.diag(LODF)) - np.eye(nl, nl)
394
+
395
+ return LODF
396
+
397
+
398
+ def makePTDF(baseMVA, bus, branch, slack=None):
399
+ """
400
+ Builds the DC PTDF matrix for a given choice of slack.
401
+
402
+ Parameters
403
+ ----------
404
+ baseMVA: float
405
+ The system base MVA.
406
+ bus: np.ndarray
407
+ The bus matrix.
408
+ branch: np.ndarray
409
+ The branch matrix.
410
+ slack : int, array, or matrix, optional
411
+ The slack bus number or the slack bus weight vector. The default is
412
+ to use the reference bus.
413
+
414
+ Returns
415
+ -------
416
+ H: np.ndarray
417
+ The DC PTDF matrix for a given choice of slack.
418
+
419
+ The matrix is C{nbr x nb}, where C{nbr} is the number of branches
420
+ and C{nb} is the number of buses.
421
+
422
+ The C{slack} can be a scalar (single slack bus) or an C{nb x 1} column
423
+ vector of weights specifying the proportion of the slack taken up at each bus.
424
+
425
+ If the C{slack} is not specified the reference bus is used by default.
426
+
427
+ For convenience, C{slack} can also be an C{nb x nb} matrix, where each
428
+ column specifies how the slack should be handled for injections at that bus.
429
+ """
430
+ # use reference bus for slack by default
431
+ if slack is None:
432
+ slack = find(bus[:, IDX.bus.BUS_TYPE] == IDX.bus.REF)
433
+ slack = slack[0]
434
+
435
+ # set the slack bus to be used to compute initial PTDF
436
+ if np.isscalar(slack):
437
+ slack_bus = slack
438
+ else:
439
+ slack_bus = 0 # use bus 1 for temp slack bus
440
+
441
+ nb = bus.shape[0]
442
+ nbr = branch.shape[0]
443
+ noref = np.arange(1, nb) # use bus 1 for voltage angle reference
444
+ noslack = find(np.arange(nb) != slack_bus)
445
+
446
+ # check that bus numbers are equal to indices to bus (one set of bus numbers)
447
+ if np.any(bus[:, IDX.bus.BUS_I] != np.arange(nb)):
448
+ logger.debug('makePTDF: buses must be numbered consecutively')
449
+
450
+ # compute PTDF for single slack_bus
451
+ Bbus, Bf, _, _, _ = makeBdc(baseMVA, bus, branch)
452
+ Bbus, Bf = Bbus.todense(), Bf.todense()
453
+ H = np.zeros((nbr, nb))
454
+ H[:, noslack] = np.linalg.solve(Bbus[np.ix_(noslack, noref)].T, Bf[:, noref].T).T
455
+ # = Bf[:, noref] * inv(Bbus[np.ix_(noslack, noref)])
456
+
457
+ # distribute slack, if requested
458
+ if not np.isscalar(slack):
459
+ if len(slack.shape) == 1: # slack is a vector of weights
460
+ slack = slack / sum(slack) # normalize weights
461
+
462
+ # conceptually, we want to do ...
463
+ # H = H * (eye(nb, nb) - slack * ones((1, nb)))
464
+ # ... we just do it more efficiently
465
+ v = np.dot(H, slack)
466
+ for k in range(nb):
467
+ H[:, k] = H[:, k] - v
468
+ else:
469
+ H = np.dot(H, slack)
470
+
471
+ return H
472
+
473
+
474
+ def makeSbus(baseMVA, bus, gen):
475
+ """
476
+ Builds the vector of complex bus power injections.
477
+
478
+ Parameters
479
+ ----------
480
+ baseMVA: float
481
+ Base MVA.
482
+ bus: NumPy.array
483
+ Bus data.
484
+ gen: NumPy.array
485
+ Generator data.
486
+
487
+ Returns
488
+ -------
489
+ Sbus : NumPy.array
490
+ Complex bus power injections.
491
+ """
492
+ # generator info
493
+ on = find(gen[:, IDX.gen.GEN_STATUS] > 0) # which generators are on?
494
+ gbus = gen[on, IDX.gen.GEN_BUS] # what buses are they at?
495
+
496
+ # form net complex bus power injection vector
497
+ nb = bus.shape[0]
498
+ ngon = on.shape[0]
499
+ # connection matrix, element i, j is 1 if gen on(j) at bus i is ON
500
+ Cg = c_sparse((np.ones(ngon), (gbus, range(ngon))), (nb, ngon))
501
+
502
+ # power injected by gens plus power injected by loads converted to p.u.
503
+ Sbus = (Cg * (gen[on, IDX.gen.PG] + 1j * gen[on, IDX.gen.QG]) -
504
+ (bus[:, IDX.bus.PD] + 1j * bus[:, IDX.bus.QD])) / baseMVA
505
+
506
+ return Sbus
507
+
508
+
509
+ def makeYbus(baseMVA, bus, branch):
510
+ """Builds the bus admittance matrix and branch admittance matrices.
511
+
512
+ Returns the full bus admittance matrix (i.e. for all buses) and the
513
+ matrices C{Yf} and C{Yt} which, when multiplied by a complex voltage
514
+ vector, yield the vector currents injected into each line from the
515
+ "from" and "to" buses respectively of each line. Does appropriate
516
+ conversions to p.u.
517
+
518
+ @see: L{makeSbus}
519
+
520
+ @author: Ray Zimmerman (PSERC Cornell)
521
+ """
522
+ # constants
523
+ nb = bus.shape[0] # number of buses
524
+ nl = branch.shape[0] # number of lines
525
+
526
+ # check that bus numbers are equal to indices to bus (one set of bus nums)
527
+ if np.any(bus[:, IDX.bus.BUS_I] != list(range(nb))):
528
+ logger.debug('buses must appear in order by bus number\n')
529
+
530
+ # for each branch, compute the elements of the branch admittance matrix where
531
+ ##
532
+ # | If | | Yff Yft | | Vf |
533
+ # | | = | | * | |
534
+ # | It | | Ytf Ytt | | Vt |
535
+ ##
536
+ stat = branch[:, IDX.branch.BR_STATUS] # ones at in-service branches
537
+ Ys = stat / (branch[:, IDX.branch.BR_R] + 1j * branch[:, IDX.branch.BR_X]) # series admittance
538
+ Bc = stat * branch[:, IDX.branch.BR_B] # line charging susceptance
539
+ tap = np.ones(nl) # default tap ratio = 1
540
+ i = np.nonzero(branch[:, IDX.branch.TAP]) # indices of non-zero tap ratios
541
+ tap[i] = branch[i, IDX.branch.TAP] # assign non-zero tap ratios
542
+ tap = tap * np.exp(1j * deg2rad * branch[:, IDX.branch.SHIFT]) # add phase shifters
543
+
544
+ Ytt = Ys + 1j * Bc / 2
545
+ Yff = Ytt / (tap * np.conj(tap))
546
+ Yft = - Ys / np.conj(tap)
547
+ Ytf = - Ys / tap
548
+
549
+ # compute shunt admittance
550
+ # if Psh is the real power consumed by the shunt at V = 1.0 p.u.
551
+ # and Qsh is the reactive power injected by the shunt at V = 1.0 p.u.
552
+ # then Psh - j Qsh = V * conj(Ysh * V) = conj(Ysh) = Gs - j Bs,
553
+ # i.e. Ysh = Psh + j Qsh, so ...
554
+ # vector of shunt admittances
555
+ Ysh = (bus[:, IDX.bus.GS] + 1j * bus[:, IDX.bus.BS]) / baseMVA
556
+
557
+ # build connection matrices
558
+ f = branch[:, IDX.branch.F_BUS] # list of "from" buses
559
+ t = branch[:, IDX.branch.T_BUS] # list of "to" buses
560
+ # connection matrix for line & from buses
561
+ Cf = c_sparse((np.ones(nl), (range(nl), f)), (nl, nb))
562
+ # connection matrix for line & to buses
563
+ Ct = c_sparse((np.ones(nl), (range(nl), t)), (nl, nb))
564
+
565
+ # build Yf and Yt such that Yf * V is the vector of complex branch currents injected
566
+ # at each branch's "from" bus, and Yt is the same for the "to" bus end
567
+ i = np.r_[range(nl), range(nl)] # double set of row indices
568
+
569
+ Yf = c_sparse((np.r_[Yff, Yft], (i, np.r_[f, t])), (nl, nb))
570
+ Yt = c_sparse((np.r_[Ytf, Ytt], (i, np.r_[f, t])), (nl, nb))
571
+ # Yf = spdiags(Yff, 0, nl, nl) * Cf + spdiags(Yft, 0, nl, nl) * Ct
572
+ # Yt = spdiags(Ytf, 0, nl, nl) * Cf + spdiags(Ytt, 0, nl, nl) * Ct
573
+
574
+ # build Ybus
575
+ Ybus = Cf.T * Yf + Ct.T * Yt + \
576
+ c_sparse((Ysh, (range(nb), range(nb))), (nb, nb))
577
+
578
+ return Ybus, Yf, Yt
579
+
580
+
581
+ def makeAy(baseMVA, ng, gencost, pgbas, qgbas, ybas):
582
+ """Make the A matrix and RHS for the CCV formulation.
583
+
584
+ Constructs the parameters for linear "basin constraints" on C{Pg}, C{Qg}
585
+ and C{Y} used by the CCV cost formulation, expressed as::
586
+
587
+ Ay * x <= by
588
+
589
+ where C{x} is the vector of optimization variables. The starting index
590
+ within the C{x} vector for the active, reactive sources and the C{y}
591
+ variables should be provided in arguments C{pgbas}, C{qgbas}, C{ybas}.
592
+ The number of generators is C{ng}.
593
+
594
+ Assumptions: All generators are in-service. Filter any generators
595
+ that are offline from the C{gencost} matrix before calling L{makeAy}.
596
+ Efficiency depends on C{Qg} variables being after C{Pg} variables, and
597
+ the C{y} variables must be the last variables within the vector C{x} for
598
+ the dimensions of the resulting C{Ay} to be conformable with C{x}.
599
+
600
+ @author: Carlos E. Murillo-Sanchez (PSERC Cornell & Universidad
601
+ Autonoma de Manizales)
602
+ """
603
+ # find all pwl cost rows in gencost, either real or reactive
604
+ iycost = find(gencost[:, IDX.cost.MODEL] == IDX.cost.PW_LINEAR)
605
+
606
+ # this is the number of extra "y" variables needed to model those costs
607
+ ny = iycost.shape[0]
608
+
609
+ if ny == 0:
610
+ Ay = np.zeros((0, ybas + ny - 1)) # TODO: Check size (- 1)
611
+ by = np.array([])
612
+ return Ay, by
613
+
614
+ # if p(i),p(i+1),c(i),c(i+1) define one of the cost segments, then
615
+ # the corresponding constraint on Pg (or Qg) and Y is
616
+ # c(i+1) - c(i)
617
+ # Y >= c(i) + m * (Pg - p(i)), m = ---------------
618
+ # p(i+1) - p(i)
619
+ ##
620
+ # this becomes m * Pg - Y <= m*p(i) - c(i)
621
+
622
+ # Form A matrix. Use two different loops, one for the PG/Qg coefs,
623
+ # then another for the y coefs so that everything is filled in the
624
+ # same order as the compressed column sparse format used by matlab
625
+ # this should be the quickest.
626
+
627
+ m = sum(gencost[iycost, IDX.cost.NCOST].astype(int)) # total number of cost points
628
+ Ay = l_sparse((m - ny, ybas + ny - 1))
629
+ by = np.array([])
630
+ # First fill the Pg or Qg coefficients (since their columns come first)
631
+ # and the rhs
632
+ k = 0
633
+ for i in iycost:
634
+ ns = gencost[i, IDX.cost.NCOST].astype(int) # of cost points segments = ns-1
635
+ p = gencost[i, IDX.cost.COST:IDX.cost.COST + 2 * ns - 1:2] / baseMVA
636
+ c = gencost[i, IDX.cost.COST + 1:IDX.cost.COST + 2 * ns:2]
637
+ m = np.diff(c) / np.diff(p) # slopes for Pg (or Qg)
638
+ if np.any(np.diff(p) == 0):
639
+ print('makeAy: bad x axis data in row ##i of gencost matrix' % i)
640
+ b = m * p[:ns - 1] - c[:ns - 1] # and rhs
641
+ by = np.r_[by, b]
642
+ if i > ng:
643
+ sidx = qgbas + (i - ng) - 1 # this was for a q cost
644
+ else:
645
+ sidx = pgbas + i - 1 # this was for a p cost
646
+
647
+ # FIXME: Bug in SciPy 0.7.2 prevents setting with a sequence
648
+ # Ay[k:k + ns - 1, sidx] = m
649
+ for ii, kk in enumerate(range(k, k + ns - 1)):
650
+ Ay[kk, sidx] = m[ii]
651
+
652
+ k = k + ns - 1
653
+ # Now fill the y columns with -1's
654
+ k = 0
655
+ j = 0
656
+ for i in iycost:
657
+ ns = gencost[i, IDX.cost.NCOST].astype(int)
658
+ # FIXME: Bug in SciPy 0.7.2 prevents setting with a sequence
659
+ # Ay[k:k + ns - 1, ybas + j - 1] = -ones(ns - 1)
660
+ for kk in range(k, k + ns - 1):
661
+ Ay[kk, ybas + j - 1] = -1
662
+ k = k + ns - 1
663
+ j = j + 1
664
+
665
+ return Ay.tocsr(), by