Source code for stdlibx.itertools._iterable

 1from __future__ import annotations
 2
 3import functools
 4from typing import TYPE_CHECKING, Callable, Iterable, TypeVar, Union
 5
 6if TYPE_CHECKING:
 7    from stdlibx.itertools._types import Operation
 8
 9T = TypeVar("T")
10U = TypeVar("U")
11
12
[docs] 13def map_( 14 func: Callable[[T], U], /, *, lazy: bool = True 15) -> Operation[Iterable[T], Iterable[U]]: 16 def _execute(iterable: Iterable[T]) -> Iterable[U]: 17 if lazy: 18 return map(func, iterable) 19 return [func(a) for a in iterable] 20 21 return _execute
22 23
[docs] 24def filter_( 25 func: Callable[[T], bool], /, *, lazy: bool = True 26) -> Operation[Iterable[T], Iterable[T]]: 27 def _execute(iterable: Iterable[T]) -> Iterable[T]: 28 if lazy: 29 return filter(func, iterable) 30 return [a for a in iterable if func(a)] 31 32 return _execute
33 34
[docs] 35def filter_none( 36 *, lazy: bool = True 37) -> Operation[Iterable[Union[T, None]], Iterable[T]]: 38 def _execute(iterable: Iterable[Union[T, None]]) -> Iterable[T]: 39 if lazy: 40 return (a for a in iterable if a is not None) 41 return [a for a in iterable if a is not None] 42 43 return _execute
44 45
[docs] 46def reduce(initial: T, func: Callable[[T, U], T]) -> Operation[Iterable[U], T]: 47 def _execute(iterable: Iterable[U]) -> T: 48 return functools.reduce(func, iterable, initial) 49 50 return _execute
51 52
[docs] 53def collect() -> Operation[Iterable[T], list[T]]: 54 return reduce([], lambda a, b: a + [b])