Skip to content

Commit bbec035

Browse files
committed
Added a test for negative intensity hazards
1 parent bb4fbba commit bbec035

2 files changed

Lines changed: 69 additions & 4 deletions

File tree

climada/test/conftest.py

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -272,13 +272,19 @@ def _make_impf(
272272
hazard_type=HAZARD_TYPE,
273273
hazard_unit=HAZARD_UNIT,
274274
impf_id=IMPF_ID,
275+
negative_intensities=False,
275276
):
277+
intensity = np.array([0, max_intensity / 2, max_intensity])
278+
mdd = np.array([0, 0.5, 1])
279+
if negative_intensities:
280+
intensity = np.flip(intensity) * -1
281+
mdd = np.flip(mdd)
276282
return ImpactFunc(
277283
haz_type=hazard_type,
278284
intensity_unit=hazard_unit,
279285
name=IMPF_NAME,
280-
intensity=np.array([0, max_intensity / 2, max_intensity]),
281-
mdd=np.array([0, 0.5, 1]),
286+
intensity=intensity,
287+
mdd=mdd,
282288
paa=np.array([1, 1, 1]) * paa_scale,
283289
id=impf_id,
284290
)
@@ -299,9 +305,19 @@ def _make_impfset(
299305
hazard_type=HAZARD_TYPE,
300306
hazard_unit=HAZARD_UNIT,
301307
impf_id=IMPF_ID,
308+
negative_intensities=False,
302309
):
303310
return ImpactFuncSet(
304-
[impf_factory(paa_scale, max_intensity, hazard_type, hazard_unit, impf_id)]
311+
[
312+
impf_factory(
313+
paa_scale,
314+
max_intensity,
315+
hazard_type,
316+
hazard_unit,
317+
impf_id,
318+
negative_intensities,
319+
)
320+
]
305321
)
306322

307323
return _make_impfset

climada/test/test_trajectories.py

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,13 @@
2525

2626
from climada.engine.impact_calc import ImpactCalc
2727
from climada.entity.disc_rates.base import DiscRates
28-
from climada.test.conftest import CATEGORIES, EXPOSURE_REF_YEAR
28+
from climada.entity.impact_funcs.base import ImpactFunc
29+
from climada.entity.impact_funcs.impact_func_set import ImpactFuncSet
30+
from climada.test.conftest import (
31+
CATEGORIES,
32+
EXPOSURE_REF_YEAR,
33+
hazard_intensity_factory,
34+
)
2935
from climada.trajectories import InterpolatedRiskTrajectory, StaticRiskTrajectory
3036
from climada.trajectories.constants import (
3137
AAI_METRIC_NAME,
@@ -70,6 +76,7 @@ def _make_snapshot(
7076
hazard_frequency_factor=1.0,
7177
paa_scale=1.0,
7278
group_id=None,
79+
negative_intensities=False,
7380
):
7481
exposures = exposures_factory(
7582
value_factor=exposure_value_factor, ref_year=date, group_id=group_id
@@ -82,6 +89,7 @@ def _make_snapshot(
8289

8390
impfset = impfset_factory(
8491
paa_scale=paa_scale,
92+
negative_intensities=negative_intensities,
8593
)
8694

8795
return Snapshot(
@@ -474,6 +482,24 @@ def snapshot_future_interp_vulchange(snapshot_factory):
474482
)
475483

476484

485+
@pytest.fixture(scope="session")
486+
def snapshot_base_neg(snapshot_factory):
487+
return snapshot_factory(
488+
hazard_intensity_factor=-1.0,
489+
negative_intensities=True,
490+
)
491+
492+
493+
@pytest.fixture(scope="session")
494+
def snapshot_future_interp_neg(snapshot_factory):
495+
return snapshot_factory(
496+
date=2022,
497+
exposure_value_factor=6.0,
498+
hazard_intensity_factor=-2.0,
499+
negative_intensities=True,
500+
)
501+
502+
477503
@pytest.fixture(scope="session")
478504
def expected_interp_metrics():
479505
# fmt: off
@@ -752,6 +778,29 @@ def test_interpolated_trajectory(
752778
)
753779

754780

781+
def test_interpolated_trajectory_negative_intensities(
782+
snapshot_base_neg,
783+
snapshot_future_interp_neg,
784+
expected_interp_metrics,
785+
expected_period_metrics,
786+
):
787+
interp_traj = InterpolatedRiskTrajectory(
788+
[snapshot_base_neg, snapshot_future_interp_neg], return_periods=[50, 100, 250]
789+
)
790+
pd.testing.assert_frame_equal(
791+
interp_traj.per_date_risk_metrics(),
792+
expected_interp_metrics,
793+
check_dtype=False,
794+
check_categorical=False,
795+
)
796+
pd.testing.assert_frame_equal(
797+
interp_traj.per_period_risk_metrics(),
798+
expected_period_metrics,
799+
check_dtype=False,
800+
check_categorical=False,
801+
)
802+
803+
755804
def test_interp_trajectory_with_group(
756805
snapshot_factory, expected_interp_metrics_wgroup, expected_interp_period_wgroup
757806
):

0 commit comments

Comments
 (0)