Hierarchical coordinate frames - crystal clear transforms
Project description
hazy-frames
Hierarchical coordinate frames - crystal clear transforms
A Python library for managing hierarchical reference frames and frame-aware geometric primitives with efficient transformation caching, inspired by optiland.
hazy-frames fills the gap between heavyweight robotics frameworks like ROS and specialized libraries like pytransform3d or astropy. It provides a lightweight, Pythonic API for tracking geometric objects across multiple coordinate systems - perfect for raytracing, computer graphics, robotics simulations, CFD mesh generation (OpenFOAM blockMesh), or any application requiring coordinate transformations. Born from the need of managing objects across different frames in a non-sequential raytracing project, it offers a clean, intuitive interface that just works.
Philosophy: Do one thing well with minimal dependencies (only numpy and scipy). No visualization, no physics simulation, no file I/O - just clean, efficient coordinate transformations. The library enforces geometric semantics (e.g., Point + Point is forbidden, but Point - Point = Vector is allowed) as an opt-out contract - preventing common bugs while staying Pythonic. Designed as a lightweight building block that integrates seamlessly into your existing toolchain.
Features
- Hierarchical Frame System: Build complex frame hierarchies with parent-child relationships
- Frame-Aware Primitives:
PointandVectorclasses that carry frame information - NumPy Integration: Native array support with batch operations, factory methods, and stack functions
- Automatic Transformations: Transform primitives between any frames in the hierarchy
- Efficient Caching: Transformation matrices are cached for performance
- Proper Geometric Semantics: Type-safe arithmetic operations (e.g., Point - Point = Vector)
- Flexible Transformations: Support for rotation (Euler angles, quaternions, matrices), translation, and scaling
Installation
Install directly from GitHub:
pip install git+https://github.com/Littie28/hazy-frames.git
Or download the wheel from releases:
pip install hazy_frames-0.2.0-py3-none-any.whl
For development:
# Clone the repository
git clone https://github.com/Littie28/hazy-frames.git
cd hazy-frames
# Install with development dependencies
uv sync --group dev
Quick Start
from hazy import Frame, Point, Vector
# Create a frame hierarchy
world = Frame.make_root("world")
robot = world.make_child(name="robot")
robot.translate(x=5, y=0, z=0).rotate_euler(z=90, degrees=True)
camera = robot.make_child(name="camera")
camera.translate(x=0, y=0, z=1)
# Create frame-aware primitives
point_in_camera = camera.point(1, 0, 0)
# Transform between frames
point_in_world = point_in_camera.to_frame(world)
point_in_robot = point_in_camera.to_frame(robot)
print(f"Camera: {point_in_camera}")
print(f"World: {point_in_world}")
print(f"Robot: {point_in_robot}")
Documentation
Full documentation, tutorials, and API reference are available at ReadTheDocs.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under the MIT License - see the LICENSE file for details.
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 hazy_frames-0.2.0.tar.gz.
File metadata
- Download URL: hazy_frames-0.2.0.tar.gz
- Upload date:
- Size: 762.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"NixOS","version":"26.05","id":"yarara","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f7f643864e93ffab43494681b1a6c52b65891d762ce5ae5f357d1367a1950d98
|
|
| MD5 |
57bc0737653010b638834e3e7e197833
|
|
| BLAKE2b-256 |
655a9412b64c57147ce915a84b8d9fa49bd3b96e80d50af686666aee048865ca
|
File details
Details for the file hazy_frames-0.2.0-py3-none-any.whl.
File metadata
- Download URL: hazy_frames-0.2.0-py3-none-any.whl
- Upload date:
- Size: 19.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"NixOS","version":"26.05","id":"yarara","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0160aff4f682da4dfe1502b583af1c2245c56ab9fd5368614eebde7b64636fe3
|
|
| MD5 |
687f3d3409be1b761becc9d7d6d231df
|
|
| BLAKE2b-256 |
f955a9880b7f06d658b70ae7d590bdd57cffcde9aeb6dbad26b919acb0884ed6
|