15 lines
426 B
Python
15 lines
426 B
Python
from itertools import takewhile, starmap, islice, repeat
|
|
from operator import truth
|
|
|
|
from funcy import iterate
|
|
|
|
|
|
def chunk_iterable(iterable, chunk_size):
|
|
return takewhile(truth, map(tuple, starmap(islice, repeat((iter(iterable), chunk_size)))))
|
|
|
|
|
|
def until_convergence(func, cond, *args, **kwargs):
|
|
for a, b in chunk_iterable(iterate(func, *args, **kwargs), chunk_size=2):
|
|
if cond(a, b):
|
|
return a
|