# PrefixTrie
[](https://pypi.org/project/prefixtrie/)
[](https://github.com/austinv11/PrefixTrie/actions)
[](https://github.com/austinv11/PrefixTrie/blob/master/LICENSE)
A high-performance Cython implementation of a prefix trie data structure for efficient fuzzy string matching. Originally designed for RNA barcode matching in bioinformatics applications, but suitable for any use case requiring fast approximate string search.
## Features
- **Ultra-fast exact matching** using optimized Python sets
- **Fuzzy matching** with configurable edit distance (insertions, deletions, substitutions)
- **Substring search** to find trie entries within larger strings
- **Longest prefix matching** for sequence analysis
- **Mutable and immutable** trie variants
- **Multiprocessing support** with pickle compatibility
- **Shared memory** for high-performance parallel processing
- **Memory-efficient** with collapsed node optimization
- **Bioinformatics-optimized** for DNA/RNA/protein sequences
## Performance Characteristics
The implementation is optimized for read-heavy workloads with several key optimizations:
1. **Collapsed terminal nodes** for trivial exact paths
2. **Aggressive caching** of subproblem results during search
3. **Best-case-first search** strategy
4. **Substitution preference** over indels (configurable)
5. **Ultra-fast exact matching** bypassing trie overhead for correction_budget=0
## Benchmarks
Benchmark results are automatically generated and updated by a GitHub Actions workflow whenever a change is made.
### Search Performance (vs RapidFuzz, TheFuzz, and SymSpell)
We typically substantially outperform similar methods at fuzzy matching:

### Substring Search Performance (vs fuzzysearch and regex)
Our substring search is at least on par with existing methods, but in some cases will be faster:

### Conclusion
Overall, PrefixTrie is highly performant and can be a great choice for most applications. Benchmark code for the search
comparison is found [here](run_benchmark.py) and for substring search [here](run_substring_benchmark.py).
## Basic Usage
```python
from prefixtrie import PrefixTrie
# Create a trie with DNA sequences
trie = PrefixTrie(["ACGT", "ACGG", "ACGC"], allow_indels=True)
# Exact matching
result, corrections = trie.search("ACGT")
print(result, corrections) # ("ACGT", 0)
# Fuzzy matching with edit distance
result, corrections = trie.search("ACGA", correction_budget=1)
print(result, corrections) # ("ACGT", 1) - one substitution
result, corrections = trie.search("ACG", correction_budget=1)
print(result, corrections) # ("ACGT", 1) - one insertion needed
result, corrections = trie.search("ACGTA", correction_budget=1)
print(result, corrections) # ("ACGT", 1) - one deletion needed
# No match within budget
result, corrections = trie.search("TTTT", correction_budget=1)
print(result, corrections) # (None, -1)
```
## Advanced Search Operations
### Substring Search
Find trie entries that appear as substrings within larger strings:
```python
trie = PrefixTrie(["HELLO", "WORLD"], allow_indels=True)
# Exact substring match
result, corrections, start, end = trie.search_substring("AAAAHELLOAAAA", correction_budget=0)
print(f"Found '{result}' with {corrections} edits at positions {start}:{end}")
# Found 'HELLO' with 0 edits at positions 4:9
# Fuzzy substring match
result, corrections, start, end = trie.search_substring("AAAHELOAAAA", correction_budget=1)
print(f"Found '{result}' with {corrections} edits at positions {start}:{end}")
# Found 'HELLO' with 1 edits at positions 3:8
```
### Longest Prefix Matching
Find the longest prefix from the trie that matches the beginning of a target string:
```python
trie = PrefixTrie(["ACGT", "ACGTA", "ACGTAG"])
# Find longest prefix match
result, start_pos, match_length = trie.longest_prefix_match("ACGTAGGT", min_match_length=4)
print(f"Longest match: '{result}' at position {start_pos}, length {match_length}")
# Longest match: 'ACGTAG' at position 0, length 6
# No match if minimum length not met
result, start_pos, match_length = trie.longest_prefix_match("ACGTTT", min_match_length=7)
print(result) # None
```
### Counting Fuzzy Matches
Efficiently count the number of unique entries that match a query within a given correction budget, without retrieving the actual strings.
```python
trie = PrefixTrie(["apple", "apply", "apples", "orange"], allow_indels=True)
# Count exact matches
count = trie.search_count("apple", correction_budget=0)
print(f"Found {count} exact match(es) for 'apple'")
# Found 1 exact match(es) for 'apple'
# Count fuzzy matches
# "apple" (0 corrections) + "apply" (1 correction) + "apples" (1 correction)
count = trie.search_count("apple", correction_budget=1)
print(f"Found {count} fuzzy match(es) for 'apple' with budget 1")
# Found 3 fuzzy match(es) for 'apple' with budget 1
```
## Mutable vs Immutable Tries
### Immutable Tries (Default)
Immutable tries are optimized for read-only operations and support shared memory:
```python
# Immutable by default
trie = PrefixTrie(["apple", "banana"], immutable=True)
print(trie.is_immutable()) # True
# Cannot modify immutable tries
try:
trie.add("cherry")
except RuntimeError as e:
print(e) # Cannot modify immutable trie
```
### Mutable Tries
Mutable tries allow dynamic addition and removal of entries (note that mutability incurs performance penalties):
```python
# Create mutable trie
trie = PrefixTrie(["apple"], immutable=False, allow_indels=True)
# Add new entries
success = trie.add("banana")
print(f"Added banana: {success}") # True
print(f"Trie size: {len(trie)}") # 2
# Remove entries
success = trie.remove("apple")
print(f"Removed apple: {success}") # True
print(f"Trie size: {len(trie)}") # 1
# Try to add duplicate
success = trie.add("banana")
print(f"Added duplicate: {success}") # False
# All search operations work on mutable tries
result, corrections = trie.search("banan", correction_budget=1)
print(result, corrections) # ("banana", 1)
```
## Multiprocessing Support
PrefixTrie is fully pickle-compatible for easy use with multiprocessing:
```python
import multiprocessing as mp
from prefixtrie import PrefixTrie
def search_worker(trie, query, budget=1):
"""Worker function that uses the trie"""
return trie.search(query, correction_budget=budget)
# Create trie
entries = [f"barcode_{i:06d}" for i in range(10000)]
trie = PrefixTrie(entries, allow_indels=True)
# Use with multiprocessing (trie is automatically pickled)
if __name__ == "__main__":
with mp.Pool(processes=4) as pool:
queries = ["barcode_000123", "barcode_999999", "invalid_code"]
results = pool.starmap(search_worker, [(trie, q, 2) for q in queries])
for query, (result, corrections) in zip(queries, results):
print(f"Query: {query} -> Found: {result}, Corrections: {corrections}")
```
## High-Performance Shared Memory
For large tries and intensive multiprocessing workloads, shared memory provides significant performance benefits:
```python
import multiprocessing as mp
from prefixtrie import create_shared_trie, load_shared_trie
def search_worker(shared_memory_name, query, budget=1):
"""Worker that loads trie from shared memory - very fast!"""
trie = load_shared_trie(shared_memory_name)
return trie.search(query, correction_budget=budget)
# Create large trie in shared memory
entries = [f"gene_sequence_{i:08d}" for i in range(100000)]
trie, shm_name = create_shared_trie(entries, allow_indels=True)
try:
if __name__ == "__main__":
# Multiple processes can efficiently access the same trie
with mp.Pool(processes=8) as pool:
queries = ["gene_sequence_00001234", "gene_sequence_99999999"]
results = pool.starmap(search_worker, [(shm_name, q, 2) for q in queries])
for query, (result, corrections) in zip(queries, results):
print(f"Query: {query} -> Found: {result}, Corrections: {corrections}")
finally:
# Clean up shared memory
trie.cleanup_shared_memory()
```
## Standard Dictionary Interface
PrefixTrie supports standard Python container operations:
```python
trie = PrefixTrie(["apple", "banana", "cherry"])
# Length
print(len(trie)) # 3
# Membership testing
print("apple" in trie) # True
print("grape" in trie) # False
# Item access
print(trie["banana"]) # "banana"
# Iteration
for item in trie:
print(item) # apple, banana, cherry
# String representation
print(repr(trie)) # PrefixTrie(n_entries=3, allow_indels=False)
```
## Installation
### From PyPI (Recommended)
```bash
pip install prefixtrie
```
### Building from Source
Requires a C++ compiler and Cython:
```bash
git clone https://github.com/austinv11/PrefixTrie.git
cd PrefixTrie
# With UV (preferred)
uv sync --group dev
uv pip install -e .
# With pip
pip install -e .
```
#### Building the Documentation
The documentation is built using [MkDocs](https://www.mkdocs.org/).
```bash
# Install documentation dependencies
uv sync --group dev
# Build the site
mkdocs build
```
The generated documentation will be in the `site` directory.
## Development and Testing
```bash
# Install development dependencies
uv sync --group test
uv pip install -e .
# Run tests
pytest test/
# Run benchmarks
python run_benchmark.py
python run_substring_benchmark.py
```
## Performance Notes
1. **Exact matching** (correction_budget=0) uses ultra-fast set lookups
2. **Immutable tries** are faster and more memory-efficient than mutable ones
3. **Shared memory** provides significant speedup for multiprocessing with large tries
4. **Substitutions** are prioritized over insertions/deletions when both are possible
5. The implementation assumes ASCII characters; Unicode support is not guaranteed
## Algorithm Details
- **Fuzzy search** uses dynamic programming with aggressive caching
- **Collapsed nodes** optimize memory usage and search speed
- **Best-case-first** search strategy minimizes unnecessary computation
- **Length bounds** pruning eliminates impossible matches early
- **Alphabet optimization** for immutable tries reduces memory footprint
## License
MIT License. See [LICENSE](LICENSE) for details.
## Contributing
Contributions are welcome! Please see the [GitHub repository](https://github.com/austinv11/PrefixTrie) for issues and pull requests.
Raw data
{
"_id": null,
"home_page": null,
"name": "prefixtrie",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": "Austin Varela <austinv11@gmail.com>",
"keywords": "trie, prefix-trie, fuzzy-matching, string-matching, bioinformatics, fuzzy-search",
"author": null,
"author_email": "Austin Varela <austinv11@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/f0/09/bd5293071073aa5f1404c328442001385c3d3640316408cd5ab216c7b086/prefixtrie-1.1.0.tar.gz",
"platform": null,
"description": "# PrefixTrie\n\n[](https://pypi.org/project/prefixtrie/)\n[](https://github.com/austinv11/PrefixTrie/actions)\n[](https://github.com/austinv11/PrefixTrie/blob/master/LICENSE)\n\nA high-performance Cython implementation of a prefix trie data structure for efficient fuzzy string matching. Originally designed for RNA barcode matching in bioinformatics applications, but suitable for any use case requiring fast approximate string search.\n\n## Features\n\n- **Ultra-fast exact matching** using optimized Python sets\n- **Fuzzy matching** with configurable edit distance (insertions, deletions, substitutions)\n- **Substring search** to find trie entries within larger strings\n- **Longest prefix matching** for sequence analysis\n- **Mutable and immutable** trie variants\n- **Multiprocessing support** with pickle compatibility\n- **Shared memory** for high-performance parallel processing\n- **Memory-efficient** with collapsed node optimization\n- **Bioinformatics-optimized** for DNA/RNA/protein sequences\n\n## Performance Characteristics\n\nThe implementation is optimized for read-heavy workloads with several key optimizations:\n\n1. **Collapsed terminal nodes** for trivial exact paths\n2. **Aggressive caching** of subproblem results during search\n3. **Best-case-first search** strategy\n4. **Substitution preference** over indels (configurable)\n5. **Ultra-fast exact matching** bypassing trie overhead for correction_budget=0\n\n## Benchmarks\n\nBenchmark results are automatically generated and updated by a GitHub Actions workflow whenever a change is made.\n\n### Search Performance (vs RapidFuzz, TheFuzz, and SymSpell)\nWe typically substantially outperform similar methods at fuzzy matching:\n\n\n### Substring Search Performance (vs fuzzysearch and regex)\nOur substring search is at least on par with existing methods, but in some cases will be faster:\n\n\n### Conclusion\nOverall, PrefixTrie is highly performant and can be a great choice for most applications. Benchmark code for the search\ncomparison is found [here](run_benchmark.py) and for substring search [here](run_substring_benchmark.py).\n\n## Basic Usage\n\n```python\nfrom prefixtrie import PrefixTrie\n\n# Create a trie with DNA sequences\ntrie = PrefixTrie([\"ACGT\", \"ACGG\", \"ACGC\"], allow_indels=True)\n\n# Exact matching\nresult, corrections = trie.search(\"ACGT\")\nprint(result, corrections) # (\"ACGT\", 0)\n\n# Fuzzy matching with edit distance\nresult, corrections = trie.search(\"ACGA\", correction_budget=1)\nprint(result, corrections) # (\"ACGT\", 1) - one substitution\n\nresult, corrections = trie.search(\"ACG\", correction_budget=1)\nprint(result, corrections) # (\"ACGT\", 1) - one insertion needed\n\nresult, corrections = trie.search(\"ACGTA\", correction_budget=1)\nprint(result, corrections) # (\"ACGT\", 1) - one deletion needed\n\n# No match within budget\nresult, corrections = trie.search(\"TTTT\", correction_budget=1)\nprint(result, corrections) # (None, -1)\n```\n\n## Advanced Search Operations\n\n### Substring Search\n\nFind trie entries that appear as substrings within larger strings:\n\n```python\ntrie = PrefixTrie([\"HELLO\", \"WORLD\"], allow_indels=True)\n\n# Exact substring match\nresult, corrections, start, end = trie.search_substring(\"AAAAHELLOAAAA\", correction_budget=0)\nprint(f\"Found '{result}' with {corrections} edits at positions {start}:{end}\")\n# Found 'HELLO' with 0 edits at positions 4:9\n\n# Fuzzy substring match\nresult, corrections, start, end = trie.search_substring(\"AAAHELOAAAA\", correction_budget=1)\nprint(f\"Found '{result}' with {corrections} edits at positions {start}:{end}\")\n# Found 'HELLO' with 1 edits at positions 3:8\n```\n\n### Longest Prefix Matching\n\nFind the longest prefix from the trie that matches the beginning of a target string:\n\n```python\ntrie = PrefixTrie([\"ACGT\", \"ACGTA\", \"ACGTAG\"])\n\n# Find longest prefix match\nresult, start_pos, match_length = trie.longest_prefix_match(\"ACGTAGGT\", min_match_length=4)\nprint(f\"Longest match: '{result}' at position {start_pos}, length {match_length}\")\n# Longest match: 'ACGTAG' at position 0, length 6\n\n# No match if minimum length not met\nresult, start_pos, match_length = trie.longest_prefix_match(\"ACGTTT\", min_match_length=7)\nprint(result) # None\n```\n\n### Counting Fuzzy Matches\n\nEfficiently count the number of unique entries that match a query within a given correction budget, without retrieving the actual strings.\n\n```python\ntrie = PrefixTrie([\"apple\", \"apply\", \"apples\", \"orange\"], allow_indels=True)\n\n# Count exact matches\ncount = trie.search_count(\"apple\", correction_budget=0)\nprint(f\"Found {count} exact match(es) for 'apple'\")\n# Found 1 exact match(es) for 'apple'\n\n# Count fuzzy matches\n# \"apple\" (0 corrections) + \"apply\" (1 correction) + \"apples\" (1 correction)\ncount = trie.search_count(\"apple\", correction_budget=1)\nprint(f\"Found {count} fuzzy match(es) for 'apple' with budget 1\")\n# Found 3 fuzzy match(es) for 'apple' with budget 1\n```\n\n## Mutable vs Immutable Tries\n\n### Immutable Tries (Default)\n\nImmutable tries are optimized for read-only operations and support shared memory:\n\n```python\n# Immutable by default\ntrie = PrefixTrie([\"apple\", \"banana\"], immutable=True)\nprint(trie.is_immutable()) # True\n\n# Cannot modify immutable tries\ntry:\n trie.add(\"cherry\")\nexcept RuntimeError as e:\n print(e) # Cannot modify immutable trie\n```\n\n### Mutable Tries\n\nMutable tries allow dynamic addition and removal of entries (note that mutability incurs performance penalties):\n\n```python\n# Create mutable trie\ntrie = PrefixTrie([\"apple\"], immutable=False, allow_indels=True)\n\n# Add new entries\nsuccess = trie.add(\"banana\")\nprint(f\"Added banana: {success}\") # True\nprint(f\"Trie size: {len(trie)}\") # 2\n\n# Remove entries\nsuccess = trie.remove(\"apple\")\nprint(f\"Removed apple: {success}\") # True\nprint(f\"Trie size: {len(trie)}\") # 1\n\n# Try to add duplicate\nsuccess = trie.add(\"banana\")\nprint(f\"Added duplicate: {success}\") # False\n\n# All search operations work on mutable tries\nresult, corrections = trie.search(\"banan\", correction_budget=1)\nprint(result, corrections) # (\"banana\", 1)\n```\n\n## Multiprocessing Support\n\nPrefixTrie is fully pickle-compatible for easy use with multiprocessing:\n\n```python\nimport multiprocessing as mp\nfrom prefixtrie import PrefixTrie\n\ndef search_worker(trie, query, budget=1):\n \"\"\"Worker function that uses the trie\"\"\"\n return trie.search(query, correction_budget=budget)\n\n# Create trie\nentries = [f\"barcode_{i:06d}\" for i in range(10000)]\ntrie = PrefixTrie(entries, allow_indels=True)\n\n# Use with multiprocessing (trie is automatically pickled)\nif __name__ == \"__main__\":\n with mp.Pool(processes=4) as pool:\n queries = [\"barcode_000123\", \"barcode_999999\", \"invalid_code\"]\n results = pool.starmap(search_worker, [(trie, q, 2) for q in queries])\n \n for query, (result, corrections) in zip(queries, results):\n print(f\"Query: {query} -> Found: {result}, Corrections: {corrections}\")\n```\n\n## High-Performance Shared Memory\n\nFor large tries and intensive multiprocessing workloads, shared memory provides significant performance benefits:\n\n```python\nimport multiprocessing as mp\nfrom prefixtrie import create_shared_trie, load_shared_trie\n\ndef search_worker(shared_memory_name, query, budget=1):\n \"\"\"Worker that loads trie from shared memory - very fast!\"\"\"\n trie = load_shared_trie(shared_memory_name)\n return trie.search(query, correction_budget=budget)\n\n# Create large trie in shared memory\nentries = [f\"gene_sequence_{i:08d}\" for i in range(100000)]\ntrie, shm_name = create_shared_trie(entries, allow_indels=True)\n\ntry:\n if __name__ == \"__main__\":\n # Multiple processes can efficiently access the same trie\n with mp.Pool(processes=8) as pool:\n queries = [\"gene_sequence_00001234\", \"gene_sequence_99999999\"]\n results = pool.starmap(search_worker, [(shm_name, q, 2) for q in queries])\n \n for query, (result, corrections) in zip(queries, results):\n print(f\"Query: {query} -> Found: {result}, Corrections: {corrections}\")\n \nfinally:\n # Clean up shared memory\n trie.cleanup_shared_memory()\n```\n\n## Standard Dictionary Interface\n\nPrefixTrie supports standard Python container operations:\n\n```python\ntrie = PrefixTrie([\"apple\", \"banana\", \"cherry\"])\n\n# Length\nprint(len(trie)) # 3\n\n# Membership testing\nprint(\"apple\" in trie) # True\nprint(\"grape\" in trie) # False\n\n# Item access\nprint(trie[\"banana\"]) # \"banana\"\n\n# Iteration\nfor item in trie:\n print(item) # apple, banana, cherry\n\n# String representation\nprint(repr(trie)) # PrefixTrie(n_entries=3, allow_indels=False)\n```\n\n## Installation\n\n### From PyPI (Recommended)\n\n```bash\npip install prefixtrie\n```\n\n### Building from Source\n\nRequires a C++ compiler and Cython:\n\n```bash\ngit clone https://github.com/austinv11/PrefixTrie.git\ncd PrefixTrie\n\n# With UV (preferred)\nuv sync --group dev\nuv pip install -e .\n\n# With pip\npip install -e .\n```\n\n#### Building the Documentation\nThe documentation is built using [MkDocs](https://www.mkdocs.org/).\n\n```bash\n# Install documentation dependencies\nuv sync --group dev\n\n# Build the site\nmkdocs build\n```\n\nThe generated documentation will be in the `site` directory.\n\n## Development and Testing\n\n```bash\n# Install development dependencies\nuv sync --group test\nuv pip install -e .\n\n# Run tests\npytest test/\n\n# Run benchmarks\npython run_benchmark.py\npython run_substring_benchmark.py\n```\n\n## Performance Notes\n\n1. **Exact matching** (correction_budget=0) uses ultra-fast set lookups\n2. **Immutable tries** are faster and more memory-efficient than mutable ones\n3. **Shared memory** provides significant speedup for multiprocessing with large tries\n4. **Substitutions** are prioritized over insertions/deletions when both are possible\n5. The implementation assumes ASCII characters; Unicode support is not guaranteed\n\n## Algorithm Details\n\n- **Fuzzy search** uses dynamic programming with aggressive caching\n- **Collapsed nodes** optimize memory usage and search speed\n- **Best-case-first** search strategy minimizes unnecessary computation\n- **Length bounds** pruning eliminates impossible matches early\n- **Alphabet optimization** for immutable tries reduces memory footprint\n\n## License\n\nMIT License. See [LICENSE](LICENSE) for details.\n\n## Contributing\n\nContributions are welcome! Please see the [GitHub repository](https://github.com/austinv11/PrefixTrie) for issues and pull requests.\n",
"bugtrack_url": null,
"license": null,
"summary": "A cython implementation of a prefix trie data structure for fast fuzzy matching.",
"version": "1.1.0",
"project_urls": {
"Bug Tracker": "https://github.com/austinv11/PrefixTrie/issues",
"Changelog": "https://github.com/austinv11/PrefixTrie/releases",
"Documentation": "https://austinv11.github.io/PrefixTrie",
"Homepage": "https://github.com/austinv11/PrefixTrie",
"Repository": "https://github.com/austinv11/PrefixTrie"
},
"split_keywords": [
"trie",
" prefix-trie",
" fuzzy-matching",
" string-matching",
" bioinformatics",
" fuzzy-search"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "a3b4d1ef4a132fffffb21ccaea4c15999f5da0a27177403e184ce127c2c5f268",
"md5": "0c526c69aebc8a4a2ce472ef3e5e54fc",
"sha256": "53bea17e9a44a160dd7818b5ddfde2a8405e44418d585addd1015dfaad39043b"
},
"downloads": -1,
"filename": "prefixtrie-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "0c526c69aebc8a4a2ce472ef3e5e54fc",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 77585,
"upload_time": "2025-09-03T20:21:03",
"upload_time_iso_8601": "2025-09-03T20:21:03.938506Z",
"url": "https://files.pythonhosted.org/packages/a3/b4/d1ef4a132fffffb21ccaea4c15999f5da0a27177403e184ce127c2c5f268/prefixtrie-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "122720a05f9d6e52e540cdbcf9954c7e90ce52682c954e7e8c9913188e54a777",
"md5": "b4fc84a4bf55185f673088a447f7a9cb",
"sha256": "16afd9c96a17158bb5e1e1e08fde85e07c2ce08567c5805be6234519f4708b91"
},
"downloads": -1,
"filename": "prefixtrie-1.1.0-cp310-cp310-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "b4fc84a4bf55185f673088a447f7a9cb",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 75485,
"upload_time": "2025-09-03T20:21:05",
"upload_time_iso_8601": "2025-09-03T20:21:05.684105Z",
"url": "https://files.pythonhosted.org/packages/12/27/20a05f9d6e52e540cdbcf9954c7e90ce52682c954e7e8c9913188e54a777/prefixtrie-1.1.0-cp310-cp310-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "75e949a16e45c868d54ad7d578fc17c5db0e58d59bb585592d7c7b5c37a4bfa0",
"md5": "e352d7bec5a7205523090a4742e1a721",
"sha256": "0d67842ea9a53e01db92ef97c9bb7363936c9d8fe3a67038807b030b1fb55d3a"
},
"downloads": -1,
"filename": "prefixtrie-1.1.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl",
"has_sig": false,
"md5_digest": "e352d7bec5a7205523090a4742e1a721",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 84174,
"upload_time": "2025-09-03T20:21:07",
"upload_time_iso_8601": "2025-09-03T20:21:07.043545Z",
"url": "https://files.pythonhosted.org/packages/75/e9/49a16e45c868d54ad7d578fc17c5db0e58d59bb585592d7c7b5c37a4bfa0/prefixtrie-1.1.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "2a6a58e951dfba02099b086a11b924ecfa0820b3a8bf070256adb97ab9ff0d63",
"md5": "b2d088d4f53a14cbe1030843ac33762d",
"sha256": "568517069996cfbc4ddff41be94cac2ef1d95bf437dbb1326ae9413106e4837b"
},
"downloads": -1,
"filename": "prefixtrie-1.1.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "b2d088d4f53a14cbe1030843ac33762d",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 90423,
"upload_time": "2025-09-03T20:21:08",
"upload_time_iso_8601": "2025-09-03T20:21:08.187673Z",
"url": "https://files.pythonhosted.org/packages/2a/6a/58e951dfba02099b086a11b924ecfa0820b3a8bf070256adb97ab9ff0d63/prefixtrie-1.1.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f7dd5da99c5fd5f3ed34c747eecd4d283db0290e99d79a32b1b2466154cd53e5",
"md5": "1ad383984ce5cf3c76140ef982e09e7c",
"sha256": "02fdd881b1dfd71689d45e786ec76020aee0e2f366718800547714895e054fb9"
},
"downloads": -1,
"filename": "prefixtrie-1.1.0-cp310-cp310-win32.whl",
"has_sig": false,
"md5_digest": "1ad383984ce5cf3c76140ef982e09e7c",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 62573,
"upload_time": "2025-09-03T20:21:09",
"upload_time_iso_8601": "2025-09-03T20:21:09.279553Z",
"url": "https://files.pythonhosted.org/packages/f7/dd/5da99c5fd5f3ed34c747eecd4d283db0290e99d79a32b1b2466154cd53e5/prefixtrie-1.1.0-cp310-cp310-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "33c27503c2881d239aea5762efbf7bc2da9d9a0d70f545b73ca31f29b8f17559",
"md5": "758fa2922efc99ffe53271db5f98743d",
"sha256": "db3686811fb36c78643760ad8743bcf0e18630b8751b8b3a26217d6624928415"
},
"downloads": -1,
"filename": "prefixtrie-1.1.0-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "758fa2922efc99ffe53271db5f98743d",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 189085,
"upload_time": "2025-09-03T20:21:10",
"upload_time_iso_8601": "2025-09-03T20:21:10.298962Z",
"url": "https://files.pythonhosted.org/packages/33/c2/7503c2881d239aea5762efbf7bc2da9d9a0d70f545b73ca31f29b8f17559/prefixtrie-1.1.0-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "9d7119cb5dd1d0e54972ce98660a19550ddd8492571d99a19124955a66347709",
"md5": "2b928e9fe6b7a04c272de33b47aa54be",
"sha256": "22dfaf975f46b1fdbf82a72a88f6a1fa298b47cc279af8a4c0a3fee015aa2874"
},
"downloads": -1,
"filename": "prefixtrie-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "2b928e9fe6b7a04c272de33b47aa54be",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 197458,
"upload_time": "2025-09-03T20:21:11",
"upload_time_iso_8601": "2025-09-03T20:21:11.411146Z",
"url": "https://files.pythonhosted.org/packages/9d/71/19cb5dd1d0e54972ce98660a19550ddd8492571d99a19124955a66347709/prefixtrie-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "303e94737fa748f11f8cba90976114c4781594fb7b7b2bba2ffdd4875ff15753",
"md5": "50c2c0b28875733a0b5314f6b46dae49",
"sha256": "8902e668fbbaf50c7ef8f2a2354e3c287370e1446904bec74d58bf1b2d319ca0"
},
"downloads": -1,
"filename": "prefixtrie-1.1.0-cp311-cp311-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "50c2c0b28875733a0b5314f6b46dae49",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 194993,
"upload_time": "2025-09-03T20:21:12",
"upload_time_iso_8601": "2025-09-03T20:21:12.904772Z",
"url": "https://files.pythonhosted.org/packages/30/3e/94737fa748f11f8cba90976114c4781594fb7b7b2bba2ffdd4875ff15753/prefixtrie-1.1.0-cp311-cp311-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a4efa5ec1a578bf7925f17900c76ea4a75d84c4ac17298fee0ddb5ac0c84c937",
"md5": "fe93213322003b1b2adf249b3e3da447",
"sha256": "dbbff5c9e9dea516f649a453ad3413f2ab3f4c43cd8f9710ebf41efb20f5326f"
},
"downloads": -1,
"filename": "prefixtrie-1.1.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl",
"has_sig": false,
"md5_digest": "fe93213322003b1b2adf249b3e3da447",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 203770,
"upload_time": "2025-09-03T20:21:14",
"upload_time_iso_8601": "2025-09-03T20:21:14.032058Z",
"url": "https://files.pythonhosted.org/packages/a4/ef/a5ec1a578bf7925f17900c76ea4a75d84c4ac17298fee0ddb5ac0c84c937/prefixtrie-1.1.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a7291289eb491a889ad83088cc44c64ab7f710e3177b2ff0e434fa831ebae4ce",
"md5": "03b6b637621d1394b38c23996c170a94",
"sha256": "11792df0eec64e36916008093f847157791c0ffb199d5ed377870c33af8feff4"
},
"downloads": -1,
"filename": "prefixtrie-1.1.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "03b6b637621d1394b38c23996c170a94",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 209940,
"upload_time": "2025-09-03T20:21:15",
"upload_time_iso_8601": "2025-09-03T20:21:15.145936Z",
"url": "https://files.pythonhosted.org/packages/a7/29/1289eb491a889ad83088cc44c64ab7f710e3177b2ff0e434fa831ebae4ce/prefixtrie-1.1.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "dbe26a1d754e212b71de52e454763190ac4c96e756b6d61863139d953f8298ea",
"md5": "152c36d87e5fa56e9cbeca8b146bbe95",
"sha256": "a67f4a245df0609cb346047851f2cc044c7a72a3313c5869532b9a2985f535b1"
},
"downloads": -1,
"filename": "prefixtrie-1.1.0-cp311-cp311-win32.whl",
"has_sig": false,
"md5_digest": "152c36d87e5fa56e9cbeca8b146bbe95",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 183006,
"upload_time": "2025-09-03T20:21:16",
"upload_time_iso_8601": "2025-09-03T20:21:16.691557Z",
"url": "https://files.pythonhosted.org/packages/db/e2/6a1d754e212b71de52e454763190ac4c96e756b6d61863139d953f8298ea/prefixtrie-1.1.0-cp311-cp311-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e94de549bbd7f727da09ba7e0279b55a096b478b7488765665591ce5c99d5026",
"md5": "d378f7584e9d7c049298ff2b4de6a3d9",
"sha256": "133461328b0dfbf03ea6ef48b3329b6da93e3993b4cea50e3e95d26010329887"
},
"downloads": -1,
"filename": "prefixtrie-1.1.0-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "d378f7584e9d7c049298ff2b4de6a3d9",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 189315,
"upload_time": "2025-09-03T20:21:17",
"upload_time_iso_8601": "2025-09-03T20:21:17.847525Z",
"url": "https://files.pythonhosted.org/packages/e9/4d/e549bbd7f727da09ba7e0279b55a096b478b7488765665591ce5c99d5026/prefixtrie-1.1.0-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a894f997898e5e7cfc7631094bd45208de17785d202aa7bd59c0a49456ccedb3",
"md5": "60925778e46cf2f1ec6e907cc6c595a1",
"sha256": "3364a56f2016bed67a8bdfbacd95a214e3bdd7d7c11bb141d43b391509120af6"
},
"downloads": -1,
"filename": "prefixtrie-1.1.0-cp312-cp312-macosx_10_13_x86_64.whl",
"has_sig": false,
"md5_digest": "60925778e46cf2f1ec6e907cc6c595a1",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 200507,
"upload_time": "2025-09-03T20:21:18",
"upload_time_iso_8601": "2025-09-03T20:21:18.972794Z",
"url": "https://files.pythonhosted.org/packages/a8/94/f997898e5e7cfc7631094bd45208de17785d202aa7bd59c0a49456ccedb3/prefixtrie-1.1.0-cp312-cp312-macosx_10_13_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "3a80e13a25bfa6faba6a015c1b2d37c3729f0520d9529a47c7bb936dacae2982",
"md5": "8685f1e0ca1ce7b147e75ebfecd243ea",
"sha256": "86691c6c5cad3437643bffd41f15a4518a28d63cf3c81d02aa65dcd1371557f0"
},
"downloads": -1,
"filename": "prefixtrie-1.1.0-cp312-cp312-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "8685f1e0ca1ce7b147e75ebfecd243ea",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 196615,
"upload_time": "2025-09-03T20:21:20",
"upload_time_iso_8601": "2025-09-03T20:21:20.472104Z",
"url": "https://files.pythonhosted.org/packages/3a/80/e13a25bfa6faba6a015c1b2d37c3729f0520d9529a47c7bb936dacae2982/prefixtrie-1.1.0-cp312-cp312-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a3cfd34ab33b30c83c574e78ae108f82c0d311966f40f3e60c15fa3e5393e355",
"md5": "9e6ecd42f5fd09e37bc956dc7abd842f",
"sha256": "3d9add17fa3f99cb00b6b90be52084f3530b72568fbe390a1e7c4946b12b79d1"
},
"downloads": -1,
"filename": "prefixtrie-1.1.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl",
"has_sig": false,
"md5_digest": "9e6ecd42f5fd09e37bc956dc7abd842f",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 203602,
"upload_time": "2025-09-03T20:21:21",
"upload_time_iso_8601": "2025-09-03T20:21:21.595412Z",
"url": "https://files.pythonhosted.org/packages/a3/cf/d34ab33b30c83c574e78ae108f82c0d311966f40f3e60c15fa3e5393e355/prefixtrie-1.1.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "fe75fb3d2e62d30364ce3f5578337416eb901ba2f8a4ffa0726e580efab670ac",
"md5": "bbf0a4682153d44bb5eff71e104f384e",
"sha256": "8ccd1ddab96d4658a5b5aa5d6b5303445c5c7eeb5f59aec46c537a44b2be51a5"
},
"downloads": -1,
"filename": "prefixtrie-1.1.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "bbf0a4682153d44bb5eff71e104f384e",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 210664,
"upload_time": "2025-09-03T20:21:24",
"upload_time_iso_8601": "2025-09-03T20:21:24.527879Z",
"url": "https://files.pythonhosted.org/packages/fe/75/fb3d2e62d30364ce3f5578337416eb901ba2f8a4ffa0726e580efab670ac/prefixtrie-1.1.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "539ca7fa10b26e363c9b2bdc0679f39ef2c16cabd2a5a976167b1d935a6a3bf5",
"md5": "7c736e9f669f066cef78086631de6432",
"sha256": "54074a8f7b2de35ac0570bad7b1d89ca5bf46b2979a4b4d884de7705d049a320"
},
"downloads": -1,
"filename": "prefixtrie-1.1.0-cp312-cp312-win32.whl",
"has_sig": false,
"md5_digest": "7c736e9f669f066cef78086631de6432",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 183324,
"upload_time": "2025-09-03T20:21:26",
"upload_time_iso_8601": "2025-09-03T20:21:26.124685Z",
"url": "https://files.pythonhosted.org/packages/53/9c/a7fa10b26e363c9b2bdc0679f39ef2c16cabd2a5a976167b1d935a6a3bf5/prefixtrie-1.1.0-cp312-cp312-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "741b5087f56468c0ca053419244e07ed5af894b592dee6ea1ed847b11a55285d",
"md5": "45dccd38dc4775ed62e766a6bed787c2",
"sha256": "5879355020c30aee6463950a619387979f3c250327a69c0972fa9624d4283b64"
},
"downloads": -1,
"filename": "prefixtrie-1.1.0-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "45dccd38dc4775ed62e766a6bed787c2",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 189839,
"upload_time": "2025-09-03T20:21:27",
"upload_time_iso_8601": "2025-09-03T20:21:27.727634Z",
"url": "https://files.pythonhosted.org/packages/74/1b/5087f56468c0ca053419244e07ed5af894b592dee6ea1ed847b11a55285d/prefixtrie-1.1.0-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "4a84a853264b20e67f57520ef866acde912216f66a1d6b3d8591cd96d87b1684",
"md5": "a1b9e0a2fce0b6436e06b24f53ab81e8",
"sha256": "7e1cf5e5d7f493c25e47f92bef2dbdd159c47260231d07c1d1ac18111ee03f87"
},
"downloads": -1,
"filename": "prefixtrie-1.1.0-cp313-cp313-macosx_10_13_x86_64.whl",
"has_sig": false,
"md5_digest": "a1b9e0a2fce0b6436e06b24f53ab81e8",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.10",
"size": 199855,
"upload_time": "2025-09-03T20:21:29",
"upload_time_iso_8601": "2025-09-03T20:21:29.194397Z",
"url": "https://files.pythonhosted.org/packages/4a/84/a853264b20e67f57520ef866acde912216f66a1d6b3d8591cd96d87b1684/prefixtrie-1.1.0-cp313-cp313-macosx_10_13_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b17f996a40242ff4b5552ec06694ac7cfc047980530aea5b0bdf2bc0125e6003",
"md5": "f509ae42caad30caecf7c8f61653f111",
"sha256": "04cf37b2821efc8b16069162a8ee69a366016747a0933fd2ca0af68d032b01b6"
},
"downloads": -1,
"filename": "prefixtrie-1.1.0-cp313-cp313-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "f509ae42caad30caecf7c8f61653f111",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.10",
"size": 195756,
"upload_time": "2025-09-03T20:21:30",
"upload_time_iso_8601": "2025-09-03T20:21:30.361252Z",
"url": "https://files.pythonhosted.org/packages/b1/7f/996a40242ff4b5552ec06694ac7cfc047980530aea5b0bdf2bc0125e6003/prefixtrie-1.1.0-cp313-cp313-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "31cb859df39c3d9c47fcef3b7cf9d6d67aeca077ec2796cb8e5f3550467d3836",
"md5": "9ba12d8272a809ea4bf7b11f702fc806",
"sha256": "bf64880a5279ffa372dc4d91b8208eb565bc818c66a2783bf6f868373def4068"
},
"downloads": -1,
"filename": "prefixtrie-1.1.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl",
"has_sig": false,
"md5_digest": "9ba12d8272a809ea4bf7b11f702fc806",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.10",
"size": 203228,
"upload_time": "2025-09-03T20:21:31",
"upload_time_iso_8601": "2025-09-03T20:21:31.871623Z",
"url": "https://files.pythonhosted.org/packages/31/cb/859df39c3d9c47fcef3b7cf9d6d67aeca077ec2796cb8e5f3550467d3836/prefixtrie-1.1.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "4b6f87b42086f5424fded1f30e7ca654df35ea203dd2b81639b11341e71f3db6",
"md5": "785f89ae817fdf64267f22d8ba391a35",
"sha256": "02a7deafa6230eb46a1dd95d40966b382eef8ac982174830debe10c9bbdc7017"
},
"downloads": -1,
"filename": "prefixtrie-1.1.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "785f89ae817fdf64267f22d8ba391a35",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.10",
"size": 210045,
"upload_time": "2025-09-03T20:21:33",
"upload_time_iso_8601": "2025-09-03T20:21:33.352053Z",
"url": "https://files.pythonhosted.org/packages/4b/6f/87b42086f5424fded1f30e7ca654df35ea203dd2b81639b11341e71f3db6/prefixtrie-1.1.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "dc25c6fe3212098f8baad6db0afc112517f48e64b6eedcb04b880ae0c49ade83",
"md5": "d82a4eadb11bc3a96a3d135309f7a341",
"sha256": "2b273a5298c5389cdb3c71dcd9d02a0fe822ccbfd5a6787859f79cbc1d6624ab"
},
"downloads": -1,
"filename": "prefixtrie-1.1.0-cp313-cp313-win32.whl",
"has_sig": false,
"md5_digest": "d82a4eadb11bc3a96a3d135309f7a341",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.10",
"size": 182933,
"upload_time": "2025-09-03T20:21:34",
"upload_time_iso_8601": "2025-09-03T20:21:34.492769Z",
"url": "https://files.pythonhosted.org/packages/dc/25/c6fe3212098f8baad6db0afc112517f48e64b6eedcb04b880ae0c49ade83/prefixtrie-1.1.0-cp313-cp313-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "7a418aa4cd18d761668019662c0f40f69e3c9e9fa6fea3ca5c4d514e8db099fb",
"md5": "5b5855c40c3a47745dfcf7463786e95c",
"sha256": "6ed6d8fc46f56c63cffe3fce5e48cfadf30e6b46907b6f93243f1e6cf8d20067"
},
"downloads": -1,
"filename": "prefixtrie-1.1.0-cp313-cp313-win_amd64.whl",
"has_sig": false,
"md5_digest": "5b5855c40c3a47745dfcf7463786e95c",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.10",
"size": 189080,
"upload_time": "2025-09-03T20:21:35",
"upload_time_iso_8601": "2025-09-03T20:21:35.627789Z",
"url": "https://files.pythonhosted.org/packages/7a/41/8aa4cd18d761668019662c0f40f69e3c9e9fa6fea3ca5c4d514e8db099fb/prefixtrie-1.1.0-cp313-cp313-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "1c239b0f5e7796511d6736750e17ed2c8bd4b3af079f6cd4819e49ab90192d74",
"md5": "3c0b864ce0ffdc65fcc3916463b4ce29",
"sha256": "7ff1dc75efaf53abb06ae48e7b3c14b3f77833ad1b0ef8ae35e53fd7fff71a9b"
},
"downloads": -1,
"filename": "prefixtrie-1.1.0-cp314-cp314-macosx_10_13_x86_64.whl",
"has_sig": false,
"md5_digest": "3c0b864ce0ffdc65fcc3916463b4ce29",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.10",
"size": 199908,
"upload_time": "2025-09-03T20:21:36",
"upload_time_iso_8601": "2025-09-03T20:21:36.813742Z",
"url": "https://files.pythonhosted.org/packages/1c/23/9b0f5e7796511d6736750e17ed2c8bd4b3af079f6cd4819e49ab90192d74/prefixtrie-1.1.0-cp314-cp314-macosx_10_13_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a9823ec9b85f7573c5cead626e2af323fd46c97f21af84fd6f8c63133ab034d5",
"md5": "6a8083e25985bcdfc74aa599329dad76",
"sha256": "4ea77cf08eb1adf4546ba8e1d2bdfc80b37f09e307aa14f64e6683a7818c548c"
},
"downloads": -1,
"filename": "prefixtrie-1.1.0-cp314-cp314-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "6a8083e25985bcdfc74aa599329dad76",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.10",
"size": 196239,
"upload_time": "2025-09-03T20:21:38",
"upload_time_iso_8601": "2025-09-03T20:21:38.340625Z",
"url": "https://files.pythonhosted.org/packages/a9/82/3ec9b85f7573c5cead626e2af323fd46c97f21af84fd6f8c63133ab034d5/prefixtrie-1.1.0-cp314-cp314-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e64db81b41c8927f5ddfc5806155cc47f1c9148f10b1f70d80a706c1d24ff656",
"md5": "961995bf564713b05b8710b22772d0ee",
"sha256": "73a6422e5efb856a91546bf1b33c906022346ee5d36fa28cc7aa341d9b9a96d3"
},
"downloads": -1,
"filename": "prefixtrie-1.1.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl",
"has_sig": false,
"md5_digest": "961995bf564713b05b8710b22772d0ee",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.10",
"size": 203658,
"upload_time": "2025-09-03T20:21:39",
"upload_time_iso_8601": "2025-09-03T20:21:39.421143Z",
"url": "https://files.pythonhosted.org/packages/e6/4d/b81b41c8927f5ddfc5806155cc47f1c9148f10b1f70d80a706c1d24ff656/prefixtrie-1.1.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "aa280c339c1cde146d38ea8107d74e9fe57d9e31c28bfbac1e43da4b7b88c2a8",
"md5": "491188fbf3367f092b85861e06d633d8",
"sha256": "eded9037a253d017993f2f729e663cfbfff88feb644fbd57b7cd3dddaf7b5f0b"
},
"downloads": -1,
"filename": "prefixtrie-1.1.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "491188fbf3367f092b85861e06d633d8",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.10",
"size": 210309,
"upload_time": "2025-09-03T20:21:41",
"upload_time_iso_8601": "2025-09-03T20:21:41.322964Z",
"url": "https://files.pythonhosted.org/packages/aa/28/0c339c1cde146d38ea8107d74e9fe57d9e31c28bfbac1e43da4b7b88c2a8/prefixtrie-1.1.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "d3b56822c5401ca8e0a8c37dbde4b1eaa8c92cc1d56bd2562041c3ecc8ce15aa",
"md5": "133fb7282bbff19f309802a6bdd45900",
"sha256": "535a9b6781ec160f3b11a23f5af37449b2d802882b18a6b061f1f936c4a1d2c6"
},
"downloads": -1,
"filename": "prefixtrie-1.1.0-cp314-cp314t-macosx_10_13_x86_64.whl",
"has_sig": false,
"md5_digest": "133fb7282bbff19f309802a6bdd45900",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.10",
"size": 202284,
"upload_time": "2025-09-03T20:21:44",
"upload_time_iso_8601": "2025-09-03T20:21:44.859133Z",
"url": "https://files.pythonhosted.org/packages/d3/b5/6822c5401ca8e0a8c37dbde4b1eaa8c92cc1d56bd2562041c3ecc8ce15aa/prefixtrie-1.1.0-cp314-cp314t-macosx_10_13_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "bd91f9b566bd9602c3c788856906f839836186499527900f8337f67c0dcd92e8",
"md5": "6d6b26be64c021bdbada2276ff8aea50",
"sha256": "df0d85838915f208e867e3467c9f00f4e02cfb89158bb3e7a47a4e7cb1d7fff6"
},
"downloads": -1,
"filename": "prefixtrie-1.1.0-cp314-cp314t-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "6d6b26be64c021bdbada2276ff8aea50",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.10",
"size": 199085,
"upload_time": "2025-09-03T20:21:46",
"upload_time_iso_8601": "2025-09-03T20:21:46.492007Z",
"url": "https://files.pythonhosted.org/packages/bd/91/f9b566bd9602c3c788856906f839836186499527900f8337f67c0dcd92e8/prefixtrie-1.1.0-cp314-cp314t-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b7f04b9a6230bd0352fa65397ddb0b9201692878404d2ba92be157e2812c9434",
"md5": "4e0a9f72049773c1b2383e50d1f24190",
"sha256": "24de4401f2c5794e036e47e1723b28f770f374de64ba45879fdff8577ce76a0e"
},
"downloads": -1,
"filename": "prefixtrie-1.1.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl",
"has_sig": false,
"md5_digest": "4e0a9f72049773c1b2383e50d1f24190",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.10",
"size": 205999,
"upload_time": "2025-09-03T20:21:47",
"upload_time_iso_8601": "2025-09-03T20:21:47.646120Z",
"url": "https://files.pythonhosted.org/packages/b7/f0/4b9a6230bd0352fa65397ddb0b9201692878404d2ba92be157e2812c9434/prefixtrie-1.1.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "355a184641dc578c3230cd5739c85ac626a7514dc9292b436b331ffcff606de6",
"md5": "3240fb9ba61203c8e5125f18cd88b281",
"sha256": "b5ff44a3c78cfe8d3f6b2daa4ae3d78aee66fcc8456ef7d68840ddfd15f50bf5"
},
"downloads": -1,
"filename": "prefixtrie-1.1.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "3240fb9ba61203c8e5125f18cd88b281",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.10",
"size": 213015,
"upload_time": "2025-09-03T20:21:48",
"upload_time_iso_8601": "2025-09-03T20:21:48.846432Z",
"url": "https://files.pythonhosted.org/packages/35/5a/184641dc578c3230cd5739c85ac626a7514dc9292b436b331ffcff606de6/prefixtrie-1.1.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "284d407a243bdb1ecef4acd2f43664c92ba2790ce7d3b470b6aff7f7e371107f",
"md5": "d1c0713a7fe6b5e06ffb2d42bc284848",
"sha256": "7e7efce331b18ee4b37eabd592050387d3601d1a89754b33761caeb5fcaf948c"
},
"downloads": -1,
"filename": "prefixtrie-1.1.0-cp314-cp314t-win32.whl",
"has_sig": false,
"md5_digest": "d1c0713a7fe6b5e06ffb2d42bc284848",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.10",
"size": 187124,
"upload_time": "2025-09-03T20:21:50",
"upload_time_iso_8601": "2025-09-03T20:21:50.069020Z",
"url": "https://files.pythonhosted.org/packages/28/4d/407a243bdb1ecef4acd2f43664c92ba2790ce7d3b470b6aff7f7e371107f/prefixtrie-1.1.0-cp314-cp314t-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "9f3bd232ea69da3d28695b9c69cdf5933d0232b76c04c53b65192e1407dda922",
"md5": "5831ceedec83c8d37781c87c6a5ce5c1",
"sha256": "4789a7af7a1104c40f1c1d96a65dd01ca4aea9847d1b8118bd29fb62a8d2bdb9"
},
"downloads": -1,
"filename": "prefixtrie-1.1.0-cp314-cp314t-win_amd64.whl",
"has_sig": false,
"md5_digest": "5831ceedec83c8d37781c87c6a5ce5c1",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.10",
"size": 194759,
"upload_time": "2025-09-03T20:21:51",
"upload_time_iso_8601": "2025-09-03T20:21:51.582958Z",
"url": "https://files.pythonhosted.org/packages/9f/3b/d232ea69da3d28695b9c69cdf5933d0232b76c04c53b65192e1407dda922/prefixtrie-1.1.0-cp314-cp314t-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "78def17e7fc001541b6935b53129a5b2ff77164e3c804cf54e9e0ebc42d7405a",
"md5": "87b6ae080c1c0a9a0c44bafcfee8efb0",
"sha256": "be1850d6f93b971550c2de5c4525c733eb1e08801db559cfcdb37d5593879381"
},
"downloads": -1,
"filename": "prefixtrie-1.1.0-cp314-cp314-win32.whl",
"has_sig": false,
"md5_digest": "87b6ae080c1c0a9a0c44bafcfee8efb0",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.10",
"size": 182871,
"upload_time": "2025-09-03T20:21:42",
"upload_time_iso_8601": "2025-09-03T20:21:42.537560Z",
"url": "https://files.pythonhosted.org/packages/78/de/f17e7fc001541b6935b53129a5b2ff77164e3c804cf54e9e0ebc42d7405a/prefixtrie-1.1.0-cp314-cp314-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "47e405ea037a788b26d157f7c1d7f025cc5b6dfca9c2ce226b3ce7ab90b4b0d1",
"md5": "2cf0594589db1963b8f26fb942f1bb40",
"sha256": "a69f26b87dc360e59d74d474559fbffbaadb1183ba95bc4bbd5a7f776d79515b"
},
"downloads": -1,
"filename": "prefixtrie-1.1.0-cp314-cp314-win_amd64.whl",
"has_sig": false,
"md5_digest": "2cf0594589db1963b8f26fb942f1bb40",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.10",
"size": 188818,
"upload_time": "2025-09-03T20:21:43",
"upload_time_iso_8601": "2025-09-03T20:21:43.635358Z",
"url": "https://files.pythonhosted.org/packages/47/e4/05ea037a788b26d157f7c1d7f025cc5b6dfca9c2ce226b3ce7ab90b4b0d1/prefixtrie-1.1.0-cp314-cp314-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f009bd5293071073aa5f1404c328442001385c3d3640316408cd5ab216c7b086",
"md5": "525161e41e46855c1acbfa87553073d7",
"sha256": "d8cae4cc9e597f429efc234b8c5194dd40e02b00c46473680e8235d4e2e36707"
},
"downloads": -1,
"filename": "prefixtrie-1.1.0.tar.gz",
"has_sig": false,
"md5_digest": "525161e41e46855c1acbfa87553073d7",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 301922,
"upload_time": "2025-09-03T20:21:52",
"upload_time_iso_8601": "2025-09-03T20:21:52.816193Z",
"url": "https://files.pythonhosted.org/packages/f0/09/bd5293071073aa5f1404c328442001385c3d3640316408cd5ab216c7b086/prefixtrie-1.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-09-03 20:21:52",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "austinv11",
"github_project": "PrefixTrie",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "prefixtrie"
}