Skip to content

Commit 295a260

Browse files
authored
Merge branch 'main' into user_query_functions
2 parents b6c992f + 994f941 commit 295a260

File tree

6 files changed

+74
-31
lines changed

6 files changed

+74
-31
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# Byte-compiled / optimized / DLL files
22
__pycache__/
3+
sim.json
34
*.py[cod]
45
*$py.class
56

pygridsim/core.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -82,10 +82,8 @@ def update_source(self, source_type: str = "turbine", params: dict[str, int] = N
8282
params = params or dict()
8383
return _make_source_node(params, source_type)
8484

85-
def add_PVSystem(self,
86-
load_nodes: list[str],
87-
params: dict[str, int] = None,
88-
num_panels: int = 1):
85+
def add_PVSystems(self, load_nodes: list[str],
86+
params: dict[str, int] = None, num_panels: int = 1):
8987
"""Adds a photovoltaic (PV) system to the specified load nodes.
9088
9189
Adds PV system with num_panels to each of the listed load nodes.
@@ -114,7 +112,7 @@ def add_PVSystem(self,
114112

115113
return PV_nodes
116114

117-
def add_generator(self, num: int = 1, gen_type: str = "small", params: dict[str, int] = None):
115+
def add_generators(self, num: int = 1, gen_type: str = "small", params: dict[str, int] = None):
118116
"""Adds generator(s) to the system.
119117
120118
Args:
@@ -182,7 +180,9 @@ def results(self, queries: list[str], export_path=""):
182180
183181
Args:
184182
queries (list[str]):
185-
A list of queries to the circuit ("Voltages", "Losses", "TotalPower")
183+
A list of queries to the circuit: one of ("Voltages", "Losses", "TotalPower")
184+
or partial queries ("RealLoss", "ReactiveLoss", "RealPower", "ReactivePower")
185+
that query one component of Losses/TotalPower
186186
export_path (str, optional):
187187
The file path to export results. If empty, results are not exported.
188188
Defaults to "".

pygridsim/defaults.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@
2323
COMMERCIAL_KW = [10, 50]
2424
COMMERCIAL_KVAR = [5, 10]
2525

26-
INDUSTRIAL_KV = [.24, .48]
27-
INDUSTRIAL_KW = [30, 100]
28-
INDUSTRIAL_KVAR = [20, 25]
26+
INDUSTRIAL_KV = [4.16, 34.5]
27+
INDUSTRIAL_KW = [200, 10000]
28+
INDUSTRIAL_KVAR = [150, 480]
2929

3030
"""
3131
Source Nodes (including other form of sources, like PVSystem)

pygridsim/lines.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,7 @@ def _make_line(src, dst, line_type, count, params={}, transformer=True):
4141
transformer.Windings = defaults.NUM_WINDINGS
4242
transformer.XHL = _get_param(params, "XHL", defaults.XHL)
4343
transformer.Buses = [src, dst]
44-
transformer.Conns = _get_param(params, "Conns",
45-
[defaults.PRIMARY_CONN, defaults.SECONDARY_CONN])
46-
44+
transformer.Conns = [defaults.PRIMARY_CONN, defaults.SECONDARY_CONN]
4745
transformer.kVs = [_get_kv(src), _get_kv(dst)]
4846

4947
transformer.end_edit()

pygridsim/results.py

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,33 @@
88

99

1010
def _query_solution(query):
11-
match query:
12-
case "Voltages":
11+
query_fix = query.lower().replace(" ", "")
12+
vector_losses = altdss.Losses()
13+
vector_power = altdss.TotalPower()
14+
match query_fix:
15+
case "voltages":
1316
bus_vmags = {}
1417
for bus_name, bus_vmag in zip(altdss.BusNames(), altdss.BusVMag()):
1518
bus_vmags[bus_name] = float(bus_vmag)
1619
return bus_vmags
17-
case "Losses":
18-
vector_losses = altdss.Losses()
20+
case "losses" | "loss":
1921
losses = {}
2022
losses["Active Power Loss"] = vector_losses.real
2123
losses["Reactive Power Loss"] = vector_losses.imag
2224
return losses
23-
case "TotalPower":
24-
return altdss.TotalPower()
25+
case "totalpower" | "power":
26+
power = {}
27+
power["Active Power"] = vector_power.real
28+
power["Reactive Power"] = vector_power.imag
29+
return power
30+
case "activeloss" | "activepowerloss" | "realloss" | "realpowerloss":
31+
return vector_losses.real
32+
case "reactiveloss" | "reactivepowerloss":
33+
return vector_losses.imag
34+
case "activepower" | "realpower":
35+
return vector_power.real
36+
case "reactivepower":
37+
return vector_power.imag
2538
case _:
2639
return "Invalid"
2740

tests/test_circuit.py

Lines changed: 44 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -89,17 +89,17 @@ def test_006_update_multiple_source(self):
8989

9090
def test_007_export(self):
9191
circuit = PyGridSim()
92-
circuit.update_source()
93-
circuit.add_load_nodes()
94-
circuit.add_lines([("source", "load0")])
92+
circuit.update_source(params={"kV": 10})
93+
circuit.add_load_nodes(params={"kV": 5, "kW": 10, "kvar": 2})
94+
circuit.add_lines([("source", "load0")], params={"length": 2})
9595
circuit.solve()
9696
print(circuit.results(["Voltages", "Losses"], export_path="sim.json"))
9797

9898
def test_008_PVsystem(self):
9999
circuit = PyGridSim()
100100
circuit.update_source()
101101
circuit.add_load_nodes(num=2)
102-
circuit.add_PVSystem(load_nodes=["load0", "load1"], num_panels=5)
102+
circuit.add_PVSystems(load_nodes=["load0", "load1"], num_panels=5)
103103
circuit.add_lines([("source", "load0")])
104104
circuit.solve()
105105
print(circuit.results(["Voltages", "Losses"]))
@@ -108,7 +108,7 @@ def test_009_generator(self):
108108
circuit = PyGridSim()
109109
circuit.update_source()
110110
circuit.add_load_nodes()
111-
circuit.add_generator(num=3, gen_type="small")
111+
circuit.add_generators(num=3, gen_type="small")
112112
circuit.add_lines([("source", "load0"), ("generator0", "load0")])
113113
circuit.solve()
114114
print(circuit.results(["Voltages", "Losses"]))
@@ -117,10 +117,10 @@ def test_010_many_sources(self):
117117
circuit = PyGridSim()
118118
circuit.update_source(source_type="powerplant")
119119
circuit.add_load_nodes(num=3)
120-
circuit.add_PVSystem(load_nodes=["load1", "load2"], num_panels=10)
121-
circuit.add_generator(num=3, gen_type="small")
122-
circuit.update_source(source_type="turbine")
123-
circuit.add_generator(num=4, gen_type="large")
120+
circuit.add_PVSystems(load_nodes=["load1", "load2"], num_panels=10)
121+
circuit.add_generators(num=3, gen_type="small")
122+
circuit.update_source(source_type="turbine") # change to a turbine source midway
123+
circuit.add_generators(num=4, gen_type="large")
124124
circuit.add_lines([("source", "load0"), ("generator0", "load0"), ("generator5", "source")])
125125
circuit.solve()
126126
print(circuit.results(["Voltages", "Losses"]))
@@ -148,10 +148,10 @@ def test_011_configs(self):
148148

149149
# GENERATOR CONFIG
150150
# works, because not case sensitive
151-
circuit.add_generator(num=3, gen_type="SMALl")
151+
circuit.add_generators(num=3, gen_type="SMALl")
152152
# don't want linetype input, just string
153153
with self.assertRaises(Exception):
154-
circuit.add_generator(num=3, gen_type=GeneratorType.SMALL)
154+
circuit.add_generators(num=3, gen_type=GeneratorType.SMALL)
155155

156156
# SOURCE CONFIG
157157
# works, because not case sensitive
@@ -162,6 +162,19 @@ def test_011_configs(self):
162162
with self.assertRaises(Exception):
163163
circuit.update_source(source_type=SourceType.TURBINE)
164164

165+
def test_012_all_results(self):
166+
circuit = PyGridSim()
167+
circuit.update_source()
168+
circuit.add_load_nodes()
169+
circuit.add_generators(num=2, gen_type="small")
170+
circuit.add_lines([("source", "load0"), ("generator0", "load0")])
171+
circuit.solve()
172+
# Should be flexible with capitalization, spaces
173+
queries = ["Voltages", "losses", "Total Power"]
174+
# Add "partial" queries to just parts of losses/total power
175+
queries += ["realpowerloss", "reactive Loss", "Active Power", "reactivepower"]
176+
print(circuit.results(queries))
177+
165178

166179
class TestCustomizedCircuit(unittest.TestCase):
167180
"""
@@ -210,9 +223,9 @@ def test_101_bad_parameter(self):
210223
# add load nodes so we can test pv system erroring
211224
circuit.add_load_nodes(num=2, params={"kV": 10, "kW": 20, "kvar": 1})
212225
with self.assertRaises(KeyError):
213-
circuit.add_generator(num=4, params={"badParam": 100})
226+
circuit.add_generators(num=4, params={"badParam": 100})
214227
with self.assertRaises(KeyError):
215-
circuit.add_PVSystem(load_nodes=["load0"], params={"badParam": 100}, num_panels=4)
228+
circuit.add_PVSystems(load_nodes=["load0"], params={"badParam": 100}, num_panels=4)
216229

217230
def test_102_negative_inputs(self):
218231
"""
@@ -244,6 +257,24 @@ def test_104_non_int_parameters(self):
244257
with self.assertRaises(TypeError):
245258
circuit.add_load_nodes(params={"kV": "stringInput"})
246259

260+
def test_105_alt_source_parameters(self):
261+
circuit = PyGridSim()
262+
circuit.add_load_nodes(num=5)
263+
circuit.add_generators(params={"kV": 50, "kW": 100})
264+
circuit.add_PVSystems(load_nodes=["load0", "load1"], num_panels=5, params={"kV": 0.1})
265+
circuit.solve()
266+
print(circuit.results(["Voltages", "Losses"]))
267+
circuit.clear()
268+
269+
def test_106_transformer_parameters(self):
270+
circuit = PyGridSim()
271+
circuit.add_load_nodes(num=5)
272+
circuit.update_source()
273+
circuit.add_lines([("source", "load0")], params={"length": 20, "XHL": 5})
274+
circuit.solve()
275+
print(circuit.results(["Voltages", "Losses"]))
276+
circuit.clear()
277+
247278

248279
class TestTypeQueryFunctions(unittest.TestCase):
249280

0 commit comments

Comments
 (0)