Skip to content

Commit 6856117

Browse files
committed
Merge branch 'feature/eq_methods_for_impf' into feature/risk_trajectory
2 parents 3f13c2e + adfc7e2 commit 6856117

File tree

3 files changed

+126
-2
lines changed

3 files changed

+126
-2
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ Code freeze date: YYYY-MM-DD
1212

1313
### Added
1414

15+
- `climada.entity.impact_funcs.base.ImpactFunc.__eq__` method
16+
- `climada.entity.impact_funcs.impact_func_set.ImpactFuncSet.__eq__` method
17+
1518
### Changed
1619
- `Hazard.local_exceedance_intensity`, `Hazard.local_return_period` and `Impact.local_exceedance_impact`, `Impact.local_return_period`, using the `climada.util.interpolation` module: New default (no binning), binning on decimals, and faster implementation [#1012](https://github.com/CLIMADA-project/climada_python/pull/1012)
1720
### Fixed

climada/entity/impact_funcs/test/test_base.py

Lines changed: 73 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,74 @@
2626
from climada.entity.impact_funcs.base import ImpactFunc
2727

2828

29+
class TestEquality(unittest.TestCase):
30+
"""Test equality method"""
31+
32+
def setUp(self):
33+
self.impf1 = ImpactFunc(
34+
haz_type="TC",
35+
id=1,
36+
intensity=np.array([1, 2, 3]),
37+
mdd=np.array([0.1, 0.2, 0.3]),
38+
paa=np.array([0.4, 0.5, 0.6]),
39+
intensity_unit="m/s",
40+
name="Test Impact",
41+
)
42+
self.impf2 = ImpactFunc(
43+
haz_type="TC",
44+
id=1,
45+
intensity=np.array([1, 2, 3]),
46+
mdd=np.array([0.1, 0.2, 0.3]),
47+
paa=np.array([0.4, 0.5, 0.6]),
48+
intensity_unit="m/s",
49+
name="Test Impact",
50+
)
51+
self.impf3 = ImpactFunc(
52+
haz_type="FL",
53+
id=2,
54+
intensity=np.array([4, 5, 6]),
55+
mdd=np.array([0.7, 0.8, 0.9]),
56+
paa=np.array([0.1, 0.2, 0.3]),
57+
intensity_unit="m",
58+
name="Another Impact",
59+
)
60+
61+
def test_reflexivity(self):
62+
self.assertEqual(self.impf1, self.impf1)
63+
64+
def test_symmetry(self):
65+
self.assertEqual(self.impf1, self.impf2)
66+
self.assertEqual(self.impf2, self.impf1)
67+
68+
def test_transitivity(self):
69+
impf4 = ImpactFunc(
70+
haz_type="TC",
71+
id=1,
72+
intensity=np.array([1, 2, 3]),
73+
mdd=np.array([0.1, 0.2, 0.3]),
74+
paa=np.array([0.4, 0.5, 0.6]),
75+
intensity_unit="m/s",
76+
name="Test Impact",
77+
)
78+
self.assertEqual(self.impf1, self.impf2)
79+
self.assertEqual(self.impf2, impf4)
80+
self.assertEqual(self.impf1, impf4)
81+
82+
def test_consistency(self):
83+
self.assertEqual(self.impf1, self.impf2)
84+
self.assertEqual(self.impf1, self.impf2)
85+
86+
def test_comparison_with_none(self):
87+
self.assertNotEqual(self.impf1, None)
88+
89+
def test_different_types(self):
90+
self.assertNotEqual(self.impf1, "Not an ImpactFunc")
91+
92+
def test_inequality(self):
93+
self.assertNotEqual(self.impf1, self.impf3)
94+
self.assertTrue(self.impf1 != self.impf3)
95+
96+
2997
class TestInterpolation(unittest.TestCase):
3098
"""Impact function interpolation test"""
3199

@@ -139,5 +207,8 @@ def test_aux_vars(impf):
139207

140208
# Execute Tests
141209
if __name__ == "__main__":
142-
TESTS = unittest.TestLoader().loadTestsFromTestCase(TestInterpolation)
143-
unittest.TextTestRunner(verbosity=2).run(TESTS)
210+
equality_tests = unittest.TestLoader().loadTestsFromTestCase(TestEquality)
211+
interpolation_tests = unittest.TestLoader().loadTestsFromTestCase(TestInterpolation)
212+
unittest.TextTestRunner(verbosity=2).run(
213+
unittest.TestSuite([equality_tests, interpolation_tests])
214+
)

climada/entity/impact_funcs/test/test_imp_fun_set.py

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,55 @@ def test_remove_add_pass(self):
288288
self.assertEqual([1], imp_fun.get_ids("TC"))
289289

290290

291+
class TestEquality(unittest.TestCase):
292+
"""Test equality method for ImpactFuncSet"""
293+
294+
def setUp(self):
295+
intensity = np.array([0, 20])
296+
paa = np.array([0, 1])
297+
mdd = np.array([0, 0.5])
298+
299+
fun_1 = ImpactFunc("TC", 3, intensity, mdd, paa)
300+
fun_2 = ImpactFunc("TC", 3, intensity, mdd, paa)
301+
fun_3 = ImpactFunc("TC", 4, intensity + 1, mdd, paa)
302+
303+
self.impact_set1 = ImpactFuncSet([fun_1])
304+
self.impact_set2 = ImpactFuncSet([fun_2])
305+
self.impact_set3 = ImpactFuncSet([fun_3])
306+
self.impact_set4 = ImpactFuncSet([fun_1, fun_3])
307+
308+
def test_reflexivity(self):
309+
self.assertEqual(self.impact_set1, self.impact_set1)
310+
311+
def test_symmetry(self):
312+
self.assertEqual(self.impact_set1, self.impact_set2)
313+
self.assertEqual(self.impact_set2, self.impact_set1)
314+
315+
def test_transitivity(self):
316+
impact_set5 = ImpactFuncSet([self.impact_set1._data["TC"][3]])
317+
self.assertEqual(self.impact_set1, self.impact_set2)
318+
self.assertEqual(self.impact_set2, impact_set5)
319+
self.assertEqual(self.impact_set1, impact_set5)
320+
321+
def test_consistency(self):
322+
self.assertEqual(self.impact_set1, self.impact_set2)
323+
self.assertEqual(self.impact_set1, self.impact_set2)
324+
325+
def test_comparison_with_none(self):
326+
self.assertNotEqual(self.impact_set1, None)
327+
328+
def test_different_types(self):
329+
self.assertNotEqual(self.impact_set1, "Not an ImpactFuncSet")
330+
331+
def test_field_comparison(self):
332+
self.assertNotEqual(self.impact_set1, self.impact_set3)
333+
self.assertNotEqual(self.impact_set1, self.impact_set4)
334+
335+
def test_inequality(self):
336+
self.assertNotEqual(self.impact_set1, self.impact_set3)
337+
self.assertTrue(self.impact_set1 != self.impact_set3)
338+
339+
291340
class TestChecker(unittest.TestCase):
292341
"""Test loading funcions from the ImpactFuncSet class"""
293342

@@ -592,6 +641,7 @@ def test_write_read_pass(self):
592641
# Execute Tests
593642
if __name__ == "__main__":
594643
TESTS = unittest.TestLoader().loadTestsFromTestCase(TestContainer)
644+
TESTS.addTests(unittest.TestLoader().loadTestsFromTestCase(TestEquality))
595645
TESTS.addTests(unittest.TestLoader().loadTestsFromTestCase(TestChecker))
596646
TESTS.addTests(unittest.TestLoader().loadTestsFromTestCase(TestExtend))
597647
TESTS.addTests(unittest.TestLoader().loadTestsFromTestCase(TestReaderExcel))

0 commit comments

Comments
 (0)