Skip to content

Commit b176e5f

Browse files
committed
Add equality comparison to EnsembleOptimizerOutput
1 parent 58bf84f commit b176e5f

2 files changed

Lines changed: 26 additions & 0 deletions

File tree

climada/util/calibrate/ensemble.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,13 @@ def to_csv(self, filepath: Path | str):
235235
)
236236
self.data.to_csv(filepath, index=None)
237237

238+
def __eq__(self, other):
239+
"""Equality comparison"""
240+
if not isinstance(other, EnsembleOptimizerOutput):
241+
return False
242+
243+
return self.data.equals(other.data)
244+
238245
def _to_impf_sets(
239246
self, impact_func_creator: Callable[..., ImpactFuncSet]
240247
) -> list[ImpactFuncSet]:

climada/util/calibrate/test/test_ensemble.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,25 @@ def setUp(self):
6868
},
6969
)
7070

71+
def test_equality(self):
72+
"""Test equality comparison"""
73+
df = pd.DataFrame([[0, 1], [2, 0]], columns=["a", "b"], index=[1, 2])
74+
self.assertEqual(EnsembleOptimizerOutput(df), EnsembleOptimizerOutput(df))
75+
# NOTE: Index must have equal values, not dtypes!
76+
self.assertEqual(
77+
EnsembleOptimizerOutput(df),
78+
EnsembleOptimizerOutput(
79+
pd.DataFrame([[0, 1], [2, 0]], columns=["a", "b"], index=[1.0, 2.0])
80+
),
81+
)
82+
self.assertNotEqual(
83+
EnsembleOptimizerOutput(df),
84+
EnsembleOptimizerOutput(
85+
pd.DataFrame([[0, 1], [2, 0]], columns=["a", "c"], index=[1, 2])
86+
),
87+
)
88+
self.assertNotEqual(EnsembleOptimizerOutput(pd.DataFrame()), "output")
89+
7190
def test_from_outputs(self):
7291
"""Test 'from_outputs' initialization"""
7392
out = EnsembleOptimizerOutput.from_outputs([self.output1, self.output2])

0 commit comments

Comments
 (0)