Coverage for src / remedapy / reduce.py: 100%
15 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.abc import Callable, Iterable
2from typing import TypeVar, cast, overload
4T = TypeVar('T')
5U = TypeVar('U')
8@overload
9def reduce(data: Iterable[T], callbackfn: Callable[[U, T], U], initial_value: U, /) -> U: ...
12@overload
13def reduce(callbackfn: Callable[[U, T], U], initial_value: U, /) -> Callable[[Iterable[T]], U]: ...
16def reduce(
17 param1: Iterable[T] | Callable[[U, T], U],
18 param2: Callable[[U, T], U] | U,
19 param3: U | None = None,
20 /,
21) -> U | Callable[[Iterable[T]], U]:
22 if param3 is None:
23 callbackfn = cast(Callable[[U, T], U], param1)
24 initial_value = cast(U, param2)
25 return lambda x: reduce(x, callbackfn, initial_value)
26 data = cast(Iterable[T], param1)
27 callbackfn = cast(Callable[[U, T], U], param2)
28 initial_value = param3
29 for item in data:
30 initial_value = callbackfn(initial_value, item)
31 return initial_value