(
self,
codes: DataArray,
full_index: pd.Index,
group_indices: GroupIndices | None = None,
unique_coord: Variable | _DummyGroup | None = None,
coords: Coordinates | None = None,
)
| 101 | coords: Coordinates = field(init=False, repr=False) |
| 102 | |
| 103 | def __init__( |
| 104 | self, |
| 105 | codes: DataArray, |
| 106 | full_index: pd.Index, |
| 107 | group_indices: GroupIndices | None = None, |
| 108 | unique_coord: Variable | _DummyGroup | None = None, |
| 109 | coords: Coordinates | None = None, |
| 110 | ): |
| 111 | from xarray.core.groupby import _codes_to_group_indices |
| 112 | |
| 113 | assert isinstance(codes, DataArray) |
| 114 | if codes.name is None: |
| 115 | raise ValueError("Please set a name on the array you are grouping by.") |
| 116 | self.codes = codes |
| 117 | assert isinstance(full_index, pd.Index) |
| 118 | self.full_index = full_index |
| 119 | |
| 120 | if group_indices is None: |
| 121 | if not is_chunked_array(codes.data): |
| 122 | self.group_indices = tuple( |
| 123 | g |
| 124 | for g in _codes_to_group_indices( |
| 125 | codes.data.ravel(), len(full_index) |
| 126 | ) |
| 127 | if g |
| 128 | ) |
| 129 | else: |
| 130 | # We will not use this when grouping by a chunked array |
| 131 | self.group_indices = tuple() |
| 132 | else: |
| 133 | self.group_indices = group_indices |
| 134 | |
| 135 | if unique_coord is None: |
| 136 | unique_codes = np.sort(pd.unique(codes.data)) |
| 137 | # Skip the -1 sentinel |
| 138 | unique_codes = unique_codes[unique_codes >= 0] |
| 139 | unique_values = full_index[unique_codes] |
| 140 | self.unique_coord = Variable( |
| 141 | dims=codes.name, data=unique_values, attrs=codes.attrs |
| 142 | ) |
| 143 | else: |
| 144 | self.unique_coord = unique_coord |
| 145 | |
| 146 | if coords is None: |
| 147 | assert not isinstance(self.unique_coord, _DummyGroup) |
| 148 | self.coords = coordinates_from_variable(self.unique_coord) |
| 149 | else: |
| 150 | self.coords = coords |
| 151 | |
| 152 | |
| 153 | class Grouper(ABC): |
nothing calls this directly
no test coverage detected