diff --git a/rainbowadn/chain/blockcollectioninterface.py b/rainbowadn/chain/blockcollectioninterface.py index d47b1a9..47cace3 100644 --- a/rainbowadn/chain/blockcollectioninterface.py +++ b/rainbowadn/chain/blockcollectioninterface.py @@ -1,10 +1,10 @@ from typing import Generic, TypeVar -from rainbowadn.data.collection.collection_interface.collectioninterface import CollectionInterface from rainbowadn.core.hashpoint import HashPoint from rainbowadn.core.nullability.null import Null from rainbowadn.core.nullability.nullablereference import NullableReference from rainbowadn.core.rainbow_factory import RainbowFactory +from rainbowadn.data.collection.collection_interface.collectioninterface import CollectionInterface __all__ = ('BlockCollectionInterface',) diff --git a/rainbowadn/data/collection/keymetadata.py b/rainbowadn/data/collection/keymetadata.py index 82bafe2..a531a88 100644 --- a/rainbowadn/data/collection/keymetadata.py +++ b/rainbowadn/data/collection/keymetadata.py @@ -1,11 +1,11 @@ from typing import Generic, Iterable, TypeVar -from rainbowadn.data.collection.keyed import Keyed from rainbowadn.core.hash_point_format import hash_point_format, tabulate from rainbowadn.core.hashpoint import HashPoint from rainbowadn.core.hashresolver import HashResolver from rainbowadn.core.rainbow_factory import RainbowFactory from rainbowadn.core.resolverorigin import ResolverOrigin +from rainbowadn.data.collection.keyed import Keyed __all__ = ('KeyMetadata', 'KeyMetadataFactory',) diff --git a/rainbowadn/data/collection/keyvalue.py b/rainbowadn/data/collection/keyvalue.py index d61423f..94763a1 100644 --- a/rainbowadn/data/collection/keyvalue.py +++ b/rainbowadn/data/collection/keyvalue.py @@ -1,10 +1,10 @@ from typing import Generic, Iterable, TypeVar -from rainbowadn.data.collection.keyed import Keyed from rainbowadn.core.hashpoint import HashPoint from rainbowadn.core.hashresolver import HashResolver from rainbowadn.core.rainbow_factory import RainbowFactory from rainbowadn.core.resolverorigin import ResolverOrigin +from rainbowadn.data.collection.keyed import Keyed __all__ = ('KeyValue', 'KeyValueFactory',) diff --git a/rainbowadn/data/collection/trees/binary/actions/binarytreeaction.py b/rainbowadn/data/collection/trees/binary/actions/binarytreeaction.py index 602177c..dd048eb 100644 --- a/rainbowadn/data/collection/trees/binary/actions/binarytreeaction.py +++ b/rainbowadn/data/collection/trees/binary/actions/binarytreeaction.py @@ -20,7 +20,7 @@ class BinaryTreeAction(Generic[ActiveKeyType, MetaDataType, TreeType, ActionType if (split := protocol.split(tree)) is None: return self.on_null(protocol, tree) else: - return self.on_split(BinaryTreeCase(protocol, split)) + return self.on_split(BinaryTreeCase(protocol, split, tree)) def on_null( self, diff --git a/rainbowadn/data/collection/trees/binary/actions/compareaction.py b/rainbowadn/data/collection/trees/binary/actions/compareaction.py index 897e01b..67ed454 100644 --- a/rainbowadn/data/collection/trees/binary/actions/compareaction.py +++ b/rainbowadn/data/collection/trees/binary/actions/compareaction.py @@ -1,10 +1,10 @@ import abc from typing import Generic, TypeVar +from rainbowadn.core.hashpoint import HashPoint from rainbowadn.data.collection.trees.binary.actions.binarytreeaction import BinaryTreeAction from rainbowadn.data.collection.trees.binary.binarytreecase import BinaryTreeCase from rainbowadn.data.collection.trees.comparison.comparator import Comparison, Equal, Left, Right -from rainbowadn.core.hashpoint import HashPoint __all__ = ('CompareAction',) diff --git a/rainbowadn/data/collection/trees/binary/actions/symmetric.py b/rainbowadn/data/collection/trees/binary/actions/symmetric.py new file mode 100644 index 0000000..0aa1463 --- /dev/null +++ b/rainbowadn/data/collection/trees/binary/actions/symmetric.py @@ -0,0 +1,87 @@ +from typing import Generic, TypeVar + +from rainbowadn.core.hashpoint import HashPoint +from rainbowadn.data.collection.trees.binary.binarytreecase import BinaryTreeCase +from rainbowadn.data.collection.trees.binary.binarytreesplit import BinaryTreeSplit + +__all__ = ('Symmetric', 'InnerOuter', 'OuterInner',) + +TreeType = TypeVar('TreeType') +ActiveKeyType = TypeVar('ActiveKeyType') +MetaDataType = TypeVar('MetaDataType') + + +class Symmetric( + Generic[ActiveKeyType, MetaDataType, TreeType] +): + def __init__( + self, + case: BinaryTreeCase[ + ActiveKeyType, MetaDataType, TreeType + ] + ): + self.case = case + + def inner( + self, + split: BinaryTreeSplit[ActiveKeyType, MetaDataType, TreeType] + ) -> TreeType: + raise NotImplementedError + + def outer( + self, + split: BinaryTreeSplit[ActiveKeyType, MetaDataType, TreeType] + ) -> TreeType: + raise NotImplementedError + + def tree( + self, + inner: TreeType, + outer: TreeType, + key: HashPoint[ActiveKeyType] + ) -> TreeType: + raise NotImplementedError + + +class InnerOuter(Symmetric): + def inner( + self, + split: BinaryTreeSplit[ActiveKeyType, MetaDataType, TreeType] + ) -> TreeType: + return split.treel + + def outer( + self, + split: BinaryTreeSplit[ActiveKeyType, MetaDataType, TreeType] + ) -> TreeType: + return split.treer + + def tree( + self, + inner: TreeType, + outer: TreeType, + key: HashPoint[ActiveKeyType] + ) -> TreeType: + return self.case.protocol.tree(inner, outer, key) + + +class OuterInner(Symmetric): + def inner( + self, + split: BinaryTreeSplit[ActiveKeyType, MetaDataType, TreeType] + ) -> TreeType: + return split.treer + + def outer( + self, + split: BinaryTreeSplit[ActiveKeyType, MetaDataType, TreeType] + ) -> TreeType: + return split.treel + + def tree( + self, + inner: TreeType, + outer: TreeType, + key: HashPoint[ActiveKeyType] + ) -> TreeType: + return self.case.protocol.tree(outer, inner, key) diff --git a/rainbowadn/data/collection/trees/binary/activebinarytree.py b/rainbowadn/data/collection/trees/binary/activebinarytree.py index 6213c2d..ce66f8e 100644 --- a/rainbowadn/data/collection/trees/binary/activebinarytree.py +++ b/rainbowadn/data/collection/trees/binary/activebinarytree.py @@ -1,5 +1,9 @@ from typing import Generic, Optional, TypeVar +from rainbowadn.core.hashpoint import HashPoint +from rainbowadn.core.nullability.null import Null +from rainbowadn.core.nullability.nullablereference import NullableReference +from rainbowadn.core.rainbow_factory import RainbowFactory from rainbowadn.data.collection.collection_interface.collectioninterface import CollectionInterface from rainbowadn.data.collection.keymetadata import KeyMetadata, KeyMetadataFactory from rainbowadn.data.collection.trees.binary.actions.stdactions import AddAction, ContainsAction, RemoveAction @@ -8,10 +12,6 @@ from rainbowadn.data.collection.trees.binary.binarytree import BinaryTree, Binar from rainbowadn.data.collection.trees.binary.binarytreebalancingprotocol import BinaryTreeBalancingProtocol from rainbowadn.data.collection.trees.binary.binarytreecreationprotocol import BinaryTreeCreationProtocol from rainbowadn.data.collection.trees.binary.binarytreesplit import BinaryTreeSplit -from rainbowadn.core.hashpoint import HashPoint -from rainbowadn.core.nullability.null import Null -from rainbowadn.core.nullability.nullablereference import NullableReference -from rainbowadn.core.rainbow_factory import RainbowFactory __all__ = ('ActiveBinaryTree',) diff --git a/rainbowadn/data/collection/trees/binary/avl.py b/rainbowadn/data/collection/trees/binary/avl.py index 7579891..9c89f0b 100644 --- a/rainbowadn/data/collection/trees/binary/avl.py +++ b/rainbowadn/data/collection/trees/binary/avl.py @@ -1,17 +1,20 @@ -from typing import TypeVar +from typing import Generic, TypeVar -from rainbowadn.data.atomic.integer import Integer -from rainbowadn.data.collection.trees.binary.binarytreebalancingprotocol import BinaryTreeBalancingProtocol -from rainbowadn.data.collection.trees.binary.binarytreecreationprotocol import BinaryTreeCreationProtocol from rainbowadn.core.hashpoint import HashPoint +from rainbowadn.data.atomic.integer import Integer +from rainbowadn.data.collection.trees.binary.actions.binarytreeaction import BinaryTreeAction +from rainbowadn.data.collection.trees.binary.actions.symmetric import InnerOuter, OuterInner, Symmetric +from rainbowadn.data.collection.trees.binary.binarytreebalancingprotocol import BinaryTreeBalancingProtocol +from rainbowadn.data.collection.trees.binary.binarytreecase import BinaryTreeCase +from rainbowadn.data.collection.trees.binary.binarytreecreationprotocol import BinaryTreeCreationProtocol -__all__ = ('AVLBTBP',) +__all__ = ('AVL',) ActiveKeyType = TypeVar('ActiveKeyType') TreeType = TypeVar('TreeType') -class AVLBTBP(BinaryTreeBalancingProtocol[ActiveKeyType, Integer, TreeType]): +class AVL(BinaryTreeBalancingProtocol[ActiveKeyType, Integer, TreeType]): def empty_metadata(self) -> HashPoint[Integer]: return HashPoint.of(Integer(0)) @@ -32,50 +35,76 @@ class AVLBTBP(BinaryTreeBalancingProtocol[ActiveKeyType, Integer, TreeType]): tree: TreeType, protocol: BinaryTreeCreationProtocol[ActiveKeyType, Integer, TreeType] ) -> int: - if (split := protocol.split(tree)) is None: - return 0 - else: - return split.metadata.resolve().integer + return HeightAction().on(protocol, tree) def balance( self, tree: TreeType, protocol: BinaryTreeCreationProtocol[ActiveKeyType, Integer, TreeType] ) -> TreeType: - if (split := protocol.split(tree)) is None: - return tree + return BalanceAction().on(protocol, tree) + + +class HeightAction( + BinaryTreeAction[ActiveKeyType, Integer, TreeType, int], + Generic[ActiveKeyType, TreeType] +): + def on_null( + self, + protocol: BinaryTreeCreationProtocol[ActiveKeyType, Integer, TreeType], + tree: TreeType + ) -> int: + return 0 + + def on_split( + self, + case: BinaryTreeCase[ActiveKeyType, Integer, TreeType] + ) -> int: + return case.split.metadata.resolve().integer + + +class BalanceAction( + BinaryTreeAction[ActiveKeyType, Integer, TreeType, TreeType], + Generic[ActiveKeyType, TreeType] +): + def on_null( + self, + protocol: BinaryTreeCreationProtocol[ActiveKeyType, Integer, TreeType], + tree: TreeType + ) -> TreeType: + return tree + + def on_split( + self, + case: BinaryTreeCase[ActiveKeyType, Integer, TreeType] + ) -> TreeType: + split, protocol = case.split, case.protocol + delta = AVL.height(split.treel, protocol) - AVL.height(split.treer, protocol) + assert isinstance(delta, int) + if delta < -1: + return self.on_symmetric(InnerOuter(case)) + elif delta > 1: + return self.on_symmetric(OuterInner(case)) else: - delta = self.height(split.treel, protocol) - self.height(split.treer, protocol) - assert isinstance(delta, int) - if delta < -1: - assert (splitr := protocol.split(split.treer)) is not None - if self.height(splitr.treel, protocol) > self.height(splitr.treer, protocol): - assert (splitrl := protocol.split(splitr.treel)) is not None - return protocol.tree( - protocol.tree(split.treel, splitrl.treel, split.key), - protocol.tree(splitrl.treer, splitr.treer, splitr.key), - splitrl.key - ) - else: - return protocol.tree( - protocol.tree(split.treel, splitr.treel, split.key), - splitr.treer, - splitr.key - ) - elif delta > 1: - assert (splitl := protocol.split(split.treel)) is not None - if self.height(splitl.treer, protocol) > self.height(splitl.treel, protocol): - assert (splitlr := protocol.split(splitl.treer)) is not None - return protocol.tree( - protocol.tree(splitl.treel, splitlr.treel, splitl.key), - protocol.tree(splitlr.treer, split.treer, split.key), - splitlr.key - ) - else: - return protocol.tree( - splitl.treel, - protocol.tree(splitl.treer, split.treer, split.key), - splitl.key - ) - else: - return tree + return case.tree + + @classmethod + def on_symmetric( + cls, + symmetric: Symmetric[ActiveKeyType, Integer, TreeType] + ) -> TreeType: + protocol, split = symmetric.case.protocol, symmetric.case.split + splito = protocol.fsplit(symmetric.outer(split)) + if AVL.height(symmetric.inner(splito), protocol) > AVL.height(symmetric.outer(splito), protocol): + splitoi = protocol.fsplit(symmetric.inner(splito)) + return symmetric.tree( + symmetric.tree(symmetric.inner(split), symmetric.inner(splitoi), split.key), + symmetric.tree(symmetric.outer(splitoi), symmetric.outer(splito), splito.key), + splitoi.key + ) + else: + return symmetric.tree( + symmetric.tree(symmetric.inner(split), symmetric.inner(splito), split.key), + symmetric.outer(splito), + splito.key + ) diff --git a/rainbowadn/data/collection/trees/binary/balancedtreecreationprotocol.py b/rainbowadn/data/collection/trees/binary/balancedtreecreationprotocol.py index f72e2b4..d7fb820 100644 --- a/rainbowadn/data/collection/trees/binary/balancedtreecreationprotocol.py +++ b/rainbowadn/data/collection/trees/binary/balancedtreecreationprotocol.py @@ -1,9 +1,9 @@ import abc from typing import Generic, TypeVar +from rainbowadn.core.hashpoint import HashPoint from rainbowadn.data.collection.trees.binary.binarytreebalancingprotocol import BinaryTreeBalancingProtocol from rainbowadn.data.collection.trees.binary.binarytreecreationprotocol import BinaryTreeCreationProtocol -from rainbowadn.core.hashpoint import HashPoint __all__ = ('BalancedTreeCreationProtocol',) diff --git a/rainbowadn/data/collection/trees/binary/binarytreebalancingprotocol.py b/rainbowadn/data/collection/trees/binary/binarytreebalancingprotocol.py index eb13ada..aa284f3 100644 --- a/rainbowadn/data/collection/trees/binary/binarytreebalancingprotocol.py +++ b/rainbowadn/data/collection/trees/binary/binarytreebalancingprotocol.py @@ -1,8 +1,8 @@ from typing import Generic, TypeVar +from rainbowadn.core.hashpoint import HashPoint from rainbowadn.data.collection.trees.binary.binarytreecreationprotocol import BinaryTreeCreationProtocol from rainbowadn.data.collection.trees.comparison.comparator import Comparator -from rainbowadn.core.hashpoint import HashPoint __all__ = ('BinaryTreeBalancingProtocol',) diff --git a/rainbowadn/data/collection/trees/binary/binarytreecase.py b/rainbowadn/data/collection/trees/binary/binarytreecase.py index ee19728..8f82592 100644 --- a/rainbowadn/data/collection/trees/binary/binarytreecase.py +++ b/rainbowadn/data/collection/trees/binary/binarytreecase.py @@ -16,7 +16,9 @@ class BinaryTreeCase( def __init__( self, protocol: BinaryTreeCreationProtocol[ActiveKeyType, MetaDataType, TreeType], - split: BinaryTreeSplit[ActiveKeyType, MetaDataType, TreeType] + split: BinaryTreeSplit[ActiveKeyType, MetaDataType, TreeType], + tree: TreeType ): self.protocol = protocol self.split = split + self.tree = tree diff --git a/rainbowadn/data/collection/trees/binary/binarytreecreationprotocol.py b/rainbowadn/data/collection/trees/binary/binarytreecreationprotocol.py index 84f2b6f..2161324 100644 --- a/rainbowadn/data/collection/trees/binary/binarytreecreationprotocol.py +++ b/rainbowadn/data/collection/trees/binary/binarytreecreationprotocol.py @@ -1,8 +1,8 @@ from typing import Generic, Optional, TypeVar +from rainbowadn.core.hashpoint import HashPoint from rainbowadn.data.collection.trees.binary.binarytreesplit import BinaryTreeSplit from rainbowadn.data.collection.trees.comparison.comparator import Comparator -from rainbowadn.core.hashpoint import HashPoint __all__ = ('BinaryTreeCreationProtocol',) @@ -21,5 +21,12 @@ class BinaryTreeCreationProtocol(Generic[ActiveKeyType, MetaDataType, TreeType]) """result of this method is supposed to be used right after the call, therefore all values are resolved""" raise NotImplementedError + def fsplit(self, tree: TreeType) -> BinaryTreeSplit[ + ActiveKeyType, MetaDataType, TreeType + ]: + split = self.split(tree) + assert split is not None + return split + def tree(self, treel: TreeType, treer: TreeType, key: HashPoint[ActiveKeyType]) -> TreeType: raise NotImplementedError diff --git a/rainbowadn/data/collection/trees/comparison/hashcomparator.py b/rainbowadn/data/collection/trees/comparison/hashcomparator.py index 155e568..25aad59 100644 --- a/rainbowadn/data/collection/trees/comparison/hashcomparator.py +++ b/rainbowadn/data/collection/trees/comparison/hashcomparator.py @@ -1,8 +1,8 @@ from typing import Generic, TypeVar +from rainbowadn.core.hashpoint import HashPoint from rainbowadn.data.collection.trees.comparison.comparator import Comparison, Left, Right from rainbowadn.data.collection.trees.comparison.protocolcomparator import ProtocolComparator -from rainbowadn.core.hashpoint import HashPoint __all__ = ('HashComparator',) diff --git a/rainbowadn/data/collection/trees/comparison/keyedcomparator.py b/rainbowadn/data/collection/trees/comparison/keyedcomparator.py index ffe1d07..4cf121c 100644 --- a/rainbowadn/data/collection/trees/comparison/keyedcomparator.py +++ b/rainbowadn/data/collection/trees/comparison/keyedcomparator.py @@ -1,8 +1,8 @@ from typing import Generic, TypeVar +from rainbowadn.core.hashpoint import HashPoint from rainbowadn.data.collection.keyed import Keyed from rainbowadn.data.collection.trees.comparison.comparator import Comparator, Comparison -from rainbowadn.core.hashpoint import HashPoint __all__ = ('KeyedComparator',) diff --git a/rainbowadn/data/collection/trees/comparison/plaincomparator.py b/rainbowadn/data/collection/trees/comparison/plaincomparator.py index c4fb381..5c855d1 100644 --- a/rainbowadn/data/collection/trees/comparison/plaincomparator.py +++ b/rainbowadn/data/collection/trees/comparison/plaincomparator.py @@ -1,7 +1,7 @@ +from rainbowadn.core.hashpoint import HashPoint from rainbowadn.data.atomic.plain import Plain from rainbowadn.data.collection.trees.comparison.comparator import Comparison, Left, Right from rainbowadn.data.collection.trees.comparison.protocolcomparator import ProtocolComparator -from rainbowadn.core.hashpoint import HashPoint __all__ = ('PlainComparator',) diff --git a/rainbowadn/testing/test_all.py b/rainbowadn/testing/test_all.py index 05dad8a..6e82f95 100644 --- a/rainbowadn/testing/test_all.py +++ b/rainbowadn/testing/test_all.py @@ -9,18 +9,18 @@ import nacl.signing from rainbowadn.chain.blockchain import BlockChainFactory from rainbowadn.chain.chaincollectioninterface import ChainCollectionInterface from rainbowadn.chain.reduction.reductionchainmetafactory import ReductionChainMetaFactory -from rainbowadn.data.atomic.integer import Integer -from rainbowadn.data.atomic.plain import Plain -from rainbowadn.data.collection.pair import Pair, PairFactory -from rainbowadn.data.collection.trees.binary.activebinarytree import ActiveBinaryTree -from rainbowadn.data.collection.trees.binary.avl import AVLBTBP -from rainbowadn.data.collection.trees.comparison.comparator import Replace -from rainbowadn.data.collection.trees.comparison.plaincomparator import PlainComparator -from rainbowadn.encryption.encrypted import Encrypted from rainbowadn.core.hashpoint import HashPoint from rainbowadn.core.nullability.notnull import NotNull from rainbowadn.core.rainbow_factory import RainbowFactory from rainbowadn.core.resolvermetaorigin import ResolverMetaOrigin +from rainbowadn.data.atomic.integer import Integer +from rainbowadn.data.atomic.plain import Plain +from rainbowadn.data.collection.pair import Pair, PairFactory +from rainbowadn.data.collection.trees.binary.activebinarytree import ActiveBinaryTree +from rainbowadn.data.collection.trees.binary.avl import AVL +from rainbowadn.data.collection.trees.comparison.comparator import Replace +from rainbowadn.data.collection.trees.comparison.plaincomparator import PlainComparator +from rainbowadn.encryption.encrypted import Encrypted from rainbowadn.testing.dictresolver import DictResolver from rainbowadn.testing.instrumentation import Counter from rainbowadn.v13.algo import MINT_CONST @@ -142,7 +142,7 @@ class TestAll(unittest.TestCase): def test_avl(self): tree: ActiveBinaryTree[Plain, Integer] = ActiveBinaryTree.empty( - AVLBTBP(PlainComparator(Replace())), Plain.factory() + AVL(PlainComparator(Replace())), Plain.factory() ) for i in range(26): tree = tree.add(HashPoint.of(Plain(bytes([ord('A') + i])))) @@ -150,7 +150,7 @@ class TestAll(unittest.TestCase): def test_avl_stress(self): tree: ActiveBinaryTree[Plain, Integer] = ActiveBinaryTree.empty( - AVLBTBP(PlainComparator(Replace())), Plain.factory() + AVL(PlainComparator(Replace())), Plain.factory() ) for i in range(250): tree = tree.add(HashPoint.of(Plain(os.urandom(16)))) @@ -163,7 +163,7 @@ class TestAll(unittest.TestCase): dr = DictResolver() with self.subTest('create empty'): tree: ActiveBinaryTree[Plain, Integer] = ActiveBinaryTree.empty( - AVLBTBP(PlainComparator(Replace())), Plain.factory() + AVL(PlainComparator(Replace())), Plain.factory() ) with self.subTest('fill'): for char in string.ascii_uppercase: diff --git a/rainbowadn/toplevel/validreference.py b/rainbowadn/toplevel/validreference.py index f8089cb..a1b4f23 100644 --- a/rainbowadn/toplevel/validreference.py +++ b/rainbowadn/toplevel/validreference.py @@ -9,7 +9,6 @@ from rainbowadn.toplevel.thresholdprotocol import ThresholdProtocol __all__ = ('ValidReference', 'ValidReferenceFactory') - Referenced = TypeVar('Referenced') diff --git a/rainbowadn/v13/bankchain.py b/rainbowadn/v13/bankchain.py index 18393c2..86be024 100644 --- a/rainbowadn/v13/bankchain.py +++ b/rainbowadn/v13/bankchain.py @@ -2,9 +2,9 @@ from typing import Generic, TypeVar from rainbowadn.chain.abstractreductionchainmetafactory import AbstractReductionChainMetaFactory from rainbowadn.chain.chaincollectioninterface import ChainCollectionInterface -from rainbowadn.data.collection.stack.stack import Stack, StackFactory from rainbowadn.core.hashpoint import HashPoint from rainbowadn.core.nullability.nullablereference import NullableReference, NullableReferenceFactory +from rainbowadn.data.collection.stack.stack import Stack, StackFactory from rainbowadn.v13.bankprotocol import BankProtocol from rainbowadn.v13.bankstate import BankState from rainbowadn.v13.transaction import Transaction diff --git a/rainbowadn/v13/bankprotocol.py b/rainbowadn/v13/bankprotocol.py index 9bf557e..5c52478 100644 --- a/rainbowadn/v13/bankprotocol.py +++ b/rainbowadn/v13/bankprotocol.py @@ -2,15 +2,15 @@ from rainbowadn.chain.reduction.reduced import Reduced from rainbowadn.chain.reduction.reduction import Reduction from rainbowadn.chain.reduction.reductionprotocol import ReductionProtocol from rainbowadn.chain.reduction.reductionresult import ReductionResult -from rainbowadn.data.atomic.integer import Integer -from rainbowadn.data.collection.keymetadata import KeyMetadataFactory -from rainbowadn.data.collection.stack.stack import Stack -from rainbowadn.data.collection.trees.binary.binarytree import BinaryTreeFactory from rainbowadn.core.hashpoint import HashPoint from rainbowadn.core.nullability.null import Null from rainbowadn.core.nullability.nullablereference import NullableReference from rainbowadn.core.rainbow_factory import RainbowFactory from rainbowadn.core.static import StaticFactory +from rainbowadn.data.atomic.integer import Integer +from rainbowadn.data.collection.keymetadata import KeyMetadataFactory +from rainbowadn.data.collection.stack.stack import Stack +from rainbowadn.data.collection.trees.binary.binarytree import BinaryTreeFactory from rainbowadn.v13.bankstate import BankState from rainbowadn.v13.subject import Subject from rainbowadn.v13.transaction import Coin, Transaction diff --git a/rainbowadn/v13/bankstate.py b/rainbowadn/v13/bankstate.py index 51e87a9..ed0a88c 100644 --- a/rainbowadn/v13/bankstate.py +++ b/rainbowadn/v13/bankstate.py @@ -1,12 +1,5 @@ from typing import Iterable -from rainbowadn.data.atomic.integer import Integer -from rainbowadn.data.collection.keymetadata import KeyMetadata, KeyMetadataFactory -from rainbowadn.data.collection.trees.binary.activebinarytree import ActiveBinaryTree -from rainbowadn.data.collection.trees.binary.avl import AVLBTBP -from rainbowadn.data.collection.trees.binary.binarytree import BinaryTree, BinaryTreeFactory -from rainbowadn.data.collection.trees.comparison.comparator import Fail -from rainbowadn.data.collection.trees.comparison.hashcomparator import HashComparator from rainbowadn.core.hash_point_format import hash_point_format, tabulate from rainbowadn.core.hashpoint import HashPoint from rainbowadn.core.hashresolver import HashResolver @@ -17,6 +10,13 @@ from rainbowadn.core.rainbow_factory import RainbowFactory from rainbowadn.core.recursivementionable import RecursiveMentionable from rainbowadn.core.resolverorigin import ResolverOrigin from rainbowadn.core.static import StaticFactory, StaticMentionable +from rainbowadn.data.atomic.integer import Integer +from rainbowadn.data.collection.keymetadata import KeyMetadata, KeyMetadataFactory +from rainbowadn.data.collection.trees.binary.activebinarytree import ActiveBinaryTree +from rainbowadn.data.collection.trees.binary.avl import AVL +from rainbowadn.data.collection.trees.binary.binarytree import BinaryTree, BinaryTreeFactory +from rainbowadn.data.collection.trees.comparison.comparator import Fail +from rainbowadn.data.collection.trees.comparison.hashcomparator import HashComparator from rainbowadn.v13.algo import MINT_CONST from rainbowadn.v13.subject import Subject from rainbowadn.v13.transaction import Coin, Transaction @@ -89,12 +89,12 @@ class BankState(RecursiveMentionable, StaticMentionable): def minted_tree(self) -> ActiveBinaryTree[Coin, Integer]: return ActiveBinaryTree( - AVLBTBP(HashComparator(Fail())), self.minted + AVL(HashComparator(Fail())), self.minted ) def used_tree(self) -> ActiveBinaryTree[Coin, Integer]: return ActiveBinaryTree( - AVLBTBP(HashComparator(Fail())), self.used + AVL(HashComparator(Fail())), self.used ) def use_coins(self, coins: Iterable[HashPoint[Coin]]) -> 'BankState': diff --git a/rainbowadn/v13/signature.py b/rainbowadn/v13/signature.py index 17faf9c..264d99a 100644 --- a/rainbowadn/v13/signature.py +++ b/rainbowadn/v13/signature.py @@ -2,8 +2,8 @@ import nacl.bindings import nacl.exceptions import nacl.signing -from rainbowadn.data.atomic.atomic import Atomic from rainbowadn.core.hashpoint import HashPoint +from rainbowadn.data.atomic.atomic import Atomic from rainbowadn.v13.subject import Subject __all__ = ('BadSignature', 'Signature',) diff --git a/rainbowadn/v13/transaction.py b/rainbowadn/v13/transaction.py index 792529e..52ad86d 100644 --- a/rainbowadn/v13/transaction.py +++ b/rainbowadn/v13/transaction.py @@ -2,8 +2,6 @@ from typing import Iterable import nacl.signing -from rainbowadn.data.atomic.integer import Integer -from rainbowadn.data.collection.stack.stack import Stack, StackFactory from rainbowadn.core.hash_point_format import hash_point_format, tabulate from rainbowadn.core.hashpoint import HashPoint from rainbowadn.core.hashresolver import HashResolver @@ -14,6 +12,8 @@ from rainbowadn.core.rainbow_factory import RainbowFactory from rainbowadn.core.recursivementionable import RecursiveMentionable from rainbowadn.core.resolverorigin import ResolverOrigin from rainbowadn.core.static import StaticMentionable +from rainbowadn.data.atomic.integer import Integer +from rainbowadn.data.collection.stack.stack import Stack, StackFactory from rainbowadn.v13.signature import Signature from rainbowadn.v13.subject import Subject diff --git a/rainbowadn/wrisbt/wrisbtroot.py b/rainbowadn/wrisbt/wrisbtroot.py index 5f132cd..76c474e 100644 --- a/rainbowadn/wrisbt/wrisbtroot.py +++ b/rainbowadn/wrisbt/wrisbtroot.py @@ -1,6 +1,5 @@ from typing import Iterable -from rainbowadn.data.atomic.integer import Integer from rainbowadn.core.hash_point_format import hash_point_format, tabulate from rainbowadn.core.hashpoint import HashPoint from rainbowadn.core.hashresolver import HashResolver @@ -10,6 +9,7 @@ from rainbowadn.core.mentionable import Mentionable from rainbowadn.core.rainbow_factory import RainbowFactory from rainbowadn.core.recursivementionable import RecursiveMentionable from rainbowadn.core.resolverorigin import ResolverOrigin +from rainbowadn.data.atomic.integer import Integer from rainbowadn.wrisbt.weakreferenceindexsetbtree import WeakReferenceIndexSetBTree, WrisbtFactory from rainbowadn.wrisbt.wrisbtparametres import WrisbtParametres