Skip to main content

High-performance quaternions with JAX support

Project description

FastQuat - High-Performance Quaternions with JAX

PyPI version Python versions Tests

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 = 1 / q1           # Inverse, or q1 ** -1
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, power, exponentiation, logarithm
  • 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


Download files

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

Source Distribution

fastquat-0.5.2.tar.gz (169.6 kB view details)

Uploaded Source

Built Distribution

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

fastquat-0.5.2-py3-none-any.whl (7.6 kB view details)

Uploaded Python 3

File details

Details for the file fastquat-0.5.2.tar.gz.

File metadata

  • Download URL: fastquat-0.5.2.tar.gz
  • Upload date:
  • Size: 169.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for fastquat-0.5.2.tar.gz
Algorithm Hash digest
SHA256 51b0395f3f1b803b6ec041c0c42662a1b1214d2e36bf4fea6bbbdbc57267dc08
MD5 e57c26a2d902ab46413729d55194d1b8
BLAKE2b-256 4c1f39878e6fda06638129d2b2bbbefc79b1e3c97cfcfaadcff67539c0c97945

See more details on using hashes here.

Provenance

The following attestation bundles were made for fastquat-0.5.2.tar.gz:

Publisher: release.yml on CMBSciPol/fastquat

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file fastquat-0.5.2-py3-none-any.whl.

File metadata

  • Download URL: fastquat-0.5.2-py3-none-any.whl
  • Upload date:
  • Size: 7.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for fastquat-0.5.2-py3-none-any.whl
Algorithm Hash digest
SHA256 f2101db935484be0ee1dcb4fcee1e3326a8a987eda568b9e2f8e6adcdd7d7891
MD5 71dbf6fe0900e701bdbe61ab8273b22a
BLAKE2b-256 851fb619cb60f6261420c966cdc188de4ce7802cc7ca5a19ab14655372011415

See more details on using hashes here.

Provenance

The following attestation bundles were made for fastquat-0.5.2-py3-none-any.whl:

Publisher: release.yml on CMBSciPol/fastquat

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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