Skip to main content

Hyperbolic Deep Learning in JAX

Project description

Hyperbolix

Hyperbolic Deep Learning in JAX

Tests Python JAX License

Pure JAX implementation of hyperbolic deep learning with manifold operations, neural network layers, and Riemannian optimizers. Built with Flax NNX and Optax.

Features

  • 🌐 5 Manifolds: Euclidean, Poincaré Ball, Hyperboloid, Proper Velocity, and Product Manifold (mixed-curvature composition)
  • 🎛️ Learnable Curvature: Optional softplus-reparametrized nnx.Param curvature per manifold; with per-factor control in product spaces
  • 🧠 20+ Neural Network Layers: Linear, convolutional, regression, attention, positional encoding, PV
  • 5 Hyperbolic Activations: ReLU, Leaky ReLU, Tanh, Swish, GELU
  • 📈 Riemannian Optimizers: RAdam and RSGD with automatic manifold detection
  • 🚀 Pure JAX/Flax NNX: vmap-native API, JIT-compatible (10-100x speedup)
  • 4,400+ tests passing (618 test functions, parametrized across seeds, dtypes, manifolds) with comprehensive benchmark suite

Quick Start

import jax.numpy as jnp
from flax import nnx
from hyperbolix.manifolds import Poincare
from hyperbolix.nn_layers import HypLinearPoincare

# Class-based manifold instance (optionally float64 or learnable curvature)
poincare = Poincare()  # add dtype=jnp.float64 / learnable=True as needed

# Manifold operations (single-point; use jax.vmap for batches)
x = jnp.array([0.1, 0.2])
y = jnp.array([0.3, -0.1])
distance = poincare.dist(x, y, c=1.0)

# Neural network layer
layer = HypLinearPoincare(
    manifold_module=poincare,
    in_dim=128,
    out_dim=64,
    rngs=nnx.Rngs(0),
)
output = layer(x_batch, c=1.0)

Mixed-Curvature Product Spaces

from hyperbolix.manifolds import ProductManifold, Hyperboloid, Poincare, Euclidean

# H^5 (learnable c) × P^3 (fixed c=0.1) × E^4 — points live in R^12
product = ProductManifold(
    (Hyperboloid(c=1.0, learnable=True), 5),
    (Poincare(c=0.1), 3),
    (Euclidean(), 4),
)
d = product.dist(x, y)  # sqrt(sum d_i^2) over factors

Installation

git clone https://github.com/hyperbolix/hyperbolix.git
cd hyperbolix
uv sync  # or: pip install -e .

Requirements: Python 3.12+, JAX 0.4.20+, Flax 0.8.0+, Optax 0.1.7+

Documentation

📖 Full Documentation

Build docs locally: uv run mkdocs serve

Key Concepts

Class-based manifolds, curvature passed at call time: Each manifold is a Manifold-protocol-conformant class with automatic dtype casting; the curvature c is supplied per call so it can be static, dynamic, or even a learnable nnx.Param.

from hyperbolix.manifolds import Poincare
poincare = Poincare()  # add dtype=jnp.float64 / learnable=True as needed
dist = poincare.dist(x, y, c=1.0)  # (dim,) → scalar

vmap-native API: Methods operate on single points; use jax.vmap for batching.

distances = jax.vmap(poincare.dist, in_axes=(0, 0, None))(
    x_batch, y_batch, 1.0
)

Learnable curvature: Pass learnable=True to any base manifold to expose c as a trainable nnx.Param via softplus reparameterization. In a ProductManifold, use the 5-tuple form of from_signature to learn some factors' curvatures while freezing others.

Citation

@software{hyperbolix2026,
  title = {Hyperbolix: Hyperbolic Deep Learning in JAX},
  author = {Klein, Timo and Lang, Thomas},
  year = {2026},
  url = {https://github.com/hyperbolix/hyperbolix}
}

References

Implements methods from:

  • Ganea et al. (2018): Hyperbolic Neural Networks
  • Bécigneul & Ganea (2019): Riemannian Adaptive Optimization
  • Gu et al. (2019): Learning Mixed-Curvature Representations in Product Spaces
  • Nagano et al. (2019): Wrapped Normal Distribution on Hyperbolic Space
  • Shimizu et al. (2020): Hyperbolic Neural Networks++
  • Bdeir et al. (2023): Fully Hyperbolic CNNs
  • Bdeir et al. (2025): Robust Hyperbolic Learning
  • Klis et al. (2026): Fast and Geometrically Grounded Lorentz Neural Networks
  • Chen et al. (2026): Proper Velocity Neural Networks

See individual module docstrings for detailed references.

Contributing

Contributions welcome! See DEVELOPER_GUIDE.md for setup and guidelines.

For bugs or questions, open an issue.

License

MIT License. See LICENSE 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

hyperbolix-0.7.0.tar.gz (90.1 kB view details)

Uploaded Source

Built Distribution

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

hyperbolix-0.7.0-py3-none-any.whl (123.1 kB view details)

Uploaded Python 3

File details

Details for the file hyperbolix-0.7.0.tar.gz.

File metadata

  • Download URL: hyperbolix-0.7.0.tar.gz
  • Upload date:
  • Size: 90.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for hyperbolix-0.7.0.tar.gz
Algorithm Hash digest
SHA256 31ff000443c0b7c1f86c65c64722da26e5adb167719e9b138a042819f2828753
MD5 aba5d9c7dfca8064911cf72d16c5b756
BLAKE2b-256 61fd6026580975d627007364a36670e1878b0268572cbf46b7bab80d6fd50c56

See more details on using hashes here.

File details

Details for the file hyperbolix-0.7.0-py3-none-any.whl.

File metadata

  • Download URL: hyperbolix-0.7.0-py3-none-any.whl
  • Upload date:
  • Size: 123.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for hyperbolix-0.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 65318821dfd2c8d04fd14111f9d04e95c444b4e58ce6317b9c9a86540dd3718a
MD5 58704959f668a6f2d3f25bc178641cd0
BLAKE2b-256 8ae47ddb92e8c3b1dc7599ff9cd5264d57778a72120406e40e55ebfc9f483486

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