2525
2626from climada .engine .impact_calc import ImpactCalc
2727from 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+ )
2935from climada .trajectories import InterpolatedRiskTrajectory , StaticRiskTrajectory
3036from 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" )
478504def 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+
755804def test_interp_trajectory_with_group (
756805 snapshot_factory , expected_interp_metrics_wgroup , expected_interp_period_wgroup
757806):
0 commit comments