Skip to content

Commit 9c25bdd

Browse files
bpatel2107pre-commit-ci[bot]keewis
authored
Pass kwargs to sel (#304)
* Pass kwargs to sel * Add test for sel with method=nearest * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * changelog * stylistical changes --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Justus Magin <[email protected]>
1 parent b44dfeb commit 9c25bdd

File tree

3 files changed

+40
-3
lines changed

3 files changed

+40
-3
lines changed

docs/whats-new.rst

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ What's new
44
==========
55
0.5.1 (*unreleased*)
66
--------------------
7-
7+
- Pass ``sel`` options to the wrapped array (:pull:`304`, :issue:`303`)
8+
By `Bhavin Patel <https://github.com/bpatel2107>`_.
89

910
0.5 (09 Jun 2025)
1011
------------------

pint_xarray/index.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,11 @@ def stack(cls, variables, dim):
5252
def unstack(self):
5353
raise NotImplementedError()
5454

55-
def sel(self, labels):
55+
def sel(self, labels, **options):
5656
converted_labels = conversion.convert_indexer_units(labels, self.units)
5757
stripped_labels = conversion.strip_indexer_units(converted_labels)
5858

59-
return self.index.sel(stripped_labels)
59+
return self.index.sel(stripped_labels, **options)
6060

6161
def isel(self, indexers):
6262
subset = self.index.isel(indexers)

pint_xarray/tests/test_index.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,42 @@ def test_sel(labels, expected):
104104
)
105105

106106

107+
@pytest.mark.parametrize(
108+
["labels", "expected"],
109+
(
110+
(
111+
{"x": ureg.Quantity(1.1, "m")},
112+
IndexSelResult(dim_indexers={"x": np.array(0)}),
113+
),
114+
(
115+
{"x": ureg.Quantity(3100, "mm")},
116+
IndexSelResult(dim_indexers={"x": np.array(2)}),
117+
),
118+
(
119+
{"x": ureg.Quantity(0.0021, "km")},
120+
IndexSelResult(dim_indexers={"x": np.array(1)}),
121+
),
122+
(
123+
{"x": ureg.Quantity([0.0021, 0.0041], "km")},
124+
IndexSelResult(dim_indexers={"x": np.array([1, 3])}),
125+
),
126+
),
127+
)
128+
def test_sel_nearest(labels, expected):
129+
index = PintIndex(
130+
index=PandasIndex(pd.Index([1, 2, 3, 4]), dim="x"), units={"x": ureg.Unit("m")}
131+
)
132+
133+
actual = index.sel(labels, method="nearest")
134+
135+
assert isinstance(actual, IndexSelResult)
136+
assert actual.dim_indexers.keys() == expected.dim_indexers.keys()
137+
assert all(
138+
indexer_equal(actual.dim_indexers[k], expected.dim_indexers[k])
139+
for k in expected.dim_indexers.keys()
140+
)
141+
142+
107143
@pytest.mark.parametrize(
108144
"indexers",
109145
({"y": 0}, {"y": [1, 2]}, {"y": slice(0, None, 2)}, {"y": xr.Variable("y", [1])}),

0 commit comments

Comments
 (0)