(
self,
sequence_id: int,
keep_len: int,
)
| 851 | return middle |
| 852 | |
| 853 | def _locate_prefix_node( |
| 854 | self, |
| 855 | sequence_id: int, |
| 856 | keep_len: int, |
| 857 | ) -> "RadixTrie.Node": |
| 858 | total_len = self.sequence_lengths[sequence_id] |
| 859 | assert 0 <= keep_len <= total_len |
| 860 | if keep_len == 0: |
| 861 | return self.root |
| 862 | node = self.sequences[sequence_id] |
| 863 | drop_len = total_len - keep_len |
| 864 | while node is not self.root: |
| 865 | label_len = len(node.label) |
| 866 | if drop_len == 0: |
| 867 | return node |
| 868 | if drop_len < label_len: |
| 869 | parent = node.parent |
| 870 | assert parent is not None |
| 871 | return self._split_child(parent, node, label_len - drop_len) |
| 872 | drop_len -= label_len |
| 873 | parent = node.parent |
| 874 | assert parent is not None |
| 875 | node = parent |
| 876 | return self.root |
| 877 | |
| 878 | def extend( |
| 879 | self, |
no test coverage detected