Using internal ArrayKit utilities, and avoiding the usage of Python objects where possible, lets implement transition_slices_from_group as CPythhon function in ArrayKit.
def _slices_from_transitions(
transitions: tp.Iterator[int], size: int
) -> tp.Iterator[slice]:
start = 0
for t in transitions:
yield slice(start, t)
start = t
if start < size:
yield slice(start, None)
def transition_slices_from_group(group: np.ndarray) -> tuple[tp.Iterator[slice], bool]:
if group.ndim == 2:
group_to_tuple = True
if group.dtype == DTYPE_OBJECT:
# NOTE: cannot get view of object; use string
consolidated = view_2d_as_1d(group.astype(str))
else:
consolidated = view_2d_as_1d(group)
transitions = nonzero_1d(consolidated != roll_1d(consolidated, 1))[1:]
else:
group_to_tuple = False
transitions = nonzero_1d(group != roll_1d(group, 1))[1:]
return _slices_from_transitions(transitions, len(group)), group_to_tuple # type: ignor
See comment: static-frame/static-frame#1078 (comment)
Using internal ArrayKit utilities, and avoiding the usage of Python objects where possible, lets implement
transition_slices_from_groupas CPythhon function in ArrayKit.See comment: static-frame/static-frame#1078 (comment)