Coverage for src/extratools_core/printtools.py: 0%

20 statements  

« prev     ^ index     » next       coverage.py v7.8.0, created at 2025-05-15 04:12 -0700

1from collections.abc import Callable, Iterable 

2from io import StringIO 

3from typing import cast 

4 

5from toolz import sliding_window 

6 

7from .typing import Comparable 

8 

9 

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) 

17 

18 local_key: Callable[[T], Comparable] = default_key if key is None else key 

19 

20 s = StringIO() 

21 

22 first: bool = True 

23 for prev, curr in sliding_window(2, seq): 

24 if local_key(prev) > local_key(curr): 

25 raise ValueError 

26 

27 if first: 

28 s.write(repr(prev)) 

29 first = False 

30 

31 s.write(" == " if local_key(prev) == local_key(curr) else " < ") 

32 s.write(repr(curr)) 

33 

34 return s.getvalue()