Key Features
- Modular Transformer Architecture: Built on building blocks optimized for physical systems.
- Hardware Agnostic: Seamless execution across CPU, MPS (Apple Silicon), and NVIDIA GPUs.
- Industrial Grade: Designed for high-fidelity industrial simulations and engineering verticals.
- Ready for Scale: Built-in support for Multi-GPU and SLURM cluster environments.
Table of contents
- Installation
- Quickstart
- Recipes
- Performance Benchmarks
- Contributing
- Supported systems
- Licensing
- Endorsements
- Citing
Installation
It is possible to use the framework either from source or from the pre-built packages.
Pre-requisites
- install uv as the package manager on your system
- clone the repo into your desired folder, if you wish to work with the code:
git clone https://github.com/Emmi-AI/noether.git
Working with pre-built packages
Installable package is available via pip and can be installed as:
pip install emmiai-noether
or if you use uv:
uv pip add emmiai-noether
Working with the source code
If you prefer to work with the source code directly without installing a prebuilt package.
Linux and CUDA
If you are running on NVIDIA GPUs or need custom CUDA paths, you must configure your environment variables first. Please follow our Advanced Linux Setup Guide before running the command below.
Create a fresh virtual environment and synchronize the core dependencies after cloning the repo:
uv venv && source .venv/bin/activate
uv sync
Note: Initial installation may take several minutes. Duration depends on your hardware and network speed.
Validate your installation by simply running the tests (if something fails with module import errors it means that the installation was incomplete):
pytest -q tests/
if the tests are passed (warnings are okay to be logged) then you're all set and ready to go!
Install via GitHub
You can install Noether directly from GitHub as well:
uv add "emmiai-noether @ git+https://github.com/Emmi-AI/noether.git"
This way you will stay always up-to-date with the recent updates and don't wait for the built packages being released.
How to clean up and do a fresh installation
You might be in a situation when your venv won't be configured as intended anymore, to fix this:
- Deactivate existing environment in your terminal by running:
deactivate - Remove existing
.venv(optionally adduv.lock):rm -rf .venv uv.lock - [Optional] Clean uv cache:
uv cache clean - Create a new venv and activate it:
uv venv && source .venv/bin/activate - [Optional] If deleted, generate a new
uv.lockfile:uv lock - [Optional] If contributor:
pre-commit install
Quickstart
Scaffold a New Project
You can get started with scaffolding a project directly with uvx:
uvx --from emmiai-noether noether-init my_project
cd my_project
uv run noether-train --hp my_project/configs/base_experiment.yaml
Or if you have emmiai-noether already installed:
uv run noether-init my_project
cd my_project
uv run noether-train --hp my_project/configs/base_experiment.yaml
See the scaffolding tutorial for all options and the generated project structure.
Recipes
End-to-end training and evaluation examples for specific engineering tasks.
Featured: AB-UPT Showcase on DrivAerML
Train AB-UPT on the DrivAerML aerodynamics benchmark with a preset-based CLI. Ready-to-use model sizes for CPU, GPU, and Apple Silicon.
- Walkthrough: AB-UPT Showcase docs
- Source:
recipes/aero_cfd/showcase/ - Dataset: EmmiAI/DrivAerML_subsampled_10x
cd recipes/aero_cfd/
export PYTHONPATH=$(git -C ../.. rev-parse --show-toplevel)/recipes:$PYTHONPATH
python -m showcase.cli train \
--dataset-root /path/to/drivaerml \
--output-path /path/to/outputs \
--model-size scaled \
--accelerator gpu \
--precision float16
All recipes
| Recipe | Description | Quicklinks |
|---|---|---|
| AB-UPT Showcase | AB-UPT on DrivAerML with a preset-based CLI for training, evaluation, and VTK export. | code · docs |
| External Aerodynamics | Multi-dataset aero CFD (ShapeNet-Car, AhmedML, DrivAerML, DrivAerNet++, Emmi-Wing) across AB-UPT, UPT, Transformer, and Transolver. | code · walkthrough · scripts |
| Fluid Heat Transfer | Neural surrogates for heat transfer on the SIMSHIFT Heatsink benchmark -- predict 3D velocity, temperature, and pressure fields from heatsink geometry. | code · docs |
Browse the full list in the Noether Recipe Zoo.
Performance Benchmarks
Training time for the AB-UPT model on the ShapeNet-Car dataset across hardware configurations.
[!NOTE] All benchmarks were conducted using FP32 precision to establish a baseline for raw computational performance.
| Hardware | Config | Precision | Time | Speedup |
|---|---|---|---|---|
| MacBook Pro M3 Max | 1x MPS | FP32 | 135m | 1.0x |
| RTX Pro 4500 (Blackwell) | 1x GPU | FP32 | 26m | 5.2x |
| RTX Pro 4500 (Blackwell) | 2x GPU | FP32 | 8m | 16.8x |
| NVIDIA H100 | 1x GPU | FP32 | 5.7m | 23.6x |
Contributing
Guidelines
We follow these standards:
- Use typed coding in Python.
- Write documentation to new features and modules:
- In case of larger modules make sure to update the documentation that is not autogenerated under the
docs/. - For smaller features writing a clear API documentation is enough and required.
- In case of larger modules make sure to update the documentation that is not autogenerated under the
- Before committing your changes:
- Run tests via
pytest -q tests/. - Ensure that pre-commit hooks are not disabled and are runnable at every commit.
We are using
ruffas a linter and formatter as well asmypyfor type checking. Their configuration is defined in the project's root pyproject.toml.
- Run tests via
- Creating pull requests (PRs) is a mandatory step for any incoming changes that will end up on the
mainbranch.- For a PR to be merged at least one core maintainer must give their approval.
- All test must be green
Pre-commit Hooks
To install pre-commit execute:
pre-commit install
To run the pre-commit configuration on all files, you can use:
pre-commit run --all-files
To run the pre-commit configuration on specific files use:
pre-commit run --files /your/file/path1.py /your/file/path2.py
Third-party contributors
In case of bugs use a corresponding template to create an issue.
In case of feature requests you can submit a PR with clear description of the proposed feature. In that case it must follow the guidelines, or file a feature request as an issue. In that case, we will consider adding it to our backlog.
Configuring IDEs
Pycharm
- Mark
src/directory asSources Root(right mouse button click on the folder ->Mark Directory as) - Settings -> Editor -> Code Style -> Python -> Tabs and Indents -> change
Continuation indentfrom 8 to 4. - Settings -> Editor -> Code Style -> Python -> Spaces -> Around Operators ->
Power operator (**)
Supported systems
Worth noting that we work with macOS and Linux environments thus in case of any issues on Windows, at this time, you have to find workarounds yourself.
Licensing
[!NOTE] TL;DR: Research & development ✅| Production deployment ❌ (without commercial license)
The Noether Framework is licensed under a Non-Production License (based on Mistral AI's MNPL). This means you're free to use, modify, and research with the framework, but commercial/production use requires a separate commercial license from Emmi AI.
We're committed to open AI innovation while sustainably growing our business. For commercial licensing, contact us at partner@emmi.ai .
Read the full license here.
Endorsed by research groups from
|
|
|
|
|
|
|
Citing
If you use Noether in your research or industrial applications, please cite this repository. A formal BibTeX entry for our forthcoming ArXiv publication will be provided here shortly.
@misc{noether2026,
author = { Bleeker, Maurits AND Hennerbichler, Markus AND Kuksa, Pavel },
title = {Noether: A PyTorch-based Framework for Engineering AI},
year = {2026},
publisher = {GitHub},
note = {Equal contribution},
url = {https://github.com/Emmi-AI/noether}
}
Metadata
Release files for emmiai-noether 2026.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| emmiai_noether-2026.4.0.tar.gz | 4.2 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| emmiai_noether-2026.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 4.8 MB
Release files / emmiai_noether-2026.4.0.tar.gz
| Download URL | emmiai_noether-2026.4.0.tar.gz |
|---|---|
| Size | 4.2 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9af6b86c84903b732496e7ae384e1ac0b2e18c7aa9f75c4ab745cd6af52537e1
|
|
BLAKE2b-256 checksum How to use checksums |
34c7de0397b985df38368d0fa84e5b989bdba9ffb6871cdeae84d34382df77d9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 29, 2026.
Transparency logRelease files / emmiai_noether-2026.4.0-py3-none-any.whl
| Download URL | emmiai_noether-2026.4.0-py3-none-any.whl |
|---|---|
| Size | 581.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
812e248a6eec893a33593754b4d7ab503365edc7d83674495cf92b53c75fc3a2
|
|
BLAKE2b-256 checksum How to use checksums |
b06ce2d52a35a66a09156d6f9d62884fdfd9858b55c5fcd8f29262b71195fed1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 29, 2026.
Transparency log