2626from climada .entity .entity_def import Entity
2727from climada .entity .disc_rates import DiscRates
2828from climada .hazard .base import Hazard
29- from climada .engine .cost_benefit import CostBenefit , risk_aai_agg , DEF_RP
29+ from climada .engine .cost_benefit import CostBenefit , risk_aai_agg , DEF_RP , \
30+ risk_rp_100 , risk_rp_250
31+ from climada .engine import Impact
3032from climada .util .constants import ENT_DEMO_FUTURE , ENT_DEMO_TODAY
3133
3234HAZ_DATA_DIR = os .path .join (os .path .dirname (__file__ ), '../../hazard/test/data' )
@@ -45,10 +47,11 @@ def test_calc_impact_measures_pass(self):
4547 hazard .read_mat (HAZ_TEST_MAT )
4648 entity = Entity ()
4749 entity .read_mat (ENT_TEST_MAT )
48- entity .exposures .rename (columns = {'if_' : 'if_TC' }, inplace = True )
4950 entity .check ()
50- for meas in entity .measures .get_measure ():
51+ entity .measures ._data ['TC' ] = entity .measures ._data .pop ('XX' )
52+ for meas in entity .measures .get_measure ('TC' ):
5153 meas .haz_type = 'TC'
54+ entity .check ()
5255
5356 cost_ben = CostBenefit ()
5457 cost_ben ._calc_impact_measures (hazard , entity .exposures , entity .measures ,
@@ -112,10 +115,10 @@ def test_calc_cb_no_change_pass(self):
112115 hazard .read_mat (HAZ_TEST_MAT )
113116 entity = Entity ()
114117 entity .read_mat (ENT_TEST_MAT )
115- entity .exposures .rename (columns = {'if_' : 'if_TC' }, inplace = True )
116- entity .check ()
117- for meas in entity .measures .get_measure ():
118+ entity .measures ._data ['TC' ] = entity .measures ._data .pop ('XX' )
119+ for meas in entity .measures .get_measure ('TC' ):
118120 meas .haz_type = 'TC'
121+ entity .check ()
119122
120123 cost_ben = CostBenefit ()
121124 cost_ben ._calc_impact_measures (hazard , entity .exposures , entity .measures ,
@@ -148,10 +151,10 @@ def test_calc_cb_change_pass(self):
148151 hazard .read_mat (HAZ_TEST_MAT )
149152 entity = Entity ()
150153 entity .read_mat (ENT_TEST_MAT )
151- entity .exposures .rename (columns = {'if_' : 'if_TC' }, inplace = True )
152- entity .check ()
153- for meas in entity .measures .get_measure ():
154+ entity .measures ._data ['TC' ] = entity .measures ._data .pop ('XX' )
155+ for meas in entity .measures .get_measure ('TC' ):
154156 meas .haz_type = 'TC'
157+ entity .check ()
155158
156159 cost_ben = CostBenefit ()
157160 cost_ben ._calc_impact_measures (hazard , entity .exposures , entity .measures ,
@@ -160,8 +163,6 @@ def test_calc_cb_change_pass(self):
160163 ent_future = Entity ()
161164 ent_future .read_excel (ENT_DEMO_FUTURE )
162165 ent_future .check ()
163- for meas in ent_future .measures .get_measure ():
164- meas .haz_type = 'TC'
165166
166167 haz_future = copy .deepcopy (hazard )
167168 haz_future .intensity .data += 25
@@ -369,7 +370,46 @@ def test_calc_no_change_pass(self):
369370
370371 self .assertEqual (cost_ben .tot_climate_risk , 1.2150496306913972e+11 )
371372
373+ class TestRiskFuncs (unittest .TestCase ):
374+ '''Test risk functions definitions'''
375+
376+ def test_impact ():
377+ ent = Entity ()
378+ ent .read_excel (ENT_DEMO_TODAY )
379+ ent .check ()
380+ hazard = Hazard ('TC' )
381+ hazard .read_mat (HAZ_TEST_MAT )
382+ impact = Impact ()
383+ ent .exposures .assign_centroids (hazard )
384+ impact .calc (ent .exposures , ent .impact_funcs , hazard )
385+ return impact
386+
387+ def test_risk_aai_agg_pass (self ):
388+ """Test risk_aai_agg"""
389+ impact = self .test_impact ()
390+ risk = risk_aai_agg (impact )
391+ self .assertAlmostEqual (6.512201157564421e+09 , risk , 5 )
392+ self .assertTrue (np .isclose (6.512201157564421e+09 , risk ))
393+
394+ def test_risk_rp_100_pass (self ):
395+ """Test risk_rp_100"""
396+ impact = self .test_impact ()
397+ exc_freq = impact .calc_freq_curve ([100 ])
398+
399+ risk = risk_rp_100 (impact )
400+ self .assertAlmostEqual (exc_freq .impact [0 ], risk )
401+
402+ def test_risk_rp_200_pass (self ):
403+ """Test risk_rp_200"""
404+ impact = self .test_impact ()
405+ exc_freq = impact .calc_freq_curve ([250 ])
406+
407+ risk = risk_rp_250 (impact )
408+ self .assertAlmostEqual (exc_freq .impact [0 ], risk )
409+
372410# Execute Tests
411+ TESTS = unittest .TestLoader ().loadTestsFromTestCase (TestRiskFuncs )
373412TESTS = unittest .TestLoader ().loadTestsFromTestCase (TestCalc )
374413TESTS .addTests (unittest .TestLoader ().loadTestsFromTestCase (TestSteps ))
414+ TESTS .addTests (unittest .TestLoader ().loadTestsFromTestCase (TestRiskFuncs ))
375415unittest .TextTestRunner (verbosity = 2 ).run (TESTS )
0 commit comments