From cdc37552c786e23c001492ffa28ca2815ec0ca63 Mon Sep 17 00:00:00 2001
From: "Mads M. Pedersen" <mmpe@dtu.dk>
Date: Fri, 21 Mar 2025 09:40:23 +0000
Subject: [PATCH] adapt to xarray v2025.03.0 where merge_attrs is moved from
 xarray.core.merge...

---
 py_wake/deficit_models/fuga.py                            | 5 ++++-
 py_wake/tests/test_utils/test_xarray_utils.py             | 4 ++--
 .../test_enginering_wind_farm_model.py                    | 8 ++++----
 3 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/py_wake/deficit_models/fuga.py b/py_wake/deficit_models/fuga.py
index 8b8af5ecc..5da7a62e6 100644
--- a/py_wake/deficit_models/fuga.py
+++ b/py_wake/deficit_models/fuga.py
@@ -11,7 +11,10 @@ from py_wake.utils.gradients import cabs
 
 from py_wake.utils.model_utils import DeprecatedModel
 import glob
-from xarray.core.merge import merge_attrs
+try:
+    from xarray.core.merge import merge_attrs
+except ModuleNotFoundError:  # pragma: no cover
+    from xarray.structure.merge import merge_attrs  # Moved to xarray.structure in v2025.03.0
 import warnings
 import os
 
diff --git a/py_wake/tests/test_utils/test_xarray_utils.py b/py_wake/tests/test_utils/test_xarray_utils.py
index da4adb893..f9f2b42c6 100644
--- a/py_wake/tests/test_utils/test_xarray_utils.py
+++ b/py_wake/tests/test_utils/test_xarray_utils.py
@@ -33,7 +33,7 @@ def test_add_ilk(ti, dims):
 def test_add_ilk_time(ti, dims):
     site = Hornsrev1Site()
     wt, wd, ws = np.arange(2), np.arange(100), np.arange(100) % 20 + 3
-    t = pd.date_range("2000-01-01", freq="10T", periods=100)
+    t = pd.date_range("2000-01-01", freq="10min", periods=100)
 
     lw = site.local_wind(wt * 1000, wt * 0, wt * 0 + 70, wd, ws, time=t)
     lw.add_ilk('TI_ilk', ti)
@@ -65,7 +65,7 @@ def test_add_ilk_wrong_dim(shape):
 def test_add_ilk_time_wrong_dim(shape):
     site = Hornsrev1Site()
     wt, wd, ws = np.arange(2), np.arange(100), np.arange(100) % 20 + 3
-    t = pd.date_range("2000-01-01", freq="10T", periods=100)
+    t = pd.date_range("2000-01-01", freq="10min", periods=100)
     lw = site.local_wind(wt * 1000, wt * 0, wt * 0 + 70, wd, ws, time=t)
 
     with pytest.raises(ValueError):
diff --git a/py_wake/tests/test_wind_farm_models/test_enginering_wind_farm_model.py b/py_wake/tests/test_wind_farm_models/test_enginering_wind_farm_model.py
index d17089a3d..932bdcda0 100644
--- a/py_wake/tests/test_wind_farm_models/test_enginering_wind_farm_model.py
+++ b/py_wake/tests/test_wind_farm_models/test_enginering_wind_farm_model.py
@@ -364,7 +364,7 @@ def test_time_series_dates():
     d = np.load(os.path.dirname(examples.__file__) + "/data/time_series.npz")
     wd, ws, ws_std = [d[k][:6 * 24] for k in ['wd', 'ws', 'ws_std']]
     ti = np.minimum(ws_std / ws, .5)
-    t = pd.date_range("2000-01-01", freq="10T", periods=24 * 6)
+    t = pd.date_range("2000-01-01", freq="10min", periods=24 * 6)
     wt = V80()
     site = Hornsrev1Site()
     site.ds['TI'] = xr.DataArray(ti, [('time', t)])
@@ -380,7 +380,7 @@ def test_time_series_dates():
 def test_time_series_override_WS():
     d = np.load(os.path.dirname(examples.__file__) + "/data/time_series.npz")
     wd, ws = [d[k][:6 * 24] for k in ['wd', 'ws']]
-    t = pd.date_range("2000-01-01", freq="10T", periods=24 * 6)
+    t = pd.date_range("2000-01-01", freq="10min", periods=24 * 6)
     WS_it = (np.arange(80) / 100)[:, na] + ws[na]
     wt = V80()
     site = Hornsrev1Site()
@@ -395,7 +395,7 @@ def test_time_series_override_WS():
 def test_time_series_override_WD():
     d = np.load(os.path.dirname(examples.__file__) + "/data/time_series.npz")
     wd, ws = [d[k][:6 * 24] for k in ['wd', 'ws']]
-    t = pd.date_range("2000-01-01", freq="10T", periods=24 * 6)
+    t = pd.date_range("2000-01-01", freq="10min", periods=24 * 6)
     WD_it = (np.arange(80) / 100)[:, na] + wd[na]
     wt = V80()
     site = Hornsrev1Site()
@@ -412,7 +412,7 @@ def test_time_series_override_TI():
     d = np.load(os.path.dirname(examples.__file__) + "/data/time_series.npz")
     wd, ws, ws_std = [d[k][:6 * 24] for k in ['wd', 'ws', 'ws_std']]
     ti = np.minimum(ws_std / ws, .5)
-    t = pd.date_range("2000-01-01", freq="10T", periods=24 * 6)
+    t = pd.date_range("2000-01-01", freq="10min", periods=24 * 6)
     wt = V80()
     site = Hornsrev1Site()
     x, y = site.initial_position.T
-- 
GitLab