Coverage for src / remedapy / difference.py: 100%
14 statements
« prev ^ index » next coverage.py v7.13.2, created at 2026-02-02 10:52 +0100
« prev ^ index » next coverage.py v7.13.2, created at 2026-02-02 10:52 +0100
1from collections import Counter
2from collections.abc import Callable, Iterable
3from typing import TypeVar, overload
5T = TypeVar('T')
8@overload
9def difference(
10 data: Iterable[T],
11 other: Iterable[T],
12 /,
13) -> Iterable[T]: ...
16@overload
17def difference(
18 other: Iterable[T],
19 /,
20) -> Callable[[Iterable[T]], Iterable[T]]: ...
23def difference_helper(
24 data: Iterable[T],
25 other: Iterable[T],
26 /,
27) -> Iterable[T]:
28 to_omit = Counter(other)
29 for i in data:
30 if to_omit[i] > 0:
31 to_omit[i] -= 1
32 else:
33 yield i
36def difference(
37 data: Iterable[T],
38 other: Iterable[T] | None = None,
39 /,
40) -> Iterable[T] | Callable[[Iterable[T]], Iterable[T]]:
41 if other is None:
42 return lambda x: difference_helper(x, data) # pyright: ignore[reportUnknownVariableType, reportUnknownArgumentType, reportUnknownLambdaType]
43 return difference_helper(data, other)