@cache_readonly
def group_info(self) -> tuple[(npt.NDArray[np.intp], npt.NDArray[np.intp], int)]:
    (comp_ids, obs_group_ids) = self._get_compressed_codes()
    ngroups = len(obs_group_ids)
    comp_ids = ensure_platform_int(comp_ids)
    return (comp_ids, obs_group_ids, ngroups)
@cache_readonly
def group_info(self) -> tuple[(npt.NDArray[np.intp], npt.NDArray[np.intp], int)]:
    (comp_ids, obs_group_ids) = self._get_compressed_codes()
    ngroups = len(obs_group_ids)
    comp_ids = ensure_platform_int(comp_ids)
    return (comp_ids, obs_group_ids, ngroups)