From 0462c22e03d40c48f74705a7f9d4cbe4e2c366e8 Mon Sep 17 00:00:00 2001 From: Wyatt Sieminski Date: Fri, 23 Oct 2026 15:01:18 +0000 Subject: [PATCH 1/5] fixed _get_offsets_dictionary --- src/parcels/interpolators/_xinterpolators.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/parcels/interpolators/_xinterpolators.py b/src/parcels/interpolators/_xinterpolators.py index 390a655c5..0d9a7dc4e 100644 --- a/src/parcels/interpolators/_xinterpolators.py +++ b/src/parcels/interpolators/_xinterpolators.py @@ -2,6 +2,7 @@ from __future__ import annotations +from tkinter import Pack from typing import TYPE_CHECKING, Literal import numpy as np @@ -100,10 +101,10 @@ def _get_offsets_dictionary(grid: XGrid) -> dict[ptyping.CfAxisSpatial, Literal[ offsets = {} metadata = grid.sgrid_metadata for fnp, axis in zip(metadata.face_dimensions, ["X", "Y"], strict=False): - offsets[axis] = 1 if fnp.padding == sgrid.Padding.LOW else 0 + offsets[axis] = 1 if (fnp.padding == sgrid.Padding.LOW or fnp.padding == sgrid.Padding.BOTH) else 0 if metadata.vertical_dimensions is not None: fnp_z = metadata.vertical_dimensions[0] - offsets["Z"] = 1 if fnp_z.padding == sgrid.Padding.LOW else 0 + offsets["Z"] = 1 if (fnp_z.padding == sgrid.Padding.LOW or fnp_z.padding == sgrid.Padding.BOTH) else 0 else: offsets["Z"] = 0 return offsets From 12666c80666fecaabb5e8ed51e7391542b935371 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:03:12 +0000 Subject: [PATCH 2/5] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- src/parcels/interpolators/_xinterpolators.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/parcels/interpolators/_xinterpolators.py b/src/parcels/interpolators/_xinterpolators.py index 0d9a7dc4e..abcc49ee8 100644 --- a/src/parcels/interpolators/_xinterpolators.py +++ b/src/parcels/interpolators/_xinterpolators.py @@ -2,7 +2,6 @@ from __future__ import annotations -from tkinter import Pack from typing import TYPE_CHECKING, Literal import numpy as np From 231e4661b00706e8681abece5cae8a8667c0fd9c Mon Sep 17 00:00:00 2001 From: Wyatt Sieminski Date: Fri, 23 Oct 2026 15:04:04 +0000 Subject: [PATCH 3/5] remove random pyright import --- src/parcels/interpolators/_xinterpolators.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/parcels/interpolators/_xinterpolators.py b/src/parcels/interpolators/_xinterpolators.py index 0d9a7dc4e..abcc49ee8 100644 --- a/src/parcels/interpolators/_xinterpolators.py +++ b/src/parcels/interpolators/_xinterpolators.py @@ -2,7 +2,6 @@ from __future__ import annotations -from tkinter import Pack from typing import TYPE_CHECKING, Literal import numpy as np From 3ca266f7227a12c26a6c7c944203c26a57a28bc5 Mon Sep 17 00:00:00 2001 From: Wyatt Sieminski Date: Mon, 26 Oct 2026 14:14:40 +0000 Subject: [PATCH 4/5] added _get_offsets_dictionary unit test --- tests/test_interpolation.py | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/tests/test_interpolation.py b/tests/test_interpolation.py index 132548dc5..18f2fe7c4 100644 --- a/tests/test_interpolation.py +++ b/tests/test_interpolation.py @@ -11,6 +11,7 @@ StatusCode, Variable, VectorField, + XGrid, particlefile_to_v3_zarr, ) from parcels._core.index_search import _search_time_index @@ -25,7 +26,8 @@ XPartialslip, ) from parcels.interpolators._base import VectorInterpolator -from parcels.interpolators._xinterpolators import _get_corner_data_Agrid +from parcels.interpolators._xinterpolators import (_get_corner_data_Agrid, _get_offsets_dictionary) +from parcels._sgrid.core import Padding from parcels.kernels import AdvectionRK4_3D from tests.utils import TEST_DATA @@ -278,6 +280,29 @@ def test_corner_gather_keeps_axes_missing_from_the_mapping(): assert out[0, 0, 0, 0, p] == data.values[ti[p], 0, yi[p], xi[p]] +def test_get_offsets_dictionary(): + ds = simple_UV_dataset() + xgrid = XGrid(ds, mesh=FlatMesh()) + + # verify simple_UV_dataset padding + assert xgrid.sgrid_metadata.face_dimensions[0].padding == Padding.LOW + assert xgrid.sgrid_metadata.vertical_dimensions[0].padding == Padding.BOTH + + offsets = _get_offsets_dictionary(xgrid) + + assert offsets['X'] == 1 + assert offsets['Z'] == 1 + + xgrid.sgrid_metadata.face_dimensions[0].padding = Padding.HIGH + xgrid.sgrid_metadata.face_dimensions[1].padding = Padding.HIGH + xgrid.sgrid_metadata.vertical_dimensions[0].padding = Padding.NONE + + offsets = _get_offsets_dictionary(xgrid) + + assert offsets['X'] == 0 + assert offsets['Z'] == 0 + + class XNearest_Velocity(VectorInterpolator): # noqa: N801 """Nearest-Neighbour interpolation on a regular grid for VectorFields of velocity.""" From b73be60c9fa4d6d5e8f7fea6006433737f411f66 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 26 Oct 2026 14:15:12 +0000 Subject: [PATCH 5/5] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- tests/test_interpolation.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/test_interpolation.py b/tests/test_interpolation.py index 18f2fe7c4..5c409c7f6 100644 --- a/tests/test_interpolation.py +++ b/tests/test_interpolation.py @@ -17,6 +17,7 @@ from parcels._core.index_search import _search_time_index from parcels._core.mesh import FlatMesh, SphericalMesh from parcels._datasets.structured.generated import simple_UV_dataset +from parcels._sgrid.core import Padding from parcels.interpolators import ( CGrid_Velocity, XFreeslip, @@ -26,8 +27,7 @@ XPartialslip, ) from parcels.interpolators._base import VectorInterpolator -from parcels.interpolators._xinterpolators import (_get_corner_data_Agrid, _get_offsets_dictionary) -from parcels._sgrid.core import Padding +from parcels.interpolators._xinterpolators import _get_corner_data_Agrid, _get_offsets_dictionary from parcels.kernels import AdvectionRK4_3D from tests.utils import TEST_DATA @@ -290,8 +290,8 @@ def test_get_offsets_dictionary(): offsets = _get_offsets_dictionary(xgrid) - assert offsets['X'] == 1 - assert offsets['Z'] == 1 + assert offsets["X"] == 1 + assert offsets["Z"] == 1 xgrid.sgrid_metadata.face_dimensions[0].padding = Padding.HIGH xgrid.sgrid_metadata.face_dimensions[1].padding = Padding.HIGH @@ -299,8 +299,8 @@ def test_get_offsets_dictionary(): offsets = _get_offsets_dictionary(xgrid) - assert offsets['X'] == 0 - assert offsets['Z'] == 0 + assert offsets["X"] == 0 + assert offsets["Z"] == 0 class XNearest_Velocity(VectorInterpolator): # noqa: N801