[docs]defslice_generator(start:int,end:int,size:int)->Iterator[Tuple[int,int]]:"""Returns slice indices iterator from start to end."""foriinrange(start,end,size):left=iright=min(i+size,end)yieldleft,right
[docs]defmap_dict_values(fn:Callable,d:dict)->dict:"""Maps dictionary values using given function."""return{k:fn(v)fork,vind.items()}
[docs]deflist_zip(*arglists)->list:"""Transforms given columns into list of rows."""iflen(arglists)==0:return[]lengths=[len(arglist)forarglistinarglists]ifnotall_equal(lengths):raiseValueError(f"unequal list lengths: {lengths}")returnlist(zip(*arglists))
[docs]defall_equal(values:list)->bool:"""Checks if all values in list are equal to each other."""ifnotvalues:returnTruefirst_val=values[0]forvalinvalues:ifval!=first_val:returnFalsereturnTrue