From f63c9c47aa4b4b3bca0fa5648e9c9437e9cf5940 Mon Sep 17 00:00:00 2001 From: Angela Zhao Date: Thu, 10 Apr 2025 10:51:44 -0400 Subject: [PATCH 1/7] allow lower case/spaces, totalpower split vector --- pygridsim/results.py | 15 ++++++++++----- tests/test_circuit.py | 10 ++++++++++ 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/pygridsim/results.py b/pygridsim/results.py index a81d105..f551146 100644 --- a/pygridsim/results.py +++ b/pygridsim/results.py @@ -8,20 +8,25 @@ def _query_solution(query): - match query: - case "Voltages": + query_fix = query.lower().replace(" ", "") + match query_fix: + case "voltages": bus_vmags = {} for bus_name, bus_vmag in zip(altdss.BusNames(), altdss.BusVMag()): bus_vmags[bus_name] = float(bus_vmag) return bus_vmags - case "Losses": + case "losses": vector_losses = altdss.Losses() losses = {} losses["Active Power Loss"] = vector_losses.real losses["Reactive Power Loss"] = vector_losses.imag return losses - case "TotalPower": - return altdss.TotalPower() + case "totalpower": + vector_power = altdss.TotalPower() + power = {} + power["Active Power"] = vector_power.real + power["Reactive Power"] = vector_power.imag + return power case _: return "Invalid" diff --git a/tests/test_circuit.py b/tests/test_circuit.py index f67c00a..7eeccdf 100644 --- a/tests/test_circuit.py +++ b/tests/test_circuit.py @@ -162,6 +162,16 @@ def test_011_configs(self): with self.assertRaises(Exception): circuit.update_source(source_type=SourceType.TURBINE) + def test_012_all_results(self): + circuit = PyGridSim() + circuit.update_source() + circuit.add_load_nodes() + circuit.add_generators(num=2, gen_type="small") + circuit.add_lines([("source", "load0"), ("generator0", "load0")]) + circuit.solve() + # Should be flexible with capitalization, spaces + print(circuit.results(["Voltages", "losses", "Total Power"])) + class TestCustomizedCircuit(unittest.TestCase): """ From 771bcc3dc8ea96f35bd368fa13d4e54adc5cc57b Mon Sep 17 00:00:00 2001 From: Angela Zhao Date: Thu, 10 Apr 2025 10:56:05 -0400 Subject: [PATCH 2/7] add additional support of the individual loss components --- pygridsim/results.py | 12 ++++++++++-- tests/test_circuit.py | 2 +- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/pygridsim/results.py b/pygridsim/results.py index f551146..1db9f09 100644 --- a/pygridsim/results.py +++ b/pygridsim/results.py @@ -9,6 +9,8 @@ def _query_solution(query): query_fix = query.lower().replace(" ", "") + vector_losses = altdss.Losses() + vector_power = altdss.TotalPower() match query_fix: case "voltages": bus_vmags = {} @@ -16,17 +18,23 @@ def _query_solution(query): bus_vmags[bus_name] = float(bus_vmag) return bus_vmags case "losses": - vector_losses = altdss.Losses() losses = {} losses["Active Power Loss"] = vector_losses.real losses["Reactive Power Loss"] = vector_losses.imag return losses case "totalpower": - vector_power = altdss.TotalPower() power = {} power["Active Power"] = vector_power.real power["Reactive Power"] = vector_power.imag return power + case "activeloss" | "activepowerloss" | "realloss" | "realpowerloss": + return vector_losses.real + case "reactiveloss" | "reactivepowerloss": + return vector_losses.imag + case "activepower" | "realpower": + return vector_power.real + case "reactivepower": + return vector_power.imag case _: return "Invalid" diff --git a/tests/test_circuit.py b/tests/test_circuit.py index 7eeccdf..b7697d6 100644 --- a/tests/test_circuit.py +++ b/tests/test_circuit.py @@ -170,7 +170,7 @@ def test_012_all_results(self): circuit.add_lines([("source", "load0"), ("generator0", "load0")]) circuit.solve() # Should be flexible with capitalization, spaces - print(circuit.results(["Voltages", "losses", "Total Power"])) + print(circuit.results(["Voltages", "losses", "Total Power", "realpowerloss", "Active Power"])) class TestCustomizedCircuit(unittest.TestCase): From d30984e6c18d1bef26d37b90bf6663d6d6c09cbe Mon Sep 17 00:00:00 2001 From: Angela Zhao Date: Thu, 10 Apr 2025 11:00:13 -0400 Subject: [PATCH 3/7] lint fix --- tests/test_circuit.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/test_circuit.py b/tests/test_circuit.py index b7697d6..34ffa9f 100644 --- a/tests/test_circuit.py +++ b/tests/test_circuit.py @@ -170,7 +170,8 @@ def test_012_all_results(self): circuit.add_lines([("source", "load0"), ("generator0", "load0")]) circuit.solve() # Should be flexible with capitalization, spaces - print(circuit.results(["Voltages", "losses", "Total Power", "realpowerloss", "Active Power"])) + queries = ["Voltages", "losses", "Total Power", "realpowerloss", "Active Power"] + print(circuit.results(queries)) class TestCustomizedCircuit(unittest.TestCase): From 51c5d64e03043716e7d318703747f72a768ca5c1 Mon Sep 17 00:00:00 2001 From: Angela Zhao Date: Thu, 10 Apr 2025 11:02:26 -0400 Subject: [PATCH 4/7] update the docstring of results --- pygridsim/core.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pygridsim/core.py b/pygridsim/core.py index 780d393..c85798f 100644 --- a/pygridsim/core.py +++ b/pygridsim/core.py @@ -179,7 +179,9 @@ def results(self, queries: list[str], export_path=""): Args: queries (list[str]): - A list of queries to the circuit ("Voltages", "Losses", "TotalPower") + A list of queries to the circuit: one of ("Voltages", "Losses", "TotalPower") + or partial queries ("RealLoss", "ReactiveLoss", "RealPower", "ReactivePower") + that query one component of Losses/TotalPower export_path (str, optional): The file path to export results. If empty, results are not exported. Defaults to "". From 0538fbad576c2c8a3165e643a7da9148debfeaf2 Mon Sep 17 00:00:00 2001 From: Angela Zhao Date: Thu, 10 Apr 2025 11:16:17 -0400 Subject: [PATCH 5/7] add power as alt name to totalpower, loss as alt name to losses --- pygridsim/results.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pygridsim/results.py b/pygridsim/results.py index 1db9f09..9e19dce 100644 --- a/pygridsim/results.py +++ b/pygridsim/results.py @@ -22,7 +22,7 @@ def _query_solution(query): losses["Active Power Loss"] = vector_losses.real losses["Reactive Power Loss"] = vector_losses.imag return losses - case "totalpower": + case "totalpower" | "power": power = {} power["Active Power"] = vector_power.real power["Reactive Power"] = vector_power.imag From c49693af9e57b33c1b5d1aceb167e92fbcaff1c0 Mon Sep 17 00:00:00 2001 From: Angela Zhao Date: Thu, 10 Apr 2025 11:16:34 -0400 Subject: [PATCH 6/7] loss as name to losses --- pygridsim/results.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pygridsim/results.py b/pygridsim/results.py index 9e19dce..ca1a88a 100644 --- a/pygridsim/results.py +++ b/pygridsim/results.py @@ -17,7 +17,7 @@ def _query_solution(query): for bus_name, bus_vmag in zip(altdss.BusNames(), altdss.BusVMag()): bus_vmags[bus_name] = float(bus_vmag) return bus_vmags - case "losses": + case "losses" | "loss": losses = {} losses["Active Power Loss"] = vector_losses.real losses["Reactive Power Loss"] = vector_losses.imag From b785c8bb3381dcdea514309bab61a0a07ebc1882 Mon Sep 17 00:00:00 2001 From: Angela Zhao Date: Thu, 10 Apr 2025 14:30:50 -0400 Subject: [PATCH 7/7] update results test for more coverage --- tests/test_circuit.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/test_circuit.py b/tests/test_circuit.py index 34ffa9f..cbd313e 100644 --- a/tests/test_circuit.py +++ b/tests/test_circuit.py @@ -170,7 +170,9 @@ def test_012_all_results(self): circuit.add_lines([("source", "load0"), ("generator0", "load0")]) circuit.solve() # Should be flexible with capitalization, spaces - queries = ["Voltages", "losses", "Total Power", "realpowerloss", "Active Power"] + queries = ["Voltages", "losses", "Total Power"] + # Add "partial" queries to just parts of losses/total power + queries += ["realpowerloss", "reactive Loss", "Active Power", "reactivepower"] print(circuit.results(queries))