summarize_from_feedback/utils/even_more_itertools.py (13 lines of code) (raw):

from summarize_from_feedback.model_layout import ModelLayout def distribute(iterable, layout: ModelLayout): """ Of each group of layout.n_replicas successive items from the iterable, pick the one with index `layout.replica_idx`. Makes sure that the underlying iterator is advanced at the same pace no matter what replica_idx is. """ it = iter(iterable) try: while True: for i in range(layout.replica_idx): next(it) ret = next(it) for i in range(layout.n_replicas - layout.replica_idx - 1): next(it) yield ret except StopIteration: return