Coverage for src/gentrie/trie/trie_mixins.py: 100%
14 statements
« prev ^ index » next coverage.py v7.6.10, created at 2025-08-20 09:30 -0700
« prev ^ index » next coverage.py v7.6.10, created at 2025-08-20 09:30 -0700
1"""Protocol for all GeneralizedTrie trie mixins."""
3from typing import Any, Iterator, Optional, Protocol
5from ..nodes import Node
6from ..protocols import GeneralizedKey, TrieKeyToken
7from ..types import TrieId, TrieEntry
10class TrieMixinsInterface(Protocol):
11 """
12 Protocol defining the complete public API and shared private state
13 for all mixins used within the GeneralizedTrie implementation.
14 """
15 # --- Shared Private State ---
16 # These attributes are the "contract" for the shared data model.
17 runtime_validation: bool
18 _ident_counter: int
19 _trie_index: dict[TrieId, Node]
20 _trie_entries: dict[TrieId, TrieEntry]
21 children: dict[TrieKeyToken, Node]
22 ident: Optional[TrieId]
23 parent: Optional["TrieMixinsInterface"]
24 token: Optional[TrieKeyToken]
25 value: Any
27 # --- Shared Public API ---
28 # These methods form the "contract" for the shared behavior.
29 # Any method that one mixin needs to call from another must be here.
31 # pylint: disable=missing-function-docstring
33 # From storage.py
34 def add(self, key: GeneralizedKey, value: Optional[Any] = None) -> TrieId: ...
35 def update(self, key: GeneralizedKey, value: Optional[Any] = None) -> TrieId: ...
37 # From access.py
38 def __getitem__(self, key: TrieId | GeneralizedKey) -> TrieEntry: ...
39 def __contains__(self, key_or_ident: TrieId | GeneralizedKey) -> bool: ...
40 def get(self, key: TrieId | GeneralizedKey, default: Any = None) -> TrieEntry | Any: ...
42 # From removal.py
43 def remove(self, key: TrieId | GeneralizedKey) -> None: ...
44 def __delitem__(self, key: TrieId | GeneralizedKey) -> None: ...
46 # From traversal.py
47 def prefixes(self, key: GeneralizedKey) -> Iterator[TrieEntry]: ...
48 def prefixed_by(self, key: GeneralizedKey, depth: int = -1) -> Iterator[TrieEntry]: ...
50 # From collection.py
51 def __iter__(self) -> Iterator[TrieId]: ...
52 def __len__(self) -> int: ...
54 # --- Private Implementation Details ---
55 # These are included for type-checking purposes for methods that are
56 # defined and called within the same mixin, but where the public-facing
57 # methods use the protocol for `self`. They are not considered part of
58 # the public API of the final class.
59 def _store_entry(self, key: GeneralizedKey, value: Any, allow_value_update: bool) -> TrieId: ...