1from typing import Callable, Optional
2
3from rx import operators as ops
4from rx.core import Observable, pipe
5from rx.core.typing import Mapper
6
7
8def _sum(key_mapper: Optional[Mapper] = None) -> Callable[[Observable], Observable]:
9    if key_mapper:
10        return pipe(
11            ops.map(key_mapper),
12            ops.sum()
13        )
14
15    return ops.reduce(seed=0, accumulator=lambda prev, curr: prev + curr)
16