25 lines
720 B
Python
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))
|