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.
- ams/__init__.py +4 -11
- ams/_version.py +4 -4
- ams/cases/5bus/pjm5bus_demo.xlsx +0 -0
- ams/cases/5bus/pjm5bus_jumper.xlsx +0 -0
- ams/cases/5bus/pjm5bus_uced.json +1062 -0
- ams/cases/5bus/pjm5bus_uced.xlsx +0 -0
- ams/cases/5bus/pjm5bus_uced_esd1.xlsx +0 -0
- ams/cases/5bus/pjm5bus_uced_ev.xlsx +0 -0
- ams/cases/ieee123/ieee123.xlsx +0 -0
- ams/cases/ieee123/ieee123_regcv1.xlsx +0 -0
- ams/cases/ieee14/ieee14.json +1166 -0
- ams/cases/ieee14/ieee14.raw +92 -0
- ams/cases/ieee14/ieee14_conn.xlsx +0 -0
- ams/cases/ieee14/ieee14_uced.xlsx +0 -0
- ams/cases/ieee39/ieee39.xlsx +0 -0
- ams/cases/ieee39/ieee39_uced.xlsx +0 -0
- ams/cases/ieee39/ieee39_uced_esd1.xlsx +0 -0
- ams/cases/ieee39/ieee39_uced_pvd1.xlsx +0 -0
- ams/cases/ieee39/ieee39_uced_vis.xlsx +0 -0
- ams/cases/matpower/benchmark.json +1594 -0
- ams/cases/matpower/case118.m +787 -0
- ams/cases/matpower/case14.m +129 -0
- ams/cases/matpower/case300.m +1315 -0
- ams/cases/matpower/case39.m +205 -0
- ams/cases/matpower/case5.m +62 -0
- ams/cases/matpower/case_ACTIVSg2000.m +9460 -0
- ams/cases/npcc/npcc.m +644 -0
- ams/cases/npcc/npcc_uced.xlsx +0 -0
- ams/cases/pglib/pglib_opf_case39_epri__api.m +243 -0
- ams/cases/wecc/wecc.m +714 -0
- ams/cases/wecc/wecc_uced.xlsx +0 -0
- ams/cli.py +6 -0
- ams/core/__init__.py +2 -0
- ams/core/documenter.py +652 -0
- ams/core/matprocessor.py +782 -0
- ams/core/model.py +330 -0
- ams/core/param.py +322 -0
- ams/core/service.py +918 -0
- ams/core/symprocessor.py +224 -0
- ams/core/var.py +59 -0
- ams/extension/__init__.py +5 -0
- ams/extension/eva.py +401 -0
- ams/interface.py +1085 -0
- ams/io/__init__.py +133 -0
- ams/io/json.py +82 -0
- ams/io/matpower.py +406 -0
- ams/io/psse.py +6 -0
- ams/io/pypower.py +103 -0
- ams/io/xlsx.py +80 -0
- ams/main.py +83 -4
- ams/models/__init__.py +24 -0
- ams/models/area.py +40 -0
- ams/models/bus.py +52 -0
- ams/models/cost.py +169 -0
- ams/models/distributed/__init__.py +3 -0
- ams/models/distributed/esd1.py +71 -0
- ams/models/distributed/ev.py +60 -0
- ams/models/distributed/pvd1.py +67 -0
- ams/models/group.py +231 -0
- ams/models/info.py +26 -0
- ams/models/line.py +238 -0
- ams/models/renewable/__init__.py +5 -0
- ams/models/renewable/regc.py +119 -0
- ams/models/reserve.py +94 -0
- ams/models/shunt.py +14 -0
- ams/models/static/__init__.py +2 -0
- ams/models/static/gen.py +165 -0
- ams/models/static/pq.py +61 -0
- ams/models/timeslot.py +69 -0
- ams/models/zone.py +49 -0
- ams/opt/__init__.py +12 -0
- ams/opt/constraint.py +175 -0
- ams/opt/exprcalc.py +127 -0
- ams/opt/expression.py +188 -0
- ams/opt/objective.py +174 -0
- ams/opt/omodel.py +432 -0
- ams/opt/optzbase.py +192 -0
- ams/opt/param.py +156 -0
- ams/opt/var.py +233 -0
- ams/pypower/__init__.py +8 -0
- ams/pypower/_compat.py +9 -0
- ams/pypower/core/__init__.py +8 -0
- ams/pypower/core/pips.py +894 -0
- ams/pypower/core/ppoption.py +244 -0
- ams/pypower/core/ppver.py +18 -0
- ams/pypower/core/solver.py +2451 -0
- ams/pypower/eps.py +6 -0
- ams/pypower/idx.py +174 -0
- ams/pypower/io.py +604 -0
- ams/pypower/make/__init__.py +11 -0
- ams/pypower/make/matrices.py +665 -0
- ams/pypower/make/pdv.py +506 -0
- ams/pypower/routines/__init__.py +7 -0
- ams/pypower/routines/cpf.py +513 -0
- ams/pypower/routines/cpf_callbacks.py +114 -0
- ams/pypower/routines/opf.py +1803 -0
- ams/pypower/routines/opffcns.py +1946 -0
- ams/pypower/routines/pflow.py +852 -0
- ams/pypower/toggle.py +1098 -0
- ams/pypower/utils.py +293 -0
- ams/report.py +212 -50
- ams/routines/__init__.py +23 -0
- ams/routines/acopf.py +117 -0
- ams/routines/cpf.py +65 -0
- ams/routines/dcopf.py +241 -0
- ams/routines/dcpf.py +209 -0
- ams/routines/dcpf0.py +196 -0
- ams/routines/dopf.py +150 -0
- ams/routines/ed.py +312 -0
- ams/routines/pflow.py +255 -0
- ams/routines/pflow0.py +113 -0
- ams/routines/pflow1.py +156 -0
- ams/routines/routine.py +1033 -0
- ams/routines/rted.py +519 -0
- ams/routines/type.py +160 -0
- ams/routines/uc.py +376 -0
- ams/shared.py +34 -9
- ams/system.py +61 -22
- ams/utils/__init__.py +3 -0
- ams/utils/misc.py +77 -0
- ams/utils/paths.py +257 -0
- docs/Makefile +21 -0
- docs/build/doctrees/nbsphinx/_examples_demo_demo_AGC_20_1.png +0 -0
- docs/build/doctrees/nbsphinx/_examples_demo_demo_AGC_37_1.png +0 -0
- docs/build/doctrees/nbsphinx/_examples_demo_demo_AGC_39_1.png +0 -0
- docs/build/html/_images/_examples_demo_demo_AGC_20_1.png +0 -0
- docs/build/html/_images/_examples_demo_demo_AGC_37_1.png +0 -0
- docs/build/html/_images/_examples_demo_demo_AGC_39_1.png +0 -0
- docs/build/html/_images/xlsx.png +0 -0
- docs/build/html/_static/file.png +0 -0
- docs/build/html/_static/minus.png +0 -0
- docs/build/html/_static/plus.png +0 -0
- docs/make.bat +35 -0
- docs/source/_generated/_generated/ams.core.model.Model.alter.rst +6 -0
- docs/source/_generated/_generated/ams.core.model.Model.class_name.rst +6 -0
- docs/source/_generated/_generated/ams.core.model.Model.doc.rst +6 -0
- docs/source/_generated/_generated/ams.core.model.Model.get.rst +6 -0
- docs/source/_generated/_generated/ams.core.model.Model.get_idx.rst +6 -0
- docs/source/_generated/_generated/ams.core.model.Model.idx2uid.rst +6 -0
- docs/source/_generated/_generated/ams.core.model.Model.list2array.rst +6 -0
- docs/source/_generated/_generated/ams.core.model.Model.set.rst +6 -0
- docs/source/_generated/_generated/ams.core.model.Model.set_backref.rst +6 -0
- docs/source/_generated/_generated/ams.core.param.RParam.class_name.rst +6 -0
- docs/source/_generated/_generated/ams.core.param.RParam.dtype.rst +6 -0
- docs/source/_generated/_generated/ams.core.param.RParam.evaluate.rst +6 -0
- docs/source/_generated/_generated/ams.core.param.RParam.get_idx.rst +6 -0
- docs/source/_generated/_generated/ams.core.param.RParam.n.rst +6 -0
- docs/source/_generated/_generated/ams.core.param.RParam.parse.rst +6 -0
- docs/source/_generated/_generated/ams.core.param.RParam.shape.rst +6 -0
- docs/source/_generated/_generated/ams.core.param.RParam.size.rst +6 -0
- docs/source/_generated/_generated/ams.core.param.RParam.update.rst +6 -0
- docs/source/_generated/_generated/ams.core.param.RParam.v.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.LoadScale.assign_memory.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.LoadScale.class_name.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.LoadScale.evaluate.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.LoadScale.get_names.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.LoadScale.n.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.LoadScale.parse.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.LoadScale.shape.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.LoadScale.size.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.LoadScale.update.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.LoadScale.v.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.MinDur.assign_memory.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.MinDur.class_name.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.MinDur.evaluate.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.MinDur.get_names.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.MinDur.n.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.MinDur.parse.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.MinDur.shape.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.MinDur.size.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.MinDur.update.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.MinDur.v.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.MinDur.v0.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.MinDur.v1.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumExpandDim.assign_memory.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumExpandDim.class_name.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumExpandDim.evaluate.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumExpandDim.get_names.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumExpandDim.n.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumExpandDim.parse.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumExpandDim.shape.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumExpandDim.size.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumExpandDim.update.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumExpandDim.v.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumExpandDim.v0.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumExpandDim.v1.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumHstack.assign_memory.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumHstack.class_name.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumHstack.evaluate.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumHstack.get_names.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumHstack.n.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumHstack.parse.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumHstack.shape.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumHstack.size.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumHstack.update.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumHstack.v.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumHstack.v0.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumHstack.v1.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumOp.assign_memory.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumOp.class_name.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumOp.evaluate.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumOp.get_names.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumOp.n.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumOp.parse.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumOp.shape.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumOp.size.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumOp.update.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumOp.v.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumOp.v0.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumOp.v1.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumOpDual.assign_memory.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumOpDual.class_name.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumOpDual.evaluate.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumOpDual.get_names.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumOpDual.n.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumOpDual.parse.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumOpDual.shape.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumOpDual.size.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumOpDual.update.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumOpDual.v.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumOpDual.v0.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.NumOpDual.v1.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.RBaseService.assign_memory.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.RBaseService.class_name.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.RBaseService.evaluate.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.RBaseService.get_names.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.RBaseService.n.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.RBaseService.parse.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.RBaseService.shape.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.RBaseService.size.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.RBaseService.update.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.RBaseService.v.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.ROperationService.assign_memory.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.ROperationService.class_name.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.ROperationService.evaluate.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.ROperationService.get_names.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.ROperationService.n.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.ROperationService.parse.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.ROperationService.shape.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.ROperationService.size.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.ROperationService.update.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.ROperationService.v.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.RampSub.assign_memory.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.RampSub.class_name.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.RampSub.evaluate.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.RampSub.get_names.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.RampSub.n.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.RampSub.parse.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.RampSub.shape.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.RampSub.size.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.RampSub.update.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.RampSub.v.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.RampSub.v0.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.RampSub.v1.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.ValueService.assign_memory.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.ValueService.class_name.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.ValueService.evaluate.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.ValueService.get_names.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.ValueService.n.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.ValueService.parse.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.ValueService.shape.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.ValueService.size.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.ValueService.update.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.ValueService.v.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.VarReduction.assign_memory.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.VarReduction.class_name.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.VarReduction.evaluate.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.VarReduction.get_names.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.VarReduction.n.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.VarReduction.parse.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.VarReduction.shape.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.VarReduction.size.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.VarReduction.update.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.VarReduction.v.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.VarReduction.v0.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.VarReduction.v1.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.VarSelect.assign_memory.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.VarSelect.class_name.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.VarSelect.evaluate.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.VarSelect.get_names.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.VarSelect.n.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.VarSelect.parse.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.VarSelect.shape.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.VarSelect.size.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.VarSelect.update.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.VarSelect.v.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.VarSelect.v0.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.VarSelect.v1.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.ZonalSum.assign_memory.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.ZonalSum.class_name.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.ZonalSum.evaluate.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.ZonalSum.get_names.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.ZonalSum.n.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.ZonalSum.parse.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.ZonalSum.shape.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.ZonalSum.size.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.ZonalSum.update.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.ZonalSum.v.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.ZonalSum.v0.rst +6 -0
- docs/source/_generated/_generated/ams.core.service.ZonalSum.v1.rst +6 -0
- docs/source/_generated/_generated/ams.interface.Dynamic.is_tds.rst +6 -0
- docs/source/_generated/_generated/ams.interface.Dynamic.link_andes.rst +6 -0
- docs/source/_generated/_generated/ams.interface.Dynamic.receive.rst +6 -0
- docs/source/_generated/_generated/ams.interface.Dynamic.send.rst +6 -0
- docs/source/_generated/_generated/ams.opt.constraint.Constraint.class_name.rst +6 -0
- docs/source/_generated/_generated/ams.opt.constraint.Constraint.e.rst +6 -0
- docs/source/_generated/_generated/ams.opt.constraint.Constraint.evaluate.rst +6 -0
- docs/source/_generated/_generated/ams.opt.constraint.Constraint.n.rst +6 -0
- docs/source/_generated/_generated/ams.opt.constraint.Constraint.parse.rst +6 -0
- docs/source/_generated/_generated/ams.opt.constraint.Constraint.shape.rst +6 -0
- docs/source/_generated/_generated/ams.opt.constraint.Constraint.size.rst +6 -0
- docs/source/_generated/_generated/ams.opt.constraint.Constraint.v.rst +6 -0
- docs/source/_generated/_generated/ams.opt.exprcalc.ExpressionCalc.class_name.rst +6 -0
- docs/source/_generated/_generated/ams.opt.exprcalc.ExpressionCalc.e.rst +6 -0
- docs/source/_generated/_generated/ams.opt.exprcalc.ExpressionCalc.evaluate.rst +6 -0
- docs/source/_generated/_generated/ams.opt.exprcalc.ExpressionCalc.get_idx.rst +6 -0
- docs/source/_generated/_generated/ams.opt.exprcalc.ExpressionCalc.n.rst +6 -0
- docs/source/_generated/_generated/ams.opt.exprcalc.ExpressionCalc.parse.rst +6 -0
- docs/source/_generated/_generated/ams.opt.exprcalc.ExpressionCalc.shape.rst +6 -0
- docs/source/_generated/_generated/ams.opt.exprcalc.ExpressionCalc.size.rst +6 -0
- docs/source/_generated/_generated/ams.opt.exprcalc.ExpressionCalc.v.rst +6 -0
- docs/source/_generated/_generated/ams.opt.expression.Expression.class_name.rst +6 -0
- docs/source/_generated/_generated/ams.opt.expression.Expression.e.rst +6 -0
- docs/source/_generated/_generated/ams.opt.expression.Expression.evaluate.rst +6 -0
- docs/source/_generated/_generated/ams.opt.expression.Expression.get_idx.rst +6 -0
- docs/source/_generated/_generated/ams.opt.expression.Expression.n.rst +6 -0
- docs/source/_generated/_generated/ams.opt.expression.Expression.parse.rst +6 -0
- docs/source/_generated/_generated/ams.opt.expression.Expression.shape.rst +6 -0
- docs/source/_generated/_generated/ams.opt.expression.Expression.size.rst +6 -0
- docs/source/_generated/_generated/ams.opt.expression.Expression.v.rst +6 -0
- docs/source/_generated/_generated/ams.opt.objective.Objective.class_name.rst +6 -0
- docs/source/_generated/_generated/ams.opt.objective.Objective.e.rst +6 -0
- docs/source/_generated/_generated/ams.opt.objective.Objective.evaluate.rst +6 -0
- docs/source/_generated/_generated/ams.opt.objective.Objective.n.rst +6 -0
- docs/source/_generated/_generated/ams.opt.objective.Objective.parse.rst +6 -0
- docs/source/_generated/_generated/ams.opt.objective.Objective.shape.rst +6 -0
- docs/source/_generated/_generated/ams.opt.objective.Objective.size.rst +6 -0
- docs/source/_generated/_generated/ams.opt.objective.Objective.v.rst +6 -0
- docs/source/_generated/_generated/ams.opt.omodel.OModel.class_name.rst +6 -0
- docs/source/_generated/_generated/ams.opt.omodel.OModel.evaluate.rst +6 -0
- docs/source/_generated/_generated/ams.opt.omodel.OModel.finalize.rst +6 -0
- docs/source/_generated/_generated/ams.opt.omodel.OModel.init.rst +6 -0
- docs/source/_generated/_generated/ams.opt.omodel.OModel.initialized.rst +6 -0
- docs/source/_generated/_generated/ams.opt.omodel.OModel.parse.rst +6 -0
- docs/source/_generated/_generated/ams.opt.omodel.OModel.update.rst +6 -0
- docs/source/_generated/_generated/ams.opt.omodel.OModelBase.class_name.rst +6 -0
- docs/source/_generated/_generated/ams.opt.omodel.OModelBase.evaluate.rst +6 -0
- docs/source/_generated/_generated/ams.opt.omodel.OModelBase.finalize.rst +6 -0
- docs/source/_generated/_generated/ams.opt.omodel.OModelBase.init.rst +6 -0
- docs/source/_generated/_generated/ams.opt.omodel.OModelBase.initialized.rst +6 -0
- docs/source/_generated/_generated/ams.opt.omodel.OModelBase.parse.rst +6 -0
- docs/source/_generated/_generated/ams.opt.omodel.OModelBase.update.rst +6 -0
- docs/source/_generated/_generated/ams.opt.optbase.OptzBase.class_name.rst +6 -0
- docs/source/_generated/_generated/ams.opt.optbase.OptzBase.evaluate.rst +6 -0
- docs/source/_generated/_generated/ams.opt.optbase.OptzBase.n.rst +6 -0
- docs/source/_generated/_generated/ams.opt.optbase.OptzBase.parse.rst +6 -0
- docs/source/_generated/_generated/ams.opt.optbase.OptzBase.shape.rst +6 -0
- docs/source/_generated/_generated/ams.opt.optbase.OptzBase.size.rst +6 -0
- docs/source/_generated/_generated/ams.opt.param.Param.class_name.rst +6 -0
- docs/source/_generated/_generated/ams.opt.param.Param.evaluate.rst +6 -0
- docs/source/_generated/_generated/ams.opt.param.Param.n.rst +6 -0
- docs/source/_generated/_generated/ams.opt.param.Param.parse.rst +6 -0
- docs/source/_generated/_generated/ams.opt.param.Param.shape.rst +6 -0
- docs/source/_generated/_generated/ams.opt.param.Param.size.rst +6 -0
- docs/source/_generated/_generated/ams.opt.param.Param.update.rst +6 -0
- docs/source/_generated/_generated/ams.opt.var.Var.class_name.rst +6 -0
- docs/source/_generated/_generated/ams.opt.var.Var.evaluate.rst +6 -0
- docs/source/_generated/_generated/ams.opt.var.Var.get_idx.rst +6 -0
- docs/source/_generated/_generated/ams.opt.var.Var.n.rst +6 -0
- docs/source/_generated/_generated/ams.opt.var.Var.parse.rst +6 -0
- docs/source/_generated/_generated/ams.opt.var.Var.shape.rst +6 -0
- docs/source/_generated/_generated/ams.opt.var.Var.size.rst +6 -0
- docs/source/_generated/_generated/ams.opt.var.Var.v.rst +6 -0
- docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.addConstrs.rst +6 -0
- docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.addRParam.rst +6 -0
- docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.addService.rst +6 -0
- docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.addVars.rst +6 -0
- docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.class_name.rst +6 -0
- docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.dc2ac.rst +6 -0
- docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.disable.rst +6 -0
- docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.doc.rst +6 -0
- docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.enable.rst +6 -0
- docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.export_csv.rst +6 -0
- docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.get.rst +6 -0
- docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.init.rst +6 -0
- docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.run.rst +6 -0
- docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.set.rst +6 -0
- docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.solve.rst +6 -0
- docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.summary.rst +6 -0
- docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.unpack.rst +6 -0
- docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.update.rst +6 -0
- docs/source/_generated/_generated/ams.routines.pflow.PFlow.addConstrs.rst +6 -0
- docs/source/_generated/_generated/ams.routines.pflow.PFlow.addRParam.rst +6 -0
- docs/source/_generated/_generated/ams.routines.pflow.PFlow.addService.rst +6 -0
- docs/source/_generated/_generated/ams.routines.pflow.PFlow.addVars.rst +6 -0
- docs/source/_generated/_generated/ams.routines.pflow.PFlow.class_name.rst +6 -0
- docs/source/_generated/_generated/ams.routines.pflow.PFlow.dc2ac.rst +6 -0
- docs/source/_generated/_generated/ams.routines.pflow.PFlow.disable.rst +6 -0
- docs/source/_generated/_generated/ams.routines.pflow.PFlow.doc.rst +6 -0
- docs/source/_generated/_generated/ams.routines.pflow.PFlow.enable.rst +6 -0
- docs/source/_generated/_generated/ams.routines.pflow.PFlow.export_csv.rst +6 -0
- docs/source/_generated/_generated/ams.routines.pflow.PFlow.get.rst +6 -0
- docs/source/_generated/_generated/ams.routines.pflow.PFlow.init.rst +6 -0
- docs/source/_generated/_generated/ams.routines.pflow.PFlow.run.rst +6 -0
- docs/source/_generated/_generated/ams.routines.pflow.PFlow.set.rst +6 -0
- docs/source/_generated/_generated/ams.routines.pflow.PFlow.solve.rst +6 -0
- docs/source/_generated/_generated/ams.routines.pflow.PFlow.summary.rst +6 -0
- docs/source/_generated/_generated/ams.routines.pflow.PFlow.unpack.rst +6 -0
- docs/source/_generated/_generated/ams.routines.pflow.PFlow.update.rst +6 -0
- docs/source/_generated/_generated/ams.routines.routine.RoutineBase.addConstrs.rst +6 -0
- docs/source/_generated/_generated/ams.routines.routine.RoutineBase.addRParam.rst +6 -0
- docs/source/_generated/_generated/ams.routines.routine.RoutineBase.addService.rst +6 -0
- docs/source/_generated/_generated/ams.routines.routine.RoutineBase.addVars.rst +6 -0
- docs/source/_generated/_generated/ams.routines.routine.RoutineBase.class_name.rst +6 -0
- docs/source/_generated/_generated/ams.routines.routine.RoutineBase.dc2ac.rst +6 -0
- docs/source/_generated/_generated/ams.routines.routine.RoutineBase.disable.rst +6 -0
- docs/source/_generated/_generated/ams.routines.routine.RoutineBase.doc.rst +6 -0
- docs/source/_generated/_generated/ams.routines.routine.RoutineBase.enable.rst +6 -0
- docs/source/_generated/_generated/ams.routines.routine.RoutineBase.export_csv.rst +6 -0
- docs/source/_generated/_generated/ams.routines.routine.RoutineBase.get.rst +6 -0
- docs/source/_generated/_generated/ams.routines.routine.RoutineBase.init.rst +6 -0
- docs/source/_generated/_generated/ams.routines.routine.RoutineBase.run.rst +6 -0
- docs/source/_generated/_generated/ams.routines.routine.RoutineBase.set.rst +6 -0
- docs/source/_generated/_generated/ams.routines.routine.RoutineBase.solve.rst +6 -0
- docs/source/_generated/_generated/ams.routines.routine.RoutineBase.summary.rst +6 -0
- docs/source/_generated/_generated/ams.routines.routine.RoutineBase.unpack.rst +6 -0
- docs/source/_generated/_generated/ams.routines.routine.RoutineBase.update.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.add.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.as_dict.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.calc_pu_coeff.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.call_models.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.collect_config.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.collect_ref.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.connectivity.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.e_clear.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.f_update.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.fg_to_dae.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.find_devices.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.find_models.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.from_ipysheet.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.g_islands.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.g_update.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.get_z.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.import_groups.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.import_models.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.import_routines.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.import_types.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.init.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.j_islands.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.j_update.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.l_update_eq.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.l_update_var.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.link_ext_param.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.precompile.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.prepare.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.reload.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.remove_pycapsule.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.report.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.reset.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.s_update_post.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.s_update_var.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.save_config.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.set_address.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.set_config.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.set_dae_names.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.set_output_subidx.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.set_var_arrays.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.setup.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.store_adder_setter.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.store_existing.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.store_no_check_init.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.store_sparse_pattern.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.store_switch_times.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.summary.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.supported_models.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.supported_routines.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.switch_action.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.to_andes.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.to_ipysheet.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.undill.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.vars_to_dae.rst +6 -0
- docs/source/_generated/_generated/ams.system.System.vars_to_models.rst +6 -0
- docs/source/_generated/_generated/ams.utils.paths.DisplayablePath.display_filename_prefix_last.rst +6 -0
- docs/source/_generated/_generated/ams.utils.paths.DisplayablePath.display_filename_prefix_middle.rst +6 -0
- docs/source/_generated/_generated/ams.utils.paths.DisplayablePath.display_parent_prefix_last.rst +6 -0
- docs/source/_generated/_generated/ams.utils.paths.DisplayablePath.display_parent_prefix_middle.rst +6 -0
- docs/source/_generated/_generated/ams.utils.paths.DisplayablePath.displayable.rst +6 -0
- docs/source/_generated/_generated/ams.utils.paths.DisplayablePath.displayname.rst +6 -0
- docs/source/_generated/_generated/ams.utils.paths.DisplayablePath.make_tree.rst +6 -0
- docs/source/_generated/ams.cli.create_parser.rst +6 -0
- docs/source/_generated/ams.cli.main.rst +6 -0
- docs/source/_generated/ams.cli.preamble.rst +6 -0
- docs/source/_generated/ams.cli.rst +32 -0
- docs/source/_generated/ams.core.model.Model.rst +56 -0
- docs/source/_generated/ams.core.model.rst +30 -0
- docs/source/_generated/ams.core.param.RParam.rst +49 -0
- docs/source/_generated/ams.core.param.rst +30 -0
- docs/source/_generated/ams.core.service.LoadScale.rst +51 -0
- docs/source/_generated/ams.core.service.MinDur.rst +53 -0
- docs/source/_generated/ams.core.service.NumExpandDim.rst +53 -0
- docs/source/_generated/ams.core.service.NumHstack.rst +53 -0
- docs/source/_generated/ams.core.service.NumOp.rst +53 -0
- docs/source/_generated/ams.core.service.NumOpDual.rst +53 -0
- docs/source/_generated/ams.core.service.RBaseService.rst +51 -0
- docs/source/_generated/ams.core.service.ROperationService.rst +51 -0
- docs/source/_generated/ams.core.service.RampSub.rst +53 -0
- docs/source/_generated/ams.core.service.ValueService.rst +51 -0
- docs/source/_generated/ams.core.service.VarReduction.rst +53 -0
- docs/source/_generated/ams.core.service.VarSelect.rst +53 -0
- docs/source/_generated/ams.core.service.ZonalSum.rst +53 -0
- docs/source/_generated/ams.core.service.rst +42 -0
- docs/source/_generated/ams.interface.Dynamic.rst +41 -0
- docs/source/_generated/ams.interface.build_group_table.rst +6 -0
- docs/source/_generated/ams.interface.make_link_table.rst +6 -0
- docs/source/_generated/ams.interface.parse_addfile.rst +6 -0
- docs/source/_generated/ams.interface.replace_dev.rst +6 -0
- docs/source/_generated/ams.interface.rst +43 -0
- docs/source/_generated/ams.interface.sync_adsys.rst +6 -0
- docs/source/_generated/ams.interface.to_andes.rst +6 -0
- docs/source/_generated/ams.interface.verify_pf.rst +6 -0
- docs/source/_generated/ams.io.guess.rst +6 -0
- docs/source/_generated/ams.io.json.rst +30 -0
- docs/source/_generated/ams.io.json.write.rst +6 -0
- docs/source/_generated/ams.io.matpower.mpc2system.rst +6 -0
- docs/source/_generated/ams.io.matpower.read.rst +6 -0
- docs/source/_generated/ams.io.matpower.rst +33 -0
- docs/source/_generated/ams.io.matpower.system2mpc.rst +6 -0
- docs/source/_generated/ams.io.matpower.testlines.rst +6 -0
- docs/source/_generated/ams.io.parse.rst +6 -0
- docs/source/_generated/ams.io.psse.rst +23 -0
- docs/source/_generated/ams.io.pypower.ppc2system.rst +6 -0
- docs/source/_generated/ams.io.pypower.py2ppc.rst +6 -0
- docs/source/_generated/ams.io.pypower.read.rst +6 -0
- docs/source/_generated/ams.io.pypower.rst +34 -0
- docs/source/_generated/ams.io.pypower.system2ppc.rst +6 -0
- docs/source/_generated/ams.io.pypower.testlines.rst +6 -0
- docs/source/_generated/ams.io.rst +45 -0
- docs/source/_generated/ams.io.xlsx.rst +30 -0
- docs/source/_generated/ams.io.xlsx.write.rst +6 -0
- docs/source/_generated/ams.main.config_logger.rst +6 -0
- docs/source/_generated/ams.main.demo.rst +6 -0
- docs/source/_generated/ams.main.doc.rst +6 -0
- docs/source/_generated/ams.main.edit_conf.rst +6 -0
- docs/source/_generated/ams.main.find_log_path.rst +6 -0
- docs/source/_generated/ams.main.load.rst +6 -0
- docs/source/_generated/ams.main.misc.rst +6 -0
- docs/source/_generated/ams.main.print_license.rst +6 -0
- docs/source/_generated/ams.main.remove_output.rst +6 -0
- docs/source/_generated/ams.main.rst +44 -0
- docs/source/_generated/ams.main.run.rst +6 -0
- docs/source/_generated/ams.main.run_case.rst +6 -0
- docs/source/_generated/ams.main.save_conf.rst +6 -0
- docs/source/_generated/ams.main.selftest.rst +6 -0
- docs/source/_generated/ams.main.set_logger_level.rst +6 -0
- docs/source/_generated/ams.main.versioninfo.rst +6 -0
- docs/source/_generated/ams.opt.constraint.Constraint.rst +43 -0
- docs/source/_generated/ams.opt.constraint.rst +30 -0
- docs/source/_generated/ams.opt.exprcalc.ExpressionCalc.rst +46 -0
- docs/source/_generated/ams.opt.exprcalc.rst +30 -0
- docs/source/_generated/ams.opt.expression.Expression.rst +46 -0
- docs/source/_generated/ams.opt.expression.rst +30 -0
- docs/source/_generated/ams.opt.objective.Objective.rst +43 -0
- docs/source/_generated/ams.opt.objective.rst +30 -0
- docs/source/_generated/ams.opt.omodel.OModel.rst +48 -0
- docs/source/_generated/ams.opt.omodel.OModelBase.rst +48 -0
- docs/source/_generated/ams.opt.omodel.rst +31 -0
- docs/source/_generated/ams.opt.optbase.OptzBase.rst +41 -0
- docs/source/_generated/ams.opt.optbase.ensure_mats_and_parsed.rst +6 -0
- docs/source/_generated/ams.opt.optbase.ensure_symbols.rst +6 -0
- docs/source/_generated/ams.opt.optbase.rst +38 -0
- docs/source/_generated/ams.opt.param.Param.rst +44 -0
- docs/source/_generated/ams.opt.param.rst +30 -0
- docs/source/_generated/ams.opt.rst +40 -0
- docs/source/_generated/ams.opt.var.Var.rst +45 -0
- docs/source/_generated/ams.opt.var.rst +30 -0
- docs/source/_generated/ams.routines.dcopf.DCOPF.rst +83 -0
- docs/source/_generated/ams.routines.dcopf.rst +30 -0
- docs/source/_generated/ams.routines.pflow.PFlow.rst +83 -0
- docs/source/_generated/ams.routines.pflow.rst +30 -0
- docs/source/_generated/ams.routines.routine.RoutineBase.rst +83 -0
- docs/source/_generated/ams.routines.routine.collect_data.rst +6 -0
- docs/source/_generated/ams.routines.routine.initialize_data_dict.rst +6 -0
- docs/source/_generated/ams.routines.routine.rst +38 -0
- docs/source/_generated/ams.system.System.rst +189 -0
- docs/source/_generated/ams.system.disable_method.rst +6 -0
- docs/source/_generated/ams.system.disable_methods.rst +6 -0
- docs/source/_generated/ams.system.example.rst +6 -0
- docs/source/_generated/ams.system.rst +39 -0
- docs/source/_generated/ams.utils.paths.DisplayablePath.rst +42 -0
- docs/source/_generated/ams.utils.paths.ams_root.rst +6 -0
- docs/source/_generated/ams.utils.paths.cases_root.rst +6 -0
- docs/source/_generated/ams.utils.paths.confirm_overwrite.rst +6 -0
- docs/source/_generated/ams.utils.paths.get_case.rst +6 -0
- docs/source/_generated/ams.utils.paths.get_config_path.rst +6 -0
- docs/source/_generated/ams.utils.paths.get_dot_andes_path.rst +6 -0
- docs/source/_generated/ams.utils.paths.get_log_dir.rst +6 -0
- docs/source/_generated/ams.utils.paths.get_pkl_path.rst +6 -0
- docs/source/_generated/ams.utils.paths.get_pycode_path.rst +6 -0
- docs/source/_generated/ams.utils.paths.list_cases.rst +6 -0
- docs/source/_generated/ams.utils.paths.rst +47 -0
- docs/source/_generated/ams.utils.paths.tests_root.rst +6 -0
- docs/source/_templates/autosummary/base.rst +5 -0
- docs/source/_templates/autosummary/class.rst +35 -0
- docs/source/_templates/autosummary/module.rst +65 -0
- docs/source/_templates/autosummary/module_toctree.rst +66 -0
- docs/source/api.rst +102 -0
- docs/source/conf.py +203 -0
- docs/source/examples/index.rst +34 -0
- docs/source/genmodelref.py +61 -0
- docs/source/genroutineref.py +47 -0
- docs/source/getting_started/copyright.rst +20 -0
- docs/source/getting_started/formats/index.rst +20 -0
- docs/source/getting_started/formats/matpower.rst +183 -0
- docs/source/getting_started/formats/psse.rst +46 -0
- docs/source/getting_started/formats/pypower.rst +223 -0
- docs/source/getting_started/formats/xlsx.png +0 -0
- docs/source/getting_started/formats/xlsx.rst +23 -0
- docs/source/getting_started/index.rst +76 -0
- docs/source/getting_started/install.rst +234 -0
- docs/source/getting_started/overview.rst +26 -0
- docs/source/getting_started/testcase.rst +45 -0
- docs/source/getting_started/verification.rst +13 -0
- docs/source/groupdoc/ACLine.rst +92 -0
- docs/source/groupdoc/ACShort.rst +51 -0
- docs/source/groupdoc/ACTopology.rst +66 -0
- docs/source/groupdoc/Collection.rst +84 -0
- docs/source/groupdoc/Cost.rst +135 -0
- docs/source/groupdoc/DG.rst +204 -0
- docs/source/groupdoc/Horizon.rst +97 -0
- docs/source/groupdoc/Information.rst +36 -0
- docs/source/groupdoc/RenGen.rst +63 -0
- docs/source/groupdoc/Reserve.rst +135 -0
- docs/source/groupdoc/StaticGen.rst +229 -0
- docs/source/groupdoc/StaticLoad.rst +53 -0
- docs/source/groupdoc/StaticShunt.rst +45 -0
- docs/source/groupdoc/Undefined.rst +63 -0
- docs/source/groupdoc/VSG.rst +125 -0
- docs/source/images/dcopf_time.png +0 -0
- docs/source/images/sponsors/CURENT_Logo_NameOnTrans.png +0 -0
- docs/source/images/sponsors/CURENT_Logo_Transparent.png +0 -0
- docs/source/images/sponsors/CURENT_Logo_Transparent_Name.png +0 -0
- docs/source/images/sponsors/doe.png +0 -0
- docs/source/index.rst +108 -0
- docs/source/modeling/_generated/_generated/ams.opt.Constraint.class_name.rst +6 -0
- docs/source/modeling/_generated/_generated/ams.opt.Constraint.e.rst +6 -0
- docs/source/modeling/_generated/_generated/ams.opt.Constraint.evaluate.rst +6 -0
- docs/source/modeling/_generated/_generated/ams.opt.Constraint.n.rst +6 -0
- docs/source/modeling/_generated/_generated/ams.opt.Constraint.parse.rst +6 -0
- docs/source/modeling/_generated/_generated/ams.opt.Constraint.shape.rst +6 -0
- docs/source/modeling/_generated/_generated/ams.opt.Constraint.size.rst +6 -0
- docs/source/modeling/_generated/_generated/ams.opt.Constraint.v.rst +6 -0
- docs/source/modeling/_generated/_generated/ams.opt.OModel.class_name.rst +6 -0
- docs/source/modeling/_generated/_generated/ams.opt.OModel.evaluate.rst +6 -0
- docs/source/modeling/_generated/_generated/ams.opt.OModel.finalize.rst +6 -0
- docs/source/modeling/_generated/_generated/ams.opt.OModel.init.rst +6 -0
- docs/source/modeling/_generated/_generated/ams.opt.OModel.initialized.rst +6 -0
- docs/source/modeling/_generated/_generated/ams.opt.OModel.parse.rst +6 -0
- docs/source/modeling/_generated/_generated/ams.opt.OModel.update.rst +6 -0
- docs/source/modeling/_generated/_generated/ams.opt.Objective.class_name.rst +6 -0
- docs/source/modeling/_generated/_generated/ams.opt.Objective.e.rst +6 -0
- docs/source/modeling/_generated/_generated/ams.opt.Objective.evaluate.rst +6 -0
- docs/source/modeling/_generated/_generated/ams.opt.Objective.n.rst +6 -0
- docs/source/modeling/_generated/_generated/ams.opt.Objective.parse.rst +6 -0
- docs/source/modeling/_generated/_generated/ams.opt.Objective.shape.rst +6 -0
- docs/source/modeling/_generated/_generated/ams.opt.Objective.size.rst +6 -0
- docs/source/modeling/_generated/_generated/ams.opt.Objective.v.rst +6 -0
- docs/source/modeling/_generated/_generated/ams.opt.Var.class_name.rst +6 -0
- docs/source/modeling/_generated/_generated/ams.opt.Var.evaluate.rst +6 -0
- docs/source/modeling/_generated/_generated/ams.opt.Var.get_idx.rst +6 -0
- docs/source/modeling/_generated/_generated/ams.opt.Var.n.rst +6 -0
- docs/source/modeling/_generated/_generated/ams.opt.Var.parse.rst +6 -0
- docs/source/modeling/_generated/_generated/ams.opt.Var.shape.rst +6 -0
- docs/source/modeling/_generated/_generated/ams.opt.Var.size.rst +6 -0
- docs/source/modeling/_generated/_generated/ams.opt.Var.v.rst +6 -0
- docs/source/modeling/_generated/ams.opt.Constraint.rst +43 -0
- docs/source/modeling/_generated/ams.opt.OModel.rst +48 -0
- docs/source/modeling/_generated/ams.opt.Objective.rst +43 -0
- docs/source/modeling/_generated/ams.opt.Var.rst +45 -0
- docs/source/modeling/example.rst +159 -0
- docs/source/modeling/index.rst +17 -0
- docs/source/modeling/model.rst +210 -0
- docs/source/modeling/routine.rst +122 -0
- docs/source/modeling/system.rst +51 -0
- docs/source/modelref.rst +66 -0
- docs/source/release-notes.rst +385 -0
- docs/source/routineref.rst +38 -0
- docs/source/typedoc/ACED.rst +91 -0
- docs/source/typedoc/DCED.rst +1869 -0
- docs/source/typedoc/DCUC.rst +899 -0
- docs/source/typedoc/DED.rst +390 -0
- docs/source/typedoc/PF.rst +376 -0
- docs/source/typedoc/UndefinedType.rst +8 -0
- icebar/ips/ips.py +668 -0
- ltbams-1.0.0.dist-info/METADATA +231 -0
- ltbams-1.0.0.dist-info/RECORD +725 -0
- {ltbams-0.9.9.dist-info → ltbams-1.0.0.dist-info}/WHEEL +1 -1
- ltbams-1.0.0.dist-info/top_level.txt +5 -0
- tests/__init__.py +0 -0
- tests/test_1st_system.py +33 -0
- tests/test_addressing.py +40 -0
- tests/test_andes_mats.py +61 -0
- tests/test_case.py +266 -0
- tests/test_cli.py +34 -0
- tests/test_export_csv.py +89 -0
- tests/test_group.py +83 -0
- tests/test_interface.py +216 -0
- tests/test_io.py +32 -0
- tests/test_jumper.py +27 -0
- tests/test_known_good.py +267 -0
- tests/test_matp.py +437 -0
- tests/test_model.py +54 -0
- tests/test_omodel.py +119 -0
- tests/test_paths.py +22 -0
- tests/test_report.py +245 -0
- tests/test_repr.py +21 -0
- tests/test_routine.py +178 -0
- tests/test_rtn_dcopf.py +101 -0
- tests/test_rtn_dcpf.py +77 -0
- tests/test_rtn_ed.py +275 -0
- tests/test_rtn_pflow.py +219 -0
- tests/test_rtn_rted.py +273 -0
- tests/test_rtn_uc.py +248 -0
- tests/test_service.py +73 -0
- ltbams-0.9.9.dist-info/LICENSE +0 -692
- ltbams-0.9.9.dist-info/METADATA +0 -859
- ltbams-0.9.9.dist-info/RECORD +0 -14
- ltbams-0.9.9.dist-info/top_level.txt +0 -1
- {ltbams-0.9.9.dist-info → ltbams-1.0.0.dist-info}/entry_points.txt +0 -0
ams/core/matprocessor.py
ADDED
@@ -0,0 +1,782 @@
|
|
1
|
+
"""
|
2
|
+
Module for system matrix make.
|
3
|
+
"""
|
4
|
+
|
5
|
+
import logging
|
6
|
+
import os
|
7
|
+
import sys
|
8
|
+
from typing import Optional
|
9
|
+
|
10
|
+
import numpy as np
|
11
|
+
|
12
|
+
from andes.thirdparty.npfunc import safe_div
|
13
|
+
from andes.shared import tqdm, tqdm_nb
|
14
|
+
from andes.utils.misc import elapsed, is_notebook
|
15
|
+
|
16
|
+
from ams.opt import Param
|
17
|
+
from ams.shared import pd, sps
|
18
|
+
|
19
|
+
logger = logging.getLogger(__name__)
|
20
|
+
|
21
|
+
|
22
|
+
class MParam(Param):
|
23
|
+
"""
|
24
|
+
Class for matrix parameters built from the system.
|
25
|
+
|
26
|
+
MParam is designed to be a subclass of RParam for routine parameters
|
27
|
+
management.
|
28
|
+
|
29
|
+
Parameters
|
30
|
+
----------
|
31
|
+
name : str, optional
|
32
|
+
Name of this parameter. If not provided, `name` will be set
|
33
|
+
to the attribute name.
|
34
|
+
tex_name : str, optional
|
35
|
+
LaTeX-formatted parameter name. If not provided, `tex_name`
|
36
|
+
will be assigned the same as `name`.
|
37
|
+
info : str, optional
|
38
|
+
A description of this parameter
|
39
|
+
unit : str, optional
|
40
|
+
Unit of the parameter.
|
41
|
+
v : np.ndarray, optional
|
42
|
+
Matrix value of the parameter.
|
43
|
+
owner : object, optional
|
44
|
+
Owner of the MParam, usually the MatProcessor instance.
|
45
|
+
sparse : bool, optional
|
46
|
+
If True, the matrix is stored in sparse format.
|
47
|
+
col_names : list, optional
|
48
|
+
Column names of the matrix.
|
49
|
+
row_names : list, optional
|
50
|
+
Row names of the matrix.
|
51
|
+
"""
|
52
|
+
|
53
|
+
def __init__(self,
|
54
|
+
name: Optional[str] = None,
|
55
|
+
tex_name: Optional[str] = None,
|
56
|
+
info: Optional[str] = None,
|
57
|
+
unit: Optional[str] = None,
|
58
|
+
v: Optional[np.ndarray] = None,
|
59
|
+
owner: Optional[object] = None,
|
60
|
+
sparse: Optional[bool] = False,
|
61
|
+
col_names: Optional[list] = None,
|
62
|
+
row_names: Optional[list] = None,
|
63
|
+
):
|
64
|
+
self.name = name
|
65
|
+
self.tex_name = tex_name if (tex_name is not None) else name
|
66
|
+
self.info = info
|
67
|
+
self.unit = unit
|
68
|
+
self._v = v
|
69
|
+
self.sparse = sparse
|
70
|
+
self.owner = owner
|
71
|
+
self.col_names = col_names
|
72
|
+
self.row_names = row_names
|
73
|
+
|
74
|
+
def export_csv(self, path=None):
|
75
|
+
"""
|
76
|
+
Export the matrix to a CSV file.
|
77
|
+
|
78
|
+
Parameters
|
79
|
+
----------
|
80
|
+
path : str, optional
|
81
|
+
Path to the output CSV file.
|
82
|
+
|
83
|
+
Returns
|
84
|
+
-------
|
85
|
+
str
|
86
|
+
The path of the exported csv file
|
87
|
+
"""
|
88
|
+
|
89
|
+
if path is None:
|
90
|
+
if self.owner.system.files.fullname is None:
|
91
|
+
logger.info("Input file name not detacted. Using `Untitled`.")
|
92
|
+
file_name = f'Untitled_{self.name}'
|
93
|
+
else:
|
94
|
+
file_name = os.path.splitext(self.owner.system.files.fullname)[0]
|
95
|
+
file_name += f'_{self.name}'
|
96
|
+
path = os.path.join(os.getcwd(), file_name + '.csv')
|
97
|
+
else:
|
98
|
+
file_name = os.path.splitext(os.path.basename(path))[0]
|
99
|
+
|
100
|
+
pd.DataFrame(data=self.v, columns=self.col_names, index=self.row_names).to_csv(path)
|
101
|
+
|
102
|
+
return file_name + '.csv'
|
103
|
+
|
104
|
+
@property
|
105
|
+
def v(self):
|
106
|
+
"""
|
107
|
+
Return the value of the parameter.
|
108
|
+
"""
|
109
|
+
# NOTE: scipy.sparse matrix will return 2D array
|
110
|
+
# so we squeeze it here if only one row
|
111
|
+
if isinstance(self._v, (sps.csr_matrix, sps.lil_matrix, sps.csc_matrix)):
|
112
|
+
out = self._v.toarray()
|
113
|
+
if out.shape[0] == 1:
|
114
|
+
return np.squeeze(out)
|
115
|
+
else:
|
116
|
+
return out
|
117
|
+
return self._v
|
118
|
+
|
119
|
+
@property
|
120
|
+
def shape(self):
|
121
|
+
"""
|
122
|
+
Return the shape of the parameter.
|
123
|
+
"""
|
124
|
+
return self.v.shape
|
125
|
+
|
126
|
+
@property
|
127
|
+
def n(self):
|
128
|
+
"""
|
129
|
+
Return the szie of the parameter.
|
130
|
+
"""
|
131
|
+
return len(self.v)
|
132
|
+
|
133
|
+
@property
|
134
|
+
def class_name(self):
|
135
|
+
"""
|
136
|
+
Return the class name
|
137
|
+
"""
|
138
|
+
return self.__class__.__name__
|
139
|
+
|
140
|
+
|
141
|
+
class MatProcessor:
|
142
|
+
"""
|
143
|
+
Class for matrices processing in AMS system.
|
144
|
+
The connectivity matrices `Cft`, `Cg`, `Cl`, and `Csh` ***have taken*** the
|
145
|
+
devices connectivity into account.
|
146
|
+
|
147
|
+
The MParams' row names and col names are assigned in `System.setup()`.
|
148
|
+
"""
|
149
|
+
|
150
|
+
def __init__(self, system):
|
151
|
+
self.system = system
|
152
|
+
self.initialized = False
|
153
|
+
self.pbar = None
|
154
|
+
|
155
|
+
self.Cft = MParam(name='Cft', tex_name=r'C_{ft}',
|
156
|
+
info='Line connectivity matrix',
|
157
|
+
v=None, sparse=True, owner=self)
|
158
|
+
self.CftT = MParam(name='CftT', tex_name=r'C_{ft}^{T}',
|
159
|
+
info='Line connectivity matrix transpose',
|
160
|
+
v=None, sparse=True, owner=self)
|
161
|
+
self.Cg = MParam(name='Cg', tex_name=r'C_g',
|
162
|
+
info='Generator connectivity matrix',
|
163
|
+
v=None, sparse=True, owner=self)
|
164
|
+
self.Cl = MParam(name='Cl', tex_name=r'Cl',
|
165
|
+
info='Load connectivity matrix',
|
166
|
+
v=None, sparse=True, owner=self)
|
167
|
+
self.Csh = MParam(name='Csh', tex_name=r'C_{sh}',
|
168
|
+
info='Shunt connectivity matrix',
|
169
|
+
v=None, sparse=True, owner=self)
|
170
|
+
|
171
|
+
self.Bbus = MParam(name='Bbus', tex_name=r'B_{bus}',
|
172
|
+
info='Bus admittance matrix',
|
173
|
+
v=None, sparse=True, owner=self)
|
174
|
+
self.Bf = MParam(name='Bf', tex_name=r'B_{f}',
|
175
|
+
info='Bf matrix',
|
176
|
+
v=None, sparse=True, owner=self)
|
177
|
+
self.Pbusinj = MParam(name='Pbusinj', tex_name=r'P_{bus}^{inj}',
|
178
|
+
info='Bus power injection vector',
|
179
|
+
v=None, sparse=False, owner=self)
|
180
|
+
self.Pfinj = MParam(name='Pfinj', tex_name=r'P_{f}^{inj}',
|
181
|
+
info='Line power injection vector',
|
182
|
+
v=None, sparse=False, owner=self)
|
183
|
+
|
184
|
+
self.PTDF = MParam(name='PTDF', tex_name=r'P_{TDF}',
|
185
|
+
info='Power transfer distribution factor',
|
186
|
+
v=None, sparse=False, owner=self)
|
187
|
+
self.LODF = MParam(name='LODF', tex_name=r'O_{TDF}',
|
188
|
+
info='Line outage distribution factor',
|
189
|
+
v=None, sparse=False, owner=self)
|
190
|
+
|
191
|
+
def build(self, force=False):
|
192
|
+
"""
|
193
|
+
Build the system matrices.
|
194
|
+
It build connectivity matrices first: Cg, Cl, Csh, Cft, and CftT.
|
195
|
+
Then build bus matrices: Bf, Bbus, Pfinj, and Pbusinj.
|
196
|
+
|
197
|
+
Parameters
|
198
|
+
----------
|
199
|
+
force : bool, optional
|
200
|
+
If True, force to rebuild the matrices. Default is False.
|
201
|
+
|
202
|
+
Notes
|
203
|
+
-----
|
204
|
+
Generator online status is NOT considered in its connectivity matrix.
|
205
|
+
The same applies for load, line, and shunt.
|
206
|
+
|
207
|
+
Returns
|
208
|
+
-------
|
209
|
+
initialized : bool
|
210
|
+
True if the matrices are built successfully.
|
211
|
+
"""
|
212
|
+
if not force and self.initialized:
|
213
|
+
logger.debug("System matrices are already built.")
|
214
|
+
return self.initialized
|
215
|
+
|
216
|
+
t_mat, _ = elapsed()
|
217
|
+
logger.warning("Building system matrices")
|
218
|
+
# --- connectivity matrices ---
|
219
|
+
_ = self.build_cg()
|
220
|
+
_ = self.build_cl()
|
221
|
+
_ = self.build_csh()
|
222
|
+
_ = self.build_cft()
|
223
|
+
|
224
|
+
# --- bus matrices ---
|
225
|
+
_ = self.build_bf()
|
226
|
+
_ = self.build_bbus()
|
227
|
+
_ = self.build_pfinj()
|
228
|
+
_ = self.build_pbusinj()
|
229
|
+
_, s_mat = elapsed(t_mat)
|
230
|
+
|
231
|
+
logger.debug(f" -> System matrices built in {s_mat}")
|
232
|
+
self.initialized = True
|
233
|
+
return self.initialized
|
234
|
+
|
235
|
+
@property
|
236
|
+
def class_name(self):
|
237
|
+
"""
|
238
|
+
Return the class name
|
239
|
+
"""
|
240
|
+
return self.__class__.__name__
|
241
|
+
|
242
|
+
@property
|
243
|
+
def n(self):
|
244
|
+
"""
|
245
|
+
To fit the RParam style.
|
246
|
+
"""
|
247
|
+
return 2
|
248
|
+
|
249
|
+
def build_cg(self):
|
250
|
+
"""
|
251
|
+
Build generator connectivity matrix Cg, and store it in the MParam `Cg`.
|
252
|
+
|
253
|
+
Returns
|
254
|
+
-------
|
255
|
+
Cg : scipy.sparse.csr_matrix
|
256
|
+
Generator connectivity matrix.
|
257
|
+
"""
|
258
|
+
system = self.system
|
259
|
+
|
260
|
+
# common variables
|
261
|
+
nb = system.Bus.n
|
262
|
+
ng = system.StaticGen.n
|
263
|
+
|
264
|
+
# bus indices: idx -> uid
|
265
|
+
idx_gen = system.StaticGen.get_all_idxes()
|
266
|
+
u_gen = system.StaticGen.get(src='u', attr='v', idx=idx_gen)
|
267
|
+
on_gen = np.flatnonzero(u_gen) # uid of online generators
|
268
|
+
on_gen_idx = [idx_gen[i] for i in on_gen] # idx of online generators
|
269
|
+
on_gen_bus = system.StaticGen.get(src='bus', attr='v', idx=on_gen_idx)
|
270
|
+
|
271
|
+
row = np.array([system.Bus.idx2uid(x) for x in on_gen_bus])
|
272
|
+
col = np.array([idx_gen.index(x) for x in on_gen_idx])
|
273
|
+
self.Cg._v = sps.csr_matrix((np.ones(len(on_gen_idx)), (row, col)), (nb, ng))
|
274
|
+
return self.Cg._v
|
275
|
+
|
276
|
+
def build_cl(self):
|
277
|
+
"""
|
278
|
+
Build load connectivity matrix Cl, and store it in the MParam `Cl`.
|
279
|
+
|
280
|
+
Returns
|
281
|
+
-------
|
282
|
+
Cl : scipy.sparse.csr_matrix
|
283
|
+
Load connectivity matrix.
|
284
|
+
"""
|
285
|
+
system = self.system
|
286
|
+
|
287
|
+
# common variables
|
288
|
+
nb = system.Bus.n
|
289
|
+
npq = system.PQ.n
|
290
|
+
|
291
|
+
# load indices: idx -> uid
|
292
|
+
idx_load = system.PQ.idx.v
|
293
|
+
u_load = system.PQ.get(src='u', attr='v', idx=idx_load)
|
294
|
+
on_load = np.flatnonzero(u_load)
|
295
|
+
on_load_idx = [idx_load[i] for i in on_load]
|
296
|
+
on_load_bus = system.PQ.get(src='bus', attr='v', idx=on_load_idx)
|
297
|
+
|
298
|
+
row = np.array([system.Bus.idx2uid(x) for x in on_load_bus])
|
299
|
+
col = np.array([system.PQ.idx2uid(x) for x in on_load_idx])
|
300
|
+
self.Cl._v = sps.csr_matrix((np.ones(len(on_load_idx)), (row, col)), (nb, npq))
|
301
|
+
return self.Cl._v
|
302
|
+
|
303
|
+
def build_csh(self):
|
304
|
+
"""
|
305
|
+
Build shunt connectivity matrix Csh, and store it in the MParam `Csh`.
|
306
|
+
|
307
|
+
Returns
|
308
|
+
-------
|
309
|
+
Csh : spmatrix
|
310
|
+
Shunt connectivity matrix.
|
311
|
+
"""
|
312
|
+
system = self.system
|
313
|
+
|
314
|
+
# common variables
|
315
|
+
nb = system.Bus.n
|
316
|
+
nsh = system.Shunt.n
|
317
|
+
|
318
|
+
# shunt indices: idx -> uid
|
319
|
+
idx_shunt = system.Shunt.idx.v
|
320
|
+
u_shunt = system.Shunt.get(src='u', attr='v', idx=idx_shunt)
|
321
|
+
on_shunt = np.flatnonzero(u_shunt)
|
322
|
+
on_shunt_idx = [idx_shunt[i] for i in on_shunt]
|
323
|
+
on_shunt_bus = system.Shunt.get(src='bus', attr='v', idx=on_shunt_idx)
|
324
|
+
|
325
|
+
row = np.array([system.Bus.idx2uid(x) for x in on_shunt_bus])
|
326
|
+
col = np.array([system.Shunt.idx2uid(x) for x in on_shunt_idx])
|
327
|
+
self.Csh._v = sps.csr_matrix((np.ones(len(on_shunt_idx)), (row, col)), (nb, nsh))
|
328
|
+
return self.Csh._v
|
329
|
+
|
330
|
+
def build_cft(self):
|
331
|
+
"""
|
332
|
+
Build line connectivity matrix Cft and its transpose CftT.
|
333
|
+
The Cft and CftT are stored in the MParam `Cft` and `CftT`, respectively.
|
334
|
+
|
335
|
+
Returns
|
336
|
+
-------
|
337
|
+
Cft : scipy.sparse.csr_matrix
|
338
|
+
Line connectivity matrix.
|
339
|
+
"""
|
340
|
+
system = self.system
|
341
|
+
|
342
|
+
# common variables
|
343
|
+
nb = system.Bus.n
|
344
|
+
nl = system.Line.n
|
345
|
+
|
346
|
+
# line indices: idx -> uid
|
347
|
+
idx_line = system.Line.idx.v
|
348
|
+
u_line = system.Line.get(src='u', attr='v', idx=idx_line)
|
349
|
+
on_line = np.flatnonzero(u_line)
|
350
|
+
on_line_idx = [idx_line[i] for i in on_line]
|
351
|
+
on_line_bus1 = system.Line.get(src='bus1', attr='v', idx=on_line_idx)
|
352
|
+
on_line_bus2 = system.Line.get(src='bus2', attr='v', idx=on_line_idx)
|
353
|
+
|
354
|
+
data_line = np.ones(2*len(on_line_idx))
|
355
|
+
data_line[len(on_line_idx):] = -1
|
356
|
+
row_line = np.array([system.Bus.idx2uid(x) for x in on_line_bus1 + on_line_bus2])
|
357
|
+
col_line = np.array([system.Line.idx2uid(x) for x in on_line_idx + on_line_idx])
|
358
|
+
self.Cft._v = sps.csr_matrix((data_line, (row_line, col_line)), (nb, nl))
|
359
|
+
self.CftT._v = self.Cft._v.T
|
360
|
+
return self.Cft._v
|
361
|
+
|
362
|
+
def build_bf(self):
|
363
|
+
"""
|
364
|
+
Build DC Bf matrix and store it in the MParam `Bf`.
|
365
|
+
|
366
|
+
Returns
|
367
|
+
-------
|
368
|
+
Bf : scipy.sparse.csr_matrix
|
369
|
+
Bf matrix.
|
370
|
+
"""
|
371
|
+
system = self.system
|
372
|
+
|
373
|
+
# common variables
|
374
|
+
nb = system.Bus.n
|
375
|
+
nl = system.Line.n
|
376
|
+
|
377
|
+
# line parameters
|
378
|
+
idx_line = system.Line.idx.v
|
379
|
+
b = self._calc_b()
|
380
|
+
|
381
|
+
# build Bf such that Bf * Va is the vector of real branch powers injected
|
382
|
+
# at each branch's "from" bus
|
383
|
+
f = system.Bus.idx2uid(system.Line.get(src='bus1', attr='v', idx=idx_line))
|
384
|
+
t = system.Bus.idx2uid(system.Line.get(src='bus2', attr='v', idx=idx_line))
|
385
|
+
ir = np.r_[range(nl), range(nl)] # double set of row indices
|
386
|
+
self.Bf._v = sps.csr_matrix((np.r_[b, -b], (ir, np.r_[f, t])), (nl, nb))
|
387
|
+
return self.Bf._v
|
388
|
+
|
389
|
+
def build_bbus(self):
|
390
|
+
"""
|
391
|
+
Build Bdc matrix and store it in the MParam `Bbus`.
|
392
|
+
|
393
|
+
Returns
|
394
|
+
-------
|
395
|
+
Bdc : scipy.sparse.csr_matrix
|
396
|
+
DC bus admittance matrix.
|
397
|
+
"""
|
398
|
+
self.Bbus._v = self.Cft._v * self.Bf._v
|
399
|
+
return self.Bbus._v
|
400
|
+
|
401
|
+
def build_pfinj(self):
|
402
|
+
"""
|
403
|
+
Build DC Pfinj vector and store it in the MParam `Pfinj`.
|
404
|
+
|
405
|
+
Returns
|
406
|
+
-------
|
407
|
+
Pfinj : np.ndarray
|
408
|
+
Line power injection vector.
|
409
|
+
"""
|
410
|
+
idx_line = self.system.Line.idx.v
|
411
|
+
b = self._calc_b()
|
412
|
+
phi = self.system.Line.get(src='phi', attr='v', idx=idx_line)
|
413
|
+
self.Pfinj._v = b * (-phi)
|
414
|
+
return self.Pfinj._v
|
415
|
+
|
416
|
+
def build_pbusinj(self):
|
417
|
+
"""
|
418
|
+
Build DC Pbusinj vector and store it in the MParam `Pbusinj`.
|
419
|
+
|
420
|
+
Returns
|
421
|
+
-------
|
422
|
+
Pbusinj : np.ndarray
|
423
|
+
Bus power injection vector.
|
424
|
+
"""
|
425
|
+
self.Pbusinj._v = self.Cft._v * self.Pfinj._v
|
426
|
+
return self.Pbusinj._v
|
427
|
+
|
428
|
+
def _calc_b(self):
|
429
|
+
"""
|
430
|
+
Calculate DC series susceptance for each line.
|
431
|
+
|
432
|
+
Returns
|
433
|
+
-------
|
434
|
+
b : np.ndarray
|
435
|
+
Series susceptance for each line.
|
436
|
+
"""
|
437
|
+
system = self.system
|
438
|
+
nl = system.Line.n
|
439
|
+
|
440
|
+
# line parameters
|
441
|
+
idx_line = system.Line.idx.v
|
442
|
+
x = system.Line.get(src='x', attr='v', idx=idx_line)
|
443
|
+
u_line = system.Line.get(src='u', attr='v', idx=idx_line)
|
444
|
+
b = u_line / x # series susceptance
|
445
|
+
|
446
|
+
# in DC, tap is assumed to be 1
|
447
|
+
tap0 = system.Line.get(src='tap', attr='v', idx=idx_line)
|
448
|
+
tap = np.ones(nl)
|
449
|
+
i = np.flatnonzero(tap0)
|
450
|
+
tap[i] = tap0[i] # assign non-zero tap ratios
|
451
|
+
b = b / tap # adjusted series susceptance
|
452
|
+
|
453
|
+
return b
|
454
|
+
|
455
|
+
def build_ptdf(self, line=None, no_store=False,
|
456
|
+
incremental=False, step=1000, no_tqdm=False,
|
457
|
+
permc_spec=None, use_umfpack=True):
|
458
|
+
"""
|
459
|
+
Build the Power Transfer Distribution Factor (PTDF) matrix and optionally store it in `MParam.PTDF`.
|
460
|
+
|
461
|
+
PTDF[m, n] represents the increased line flow on line `m` for a 1 p.u. power injection at bus `n`.
|
462
|
+
It is similar to the Generation Shift Factor (GSF).
|
463
|
+
|
464
|
+
Note: There may be minor discrepancies between PTDF-based line flow and DCOPF-calculated line flow.
|
465
|
+
|
466
|
+
For large cases, use `incremental=True` to calculate the sparse PTDF in chunks, which will be stored
|
467
|
+
as a `scipy.sparse.lil_matrix`. In this mode, the PTDF is calculated in chunks, and a progress bar
|
468
|
+
will be shown unless `no_tqdm=True`.
|
469
|
+
|
470
|
+
Parameters
|
471
|
+
----------
|
472
|
+
line : int, str, list, optional
|
473
|
+
Line indices for which the PTDF is calculated. If specified, the PTDF will not be stored in `MParam`.
|
474
|
+
no_store : bool, optional
|
475
|
+
If False, store the PTDF in `MatProcessor.PTDF._v`. Default is False.
|
476
|
+
incremental : bool, optional
|
477
|
+
If True, calculate the sparse PTDF in chunks to save memory. Default is False.
|
478
|
+
step : int, optional
|
479
|
+
Step size for incremental calculation. Default is 1000.
|
480
|
+
no_tqdm : bool, optional
|
481
|
+
If True, disable the progress bar. Default is False.
|
482
|
+
permc_spec : str, optional
|
483
|
+
Column permutation strategy for sparsity preservation. Default is 'COLAMD'.
|
484
|
+
use_umfpack : bool, optional
|
485
|
+
If True, use UMFPACK as the solver. Effective only when (`incremental=True`)
|
486
|
+
& (`line` contains a single line or `step` is 1). Default is True.
|
487
|
+
|
488
|
+
Parameters
|
489
|
+
----------
|
490
|
+
line: int, str, list, optional
|
491
|
+
Lines index for which the PTDF is calculated. It takes both single
|
492
|
+
or multiple line indices. Note that if `line` is given, the PTDF will
|
493
|
+
not be stored in the MParam.
|
494
|
+
no_store : bool, optional
|
495
|
+
If False, the PTDF will be stored into `MatProcessor.PTDF._v`.
|
496
|
+
incremental : bool, optional
|
497
|
+
If True, the sparse PTDF will be calculated in chunks to save memory.
|
498
|
+
step : int, optional
|
499
|
+
Step for incremental calculation.
|
500
|
+
no_tqdm : bool, optional
|
501
|
+
If True, the progress bar will be disabled.
|
502
|
+
permc_spec : str, optional
|
503
|
+
How to permute the columns of the matrix for sparsity preservation. (default: 'COLAMD')
|
504
|
+
use_umfpack : bool, optional
|
505
|
+
If True, use UMFPACK as the solver. (default: True)
|
506
|
+
|
507
|
+
Returns
|
508
|
+
-------
|
509
|
+
PTDF : np.ndarray or scipy.sparse.lil_matrix
|
510
|
+
Power transfer distribution factor.
|
511
|
+
|
512
|
+
References
|
513
|
+
----------
|
514
|
+
[1] PowerWorld Documentation, Power Transfer Distribution Factors, [Online]
|
515
|
+
|
516
|
+
Available:
|
517
|
+
|
518
|
+
https://www.powerworld.com/WebHelp/Content/MainDocumentation_HTML/Power_Transfer_Distribution_Factors.htm
|
519
|
+
"""
|
520
|
+
system = self.system
|
521
|
+
|
522
|
+
# use first slack bus as reference slack bus
|
523
|
+
slack = system.Slack.bus.v[0]
|
524
|
+
noslack = [system.Bus.idx2uid(bus) for bus in system.Bus.idx.v if bus != slack]
|
525
|
+
|
526
|
+
# use first bus for voltage angle reference
|
527
|
+
noref_idx = system.Bus.idx.v[1:]
|
528
|
+
noref = system.Bus.idx2uid(noref_idx)
|
529
|
+
|
530
|
+
if line is None:
|
531
|
+
luid = system.Line.idx2uid(system.Line.idx.v)
|
532
|
+
elif isinstance(line, (int, str)):
|
533
|
+
try:
|
534
|
+
luid = [system.Line.idx2uid(line)]
|
535
|
+
except ValueError:
|
536
|
+
raise ValueError(f"Line {line} not found.")
|
537
|
+
elif isinstance(line, list):
|
538
|
+
luid = system.Line.idx2uid(line)
|
539
|
+
|
540
|
+
# build other matrices if not built
|
541
|
+
if not self.initialized:
|
542
|
+
logger.debug("System matrices are not built. Building now.")
|
543
|
+
self.build()
|
544
|
+
|
545
|
+
nbus = system.Bus.n
|
546
|
+
nline = len(luid)
|
547
|
+
|
548
|
+
Bbus = self.Bbus._v
|
549
|
+
Bf = self.Bf._v
|
550
|
+
|
551
|
+
if incremental:
|
552
|
+
# initialize progress bar
|
553
|
+
if is_notebook():
|
554
|
+
self.pbar = tqdm_nb(total=100, unit='%', file=sys.stdout,
|
555
|
+
disable=no_tqdm)
|
556
|
+
else:
|
557
|
+
self.pbar = tqdm(total=100, unit='%', ncols=80, ascii=True,
|
558
|
+
file=sys.stdout, disable=no_tqdm)
|
559
|
+
|
560
|
+
self.pbar.update(0)
|
561
|
+
last_pc = 0
|
562
|
+
|
563
|
+
H = sps.lil_matrix((nline, system.Bus.n))
|
564
|
+
|
565
|
+
# NOTE: for PTDF, we are building rows by rows
|
566
|
+
for start in range(0, nline, step):
|
567
|
+
end = min(start + step, nline)
|
568
|
+
sol = sps.linalg.spsolve(A=Bbus[np.ix_(noslack, noref)].T,
|
569
|
+
b=Bf[np.ix_(luid[start:end], noref)].T,
|
570
|
+
permc_spec=permc_spec,
|
571
|
+
use_umfpack=use_umfpack).T
|
572
|
+
H[start:end, noslack] = sol
|
573
|
+
|
574
|
+
# show progress in percentage
|
575
|
+
perc = np.round(min((end / nline) * 100, 100), 2)
|
576
|
+
|
577
|
+
perc_diff = perc - last_pc
|
578
|
+
if perc_diff >= 1:
|
579
|
+
self.pbar.update(perc_diff)
|
580
|
+
last_pc = perc
|
581
|
+
|
582
|
+
# finish progress bar
|
583
|
+
self.pbar.update(100 - last_pc)
|
584
|
+
# removed `pbar` so that System object can be serialized
|
585
|
+
self.pbar.close()
|
586
|
+
self.pbar = None
|
587
|
+
else:
|
588
|
+
H = np.zeros((nline, nbus))
|
589
|
+
H[:, noslack] = np.linalg.solve(Bbus.todense()[np.ix_(noslack, noref)].T,
|
590
|
+
Bf.todense()[np.ix_(luid, noref)].T).T
|
591
|
+
|
592
|
+
# reshape results into 1D array if only one line
|
593
|
+
if isinstance(line, (int, str)):
|
594
|
+
H = H[0, :]
|
595
|
+
|
596
|
+
if (not no_store) & (line is None):
|
597
|
+
self.PTDF._v = H
|
598
|
+
|
599
|
+
return H
|
600
|
+
|
601
|
+
def build_lodf(self, line=None, no_store=False,
|
602
|
+
incremental=False, step=1000, no_tqdm=False):
|
603
|
+
"""
|
604
|
+
Build the Line Outage Distribution Factor matrix and store it in the
|
605
|
+
MParam `LODF`.
|
606
|
+
|
607
|
+
`LODF[m, n]` means the increased line flow on line `m` when there is
|
608
|
+
1 p.u. line flow decrease on line `n` due to line `n` outage.
|
609
|
+
It is also referred to as Branch Outage Distribution Factor (BODF).
|
610
|
+
|
611
|
+
It requires DC PTDF and Cft.
|
612
|
+
|
613
|
+
For large cases where memory is a concern, use `incremental=True` to
|
614
|
+
calculate the sparse LODF in chunks in the format of scipy.sparse.lil_matrix.
|
615
|
+
|
616
|
+
Parameters
|
617
|
+
----------
|
618
|
+
line: int, str, list, optional
|
619
|
+
Lines index for which the LODF is calculated. It takes both single
|
620
|
+
or multiple line indices. Note that if `line` is given, the LODF will
|
621
|
+
not be stored in the MParam.
|
622
|
+
no_store : bool, optional
|
623
|
+
If False, the LODF will be stored into `MatProcessor.LODF._v`.
|
624
|
+
incremental : bool, optional
|
625
|
+
If True, the sparse LODF will be calculated in chunks to save memory.
|
626
|
+
step : int, optional
|
627
|
+
Step for incremental calculation.
|
628
|
+
no_tqdm : bool, optional
|
629
|
+
If True, the progress bar will be disabled.
|
630
|
+
|
631
|
+
Returns
|
632
|
+
-------
|
633
|
+
LODF : np.ndarray, scipy.sparse.lil_matrix
|
634
|
+
Line outage distribution factor.
|
635
|
+
|
636
|
+
References
|
637
|
+
----------
|
638
|
+
[1] PowerWorld Documentation, Line Outage Distribution Factors, [Online]
|
639
|
+
|
640
|
+
Available:
|
641
|
+
|
642
|
+
https://www.powerworld.com/WebHelp/Content/MainDocumentation_HTML/Line_Outage_Distribution_Factors_LODFs.htm
|
643
|
+
"""
|
644
|
+
system = self.system
|
645
|
+
|
646
|
+
if line is None:
|
647
|
+
luid = system.Line.idx2uid(system.Line.idx.v)
|
648
|
+
elif isinstance(line, (int, str)):
|
649
|
+
try:
|
650
|
+
luid = [system.Line.idx2uid(line)]
|
651
|
+
except ValueError:
|
652
|
+
raise ValueError(f"Line {line} not found.")
|
653
|
+
elif isinstance(line, list):
|
654
|
+
luid = system.Line.idx2uid(line)
|
655
|
+
|
656
|
+
# NOTE: here we use nbranch to differentiate it with nline
|
657
|
+
nbranch = system.Line.n
|
658
|
+
nline = len(luid)
|
659
|
+
|
660
|
+
ptdf = self.PTDF._v
|
661
|
+
# build PTDF if not built
|
662
|
+
if self.PTDF._v is None:
|
663
|
+
ptdf = self.build_ptdf(no_store=True, incremental=incremental, step=step)
|
664
|
+
if incremental and isinstance(self.PTDF._v, np.ndarray):
|
665
|
+
ptdf = sps.lil_matrix(self.PTDF._v)
|
666
|
+
|
667
|
+
if incremental | (isinstance(ptdf, sps.spmatrix)):
|
668
|
+
# initialize progress bar
|
669
|
+
if is_notebook():
|
670
|
+
self.pbar = tqdm_nb(total=100, unit='%', file=sys.stdout,
|
671
|
+
disable=no_tqdm)
|
672
|
+
else:
|
673
|
+
self.pbar = tqdm(total=100, unit='%', ncols=80, ascii=True,
|
674
|
+
file=sys.stdout, disable=no_tqdm)
|
675
|
+
|
676
|
+
self.pbar.update(0)
|
677
|
+
last_pc = 0
|
678
|
+
|
679
|
+
LODF = sps.lil_matrix((nbranch, nline))
|
680
|
+
|
681
|
+
# NOTE: for LODF, we are doing it columns by columns
|
682
|
+
# reshape luid to list of list by step
|
683
|
+
luidp = [luid[i:i + step] for i in range(0, len(luid), step)]
|
684
|
+
for luidi in luidp:
|
685
|
+
H_chunk = ptdf @ self.Cft._v[:, luidi]
|
686
|
+
h_chunk = H_chunk.diagonal(-luidi[0])
|
687
|
+
rden = safe_div(np.ones(H_chunk.shape),
|
688
|
+
np.tile(np.ones_like(h_chunk) - h_chunk, (nbranch, 1)))
|
689
|
+
H_chunk = H_chunk.multiply(rden).tolil()
|
690
|
+
# NOTE: use lil_matrix to set diagonal values as -1
|
691
|
+
rsid = sps.diags(H_chunk.diagonal(-luidi[0])) + sps.eye(H_chunk.shape[1])
|
692
|
+
if H_chunk.shape[0] > rsid.shape[0]:
|
693
|
+
Rsid = sps.lil_matrix(H_chunk.shape)
|
694
|
+
Rsid[luidi, :] = rsid
|
695
|
+
else:
|
696
|
+
Rsid = rsid
|
697
|
+
H_chunk = H_chunk - Rsid
|
698
|
+
LODF[:, [luid.index(i) for i in luidi]] = H_chunk
|
699
|
+
|
700
|
+
# show progress in percentage
|
701
|
+
perc = np.round(min((luid.index(luidi[-1]) / nline) * 100, 100), 2)
|
702
|
+
|
703
|
+
perc_diff = perc - last_pc
|
704
|
+
if perc_diff >= 1:
|
705
|
+
self.pbar.update(perc_diff)
|
706
|
+
last_pc = perc
|
707
|
+
|
708
|
+
# finish progress bar
|
709
|
+
self.pbar.update(100 - last_pc)
|
710
|
+
# removed `pbar` so that System object can be serialized
|
711
|
+
self.pbar.close()
|
712
|
+
self.pbar = None
|
713
|
+
else:
|
714
|
+
H = ptdf @ self.Cft._v[:, luid]
|
715
|
+
h = np.diag(H, -luid[0])
|
716
|
+
LODF = safe_div(H,
|
717
|
+
np.tile(np.ones_like(h) - h, (nbranch, 1)))
|
718
|
+
# # NOTE: reset the diagonal elements to -1
|
719
|
+
rsid = np.diag(np.diag(LODF, -luid[0])) + np.eye(nline, nline)
|
720
|
+
if LODF.shape[0] > rsid.shape[0]:
|
721
|
+
Rsid = np.zeros_like(LODF)
|
722
|
+
Rsid[luid, :] = rsid
|
723
|
+
else:
|
724
|
+
Rsid = rsid
|
725
|
+
LODF = LODF - Rsid
|
726
|
+
|
727
|
+
# reshape results into 1D array if only one line
|
728
|
+
if isinstance(line, (int, str)):
|
729
|
+
LODF = LODF[:, 0]
|
730
|
+
|
731
|
+
if (not no_store) & (line is None):
|
732
|
+
self.LODF._v = LODF
|
733
|
+
return LODF
|
734
|
+
|
735
|
+
def build_otdf(self, line=None):
|
736
|
+
"""
|
737
|
+
Build the Outrage Transfer Distribution Factor (OTDF) matrix for line
|
738
|
+
k outage: :math:`OTDF_k = PTDF + LODF[:, k] @ PTDF[k, ]`.
|
739
|
+
|
740
|
+
OTDF_k[m, n] means the increased line flow on line `m` when there is
|
741
|
+
1 p.u. power injection at bus `n` when line `k` is outage.
|
742
|
+
|
743
|
+
Note that the OTDF is not stored in the MatProcessor.
|
744
|
+
|
745
|
+
Parameters
|
746
|
+
----------
|
747
|
+
line : int, str, list, optional
|
748
|
+
Lines index for which the OTDF is calculated. It takes both single
|
749
|
+
or multiple line indices.
|
750
|
+
If not given, the first line is used by default.
|
751
|
+
|
752
|
+
Returns
|
753
|
+
-------
|
754
|
+
OTDF : np.ndarray, scipy.sparse.csr_matrix
|
755
|
+
Line outage distribution factor.
|
756
|
+
|
757
|
+
References
|
758
|
+
----------
|
759
|
+
[1] PowerWorld Documentation, Line Outage Distribution Factors, [Online]
|
760
|
+
|
761
|
+
Available:
|
762
|
+
|
763
|
+
https://www.powerworld.com/WebHelp/Content/MainDocumentation_HTML/Line_Outage_Distribution_Factors_LODFs.htm
|
764
|
+
"""
|
765
|
+
if (self.PTDF._v is None) or (self.LODF._v is None):
|
766
|
+
raise ValueError("Internal PTDF and LODF are not available. Please build them first.")
|
767
|
+
|
768
|
+
ptdf = self.PTDF._v
|
769
|
+
lodf = self.LODF._v
|
770
|
+
|
771
|
+
if line is None:
|
772
|
+
luid = [0]
|
773
|
+
elif isinstance(line, (int, str)):
|
774
|
+
try:
|
775
|
+
luid = [self.system.Line.idx2uid(line)]
|
776
|
+
except ValueError:
|
777
|
+
raise ValueError(f"Line {line} not found.")
|
778
|
+
elif isinstance(line, list):
|
779
|
+
luid = self.system.Line.idx2uid(line)
|
780
|
+
|
781
|
+
otdf = ptdf + lodf[:, luid] @ ptdf[luid, :]
|
782
|
+
return otdf
|