Coverage for src/extratools_core/printtools.py: 0%
20 statements
« prev ^ index » next coverage.py v7.8.1, created at 2025-06-11 20:59 -0700
« prev ^ index » next coverage.py v7.8.1, created at 2025-06-11 20:59 -0700
1from collections.abc import Callable, Iterable
2from io import StringIO
3from typing import cast
5from toolz import sliding_window
7from .typing import Comparable
10def sorted_to_str[T](
11 seq: Iterable[T],
12 *,
13 key: Callable[[T], Comparable] | None = None,
14) -> str:
15 def default_key(v: T) -> Comparable:
16 return cast("Comparable", v)
18 local_key: Callable[[T], Comparable] = default_key if key is None else key
20 s = StringIO()
22 first: bool = True
23 for prev, curr in sliding_window(2, seq):
24 if local_key(prev) > local_key(curr):
25 raise ValueError
27 if first:
28 s.write(repr(prev))
29 first = False
31 s.write(" == " if local_key(prev) == local_key(curr) else " < ")
32 s.write(repr(curr))
34 return s.getvalue()