Skip to main content

Tries with byte sequences as keys for Python and Rust

Project description

Byte tries in Rust with Python bindings

Installation

Install from PyPI (only built for Python 3.10+ on Linux)

pip install byte-prefix-tree

Manual installation

Make sure you have Rust installed, then do the following:

git clone https://github.com/bastiscode/byte-trie.git
cd byte-trie
pip install maturin[patchelf]
maturin develop --release

Usage

Currently implemented tries:

  • Patricia trie
  • Adaptive radix trie

Key needs to be a bytes object, value can be anything. Make sure that the key never contains a null/zero byte, as it is used as a terminator internally. For utf8-encoded text this usually is the case, but for other types of data you might need to encode it in a way that ensures this.

from byte_trie import PatriciaTrie, AdaptiveRadixTrie

pt = PatriciaTrie()

# add key-value pairs
pt.insert(b"hello", 1)
pt.insert(b"world", 2)

# delete key
print(pt.delete(b"hello")) # 1

# check for key with prefix
print(pt.contains(b"hel")) # False
print(pt.contains(b"wor")) # True

# get values
print(pt.get(b"hello")) # None
print(pt.get(b"world")) # 2

# overwrite
print(pt.insert(b"world", 3)) # 2
print(pt.get(b"world")) # 3

# continuations for prefix
print(pt.continuations(b"wo")) # [(b'world', 3)]

# same for ART
art = AdaptiveRadixTrie()

art.insert(b"hello", 1)
art.insert(b"world", 2)

print(art.delete(b"hello")) # 1

print(art.contains(b"hel")) # False
print(art.contains(b"wor")) # True

print(art.get(b"hello")) # None
print(art.get(b"world")) # 2

print(art.insert(b"world", 3)) # 2
print(art.get(b"world")) # 3

print(art.continuations(b"wo")) # [(b'world', 3)]

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

byte_prefix_tree-0.1.0-cp310-cp310-manylinux_2_34_x86_64.whl (238.0 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.34+ x86-64

File details

Details for the file byte_prefix_tree-0.1.0-cp310-cp310-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for byte_prefix_tree-0.1.0-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 b6ab9496bf613fb33069246579e9428af6a4161defa819556832424cfae1f76a
MD5 01c9e3ee3fd1e7dc39a22b40b016ab89
BLAKE2b-256 b1dd6cb3b5b8f5b96ddfddade738453eff93bd45085d6ae4ecf550aa92bb797c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page