Skip to main content

🌐 e3j

A fast, full-featured and platform-agnostic equivariance backend for GPU and TPU!

This library can be used in place of e3nn and e3x to replace slow operations in Machine Learned Interatomic Potentials (MLIPs), with carefully optimized and open-source CUDA and Pallas kernels.

The equivariance backend of our MLIP library is e3j as of mlip 0.2.0.

Installation

Pulling from PyPI

The e3j package is available on PyPI. It consists of a thin JAX-based Python API which can run on CPU, GPU and TPU, supporting Python versions from 3.12 to 3.14 included.

For efficiency on GPU, our CUDA binaries are bundled as the e3j_ops package on PyPI. The compatible version of the binaries should be pulled by requiring the "e3j[ops]" extra:

# requirements.txt
e3j[ops] >= 0.1.0b0
jax[cuda13_local] ~= 0.8.0

See JAX installation instructions for more information on JAX versions and their CUDA support. We recommend using a version of JAX above 0.7.0 and CUDA 13.

Building from source

Our dependencies are managed with uv. After cloning the repository, you can build from source by running run one of:

# Existing CUDA 13 install with `e3j_ops` kernels:
uv sync --group cuda13_local --extra ops
# Install CUDA 13 via pip:
uv sync --group cuda13 --extra ops

The Python build internally relies on CMake, scikit-build and pybind11. You can also look at the Makefile for alternate recipes to build kernels, C++ tests and the Python bindings.

The e3j_ops Python package only contains our CUDA binaries and bindings to their associated XLA handlers. It is not meant to be used as standalone until its ABI is reported stable.

Features

e3j provides a platform-agnostic API for GPU and TPU:

  • 🖥️ The same Python API on CPU, GPU and TPU, with a portable JAX fallback when kernels don't apply
  • 🔗 Interoperability made easy via plain jax.Array semantics
  • 🌐 All equivariant building blocks: spherical harmonics (Harmonics), tensor products (TensorProduct, Bigotimes), message-passing convolution (Convolution) and learnable linear maps (Linear, LinearIndexwise) as flax.linen.Module with weight initializations matching e3nn
  • 🏎️ Fused CUDA kernels for GPU (tensor product, message-passing convolution, scatter-add), shipped as the standalone e3j_ops wheel and dispatched through XLA-FFI
  • 🧮 Fused Pallas Mosaic-TPU kernels, computing gather, tensor product, scalar mixing and scatter in a single kernel
  • 🔁 Custom VJP rules for every fused kernel, so they differentiate under jax.grad like any other JAX primitive
  • 🎛️ SPMD support for muliple-device MLIP training
  • 🧱 Multiple memory layouts (leading channels, trailing channels, and a flat e3nn-compatible layout) to trade coalescing off against interoperability
  • 📐 Representation utilities: O(3) and SO(3) spaces, irreps filtering and irrep filtering, permutations and generalized Clebsch-Gordan coefficients
  • 🔌 Full coverage of the e3nn and e3x layers used by an MLIP, kernel-backed or not, so an existing model can be ported over entirely — to train, simulate and benchmark end to end, see mlip
Watch: E3J's Message Passing Convolution kernel on TPU

Contributing

Bug reports, questions and feature requests are welcome via GitHub issues and discussions.

Citing

If you use e3j within your work, we kindly ask you to cite the following preprint:

@article{Peltre26-e3j,
    title   = {{E3J}: an Efficient and Open-Source Euclidean Equivariance Backend},
    author  = {Peltre, Olivier and Picard, Armand and Pichard, Adrien and Giacomoni, Luca and Braganca, Miguel and Heyraud, Valentin and Brunken, Christoph and Tilly, Jules},
    journal = {preprint},
    year    = {2026},
    url     = {(preprint)}
  }
}

Metadata

Release files for e3j 0.1.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for e3j 0.1.3
File Size Uploaded Provenance Actions
e3j-0.1.3.tar.gz 526.3 kB Without provenance Details for e3j-0.1.3.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for e3j 0.1.3
File Interpreter ABI Platform Actions
e3j-0.1.3-py3-none-any.whl Python 3 none any Details for e3j-0.1.3-py3-none-any.whl

Total release size: 799.3 kB

Release files / e3j-0.1.3.tar.gz

Download URL e3j-0.1.3.tar.gz
Size 526.3 kB
Tags Source
SHA-256 checksum
How to use checksums
c94fa3e1974ffef39277b1ad5be2abbf69cfc8e39b35b0bf763fe43ce943cbdf
BLAKE2b-256 checksum
How to use checksums
3798e81fe07892d01f0f7d3e79551c17c5b04be260e50526c9a7bfbbc8345e5c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.0

Release files / e3j-0.1.3-py3-none-any.whl

Download URL e3j-0.1.3-py3-none-any.whl
Size 273.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
bf83ce1b44a756abb1c73c80897a0ab907ddb2fc5c8d73c63696de893fe8183b
BLAKE2b-256 checksum
How to use checksums
bcc75170ddfa7faaa80566b83bd983109580b1add245d98db21978af6b0eb9e3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.0

Security for e3j 0.1.3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page