Tree protocols and generic algorithms for the vcti ecosystem. Zero-dependency abstractions; pluggable backings.
Project description
vcti-tree
Tree protocols and generic algorithms for the vcti ecosystem. Zero-dependency abstractions; pluggable backings.
Overview
vcti-tree defines what a tree is in the vcti ecosystem: three
Protocols (ReadOnlyTree, MutableTree, LockableTree)
parameterised in payload type T and handle type H, plus generic
algorithms — DFS and BFS walks, ancestor/depth/path queries,
locking guards — written against those Protocols. The Protocols
specify semantics (what a tree must support); they do not
prescribe storage. Any backing — numpy-array, pointer-based,
dict-based — that satisfies the Protocols gets the algorithms for
free. The package has no numpy or other heavy dependency; it is a
pure-Python abstraction layer that downstream tree packages depend
on.
Why this exists
Tree code in the Python ecosystem typically bundles storage, mutation, and traversal into a single class — every new tree implementation re-implements its own walker, its own navigation helpers, its own delete semantics. This package brings across a pattern that's well-established in C++: a small abstract interface defining what a tree is, multiple concrete implementations choosing their own storage, and generic algorithms written once against the interface and reused across every backing. The result is that adding a new tree implementation (numpy-backed, pointer-backed, persistent, …) doesn't mean rewriting walkers and guards — it means satisfying three small Protocols and inheriting the entire algorithm library. See docs/design.md for the full background and the design decisions.
Installation
pip install vcti-tree
In requirements.txt
vcti-tree>=1.0.0
In pyproject.toml dependencies
dependencies = [
"vcti-tree>=1.0.0",
]
Quick Start
The protocols and algorithms are the API; you bring (or import) a
backing. DictTree is the bundled dict-backed reference
implementation — enough to build a tree and run the generic algorithms
against it:
from vcti.tree import DictTree, dfs_preorder, ancestors, depth
tree = DictTree[str]("root") # every tree has a root from the start
a = tree.create_child(tree.root_handle, "a")
b = tree.create_child(tree.root_handle, "b")
tree.create_child(a, "a1")
# Generic walks/queries work against any tree that satisfies the protocols.
print([tree.payload(h) for h in dfs_preorder(tree)]) # ['root', 'a', 'a1', 'b']
print([tree.payload(h) for h in ancestors(tree, a)]) # ['root']
print(depth(tree, a)) # 1
The protocols (ReadOnlyTree, MutableTree, LockableTree) and the
rest of the algorithm set are importable from the same package root:
from vcti.tree import ReadOnlyTree, MutableTree, LockableTree
from vcti.tree import dfs_preorder, dfs_postorder, bfs
from vcti.tree import ancestors, depth, path, descendants
Dependencies
None. Standard library only.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file vcti_tree-1.0.0.tar.gz.
File metadata
- Download URL: vcti_tree-1.0.0.tar.gz
- Upload date:
- Size: 17.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2cbba5cecf7fba6e0cf635a5cb0274fe3c31a726e04f234d92fee8430851794e
|
|
| MD5 |
7cb9d56f38688922bf142e3f7e2fe02e
|
|
| BLAKE2b-256 |
b487ba77469fe2e4edbb9275f15b1fd04792390c2edee1f2a95ad556f9dae069
|
Provenance
The following attestation bundles were made for vcti_tree-1.0.0.tar.gz:
Publisher:
release.yml on vcollab/vcti-python-tree
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
vcti_tree-1.0.0.tar.gz -
Subject digest:
2cbba5cecf7fba6e0cf635a5cb0274fe3c31a726e04f234d92fee8430851794e - Sigstore transparency entry: 1676885694
- Sigstore integration time:
-
Permalink:
vcollab/vcti-python-tree@9f790159a5220fb58eb61180f356a829a6b0344a -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/vcollab
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@9f790159a5220fb58eb61180f356a829a6b0344a -
Trigger Event:
push
-
Statement type:
File details
Details for the file vcti_tree-1.0.0-py3-none-any.whl.
File metadata
- Download URL: vcti_tree-1.0.0-py3-none-any.whl
- Upload date:
- Size: 13.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2c10242b84ad04476680a738d6cce393a610466fdebc36aabd4d20a41ecc0158
|
|
| MD5 |
300e14e241b85f6d7f96ac9f3afd309d
|
|
| BLAKE2b-256 |
47d1b0ffff817d118f4e2c40ca9f9a71cf19a92b22b7bfa61900af76fcb64646
|
Provenance
The following attestation bundles were made for vcti_tree-1.0.0-py3-none-any.whl:
Publisher:
release.yml on vcollab/vcti-python-tree
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
vcti_tree-1.0.0-py3-none-any.whl -
Subject digest:
2c10242b84ad04476680a738d6cce393a610466fdebc36aabd4d20a41ecc0158 - Sigstore transparency entry: 1676885765
- Sigstore integration time:
-
Permalink:
vcollab/vcti-python-tree@9f790159a5220fb58eb61180f356a829a6b0344a -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/vcollab
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@9f790159a5220fb58eb61180f356a829a6b0344a -
Trigger Event:
push
-
Statement type: