Neojax
neojax (Neural Operators in JAX) is an implementation of Neural Operators built on top of JAX and Equinox. It provides a clean, modular API inspired by the original neuraloperator library.
Currently, neojax is in its early stages. Expect possible breaking changes.
Only the following models and features are available:
- Fourier Neural Operator (FNO).
- Symmetrical domain padding (
DomainPadding). - Pointwise MLP (Channel-MLP) expansions for improved expressivity.
- Various skip connections (Linear, Soft-Gating, Identity).
- Normalization in FNO blocks.
- Symmetrical domain padding (
- U-Net Fourier Neural Operator (UNO).
- Geometry-aware Fourier Neural Operator (GeoFNO) for irregular geometries and mesh domains.
- Tucker-factorized FNO.
- Deep Operator Network (DeepONet).
- Training Orchestration Utilities (
TrainerandTrainState). - Grid-based positional embeddings (
GridEmbeddingNd). - (Relative) $L^{p}$-loss.
- General $W^{k,p}$ Sobolev loss.
- Loss Compositions.
- Data Normalization and Scaling.
- Various Normalizer classes.
- Physical scales to non-dimensionalize inputs.
- Dataset utilities (Data-agnostic, downloading utilities, etc.)
- Data Pipelines (Schemas, Processors, DataBundle)
- Benchmark Module (Model-/Data-agnostic even for non-neojax models)
It is designed to be fully compatible with all JAX features such as
vmap,jit, andgrad.
Installation
Install the python package via pypi
pip3 install neojax-operators
The core library is designed to have as few dependencies as possible. Some submodules therefore rely on additional dependencies. Install them as needed:
- Running the examples:
neojax-operators[ex] - Using the PDE data generation:
neojax-operators[gen] - Using data downloading and some other data features:
neojax-operators[data] - Using the benchmark module:
neojax-operators[benchmark]
Quickstart
neojax exposes a similar API to neuraloperators and equinox and should therefore be familiar to use:
import jax.numpy as jnp
import jax.random as jr
from neojax.models import FNO
key = jr.key(0)
fno = FNO(
key=key,
modes=(12, 12),
hidden_channels=64,
in_channels=2,
out_channels=1,
n_layers=2
)
x = jnp.ones((2, 64, 64))
pred = fno(x)
For a more detailed introduction refer to the examples in the documentation.
Neojax vs Neuraloperator Benchmarks
Please refer to the benchmarks in the documentation.
Motivation
JAX is widely used in Scientific Machine Learning (SciML) for its functional transformations (jit, vmap, grad) and NumPy-like API. Neural Operators are a common approach for solving PDEs in this space, but a native JAX implementation was missing. neojax fills that gap.
Design Choices
neojax started as a port of the PyTorch neuraloperator library, but was rewritten from the ground up as a JAX-native implementation instead. Porting PyTorch idioms directly into a functional framework added unnecessary complexity; building on equinox gives neojax a class-based API while staying consistent with JAX's pure-functional design.
Roadplan
In upcoming releases more models and components will be added in roughly the following order:
- LocalNO, SFNO, RNO, and others
- Graph Neural Operators
- Debugging utilities
And much more to come!
Contributions
If you'd like to contribute any features, models, or fix implementation errors, please do so. Any contributions are appreciated. Have a look at the CONTRIBUTING.md guide for details on how to do so. I am also open to advice on restructuring and any other design choices that could be improved.
Citation
If you use neojax in your research, please cite it using the following BibTeX entry:
@software{neojax,
author = {Paul Gekeler},
title = {neojax: Neural Operators in Jax},
year = {2026},
url = {https://github.com/paulgekeler/neojax}
}
Metadata
Release files for neojax-operators 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| neojax_operators-0.2.1.tar.gz | 6.7 MB | Without provenance | Details for neojax_operators-0.2.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| neojax_operators-0.2.1-py3-none-any.whl | Python 3 | none | any | Details for neojax_operators-0.2.1-py3-none-any.whl |
Total release size: 6.8 MB
Release files / neojax_operators-0.2.1.tar.gz
| Download URL | neojax_operators-0.2.1.tar.gz |
|---|---|
| Size | 6.7 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f81c15528ee3482f1ae7a3e4e297ad649e713add166b4bb0c5c871afebd6dc57
|
|
BLAKE2b-256 checksum How to use checksums |
4445b42d5766453911b851116121fcb9896b32360f2ad55f5205bb7b0552a61a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / neojax_operators-0.2.1-py3-none-any.whl
| Download URL | neojax_operators-0.2.1-py3-none-any.whl |
|---|---|
| Size | 167.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ac4bbf00bc608a40e9be2f5fe5ca226cfd768dd115f9aa52fa4714a8786fa712
|
|
BLAKE2b-256 checksum How to use checksums |
e3a1fecaf318082f8fd99dff3fce7d3103af9f775065b45f933708de262e6f9c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for neojax-operators 0.2.1
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.