Skip to content

Commit 0aad2a5

Browse files
committed
Reduce lead time and member and update test
1 parent a55ab3b commit 0aad2a5

File tree

2 files changed

+41
-36
lines changed

2 files changed

+41
-36
lines changed

climada/engine/impact_forecast.py

Lines changed: 32 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -194,18 +194,23 @@ def _reduce_attrs(self, reduce_method: str):
194194
- event_id: set to [0]
195195
- event_name: set to [reduce_method]
196196
- date: set to the minimum value
197-
- frequency: set to 0
197+
- frequency: set to 1
198198
199199
Parameters
200200
----------
201201
reduce_method : str
202202
The reduction method used to reduce the attributes.
203203
"""
204-
red_event_id = np.asarray([0])
205-
red_event_name = np.asarray([reduce_method])
206-
red_date = np.array([self.date.min()])
207-
red_frequency = np.array([0])
208-
return red_event_id, red_event_name, red_date, red_frequency
204+
reduced_attrs = {
205+
"lead_time": np.array([np.timedelta64("NaT")]),
206+
"member": np.array([-1]),
207+
"event_id": np.array([0]),
208+
"event_name": np.array([reduce_method]),
209+
"date": np.array([self.date.min()]),
210+
"frequency": np.array([1]),
211+
}
212+
213+
return reduced_attrs
209214

210215
def min(self):
211216
"""
@@ -222,16 +227,14 @@ def min(self):
222227
"""
223228
red_imp_mat = sparse.csr_matrix(self.imp_mat.min(axis=0))
224229
red_at_event = np.array([red_imp_mat.sum()])
225-
red_event_id, red_event_name, red_date, red_frequency = self._reduce_attrs(
226-
"min"
227-
)
230+
reduced_attrs = self._reduce_attrs("min")
228231
return ImpactForecast(
229-
lead_time=self.lead_time,
230-
member=self.member,
231-
event_id=red_event_id,
232-
event_name=red_event_name,
233-
date=red_date,
234-
frequency=red_frequency,
232+
lead_time=reduced_attrs["lead_time"],
233+
member=reduced_attrs["member"],
234+
event_id=reduced_attrs["event_id"],
235+
event_name=reduced_attrs["event_name"],
236+
date=reduced_attrs["date"],
237+
frequency=reduced_attrs["frequency"],
235238
frequency_unit=self.frequency_unit,
236239
coord_exp=self.coord_exp,
237240
crs=self.crs,
@@ -259,16 +262,14 @@ def max(self):
259262
"""
260263
red_imp_mat = sparse.csr_matrix(self.imp_mat.max(axis=0))
261264
red_at_event = np.array([red_imp_mat.sum()])
262-
red_event_id, red_event_name, red_date, red_frequency = self._reduce_attrs(
263-
"max"
264-
)
265+
reduced_attrs = self._reduce_attrs("max")
265266
return ImpactForecast(
266-
lead_time=self.lead_time,
267-
member=self.member,
268-
event_id=red_event_id,
269-
event_name=red_event_name,
270-
date=red_date,
271-
frequency=red_frequency,
267+
lead_time=reduced_attrs["lead_time"],
268+
member=reduced_attrs["member"],
269+
event_id=reduced_attrs["event_id"],
270+
event_name=reduced_attrs["event_name"],
271+
date=reduced_attrs["date"],
272+
frequency=reduced_attrs["frequency"],
272273
frequency_unit=self.frequency_unit,
273274
coord_exp=self.coord_exp,
274275
crs=self.crs,
@@ -298,16 +299,14 @@ def mean(self):
298299
"""
299300
red_imp_mat = sparse.csr_matrix(self.imp_mat.mean(axis=0))
300301
red_at_event = np.array([red_imp_mat.sum()])
301-
red_event_id, red_event_name, red_date, red_frequency = self._reduce_attrs(
302-
"mean"
303-
)
302+
reduced_attrs = self._reduce_attrs("mean")
304303
return ImpactForecast(
305-
lead_time=self.lead_time,
306-
member=self.member,
307-
event_id=red_event_id,
308-
event_name=red_event_name,
309-
date=red_date,
310-
frequency=red_frequency,
304+
lead_time=reduced_attrs["lead_time"],
305+
member=reduced_attrs["member"],
306+
event_id=reduced_attrs["event_id"],
307+
event_name=reduced_attrs["event_name"],
308+
date=reduced_attrs["date"],
309+
frequency=reduced_attrs["frequency"],
311310
frequency_unit=self.frequency_unit,
312311
coord_exp=self.coord_exp,
313312
crs=self.crs,

climada/engine/test/test_impact_forecast.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -189,15 +189,21 @@ def test_impact_forecast_mean_min_max(impact_forecast):
189189
npt.assert_array_equal(imp_fcst_max.at_event, impact_forecast.at_event.max())
190190

191191
# check that attributes where reduced correctly
192+
assert np.isnat(imp_fcst_mean.lead_time[0])
193+
assert np.isnat(imp_fcst_min.lead_time[0])
194+
assert np.isnat(imp_fcst_max.lead_time[0])
195+
assert imp_fcst_mean.member[0] == -1
196+
assert imp_fcst_min.member[0] == -1
197+
assert imp_fcst_max.member[0] == -1
192198
assert imp_fcst_mean.event_name[0] == "mean"
193199
assert imp_fcst_min.event_name[0] == "min"
194200
assert imp_fcst_max.event_name[0] == "max"
195201
assert imp_fcst_mean.event_id[0] == 0
196202
assert imp_fcst_min.event_id[0] == 0
197203
assert imp_fcst_max.event_id[0] == 0
198-
assert imp_fcst_mean.frequency == 0
199-
assert imp_fcst_min.frequency == 0
200-
assert imp_fcst_max.frequency == 0
204+
assert imp_fcst_mean.frequency == 1
205+
assert imp_fcst_min.frequency == 1
206+
assert imp_fcst_max.frequency == 1
201207
assert imp_fcst_mean.date == impact_forecast.date.min()
202208
assert imp_fcst_min.date == impact_forecast.date.min()
203209
assert imp_fcst_max.date == impact_forecast.date.min()

0 commit comments

Comments
 (0)