Skip to main content

Fast Euclid equivariant operations for JAX

Project description

🌐 e3j

Euclid-equivariant operations and harmonic polynomials for JAX.

This library is a fast and full-featured Euclidean equivariance backend which 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 for GPU and TPU.

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

Note: e3j is currently in pre-release (0.1.0b5), with version 0.1.0 planned in July 2026. Additional CUDA kernels and dedicated Pallas kernels for TPU are being rolled out progressively, supporting infinite differentiability and SPMD support.

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.11 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 and the `exp` group for benchmarks:
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.

Project structure

The JAX primitives wrapping our custom XLA handlers are defined in the e3j.ops subpackage of e3j, provided the e3j_ops binaries can be found in the environment.

Contributing

Although it is too early for e3j to accept significant external contributions, bug reports or questions are very 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)}
  }
}

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

e3j-0.1.0b5.tar.gz (390.7 kB view details)

Uploaded Source

Built Distribution

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

e3j-0.1.0b5-py3-none-any.whl (141.1 kB view details)

Uploaded Python 3

File details

Details for the file e3j-0.1.0b5.tar.gz.

File metadata

  • Download URL: e3j-0.1.0b5.tar.gz
  • Upload date:
  • Size: 390.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for e3j-0.1.0b5.tar.gz
Algorithm Hash digest
SHA256 3e502c66481764009ef7ae352b25ebd8e337a17aaa640052b9b94ef81d4d6a13
MD5 a3dfbe45ae677f7852d72bcddb7de6bc
BLAKE2b-256 e8efe6ca4b7336bbd31843827ab08eefdb237fd1341d77b685c52c35857d3141

See more details on using hashes here.

File details

Details for the file e3j-0.1.0b5-py3-none-any.whl.

File metadata

  • Download URL: e3j-0.1.0b5-py3-none-any.whl
  • Upload date:
  • Size: 141.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for e3j-0.1.0b5-py3-none-any.whl
Algorithm Hash digest
SHA256 a4e308744ffeb9d8f476d729a53fab7849b6ab1738d9084fffe41e20c9db4674
MD5 866269b826e7fd868435a1e2deef06ed
BLAKE2b-256 56ffa18dc83b6fd1fc1c9b7ec1cc1075b90a3a64cd7c83a5062b45a9b6b13109

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