Skip to main content

Hierarchical coordinate frames - crystal clear transforms

Project description

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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hazy_frames-0.2.0.tar.gz (762.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

hazy_frames-0.2.0-py3-none-any.whl (19.8 kB view details)

Uploaded Python 3

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

Hashes for hazy_frames-0.2.0.tar.gz
Algorithm Hash digest
SHA256 f7f643864e93ffab43494681b1a6c52b65891d762ce5ae5f357d1367a1950d98
MD5 57bc0737653010b638834e3e7e197833
BLAKE2b-256 655a9412b64c57147ce915a84b8d9fa49bd3b96e80d50af686666aee048865ca

See more details on using hashes here.

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

Hashes for hazy_frames-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0160aff4f682da4dfe1502b583af1c2245c56ab9fd5368614eebde7b64636fe3
MD5 687f3d3409be1b761becc9d7d6d231df
BLAKE2b-256 f955a9880b7f06d658b70ae7d590bdd57cffcde9aeb6dbad26b919acb0884ed6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page