Quaternion operations in pure PyTorch
Project description
Quaternions in PyTorch
QuaTorch
The package quatorch provides Quaternion, a torch.Tensor subclass that represents a Quaternion. It implements common operations in following quaternion algebra such as multiplication,
conjugation, inversion, normalization, log, exp, etc. It also supports conversion to/from rotation matrix and axis-angle representation. Convenient utilities are provided together, such as spherical linear interpolation (slerp) and 3D vector rotation.
Highlights
- Quaternion type:
quatorch.Quaternion(subclass oftorch.Tensor). - Element-wise and algebraic ops implemented:
+,-,*(quaternion product and scalar mul),abs(norm),conjugate,inverse,normalize,to_rotation_matrix, and more. - Utilities:
from_rotation_matrix,from_axis_angle,to_axis_angle,rotate_vector,slerp,log,exp, andpow.
Installation
This project targets Python 3.10+ and requires PyTorch. Install via pip (recommended):
pip install quatorch
Or install editable/development mode:
git clone
cd QuaTorch
pip install -e .
See pyproject.toml for dependency details (dev deps include pytest).
Quick start
Basic usage examples using PyTorch tensors and Quaternion:
import torch
from quatorch.quaternion import Quaternion
# Create a quaternion from four scalars (W, X, Y, Z)
q = Quaternion(1.0, 0.0, 0.0, 0.0)
# Or from a tensor of shape (..., 4)
q2 = Quaternion(torch.tensor([0.9239, 0.3827, 0.0, 0.0])) # 45° around X
# Normalize
q2 = q2.normalize()
# Quaternion multiplication (rotation composition)
q3 = q * q2
# Rotate a vector
v = torch.tensor([1.0, 0.0, 0.0])
v_rot = q2.rotate_vector(v)
# Convert to rotation matrix
R = q2.to_rotation_matrix()
# Slerp between quaternions
t = 0.5
q_mid = q.slerp(q2, t)
API notes
-
Construction:
Quaternion(data: torch.Tensor)wheredata.shape[-1] == 4.Quaternion(w, x, y, z)accepts scalars or tensors broadcastable to the same shape.
-
Shape requirements:
- The last dimension must be size 4 for quaternion tensors (W, X, Y, Z).
-
Interoperability:
- The class implements several
torch.*functions via a small dispatcher so many PyTorch APIs behave sensibly withQuaternionobjects.
- The class implements several
See the source in src/quatorch/quaternion.py for the full implementation and more
helper methods.
Running tests
This repository includes unit tests using pytest under test/unit_tests.
From the project root, run:
uv run --with=. pytest
Contributing
Contributions are welcome. A few ideas:
- Add more conversions and higher-level utilities (e.g., batch rotation helpers).
- Improve numeric stability and add property-based tests.
- Add docs and usage notebooks / examples.
Please open issues or pull requests on the repository.
License
MIT — see the LICENSE.md for author/maintainer information.
Contact
Maintainer: Lucas N. Egidio lucasegidio1@gmail.com
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 quatorch-0.1.0a0.tar.gz.
File metadata
- Download URL: quatorch-0.1.0a0.tar.gz
- Upload date:
- Size: 5.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.8.18
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
63a49b8f893d88d77325d20f0124812b5a297bf750269e6b3a814ff778c4b75f
|
|
| MD5 |
9d1710093a9c87d074655716d58b7f7e
|
|
| BLAKE2b-256 |
9fd189c315eb8d8e92fd3329f5401863735ca8ebef47e8a38745a79d5731d203
|
File details
Details for the file quatorch-0.1.0a0-py3-none-any.whl.
File metadata
- Download URL: quatorch-0.1.0a0-py3-none-any.whl
- Upload date:
- Size: 6.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.8.18
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d4454b7263f1fe553d32289ae5cc917d7b87caceac628e0073c477bf653eafae
|
|
| MD5 |
42f5783587891fe79f8326b2984391d5
|
|
| BLAKE2b-256 |
85c0c8f43dc8a9ea534ad732bed23217c1de6e73fbadd52b4569900c1df90df7
|