rainbowadn/rainbowadn/flow/core/_mapreducer.py
2022-07-11 05:21:20 +03:00

25 lines
720 B
Python

from typing import Generic, TypeVar
from ._mapper import *
from ._mapreduce import *
from ._reduce import *
from ._reducer import *
__all__ = ('MapReducer',)
Element = TypeVar('Element')
Mapped = TypeVar('Mapped')
Out = TypeVar('Out')
class MapReducer(Reducer[Mapped, Out], Generic[Mapped, Out, Element]):
def __init__(self, mapper: Mapper[Element, Mapped], reducer: Reducer[Element, Out]):
assert isinstance(mapper, Mapper)
assert isinstance(reducer, Reducer)
self.mapper = mapper
self.reducer = reducer
async def reduce(self, reduce: Reduce[Mapped, Out]) -> Out:
assert isinstance(reduce, Reduce)
return self.reducer.reduce(MapReduce(self.mapper, reduce))