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 "". diff --git a/pygridsim/results.py b/pygridsim/results.py index a81d105..ca1a88a 100644 --- a/pygridsim/results.py +++ b/pygridsim/results.py @@ -8,20 +8,33 @@ def _query_solution(query): - match query: - case "Voltages": + query_fix = query.lower().replace(" ", "") + vector_losses = altdss.Losses() + vector_power = altdss.TotalPower() + 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": - vector_losses = altdss.Losses() + case "losses" | "loss": losses = {} losses["Active Power Loss"] = vector_losses.real losses["Reactive Power Loss"] = vector_losses.imag return losses - case "TotalPower": - return altdss.TotalPower() + case "totalpower" | "power": + 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 f67c00a..cbd313e 100644 --- a/tests/test_circuit.py +++ b/tests/test_circuit.py @@ -162,6 +162,19 @@ 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 + 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)) + class TestCustomizedCircuit(unittest.TestCase): """