diff --git a/spopt/locate/flow.py b/spopt/locate/flow.py index ad2c0831..25917766 100644 --- a/spopt/locate/flow.py +++ b/spopt/locate/flow.py @@ -2183,7 +2183,8 @@ def to_dataframes(self, include_iterations: bool = True) -> dict[str, pd.DataFra dataframes["coverage"] = pd.DataFrame(coverage_data) covered_flow_sum = sum( - coverage.get("coverage", 0) for coverage in self.flow_coverage.values() + coverage.get("covered_volume", 0) + for coverage in self.flow_coverage.values() ) total_flow = sum(self.flows.values()) coverage_pct = covered_flow_sum / total_flow * 100 diff --git a/spopt/tests/test_locate/test_flow.py b/spopt/tests/test_locate/test_flow.py index 84cfa603..d2f9223a 100644 --- a/spopt/tests/test_locate/test_flow.py +++ b/spopt/tests/test_locate/test_flow.py @@ -391,6 +391,18 @@ def test_dataframe_export(self, setup_solved_model): assert "destination" in dfs["coverage"].columns assert "covered_proportion" in dfs["coverage"].columns + covered = dfs["coverage"]["covered_volume"].sum() + total = dfs["coverage"]["flow_volume"].sum() + expected_pct = (covered / total) * 100 if total > 0 else 0 + summary_pct = float( + dfs["summary"] + .loc[dfs["summary"]["Metric"] == "Coverage %", "Value"] + .iloc[0] + .replace("Flow Coverage: ", "") + .replace("%", "") + ) + assert summary_pct == pytest.approx(expected_pct, abs=0.01) + def test_solver_details(self, setup_solved_model): model = setup_solved_model details = model.get_solver_details()