High-performance quaternions with JAX support
Project description
FastQuat - High-Performance Quaternions with JAX
FastQuat provides optimized quaternion operations with full JAX compatibility, featuring:
- 🚀 Hardware-accelerated computations (CPU/GPU/TPU)
- 🔄 Automatic differentiation support
- 🧩 Seamless integration with JAX transformations (
jit,grad,vmap) - 📦 Efficient storage using interleaved memory layout
Installation
pip install fastquat
This will install FastQuat with CPU support. For GPU support, you may need to install JAX with CUDA support:
pip install "jax[cuda12]" fastquat
Quick Start
import jax.numpy as jnp
from fastquat import Quaternion
# Create quaternions
q1 = Quaternion.ones() # Identity quaternion
q2 = Quaternion(0.7071, 0.7071, 0.0, 0.0) # 90° rotation around x-axis
# Quaternion operations
q3 = q1 * q2 # Multiplication
q_inv = q1.inverse() # Inverse
q_norm = q1.normalize() # Normalization
# Rotate vectors
vector = jnp.array([1.0, 0.0, 0.0])
rotated = q2.rotate_vector(vector)
# Spherical interpolation (SLERP)
interpolated = q1.slerp(q2, t=0.5) # Halfway between q1 and q2
Features
Core Operations
- Quaternion arithmetic: Addition, multiplication, conjugation, inverse
- Normalization: Efficient unit quaternion computation
- Conversion: To/from rotation matrices, Euler angles
- Vector rotation: Direct vector transformation
Advanced Interpolation
- SLERP (Spherical Linear Interpolation): Smooth rotation interpolation
- Automatically handles shortest path selection
- Numerically stable for close quaternions
- Supports batched operations and array-valued parameters
JAX Integration
- JIT compilation: Compile quaternion operations for maximum performance
- Automatic differentiation: Compute gradients through quaternion operations
- Vectorization: Process batches of quaternions efficiently
- Device support: Run on CPU, GPU, or TPU
Performance
FastQuat is optimized for high-performance computing:
- Memory-efficient interleaved storage
- SIMD-optimized operations on supported hardware
- Zero-copy integration with JAX arrays
- Minimal Python overhead through JIT compilation
Examples
Basic Usage
import jax
import jax.numpy as jnp
from fastquat import Quaternion
# Create random quaternions
key = jax.random.PRNGKey(42)
q_batch = Quaternion.random(key, shape=(1000,))
# JIT-compiled batch operations
@jax.jit
def batch_rotate(quaternions, vectors):
return quaternions.rotate_vector(vectors)
vectors = jax.random.normal(key, (1000, 3))
rotated_batch = batch_rotate(q_batch, vectors)
SLERP
# Smooth rotation interpolation
q_start = Quaternion.ones()
q_end = Quaternion.from_rotation_matrix(rotation_matrix)
# Generate smooth interpolation
t_values = jnp.linspace(0, 1, 100)
interpolated_rotations = q_start.slerp(q_end, t_values)
# Apply to object vertices for smooth animation
animated_vertices = interpolated_rotations.rotate_vector(object_vertices)
Documentation
Full documentation is available at fastquat.readthedocs.io
Contributing
Contributions are welcome! Please see our development guide for details.
License
MIT License - see 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 fastquat-0.3.tar.gz.
File metadata
- Download URL: fastquat-0.3.tar.gz
- Upload date:
- Size: 6.6 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d6d5b64cf87641e87eb747771ea9d236c212479feabfd14cc10199a15236f476
|
|
| MD5 |
d588eabcc4ad0ecbccca261a6a774e71
|
|
| BLAKE2b-256 |
ecd0bf4cda3191009df22dac9398b1b5f8916ad519ecc5aeb129908aea04a06e
|
Provenance
The following attestation bundles were made for fastquat-0.3.tar.gz:
Publisher:
release.yml on CMBSciPol/fastquat
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
fastquat-0.3.tar.gz -
Subject digest:
d6d5b64cf87641e87eb747771ea9d236c212479feabfd14cc10199a15236f476 - Sigstore transparency entry: 310891654
- Sigstore integration time:
-
Permalink:
CMBSciPol/fastquat@f317e281c23ead18d8f2f4e165d3b7a0d61750a1 -
Branch / Tag:
refs/tags/0.3 - Owner: https://github.com/CMBSciPol
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@f317e281c23ead18d8f2f4e165d3b7a0d61750a1 -
Trigger Event:
release
-
Statement type:
File details
Details for the file fastquat-0.3-py3-none-any.whl.
File metadata
- Download URL: fastquat-0.3-py3-none-any.whl
- Upload date:
- Size: 7.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3e134b59903a9dff55d0c9d4c038b659429391dcce180ad4145292a6ce8db7f0
|
|
| MD5 |
1434298c9456a88f5e3559924ed2e0f4
|
|
| BLAKE2b-256 |
e210c7ad810749c6c55e1da89482123caef36ac0dcfb0addce192a8f2c7f413f
|
Provenance
The following attestation bundles were made for fastquat-0.3-py3-none-any.whl:
Publisher:
release.yml on CMBSciPol/fastquat
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
fastquat-0.3-py3-none-any.whl -
Subject digest:
3e134b59903a9dff55d0c9d4c038b659429391dcce180ad4145292a6ce8db7f0 - Sigstore transparency entry: 310891674
- Sigstore integration time:
-
Permalink:
CMBSciPol/fastquat@f317e281c23ead18d8f2f4e165d3b7a0d61750a1 -
Branch / Tag:
refs/tags/0.3 - Owner: https://github.com/CMBSciPol
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@f317e281c23ead18d8f2f4e165d3b7a0d61750a1 -
Trigger Event:
release
-
Statement type: