SpinStep - Read the Docs
SpinStep is a proof-of-concept quaternion-driven traversal framework for trees and orientation-based data structures.
By leveraging the power of 3D rotation math, SpinStep enables traversal based not on position or order, but on orientation. This makes it ideal for spatial reasoning, robotics, 3D scene graphs, and anywhere quaternion math naturally applies.
- Quaternion-based stepping and branching
- Full support for yaw, pitch, and roll rotations
- Configurable angular thresholds for precision control
- Easily extendable to N-ary trees or orientation graphs
- Written in Python with SciPy's rotation engine
from spinstep import Node, QuaternionDepthIterator
# Define your tree with orientation quaternions
root = Node("root", [0, 0, 0, 1], [
Node("child", [0.2588, 0, 0, 0.9659]) # ~30 degrees around Z
])
# Step using a 30-degree rotation
iterator = QuaternionDepthIterator(root, [0.2588, 0, 0, 0.9659])
for node in iterator:
print("Visited:", node.name)
- Python 3.8+
numpy
scipy
scikit-learn
Install dependencies via pip:
pip install numpy scipy scikit-learn
.orientation
: Quaternion as[x, y, z, w]
, always normalized..children
: Iterable of nodes.- Node constructor and orientation set utilities always normalize quaternions and check for zero-norm.
angle_threshold
parameters are always in radians.
All core functions will raise ValueError
or AttributeError
if these invariants are violated.
SpinStep uses quaternion rotation to determine if a child node is reachable from a given orientation. Only children whose orientations lie within a defined angular threshold (default: 45°) of the current rotation state are traversed.
This mimics rotational motion or attention in physical and virtual spaces. Ideal for:
- Orientation trees
- 3D pose search
- Animation graph traversal
- Spatial AI and robotics
- Each node in a graph or tree encodes a rotational state (quaternion)
- Traversal is guided by a current quaternion state
- At each step, you rotate your state and select the next node based on geometric orientation
🔸 Use Cases: Scene graphs, spatial indexing, directional AI traversal, robot path planning
Instead of:
next = left or right
You define:
next_node = rotate(current_orientation, branch_orientation)
- Rotation (quaternion multiplication) becomes the “step” function
- Orientation and direction are first-class traversal parameters
🔸 Use Cases: Game engines, camera control, 3D modeling, procedural generation
- Use quaternion distance (angle) to decide which branches to explore or when to stop
- Think of it like a quaternion-aware k-d tree
Imagine walking through a tree not left/right — but by rotating in space:
- Rotate pitch to descend to one child
- Rotate yaw to reach another
- Traverse hierarchies by change in orientation, not position
spinstep/
├── __init__.py
├── discrete.py
├── discrete_iterator.py
├── node.py
├── traversal.py
└── utils/
├── array_backend.py
├── quaternion_math.py
└── quaternion_utils.py
benchmark/
├── edge-cases.md
├── INSTRUCTIONS.md
├── qgnn_example.py
├── README.md
├── references.md
└── test_qgnn_benchmark.py
demos/
├── demo1_tree_traversal.py
├── demo2_full_depth_traversal.py
├── demo3_spatial_traversal.py
├── demo4_discrete_traversal.py
└── demo.py
examples/
└── gpu_orientation_matching.py
tests/
├── test_discrete_traversal.py
└── test_spinstep.py
docs/
├── assets/
│ ├── img/
│ │ └── (...) # Images go here
│ └── notebooks/
│ └── (...) # Jupyter notebooks or rendered outputs
├── CONTRIBUTING.md
└── index.md
# Root files
CHANGELOG.md
LICENSE
MANIFEST.in
pyproject.toml
README.md
requirements.txt
dev-requirements.txt
setup.cfg
setup.py
First, clone the repository:
git clone https://github.com/VoxLeone/spinstep.git
cd spinstep
Then, install it:
pip install .
To build a wheel distribution:
python -m build
MIT — free to use, fork, and adapt.
PRs and issues are welcome!
If you're using SpinStep in a cool project, let us know.