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

1import distopf as opf 

2import distopf.matrix_models.multiperiod as mpopf 

3from distopf.importer import create_case 

4from distopf import CASES_DIR 

5 

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 

12 

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") 

21 

22m2 = mpopf.LinDistMPL(case=case) 

23r2 = mpopf.cvxpy_solve(m2, mpopf.cp_obj_loss, solver="CLARABEL") 

24 

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 

31 

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")