From dadd73ad32c0ac1466929f0bb2c21e6ef2725322 Mon Sep 17 00:00:00 2001 From: timotheyca Date: Sun, 11 Sep 2022 16:40:19 +0300 Subject: [PATCH] metadata separation --- .../trees/binary/core/binarybalancing.py | 31 +++++----------- .../trees/binary/core/binarymetadata.py | 36 +++++++++++++++++++ 2 files changed, 44 insertions(+), 23 deletions(-) create mode 100644 rainbowadn/collection/trees/binary/core/binarymetadata.py diff --git a/rainbowadn/collection/trees/binary/core/binarybalancing.py b/rainbowadn/collection/trees/binary/core/binarybalancing.py index 4203800..f8a90d4 100644 --- a/rainbowadn/collection/trees/binary/core/binarybalancing.py +++ b/rainbowadn/collection/trees/binary/core/binarybalancing.py @@ -1,8 +1,9 @@ +import abc from typing import Generic, TypeVar from rainbowadn.collection.comparison import * from rainbowadn.core import * -from .binarycreation import * +from .binarymetadata import * from .binaryprotocolized import * __all__ = ('BinaryBalancing',) @@ -12,32 +13,16 @@ ActiveKeyType = TypeVar('ActiveKeyType') MetaDataType = TypeVar('MetaDataType') -class BinaryBalancing(Generic[ActiveKeyType, MetaDataType, TreeType]): +class BinaryBalancing( + BinaryMetadata[ActiveKeyType, MetaDataType, TreeType], + Generic[ActiveKeyType, MetaDataType, TreeType], + abc.ABC +): def __init__(self, comparator_: Comparator[ActiveKeyType], empty_metadata: HashPoint[MetaDataType]): assert isinstance(comparator_, Comparator) assert isinstance(empty_metadata, HashPoint) self.comparator = comparator_ - self.empty_metadata = empty_metadata - - async def metadata( - self, - treel: TreeType, - treer: TreeType, - key: HashPoint[ActiveKeyType], - creation: BinaryCreation[ActiveKeyType, MetaDataType, TreeType], - ) -> HashPoint[MetaDataType]: - raise NotImplementedError - - async def verify_metadata( - self, - treel: TreeType, - treer: TreeType, - key: HashPoint[ActiveKeyType], - metadata: HashPoint[MetaDataType], - creation: BinaryCreation[ActiveKeyType, MetaDataType, TreeType], - ) -> bool: - assert_eq(await self.metadata(treel, treer, key, creation), metadata) - return True + super().__init__(empty_metadata) async def balance( self, diff --git a/rainbowadn/collection/trees/binary/core/binarymetadata.py b/rainbowadn/collection/trees/binary/core/binarymetadata.py new file mode 100644 index 0000000..18aa86f --- /dev/null +++ b/rainbowadn/collection/trees/binary/core/binarymetadata.py @@ -0,0 +1,36 @@ +from typing import Generic, TypeVar + +from rainbowadn.core import * +from .binarycreation import * + +__all__ = ('BinaryMetadata',) + +TreeType = TypeVar('TreeType') +ActiveKeyType = TypeVar('ActiveKeyType') +MetaDataType = TypeVar('MetaDataType') + + +class BinaryMetadata(Generic[ActiveKeyType, MetaDataType, TreeType]): + def __init__(self, empty_metadata: HashPoint[MetaDataType]): + assert isinstance(empty_metadata, HashPoint) + self.empty_metadata = empty_metadata + + async def metadata( + self, + treel: TreeType, + treer: TreeType, + key: HashPoint[ActiveKeyType], + creation: BinaryCreation[ActiveKeyType, MetaDataType, TreeType], + ) -> HashPoint[MetaDataType]: + raise NotImplementedError + + async def verify_metadata( + self, + treel: TreeType, + treer: TreeType, + key: HashPoint[ActiveKeyType], + metadata: HashPoint[MetaDataType], + creation: BinaryCreation[ActiveKeyType, MetaDataType, TreeType], + ) -> bool: + assert_eq(await self.metadata(treel, treer, key, creation), metadata) + return True