From 742eaf1662f1e363ed9beac75610c2f45f251b84 Mon Sep 17 00:00:00 2001 From: Valentin Gebhart Date: Mon, 8 Dec 2025 14:39:43 +0100 Subject: [PATCH 1/3] change leadtime to timedelta --- climada/util/forecast.py | 4 ++-- climada/util/test/test_forecast.py | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/climada/util/forecast.py b/climada/util/forecast.py index 1fbd090db9..eb7cc7fc14 100644 --- a/climada/util/forecast.py +++ b/climada/util/forecast.py @@ -28,8 +28,8 @@ class Forecast: Attributes ---------- lead_time : np.ndarray - Array of forecast lead times, given as datetime64 objects. - Represents the time points for which forecasts are made. + Array of forecast lead times, given as timedelta64 objects. + Represents the lead times of the forecasts. member : np.ndarray Array of ensemble member identifiers, given as integers. Represents different forecast ensemble members. diff --git a/climada/util/test/test_forecast.py b/climada/util/test/test_forecast.py index f500c4ba88..54d11e6622 100644 --- a/climada/util/test/test_forecast.py +++ b/climada/util/test/test_forecast.py @@ -21,6 +21,7 @@ import numpy as np import numpy.testing as npt +import pandas as pd from climada.util.forecast import Forecast @@ -34,8 +35,10 @@ def test_forecast_init(): forecast = Forecast(member=np.array([1, 2])) npt.assert_array_equal(forecast.member, np.array([1, 2]), strict=True) - forecast = Forecast(lead_time=np.array([1, 2])) - npt.assert_array_equal(forecast.lead_time, np.array([1, 2]), strict=True) + forecast = Forecast(lead_time=np.array([6, 12], dtype="timedelta64[h]")) + npt.assert_array_equal( + forecast.lead_time, np.array([6, 12], dtype="timedelta64[h]"), strict=True + ) forecast = Forecast(lead_time=np.array([1, 2]), member=[3, 4]) npt.assert_array_equal(forecast.lead_time, np.array([1, 2]), strict=True) @@ -43,10 +46,7 @@ def test_forecast_init(): assert isinstance(forecast.member, np.ndarray) # Test with datetime64 including seconds - lead_times_seconds = np.array( - ["2024-01-01T00:00:00", "2024-01-01T00:01:00", "2024-01-01"], - dtype="datetime64[s]", - ) + lead_times_seconds = pd.timedelta_range(start="1 day", periods=4).to_numpy() forecast = Forecast(lead_time=lead_times_seconds, member=[1, 2, 3]) npt.assert_array_equal(forecast.lead_time, lead_times_seconds, strict=True) - assert forecast.lead_time.dtype == np.dtype("datetime64[s]") + assert forecast.lead_time.dtype == np.dtype("timedelta64[ns]") From b98deed917bc5fb30857f33c0c4038fcf93a243b Mon Sep 17 00:00:00 2001 From: Valentin Gebhart Date: Mon, 8 Dec 2025 14:52:20 +0100 Subject: [PATCH 2/3] adapt impactforecast docstrings and tests --- climada/engine/impact_forecast.py | 8 ++++---- climada/engine/test/test_impact_forecast.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/climada/engine/impact_forecast.py b/climada/engine/impact_forecast.py index d534e32ead..d4afc551d4 100644 --- a/climada/engine/impact_forecast.py +++ b/climada/engine/impact_forecast.py @@ -45,9 +45,9 @@ def __init__( Parameters ---------- lead_time : np.ndarray, optional - The lead time associated with each event entry + The lead time associated with each event entry, given as timedelta64 type member : np.ndarray, optional - The ensemble member associated with each event entry + The ensemble member associated with each event entry, given as integers impact_kwargs Keyword-arguments passed to ~:py:class`climada.engine.impact.Impact`. """ @@ -65,9 +65,9 @@ def from_impact( impact : climada.engine.impact.Impact The impact object whose data to use in the forecast object lead_time : np.ndarray, optional - The lead time associated with each event entry + The lead time associated with each event entry, given as timedelta64 type member : np.ndarray, optional - The ensemble member associated with each event entry + The ensemble member associated with each event entry, given as integers """ with log_level("WARNING", "climada.engine.impact"): return cls( diff --git a/climada/engine/test/test_impact_forecast.py b/climada/engine/test/test_impact_forecast.py index 20f5420ae3..68856b3288 100644 --- a/climada/engine/test/test_impact_forecast.py +++ b/climada/engine/test/test_impact_forecast.py @@ -52,7 +52,7 @@ def assert_impact_kwargs(impact: Impact, **kwargs): class TestImpactForecastInit: - lead_time = pd.date_range("2000-01-01", "2000-01-02", periods=6).to_numpy() + lead_time = pd.timedelta_range(start="1 day", periods=6).to_numpy() member = np.arange(6) def test_impact_forecast_init(self, impact_kwargs): From a8b0284c4ff57b673a747a44725186de7fe0e33d Mon Sep 17 00:00:00 2001 From: Lukas Riedel <34276446+peanutfun@users.noreply.github.com> Date: Mon, 8 Dec 2025 14:58:58 +0100 Subject: [PATCH 3/3] Remove stray comment --- climada/hazard/test/test_forecast.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/climada/hazard/test/test_forecast.py b/climada/hazard/test/test_forecast.py index cd4acda21a..640818b396 100644 --- a/climada/hazard/test/test_forecast.py +++ b/climada/hazard/test/test_forecast.py @@ -29,8 +29,6 @@ from climada.hazard.forecast import HazardForecast from climada.hazard.test.test_base import hazard_kwargs -# --- Examples for fixtures and test organization --- # - @pytest.fixture def haz_kwargs():