def METHOD_NAME(
    cls,
    indices,
    num_tokens_vec,
    max_tokens,
    max_sentences,
    bsz_mult,
):
    """Simple, reliable and slow implementation of batch by size """
    batches = []
    start = 0
    while start < len(indices):
        for end in range(start + 1, len(indices) + 1):
            max_val = max(num_tokens_vec[pos] for pos in range(start, end))
            sent_count = end - start
            num_tokens = max_val * sent_count
            overflow = num_tokens > max_tokens > 0 or sent_count > max_sentences > 0
            terminate = overflow or end == len(indices)
            if overflow:
                sent_count -= 1
            if terminate:
                if sent_count > bsz_mult:
                    sent_count = sent_count - sent_count % bsz_mult
                batches.append(indices[start : start + sent_count])
                start = start + sent_count
                break
    return batches