Coverage for tests/test_verify_multiperiod.py: 100%
18 statements
« prev ^ index » next coverage.py v7.10.6, created at 2025-11-13 17:34 -0800
« prev ^ index » next coverage.py v7.10.6, created at 2025-11-13 17:34 -0800
1import distopf as opf
2import distopf.matrix_models.multiperiod as mpopf
3from distopf.importer import create_case
4from distopf import CASES_DIR
6case = create_case(
7 data_path=CASES_DIR / "csv" / "ieee123_30der", n_steps=1, start_step=0
8)
9case.gen_data.control_variable = "PQ"
10case.schedules.default = 1
11case.schedules.PV = 1
13m1 = opf.LinDistModelL(
14 branch_data=case.branch_data,
15 bus_data=case.bus_data,
16 gen_data=case.gen_data,
17 cap_data=case.cap_data,
18 reg_data=case.reg_data,
19)
20r1 = opf.cvxpy_solve(m1, opf.cp_obj_loss, solver="CLARABEL")
22m2 = mpopf.LinDistMPL(case=case)
23r2 = mpopf.cvxpy_solve(m2, mpopf.cp_obj_loss, solver="CLARABEL")
25v1 = m1.get_voltages(r1.x).sort_values("id").reset_index(drop=True)
26v2 = m2.get_voltages(r2.x).sort_values("id").reset_index(drop=True)
27vd = v1.loc[:, ["a", "b", "c"]] - v2.loc[:, ["a", "b", "c"]]
28max_variation = vd.abs().max().max()
29print(f"max variation: {max_variation}")
30assert max_variation < 1e-5
32# pl1 = m1.get_p_loads(r1.x).sort_values("id").reset_index(drop=True)
33# ql1 = m1.get_q_loads(r1.x).sort_values("id").reset_index(drop=True)
34# pl2 = m2.get_p_loads(r2.x).sort_values("id").reset_index(drop=True)
35# ql2 = m2.get_q_loads(r2.x).sort_values("id").reset_index(drop=True)
36# pg1 = m1.get_p_gens(r1.x).sort_values("id").reset_index(drop=True)
37# qg1 = m1.get_q_gens(r1.x).sort_values("id").reset_index(drop=True)
38# pg2 = m2.get_p_gens(r2.x).sort_values("id").reset_index(drop=True)
39# qg2 = m2.get_q_gens(r2.x).sort_values("id").reset_index(drop=True)
40# opf.voltage_differences(v1, v2).show(renderer="browser")
41# opf.plot_pq(pg1, qg1).show(renderer="browser")
42# opf.plot_pq(pg2, qg2).show(renderer="browser")
43# opf.plot_pq(pl1, ql1).show(renderer="browser")
44# opf.plot_pq(pl2, ql2).show(renderer="browser")