(s:str)
| 38 | def time_to_str(t:float, w=8) -> str: return next((f"{t * d:{w}.2f}{pr}" for d,pr in [(1, "s "),(1e3, "ms")] if t > 10/d), f"{t * 1e6:{w}.2f}us") |
| 39 | def size_to_str(s:int) -> str: return next((f"{s / d:.2f} {pr}" for d,pr in [(1<<30, "GB"),(1<<20, "MB"),(1<<10, "KB")] if s >= d), f"{s} B") |
| 40 | def ansistrip(s:str): return re.sub('\x1b\\[(K|.*?m)', '', s) |
| 41 | def ansilen(s:str): return len(ansistrip(s)) |
| 42 | def make_tuple(x:int|Sequence[int], cnt:int) -> tuple[int, ...]: return (x,)*cnt if isinstance(x, int) else tuple(x) |
| 43 | def flatten(l:Iterable[Iterable[T]]): return [item for sublist in l for item in sublist] |
searching dependent graphs…