27 lines
745 B
Python
27 lines
745 B
Python
from typing import Generic, TypeVar
|
|
|
|
from rainbowadn.core import *
|
|
from rainbowadn.flow.core import *
|
|
|
|
from ._verification import *
|
|
|
|
__all__ = ('CompositionVerification',)
|
|
|
|
Verified = TypeVar('Verified', contravariant=True)
|
|
Middle = TypeVar('Middle')
|
|
|
|
|
|
class CompositionVerification(
|
|
Verification[Verified],
|
|
Generic[Verified, Middle]
|
|
):
|
|
def __init__(self, domain: Mapper[Verified, Middle], codomain: Verification[Middle]):
|
|
assert isinstance(domain, Mapper)
|
|
assert isinstance(codomain, Verification)
|
|
self.domain = domain
|
|
self.codomain = codomain
|
|
|
|
async def verify(self, element: Verified) -> bool:
|
|
assert_true(await self.codomain.verify(await self.domain.map(element)))
|
|
return True
|