2
2
3
3
import numpy as np
4
4
import pandas as pd
5
- from xarray .groupers import EncodedGroups , UniqueGrouper
5
+ from xarray import Variable
6
+ from xarray .groupers import EncodedGroups , Grouper , UniqueGrouper
6
7
7
8
8
9
@dataclass
9
- class FlagGrouper (UniqueGrouper ):
10
+ class FlagGrouper (Grouper ):
10
11
"""
11
12
Grouper object that allows convenient categorical grouping by a CF flag variable.
12
13
@@ -23,18 +24,24 @@ def factorize(self, group) -> EncodedGroups:
23
24
values = np .array (group .attrs ["flag_values" ])
24
25
full_index = pd .Index (group .attrs ["flag_meanings" ].split (" " ))
25
26
26
- self . labels = values
27
+ grouper = UniqueGrouper ( labels = values )
27
28
28
29
# TODO: we could optimize here, since `group` is already factorized,
29
30
# but there are subtleties. For example, the attrs must be up to date,
30
31
# any value that is not in flag_values will cause an error, etc.
31
- ret = super () .factorize (group )
32
+ ret = grouper .factorize (group )
32
33
33
34
ret .codes .attrs .pop ("flag_values" )
34
35
ret .codes .attrs .pop ("flag_meanings" )
35
36
36
37
return EncodedGroups (
37
38
codes = ret .codes ,
38
39
full_index = full_index ,
40
+ unique_coord = Variable (
41
+ dims = ret .codes .name , data = np .array (full_index ), attrs = ret .codes .attrs
42
+ ),
39
43
group_indices = ret .group_indices ,
40
44
)
45
+
46
+ def reset (self ):
47
+ raise NotImplementedError ()
0 commit comments