Skip to content

Commit fad5ec2

Browse files
committed
Add data shape check for ImpactForecast
1 parent a386d22 commit fad5ec2

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

climada/engine/impact_forecast.py

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ def __init__(
5151
impact_kwargs
5252
Keyword-arguments passed to ~:py:class`climada.engine.impact.Impact`.
5353
"""
54-
# TODO: Maybe assert array lengths?
5554
super().__init__(lead_time=lead_time, member=member, **impact_kwargs)
55+
self._check_shapes()
5656

5757
@classmethod
5858
def from_impact(
@@ -88,3 +88,25 @@ def from_impact(
8888
imp_mat=impact.imp_mat,
8989
haz_type=impact.haz_type,
9090
)
91+
92+
def _check_shapes(self):
93+
"""Check shapes of forecast data vs. impact data.
94+
95+
Raises
96+
------
97+
ValueError
98+
If the shapes of the forecast data do not match the
99+
:py:attr:`~climada.engine.impact.Impact.event_id`
100+
"""
101+
shape_expected = self.event_id.shape
102+
103+
def check_forecast_attr(attr: str):
104+
shape_actual = getattr(self, attr).shape
105+
if shape_actual != shape_expected:
106+
raise ValueError(
107+
f"Shape mismatch between Forecast.{attr} "
108+
f"{shape_actual} and Impact.event_id {shape_expected}"
109+
)
110+
111+
check_forecast_attr("member")
112+
check_forecast_attr("lead_time")

climada/engine/test/test_impact_forecast.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,12 @@ def test_impact_forecast_init(self, impact_kwargs, lead_time, member):
7676
npt.assert_array_equal(forecast1.member, member)
7777
self.assert_impact_kwargs(forecast1, **impact_kwargs)
7878

79+
def test_impact_forecast_init_error(self, impact_kwargs, lead_time, member):
80+
with pytest.raises(ValueError, match="Forecast.lead_time"):
81+
ImpactForecast(lead_time=lead_time[:-2], member=member, **impact_kwargs)
82+
with pytest.raises(ValueError, match="Forecast.member"):
83+
ImpactForecast(lead_time=lead_time, member=member[1:], **impact_kwargs)
84+
7985
def test_impact_forecast_from_impact(
8086
self, impact_forecast, impact_kwargs, lead_time, member
8187
):

0 commit comments

Comments
 (0)