ltbams 1.0.9__py3-none-any.whl → 1.0.11__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 (83) hide show
  1. ams/__init__.py +0 -1
  2. ams/_version.py +3 -3
  3. ams/cases/5bus/pjm5bus_demo.json +1324 -0
  4. ams/core/__init__.py +1 -0
  5. ams/core/common.py +30 -0
  6. ams/core/documenter.py +130 -62
  7. ams/core/model.py +1 -1
  8. ams/core/symprocessor.py +1 -1
  9. ams/extension/eva.py +1 -1
  10. ams/interface.py +42 -26
  11. ams/io/matpower.py +31 -17
  12. ams/io/psse.py +278 -1
  13. ams/main.py +2 -2
  14. ams/models/group.py +2 -1
  15. ams/models/static/pq.py +7 -3
  16. ams/opt/param.py +1 -2
  17. ams/routines/__init__.py +2 -3
  18. ams/routines/acopf.py +5 -108
  19. ams/routines/dcopf.py +8 -0
  20. ams/routines/dcpf.py +1 -1
  21. ams/routines/ed.py +4 -2
  22. ams/routines/grbopt.py +155 -0
  23. ams/routines/pflow.py +2 -2
  24. ams/routines/pypower.py +622 -0
  25. ams/routines/routine.py +4 -10
  26. ams/routines/uc.py +2 -2
  27. ams/shared.py +26 -43
  28. ams/system.py +120 -4
  29. ams/utils/paths.py +3 -3
  30. docs/source/api.rst +2 -0
  31. docs/source/examples/index.rst +2 -1
  32. docs/source/genroutineref.py +1 -1
  33. docs/source/getting_started/install.rst +9 -6
  34. docs/source/images/dcopf_time.png +0 -0
  35. docs/source/images/educ_pie.png +0 -0
  36. docs/source/release-notes.rst +37 -57
  37. {ltbams-1.0.9.dist-info → ltbams-1.0.11.dist-info}/METADATA +85 -48
  38. {ltbams-1.0.9.dist-info → ltbams-1.0.11.dist-info}/RECORD +58 -75
  39. {ltbams-1.0.9.dist-info → ltbams-1.0.11.dist-info}/WHEEL +1 -1
  40. tests/test_1st_system.py +2 -2
  41. tests/test_case.py +14 -14
  42. tests/test_export_csv.py +1 -1
  43. tests/test_interface.py +24 -2
  44. tests/test_io.py +50 -0
  45. tests/test_omodel.py +1 -1
  46. tests/test_report.py +6 -6
  47. tests/test_routine.py +2 -2
  48. tests/test_rtn_acopf.py +75 -0
  49. tests/test_rtn_dcopf.py +1 -1
  50. tests/test_rtn_dcopf2.py +1 -1
  51. tests/test_rtn_ed.py +9 -9
  52. tests/test_rtn_opf.py +142 -0
  53. tests/test_rtn_pflow.py +0 -72
  54. tests/test_rtn_pypower.py +315 -0
  55. tests/test_rtn_rted.py +8 -8
  56. tests/test_rtn_uc.py +18 -18
  57. ams/pypower/__init__.py +0 -8
  58. ams/pypower/_compat.py +0 -9
  59. ams/pypower/core/__init__.py +0 -8
  60. ams/pypower/core/pips.py +0 -894
  61. ams/pypower/core/ppoption.py +0 -244
  62. ams/pypower/core/ppver.py +0 -18
  63. ams/pypower/core/solver.py +0 -2451
  64. ams/pypower/eps.py +0 -6
  65. ams/pypower/idx.py +0 -174
  66. ams/pypower/io.py +0 -604
  67. ams/pypower/make/__init__.py +0 -11
  68. ams/pypower/make/matrices.py +0 -665
  69. ams/pypower/make/pdv.py +0 -506
  70. ams/pypower/routines/__init__.py +0 -7
  71. ams/pypower/routines/cpf.py +0 -513
  72. ams/pypower/routines/cpf_callbacks.py +0 -114
  73. ams/pypower/routines/opf.py +0 -1803
  74. ams/pypower/routines/opffcns.py +0 -1946
  75. ams/pypower/routines/pflow.py +0 -852
  76. ams/pypower/toggle.py +0 -1098
  77. ams/pypower/utils.py +0 -293
  78. ams/routines/cpf.py +0 -65
  79. ams/routines/dcpf0.py +0 -196
  80. ams/routines/pflow0.py +0 -113
  81. tests/test_rtn_dcpf.py +0 -77
  82. {ltbams-1.0.9.dist-info → ltbams-1.0.11.dist-info}/entry_points.txt +0 -0
  83. {ltbams-1.0.9.dist-info → ltbams-1.0.11.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,315 @@
1
+ """
2
+ Test wrapper routines of PYPOWER.
3
+ """
4
+ import unittest
5
+
6
+ import ams
7
+ from ams.shared import skip_unittest_without_PYPOWER
8
+
9
+
10
+ class TestDCPF1(unittest.TestCase):
11
+ """
12
+ Test routine `DCPF1`.
13
+ """
14
+
15
+ def setUp(self) -> None:
16
+ self.ss = ams.load(ams.get_case("5bus/pjm5bus_demo.json"),
17
+ setup=True, default_config=True, no_output=True)
18
+ # decrease load first
19
+ self.ss.PQ.set(src='p0', attr='v', idx=['PQ_1', 'PQ_2'], value=[0.3, 0.3])
20
+
21
+ def test_init(self):
22
+ """
23
+ Test initialization.
24
+ """
25
+ self.ss.DCPF1.init()
26
+ self.assertTrue(self.ss.DCPF1.initialized, "DCPF1 initialization failed!")
27
+
28
+ @skip_unittest_without_PYPOWER
29
+ def test_trip_gen(self):
30
+ """
31
+ Test generator tripping.
32
+ """
33
+ stg = 'PV_1'
34
+ self.ss.StaticGen.set(src='u', idx=stg, attr='v', value=0)
35
+
36
+ self.ss.DCPF1.update()
37
+ self.ss.DCPF1.run()
38
+ self.assertTrue(self.ss.DCPF1.converged, "DCPF1 did not converge under generator trip!")
39
+ self.assertAlmostEqual(self.ss.DCPF1.get(src='pg', attr='v', idx=stg),
40
+ 0, places=6,
41
+ msg="Generator trip does not take effect!")
42
+
43
+ self.ss.StaticGen.set(src='u', idx=stg, attr='v', value=1) # reset
44
+
45
+ @skip_unittest_without_PYPOWER
46
+ def test_trip_line(self):
47
+ """
48
+ Test line tripping.
49
+ """
50
+ self.ss.Line.set(src='u', attr='v', idx='Line_3', value=0)
51
+
52
+ self.ss.DCPF1.update()
53
+ self.ss.DCPF1.run()
54
+ self.assertTrue(self.ss.DCPF1.converged, "DCPF1 did not converge under line trip!")
55
+ self.assertAlmostEqual(self.ss.DCPF1.get(src='plf', attr='v', idx='Line_3'),
56
+ 0, places=6,
57
+ msg="Line trip does not take effect!")
58
+
59
+ self.ss.Line.alter(src='u', idx='Line_3', value=1) # reset
60
+
61
+ @skip_unittest_without_PYPOWER
62
+ def test_set_load(self):
63
+ """
64
+ Test setting and tripping load.
65
+ """
66
+ # --- run DCPF1 ---
67
+ self.ss.DCPF1.run()
68
+ pgs = self.ss.DCPF1.pg.v.sum()
69
+
70
+ # --- set load ---
71
+ self.ss.PQ.set(src='p0', attr='v', idx='PQ_1', value=0.1)
72
+ self.ss.DCPF1.update()
73
+
74
+ self.ss.DCPF1.run()
75
+ pgs_pqt = self.ss.DCPF1.pg.v.sum()
76
+ self.assertLess(pgs_pqt, pgs, "Load set does not take effect!")
77
+
78
+ # --- trip load ---
79
+ self.ss.PQ.set(src='u', attr='v', idx='PQ_2', value=0)
80
+ self.ss.DCPF1.update()
81
+
82
+ self.ss.DCPF1.run()
83
+ pgs_pqt2 = self.ss.DCPF1.pg.v.sum()
84
+ self.assertLess(pgs_pqt2, pgs_pqt, "Load trip does not take effect!")
85
+
86
+
87
+ class TestPFlow1(unittest.TestCase):
88
+ """
89
+ Test routine `PFlow1`.
90
+ """
91
+
92
+ def setUp(self) -> None:
93
+ self.ss = ams.load(ams.get_case("5bus/pjm5bus_demo.json"),
94
+ setup=True, default_config=True, no_output=True)
95
+ # decrease load first
96
+ self.ss.PQ.set(src='p0', attr='v', idx=['PQ_1', 'PQ_2'], value=[0.3, 0.3])
97
+
98
+ def test_init(self):
99
+ """
100
+ Test initialization.
101
+ """
102
+ self.ss.PFlow1.init()
103
+ self.assertTrue(self.ss.PFlow1.initialized, "PFlow1 initialization failed!")
104
+
105
+ @skip_unittest_without_PYPOWER
106
+ def test_trip_gen(self):
107
+ """
108
+ Test generator tripping.
109
+ """
110
+ stg = 'PV_1'
111
+ self.ss.StaticGen.set(src='u', idx=stg, attr='v', value=0)
112
+
113
+ self.ss.PFlow1.update()
114
+ self.ss.PFlow1.run()
115
+ self.assertTrue(self.ss.PFlow1.converged, "PFlow1 did not converge under generator trip!")
116
+ self.assertAlmostEqual(self.ss.PFlow1.get(src='pg', attr='v', idx=stg),
117
+ 0, places=6,
118
+ msg="Generator trip does not take effect!")
119
+
120
+ self.ss.StaticGen.set(src='u', idx=stg, attr='v', value=1) # reset
121
+
122
+ @skip_unittest_without_PYPOWER
123
+ def test_trip_line(self):
124
+ """
125
+ Test line tripping.
126
+ """
127
+ self.ss.Line.set(src='u', attr='v', idx='Line_3', value=0)
128
+
129
+ self.ss.PFlow1.update()
130
+ self.ss.PFlow1.run()
131
+ self.assertTrue(self.ss.PFlow1.converged, "PFlow1 did not converge under line trip!")
132
+ self.assertAlmostEqual(self.ss.PFlow1.get(src='plf', attr='v', idx='Line_3'),
133
+ 0, places=6,
134
+ msg="Line trip does not take effect!")
135
+
136
+ self.ss.Line.alter(src='u', idx='Line_3', value=1) # reset
137
+
138
+ @skip_unittest_without_PYPOWER
139
+ def test_set_load(self):
140
+ """
141
+ Test setting and tripping load.
142
+ """
143
+ # --- run PFlow1 ---
144
+ self.ss.PFlow1.run()
145
+ pgs = self.ss.PFlow1.pg.v.sum()
146
+
147
+ # --- set load ---
148
+ self.ss.PQ.set(src='p0', attr='v', idx='PQ_1', value=0.1)
149
+ self.ss.PFlow1.update()
150
+
151
+ self.ss.PFlow1.run()
152
+ pgs_pqt = self.ss.PFlow1.pg.v.sum()
153
+ self.assertLess(pgs_pqt, pgs, "Load set does not take effect!")
154
+
155
+ # --- trip load ---
156
+ self.ss.PQ.set(src='u', attr='v', idx='PQ_2', value=0)
157
+ self.ss.PFlow1.update()
158
+
159
+ self.ss.PFlow1.run()
160
+ pgs_pqt2 = self.ss.PFlow1.pg.v.sum()
161
+ self.assertLess(pgs_pqt2, pgs_pqt, "Load trip does not take effect!")
162
+
163
+
164
+ class TestDCOPF1(unittest.TestCase):
165
+ """
166
+ Test routine `DCOPF1`.
167
+ """
168
+
169
+ def setUp(self) -> None:
170
+ self.ss = ams.load(ams.get_case("5bus/pjm5bus_demo.json"),
171
+ setup=True, default_config=True, no_output=True)
172
+ # decrease load first
173
+ self.ss.PQ.set(src='p0', attr='v', idx=['PQ_1', 'PQ_2'], value=[0.3, 0.3])
174
+
175
+ def test_init(self):
176
+ """
177
+ Test initialization.
178
+ """
179
+ self.ss.DCOPF1.init()
180
+ self.assertTrue(self.ss.DCOPF1.initialized, "DCOPF initialization failed!")
181
+
182
+ @skip_unittest_without_PYPOWER
183
+ def test_trip_gen(self):
184
+ """
185
+ Test generator tripping.
186
+ """
187
+ stg = 'PV_1'
188
+ self.ss.StaticGen.set(src='u', idx=stg, attr='v', value=0)
189
+
190
+ self.ss.DCOPF1.update()
191
+ self.ss.DCOPF1.run()
192
+ self.assertTrue(self.ss.DCOPF1.converged, "DCOPF did not converge under generator trip!")
193
+ self.assertAlmostEqual(self.ss.DCOPF1.get(src='pg', attr='v', idx=stg),
194
+ 0, places=6,
195
+ msg="Generator trip does not take effect!")
196
+
197
+ self.ss.StaticGen.set(src='u', idx=stg, attr='v', value=1) # reset
198
+
199
+ @skip_unittest_without_PYPOWER
200
+ def test_trip_line(self):
201
+ """
202
+ Test line tripping.
203
+ """
204
+ self.ss.Line.set(src='u', attr='v', idx='Line_3', value=0)
205
+
206
+ self.ss.DCOPF1.update()
207
+ self.ss.DCOPF1.run()
208
+ self.assertTrue(self.ss.DCOPF1.converged, "DCOPF1 did not converge under line trip!")
209
+ self.assertAlmostEqual(self.ss.DCOPF1.get(src='plf', attr='v', idx='Line_3'),
210
+ 0, places=6,
211
+ msg="Line trip does not take effect!")
212
+
213
+ self.ss.Line.alter(src='u', idx='Line_3', value=1) # reset
214
+
215
+ @skip_unittest_without_PYPOWER
216
+ def test_set_load(self):
217
+ """
218
+ Test setting and tripping load.
219
+ """
220
+ # --- run DCOPF1 ---
221
+ self.ss.DCOPF1.run()
222
+ pgs = self.ss.DCOPF1.pg.v.sum()
223
+
224
+ # --- set load ---
225
+ self.ss.PQ.set(src='p0', attr='v', idx='PQ_1', value=0.1)
226
+ self.ss.DCOPF1.update()
227
+
228
+ self.ss.DCOPF1.run()
229
+ pgs_pqt = self.ss.DCOPF1.pg.v.sum()
230
+ self.assertLess(pgs_pqt, pgs, "Load set does not take effect!")
231
+
232
+ # --- trip load ---
233
+ self.ss.PQ.set(src='u', attr='v', idx='PQ_2', value=0)
234
+ self.ss.DCOPF1.update()
235
+
236
+ self.ss.DCOPF1.run()
237
+ pgs_pqt2 = self.ss.DCOPF1.pg.v.sum()
238
+ self.assertLess(pgs_pqt2, pgs_pqt, "Load trip does not take effect!")
239
+
240
+
241
+ class TestACOPF1(unittest.TestCase):
242
+ """
243
+ Test routine `ACOPF1`.
244
+ """
245
+
246
+ def setUp(self) -> None:
247
+ self.ss = ams.load(ams.get_case("5bus/pjm5bus_demo.json"),
248
+ setup=True, default_config=True, no_output=True)
249
+ # decrease load first
250
+ self.ss.PQ.set(src='p0', attr='v', idx=['PQ_1', 'PQ_2'], value=[0.3, 0.3])
251
+
252
+ def test_init(self):
253
+ """
254
+ Test initialization.
255
+ """
256
+ self.ss.ACOPF1.init()
257
+ self.assertTrue(self.ss.ACOPF1.initialized, "ACOPF1 initialization failed!")
258
+
259
+ @skip_unittest_without_PYPOWER
260
+ def test_trip_gen(self):
261
+ """
262
+ Test generator tripping.
263
+ """
264
+ stg = 'PV_1'
265
+ self.ss.StaticGen.set(src='u', idx=stg, attr='v', value=0)
266
+
267
+ self.ss.ACOPF1.update()
268
+ self.ss.ACOPF1.run()
269
+ self.assertTrue(self.ss.ACOPF1.converged, "ACOPF1 did not converge under generator trip!")
270
+ self.assertAlmostEqual(self.ss.ACOPF1.get(src='pg', attr='v', idx=stg),
271
+ 0, places=6,
272
+ msg="Generator trip does not take effect!")
273
+
274
+ self.ss.StaticGen.set(src='u', idx=stg, attr='v', value=1) # reset
275
+
276
+ @skip_unittest_without_PYPOWER
277
+ def test_trip_line(self):
278
+ """
279
+ Test line tripping.
280
+ """
281
+ self.ss.Line.set(src='u', attr='v', idx='Line_3', value=0)
282
+
283
+ self.ss.ACOPF1.update()
284
+ self.ss.ACOPF1.run()
285
+ self.assertTrue(self.ss.ACOPF1.converged, "ACOPF1 did not converge under line trip!")
286
+ self.assertAlmostEqual(self.ss.ACOPF1.get(src='plf', attr='v', idx='Line_3'),
287
+ 0, places=6,
288
+ msg="Line trip does not take effect!")
289
+
290
+ self.ss.Line.alter(src='u', idx='Line_3', value=1) # reset
291
+
292
+ @skip_unittest_without_PYPOWER
293
+ def test_set_load(self):
294
+ """
295
+ Test setting and tripping load.
296
+ """
297
+ # --- run ACOPF1 ---
298
+ self.ss.ACOPF1.run()
299
+ pgs = self.ss.ACOPF1.pg.v.sum()
300
+
301
+ # --- set load ---
302
+ self.ss.PQ.set(src='p0', attr='v', idx='PQ_1', value=0.1)
303
+ self.ss.ACOPF1.update()
304
+
305
+ self.ss.ACOPF1.run()
306
+ pgs_pqt = self.ss.ACOPF1.pg.v.sum()
307
+ self.assertLess(pgs_pqt, pgs, "Load set does not take effect!")
308
+
309
+ # --- trip load ---
310
+ self.ss.PQ.set(src='u', attr='v', idx='PQ_2', value=0)
311
+ self.ss.ACOPF1.update()
312
+
313
+ self.ss.ACOPF1.run()
314
+ pgs_pqt2 = self.ss.ACOPF1.pg.v.sum()
315
+ self.assertLess(pgs_pqt2, pgs_pqt, "Load trip does not take effect!")
tests/test_rtn_rted.py CHANGED
@@ -11,7 +11,7 @@ class TestRTED(unittest.TestCase):
11
11
  """
12
12
 
13
13
  def setUp(self) -> None:
14
- self.ss = ams.load(ams.get_case("5bus/pjm5bus_demo.xlsx"),
14
+ self.ss = ams.load(ams.get_case("5bus/pjm5bus_demo.json"),
15
15
  setup=True, default_config=True, no_output=True)
16
16
  # decrease load first
17
17
  self.ss.PQ.set(src='p0', attr='v', idx=['PQ_1', 'PQ_2'], value=[0.3, 0.3])
@@ -107,7 +107,7 @@ class TestRTEDDG(unittest.TestCase):
107
107
  """
108
108
 
109
109
  def setUp(self) -> None:
110
- self.ss = ams.load(ams.get_case("5bus/pjm5bus_demo.xlsx"),
110
+ self.ss = ams.load(ams.get_case("5bus/pjm5bus_demo.json"),
111
111
  setup=True, default_config=True, no_output=True)
112
112
  # decrease load first
113
113
  self.ss.PQ.set(src='p0', attr='v', idx=['PQ_1', 'PQ_2'], value=[0.3, 0.3])
@@ -203,7 +203,7 @@ class TestRTEDES(unittest.TestCase):
203
203
  """
204
204
 
205
205
  def setUp(self) -> None:
206
- self.ss = ams.load(ams.get_case("5bus/pjm5bus_demo.xlsx"),
206
+ self.ss = ams.load(ams.get_case("5bus/pjm5bus_demo.json"),
207
207
  setup=True, default_config=True, no_output=True)
208
208
  # decrease load first
209
209
  self.ss.PQ.set(src='p0', attr='v', idx=['PQ_1', 'PQ_2'], value=[0.3, 0.3])
@@ -224,7 +224,7 @@ class TestRTEDES(unittest.TestCase):
224
224
  self.ss.StaticGen.set(src='u', idx=stg, attr='v', value=0)
225
225
 
226
226
  self.ss.RTEDES.update()
227
- self.ss.RTEDES.run()
227
+ self.ss.RTEDES.run(solver='SCIP')
228
228
  self.assertTrue(self.ss.RTEDES.converged, "RTEDES did not converge under generator trip!")
229
229
  self.assertAlmostEqual(self.ss.RTEDES.get(src='pg', attr='v', idx=stg),
230
230
  0, places=6,
@@ -240,7 +240,7 @@ class TestRTEDES(unittest.TestCase):
240
240
  self.ss.Line.set(src='u', attr='v', idx='Line_3', value=0)
241
241
 
242
242
  self.ss.RTEDES.update()
243
- self.ss.RTEDES.run()
243
+ self.ss.RTEDES.run(solver='SCIP')
244
244
  self.assertTrue(self.ss.RTEDES.converged, "RTEDES did not converge under line trip!")
245
245
  self.assertAlmostEqual(self.ss.RTEDES.get(src='plf', attr='v', idx='Line_3'),
246
246
  0, places=6,
@@ -253,14 +253,14 @@ class TestRTEDES(unittest.TestCase):
253
253
  """
254
254
  Test setting and tripping load.
255
255
  """
256
- self.ss.RTEDES.run()
256
+ self.ss.RTEDES.run(solver='SCIP')
257
257
  pgs = self.ss.RTEDES.pg.v.sum()
258
258
 
259
259
  # --- set load ---
260
260
  self.ss.PQ.set(src='p0', attr='v', idx='PQ_1', value=0.05)
261
261
  self.ss.RTEDES.update()
262
262
 
263
- self.ss.RTEDES.run()
263
+ self.ss.RTEDES.run(solver='SCIP')
264
264
  pgs_pqt = self.ss.RTEDES.pg.v.sum()
265
265
  self.assertLess(pgs_pqt, pgs, "Load set does not take effect!")
266
266
 
@@ -268,6 +268,6 @@ class TestRTEDES(unittest.TestCase):
268
268
  self.ss.PQ.set(src='u', attr='v', idx='PQ_2', value=0)
269
269
  self.ss.RTEDES.update()
270
270
 
271
- self.ss.RTEDES.run()
271
+ self.ss.RTEDES.run(solver='SCIP')
272
272
  pgs_pqt2 = self.ss.RTEDES.pg.v.sum()
273
273
  self.assertLess(pgs_pqt2, pgs_pqt, "Load trip does not take effect!")
tests/test_rtn_uc.py CHANGED
@@ -11,7 +11,7 @@ class TestUC(unittest.TestCase):
11
11
  """
12
12
 
13
13
  def setUp(self) -> None:
14
- self.ss = ams.load(ams.get_case("5bus/pjm5bus_demo.xlsx"),
14
+ self.ss = ams.load(ams.get_case("5bus/pjm5bus_demo.json"),
15
15
  setup=True, default_config=True, no_output=True)
16
16
  # decrease load first
17
17
  self.ss.PQ.set(src='p0', attr='v', idx=['PQ_1', 'PQ_2'], value=[0.3, 0.3])
@@ -38,7 +38,7 @@ class TestUC(unittest.TestCase):
38
38
  """
39
39
  Test generator tripping.
40
40
  """
41
- self.ss.UC.run()
41
+ self.ss.UC.run(solver='SCIP')
42
42
  self.assertTrue(self.ss.UC.converged, "UC did not converge!")
43
43
  pg_off_gen = self.ss.UC.get(src='pg', attr='v', idx=self.off_gen)
44
44
  np.testing.assert_almost_equal(np.zeros_like(pg_off_gen),
@@ -50,14 +50,14 @@ class TestUC(unittest.TestCase):
50
50
  """
51
51
  Test setting and tripping load.
52
52
  """
53
- self.ss.UC.run()
53
+ self.ss.UC.run(solver='SCIP')
54
54
  pgs = self.ss.UC.pg.v.sum()
55
55
 
56
56
  # --- set load ---
57
57
  self.ss.PQ.set(src='p0', attr='v', idx='PQ_1', value=0.1)
58
58
  self.ss.UC.update()
59
59
 
60
- self.ss.UC.run()
60
+ self.ss.UC.run(solver='SCIP')
61
61
  pgs_pqt = self.ss.UC.pg.v.sum()
62
62
  self.assertLess(pgs_pqt, pgs, "Load set does not take effect!")
63
63
 
@@ -65,7 +65,7 @@ class TestUC(unittest.TestCase):
65
65
  self.ss.PQ.alter(src='u', idx='PQ_2', value=0)
66
66
  self.ss.UC.update()
67
67
 
68
- self.ss.UC.run()
68
+ self.ss.UC.run(solver='SCIP')
69
69
  pgs_pqt2 = self.ss.UC.pg.v.sum()
70
70
  self.assertLess(pgs_pqt2, pgs_pqt, "Load trip does not take effect!")
71
71
 
@@ -77,7 +77,7 @@ class TestUC(unittest.TestCase):
77
77
  self.ss.Line.set(src='u', attr='v', idx='Line_3', value=0)
78
78
  self.ss.UC.update()
79
79
 
80
- self.ss.UC.run()
80
+ self.ss.UC.run(solver='SCIP')
81
81
  self.assertTrue(self.ss.UC.converged, "UC did not converge under line trip!")
82
82
  plf_l3 = self.ss.UC.get(src='plf', attr='v', idx='Line_3')
83
83
  np.testing.assert_almost_equal(np.zeros_like(plf_l3),
@@ -92,7 +92,7 @@ class TestUCDG(unittest.TestCase):
92
92
  """
93
93
 
94
94
  def setUp(self) -> None:
95
- self.ss = ams.load(ams.get_case("5bus/pjm5bus_demo.xlsx"),
95
+ self.ss = ams.load(ams.get_case("5bus/pjm5bus_demo.json"),
96
96
  setup=True, default_config=True, no_output=True)
97
97
  # decrease load first
98
98
  self.ss.PQ.set(src='p0', attr='v', idx=['PQ_1', 'PQ_2'], value=[0.3, 0.3])
@@ -119,7 +119,7 @@ class TestUCDG(unittest.TestCase):
119
119
  """
120
120
  Test generator tripping.
121
121
  """
122
- self.ss.UCDG.run()
122
+ self.ss.UCDG.run(solver='SCIP')
123
123
  self.assertTrue(self.ss.UCDG.converged, "UCDG did not converge!")
124
124
  pg_off_gen = self.ss.UCDG.get(src='pg', attr='v', idx=self.off_gen)
125
125
  np.testing.assert_almost_equal(np.zeros_like(pg_off_gen),
@@ -131,14 +131,14 @@ class TestUCDG(unittest.TestCase):
131
131
  """
132
132
  Test setting and tripping load.
133
133
  """
134
- self.ss.UCDG.run()
134
+ self.ss.UCDG.run(solver='SCIP')
135
135
  pgs = self.ss.UCDG.pg.v.sum()
136
136
 
137
137
  # --- set load ---
138
138
  self.ss.PQ.set(src='p0', attr='v', idx='PQ_1', value=0.1)
139
139
  self.ss.UCDG.update()
140
140
 
141
- self.ss.UCDG.run()
141
+ self.ss.UCDG.run(solver='SCIP')
142
142
  pgs_pqt = self.ss.UCDG.pg.v.sum()
143
143
  self.assertLess(pgs_pqt, pgs, "Load set does not take effect!")
144
144
 
@@ -146,7 +146,7 @@ class TestUCDG(unittest.TestCase):
146
146
  self.ss.PQ.alter(src='u', idx='PQ_2', value=0)
147
147
  self.ss.UCDG.update()
148
148
 
149
- self.ss.UCDG.run()
149
+ self.ss.UCDG.run(solver='SCIP')
150
150
  pgs_pqt2 = self.ss.UCDG.pg.v.sum()
151
151
  self.assertLess(pgs_pqt2, pgs_pqt, "Load trip does not take effect!")
152
152
 
@@ -158,7 +158,7 @@ class TestUCDG(unittest.TestCase):
158
158
  self.ss.Line.set(src='u', attr='v', idx='Line_3', value=0)
159
159
  self.ss.UCDG.update()
160
160
 
161
- self.ss.UCDG.run()
161
+ self.ss.UCDG.run(solver='SCIP')
162
162
  self.assertTrue(self.ss.UCDG.converged, "UCDG did not converge under line trip!")
163
163
  plf_l3 = self.ss.UCDG.get(src='plf', attr='v', idx='Line_3')
164
164
  np.testing.assert_almost_equal(np.zeros_like(plf_l3),
@@ -173,7 +173,7 @@ class TestUCES(unittest.TestCase):
173
173
  """
174
174
 
175
175
  def setUp(self) -> None:
176
- self.ss = ams.load(ams.get_case("5bus/pjm5bus_demo.xlsx"),
176
+ self.ss = ams.load(ams.get_case("5bus/pjm5bus_demo.json"),
177
177
  setup=True, default_config=True, no_output=True)
178
178
  # decrease load first
179
179
  self.ss.PQ.set(src='p0', attr='v', idx=['PQ_1', 'PQ_2'], value=[0.3, 0.3])
@@ -200,7 +200,7 @@ class TestUCES(unittest.TestCase):
200
200
  """
201
201
  Test generator tripping.
202
202
  """
203
- self.ss.UCES.run()
203
+ self.ss.UCES.run(solver='SCIP')
204
204
  self.assertTrue(self.ss.UCES.converged, "UCES did not converge!")
205
205
  pg_off_gen = self.ss.UCES.get(src='pg', attr='v', idx=self.off_gen)
206
206
  np.testing.assert_almost_equal(np.zeros_like(pg_off_gen),
@@ -212,14 +212,14 @@ class TestUCES(unittest.TestCase):
212
212
  """
213
213
  Test setting and tripping load.
214
214
  """
215
- self.ss.UCES.run()
215
+ self.ss.UCES.run(solver='SCIP')
216
216
  pgs = self.ss.UCES.pg.v.sum()
217
217
 
218
218
  # --- set load ---
219
219
  self.ss.PQ.set(src='p0', attr='v', idx='PQ_1', value=0.1)
220
220
  self.ss.UCES.update()
221
221
 
222
- self.ss.UCES.run()
222
+ self.ss.UCES.run(solver='SCIP')
223
223
  pgs_pqt = self.ss.UCES.pg.v.sum()
224
224
  self.assertLess(pgs_pqt, pgs, "Load set does not take effect!")
225
225
 
@@ -227,7 +227,7 @@ class TestUCES(unittest.TestCase):
227
227
  self.ss.PQ.alter(src='u', idx='PQ_2', value=0)
228
228
  self.ss.UCES.update()
229
229
 
230
- self.ss.UCES.run()
230
+ self.ss.UCES.run(solver='SCIP')
231
231
  pgs_pqt2 = self.ss.UCES.pg.v.sum()
232
232
  self.assertLess(pgs_pqt2, pgs_pqt, "Load trip does not take effect!")
233
233
 
@@ -239,7 +239,7 @@ class TestUCES(unittest.TestCase):
239
239
  self.ss.Line.set(src='u', attr='v', idx='Line_3', value=0)
240
240
  self.ss.UCES.update()
241
241
 
242
- self.ss.UCES.run()
242
+ self.ss.UCES.run(solver='SCIP')
243
243
  self.assertTrue(self.ss.UCES.converged, "UCES did not converge under line trip!")
244
244
  plf_l3 = self.ss.UCES.get(src='plf', attr='v', idx='Line_3')
245
245
  np.testing.assert_almost_equal(np.zeros_like(plf_l3),
ams/pypower/__init__.py DELETED
@@ -1,8 +0,0 @@
1
- """
2
- Revised PYPOWER module.
3
- """
4
-
5
- from ams.pypower import utils, make, routines # NOQA
6
- from ams.pypower.routines.opf import runopf, runuopf # NOQA
7
- from ams.pypower.routines import runpf # NOQA
8
- from ams.pypower.routines.cpf import runcpf # NOQA
ams/pypower/_compat.py DELETED
@@ -1,9 +0,0 @@
1
-
2
- """
3
- Compatibility helpers for older Python versions.
4
-
5
- """
6
- import sys
7
-
8
-
9
- PY2 = sys.version_info[0] == 2
@@ -1,8 +0,0 @@
1
- """
2
- Module for the core of PYPOWER.
3
- """
4
-
5
- from ams.pypower.core.ppoption import ppoption # NOQA
6
- from ams.pypower.core.pips import pips, pipsver, pipsopf_solver # NOQA
7
- from ams.pypower.core.ppver import ppver # NOQA
8
- from ams.pypower.core.solver import ipoptopf_solver # NOQA