Skip to content

Commit 9f5b9fd

Browse files
committed
Add test
1 parent 65d500c commit 9f5b9fd

File tree

1 file changed

+25
-5
lines changed

1 file changed

+25
-5
lines changed

xarray/tests/test_groupby.py

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,8 @@
1212

1313
import xarray as xr
1414
from xarray import DataArray, Dataset, Variable
15-
from xarray.core.groupby import (
16-
BinGrouper,
17-
UniqueGrouper,
18-
_consolidate_slices,
19-
)
15+
from xarray.core.groupby import _consolidate_slices
16+
from xarray.core.groupers import BinGrouper, EncodedGroups, Grouper, UniqueGrouper
2017
from xarray.core.types import InterpOptions
2118
from xarray.tests import (
2219
InaccessibleArray,
@@ -2627,3 +2624,26 @@ def test_default_flox_method() -> None:
26272624
assert kwargs["method"] == "cohorts"
26282625
else:
26292626
assert "method" not in kwargs
2627+
2628+
2629+
def test_custom_grouper() -> None:
2630+
class YearGrouper(Grouper):
2631+
"""
2632+
An example re-implementation of ``.groupby("time.year")``.
2633+
"""
2634+
2635+
def factorize(self, group) -> EncodedGroups:
2636+
assert np.issubdtype(group.dtype, np.datetime64)
2637+
year = group.dt.year.data
2638+
codes_, uniques = pd.factorize(year)
2639+
codes = group.copy(data=codes_).rename("year")
2640+
return EncodedGroups(codes=codes, full_index=pd.Index(uniques))
2641+
2642+
ds = xr.DataArray(
2643+
dims="time",
2644+
data=np.arange(20),
2645+
coords={"time": ("time", pd.date_range("2000-01-01", freq="3ME", periods=20))},
2646+
)
2647+
actual = ds.groupby(time=YearGrouper()).mean()
2648+
expected = ds.groupby("time.year").mean()
2649+
assert_identical(expected, actual)

0 commit comments

Comments
 (0)