Skip to content

Commit 0e1b5d6

Browse files
committed
Add keyword arguments to interp_like instead of kwargs.
1 parent 763aa04 commit 0e1b5d6

File tree

4 files changed

+53
-13
lines changed

4 files changed

+53
-13
lines changed

mikeio/dataset/_dataarray.py

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1232,29 +1232,42 @@ def interp_na(self, axis: str = "time", **kwargs: Any) -> "DataArray":
12321232

12331233
def interp_like(
12341234
self,
1235-
other: "DataArray" | Grid2D | GeometryFM2D | pd.DatetimeIndex,
1235+
other: "DataArray" | Grid2D | GeometryFM2D,
1236+
*,
1237+
extrapolate: bool = True,
1238+
n_nearest: int = 3,
1239+
p: int = 2,
1240+
radius: float | None = None,
12361241
interpolant: tuple[Any, Any] | None = None,
12371242
**kwargs: Any,
12381243
) -> "DataArray":
1239-
"""Interpolate in space (and in time) to other geometry (and time axis).
1244+
"""Interpolate in space to other geometry.
12401245
12411246
Note: currently only supports interpolation from dfsu-2d to
12421247
dfs2 or other dfsu-2d DataArrays
12431248
12441249
Parameters
12451250
----------
1246-
other: Dataset, DataArray, Grid2D, GeometryFM, pd.DatetimeIndex
1251+
other: Dataset, DataArray, Grid2D, GeometryFM
12471252
The target geometry (and time axis) to interpolate to
1253+
n_nearest: int, optional
1254+
Number of nearest elements to use for interpolation
1255+
extrapolate: bool, optional
1256+
allow extrapolation, by default False
1257+
p: int, optional
1258+
power of inverse distance weighting, default=2
1259+
radius: float, optional
1260+
an alternative to extrapolate=False,
1261+
only include elements within radius
12481262
interpolant: tuple, optional
12491263
Reuse pre-calculated index and weights
12501264
**kwargs: Any
1251-
additional kwargs are passed to interpolation method
1265+
deprecated, use interp_time instead
12521266
12531267
Examples
12541268
--------
12551269
>>> dai = da.interp_like(da2)
12561270
>>> dae = da.interp_like(da2, extrapolate=True)
1257-
>>> dat = da.interp_like(da2.time)
12581271
12591272
Returns
12601273
-------
@@ -1268,6 +1281,10 @@ def interp_like(
12681281
)
12691282

12701283
if isinstance(other, pd.DatetimeIndex):
1284+
warnings.warn(
1285+
"Interpolation to a new time axis will not longer be supported by interp_like, use interp_time instead.",
1286+
FutureWarning,
1287+
)
12711288
return self.interp_time(other, **kwargs)
12721289

12731290
if not (isinstance(self.geometry, GeometryFM2D) and self.geometry.is_2d):
@@ -1290,7 +1307,9 @@ def interp_like(
12901307
raise NotImplementedError()
12911308

12921309
if interpolant is None:
1293-
elem_ids, weights = self.geometry.get_2d_interpolant(xy, **kwargs)
1310+
elem_ids, weights = self.geometry.get_2d_interpolant(
1311+
xy, n_nearest=n_nearest, extrapolate=extrapolate, p=p, radius=radius
1312+
)
12941313
else:
12951314
elem_ids, weights = interpolant
12961315

mikeio/dataset/_dataset.py

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1159,19 +1159,33 @@ def interp_na(self, axis: str = "time", **kwargs: Any) -> "Dataset":
11591159
def interp_like(
11601160
self,
11611161
other: "Dataset" | DataArray | Grid2D | GeometryFM2D | pd.DatetimeIndex,
1162+
*,
1163+
extrapolate: bool = True,
1164+
n_nearest: int = 3,
1165+
p: int = 2,
1166+
radius: float | None = None,
11621167
**kwargs: Any,
11631168
) -> "Dataset":
1164-
"""Interpolate in space (and in time) to other geometry (and time axis).
1169+
"""Interpolate in space to other geometry.
11651170
11661171
Note: currently only supports interpolation from dfsu-2d to
11671172
dfs2 or other dfsu-2d Datasets
11681173
11691174
Parameters
11701175
----------
1171-
other: Dataset, DataArray, Grid2D, GeometryFM, pd.DatetimeIndex
1176+
other: Dataset, DataArray, Grid2D, GeometryFM
11721177
Dataset, DataArray, Grid2D or GeometryFM2D to interpolate to
1178+
n_nearest: int, optional
1179+
Number of nearest elements to use for interpolation
1180+
extrapolate: bool, optional
1181+
allow extrapolation, by default False
1182+
p: int, optional
1183+
power of inverse distance weighting, default=2
1184+
radius: float, optional
1185+
an alternative to extrapolate=False,
1186+
only include elements within radius
11731187
**kwargs: Any
1174-
additional kwargs are passed to interpolation method
1188+
deprecated, use interp_time instead
11751189
11761190
Examples
11771191
--------
@@ -1180,7 +1194,6 @@ def interp_like(
11801194
>>> dsi = ds.interp_like(ds2)
11811195
>>> dsi.to_dfs("HD_gridded.dfs2")
11821196
>>> dse = ds.interp_like(ds2, extrapolate=True)
1183-
>>> dst = ds.interp_like(ds2.time)
11841197
11851198
Returns
11861199
-------
@@ -1194,6 +1207,10 @@ def interp_like(
11941207
)
11951208

11961209
if isinstance(other, pd.DatetimeIndex):
1210+
warnings.warn(
1211+
"Interpolation to a new time axis will not longer be supported by interp_like, use interp_time instead.",
1212+
FutureWarning,
1213+
)
11971214
return self.interp_time(other, **kwargs)
11981215

11991216
if hasattr(other, "geometry"):
@@ -1213,7 +1230,9 @@ def interp_like(
12131230
else:
12141231
raise NotImplementedError()
12151232

1216-
interpolant = self.geometry.get_2d_interpolant(xy, **kwargs)
1233+
interpolant = self.geometry.get_2d_interpolant(
1234+
xy, n_nearest=n_nearest, extrapolate=extrapolate, p=p, radius=radius
1235+
)
12171236
das = [da.interp_like(geom, interpolant=interpolant) for da in self]
12181237
ds = Dataset(das, validate=False)
12191238

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ dependencies = [
3030
"PyYAML",
3131
"tqdm",
3232
"xarray",
33+
"pre-commit>=4.1.0",
3334
]
3435

3536
authors = [

tests/test_dataarray.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -799,9 +799,10 @@ def test_interp_time(da1):
799799
assert dai.timestep == 1800
800800

801801

802-
def test_interp_like_index(da1):
802+
def test_interp_like_index_deprecated(da1):
803803
da = mikeio.read("tests/testdata/HD2D.dfsu")[0]
804-
dai = da.interp_like(da.time)
804+
with pytest.warns(FutureWarning):
805+
dai = da.interp_like(da.time)
805806
assert any(dai.time == da.time)
806807

807808

0 commit comments

Comments
 (0)