Skip to main content

hazy-frames

Python Version License: MIT Code style: ruff CI codecov Documentation Status

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: Point and Vector classes 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.

Metadata

Release files for hazy-frames 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for hazy-frames 0.2.0
File Size Uploaded
hazy_frames-0.2.0.tar.gz 762.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for hazy-frames 0.2.0
File Interpreter ABI Platform
hazy_frames-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 782.1 kB

Release files / hazy_frames-0.2.0.tar.gz

Download URL hazy_frames-0.2.0.tar.gz
Size 762.3 kB
Tags Source
SHA-256 checksum
How to use checksums
f7f643864e93ffab43494681b1a6c52b65891d762ce5ae5f357d1367a1950d98
BLAKE2b-256 checksum
How to use checksums
655a9412b64c57147ce915a84b8d9fa49bd3b96e80d50af686666aee048865ca
Upload date
Uploaded using Trusted Publishing?
What is 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}

Release files / hazy_frames-0.2.0-py3-none-any.whl

Download URL hazy_frames-0.2.0-py3-none-any.whl
Size 19.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0160aff4f682da4dfe1502b583af1c2245c56ab9fd5368614eebde7b64636fe3
BLAKE2b-256 checksum
How to use checksums
f955a9880b7f06d658b70ae7d590bdd57cffcde9aeb6dbad26b919acb0884ed6
Upload date
Uploaded using Trusted Publishing?
What is 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}

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page