Modular Automatic Differentiation and Data-Enhanced Neural-network INteracting Graph
Project description
MADDENING
Modular Automatic Differentiation and Data-Enhanced Neural-network INteracting Graph
📖 Documentation: https://microrobotica.org/maddening/ 🧩 Part of the Microrobotics Simulation Framework (MADDENING · MIME · MICROROBOTICA).
A JAX-based modular simulation framework for multi-physics. Designed as the computational backbone of MIME (MIcrorobotics Multiphysics Engine).
Regulatory disclaimer: MADDENING is research software. It is not a medical device as defined by EU MDR (EU 2017/745) and is not intended for clinical use. When used in a regulated product, MADDENING is classified as SOUP (Software of Unknown Provenance) under IEC 62304. See
docs/regulatory/for details.
What It Does
MADDENING manages a simulation graph where each node simulates one aspect of a physical system (fluid dynamics, rigid body mechanics, heat transfer, etc.) and edges represent coupling between them. The entire graph step is JIT-compiled into a single XLA computation via JAX, making the simulation fully differentiable and GPU-accelerated.
Core capabilities:
- Graph-based multi-physics — nodes are independent JAX programs coupled by typed edges
- Fully differentiable —
jax.gradthrough entire coupled simulations (verified through 1000-step rollouts) - Iterative coupling — Gauss-Seidel and Jacobi with convergence acceleration (Aitken, IQN-ILS, IQN-IMVJ)
- Multi-rate timestepping — each node at its own timestep, GCD-based base rate
- Adaptive timestepping — Richardson extrapolation with PI controller
- Neural surrogates — train MLP/DeepONet/FNO surrogates from simulation data, hot-swap into the graph
- Cloud deployment — provision GPU VMs via SkyPilot, stream rendered viewports via WebRTC
- Multi-job — distribute subgraphs across VMs with ZMQ-based rendezvous coordination
Package structure:
maddening/
├── core/ # Graph manager, node ABC, edge spec, schedule
│ ├── coupling/ # Iterative coupling, convergence, acceleration, spatial mapping
│ ├── simulation/ # Adaptive dt, checkpoint, integrators, calibration, profiler
│ └── compliance/ # Metadata, stability, anomaly tracking, audit, UQ
├── nodes/ # Built-in nodes (Ball, Table, Spring, Heat, LBM, HeartPump, RigidBody)
├── surrogates/ # Neural surrogate framework (architectures, training, validation)
├── cloud/ # Cloud orchestration (SkyPilot, providers, coordinator, streaming)
│ └── multigpu/ # Device mesh, partitioning, sharded nodes, coordinator
├── viz/ # Visualization (renderer ABC, relay, runner, backends)
├── api/ # FastAPI server (REST + WebSocket + server-side rendering)
└── usd/ # OpenUSD integration (graph serialization, geometry)
Installation
pip install maddening # CPU (base)
pip install maddening[cuda12] # GPU with CUDA 12
pip install maddening[cuda12,viz] # GPU + matplotlib plots
pip install maddening[server,cuda12] # GPU simulation server
pip install maddening[runpod] # Cloud deploy to RunPod
| Extra | What it adds |
|---|---|
cuda12 / tpu |
GPU / TPU acceleration |
viz |
Matplotlib renderers |
terminal |
Rich terminal renderer |
api |
FastAPI HTTP/WS server |
network |
ZeroMQ remote transport |
surrogates |
Neural surrogate training (equinox + optax) |
runpod / lambda / aws / gcp |
Cloud deploy via SkyPilot |
server |
Bundle: FastAPI + ZMQ + rich + matplotlib |
cloud |
All supported cloud providers |
all |
Everything |
Works with both pip and uv. See docs/user_guide/installation.md for the full guide.
Quick Start
import jax.numpy as jnp
from maddening import GraphManager, SimulationNode
class BounceNode(SimulationNode):
@property
def requires_halo(self) -> bool:
return False # pointwise (no spatial neighbors)
def initial_state(self):
return {"position": jnp.array(5.0), "velocity": jnp.array(0.0)}
def update(self, state, boundary_inputs, dt):
new_vel = state["velocity"] + -9.81 * dt
new_pos = state["position"] + new_vel * dt
new_vel = jnp.where(new_pos < 0, jnp.abs(new_vel) * 0.8, new_vel)
new_pos = jnp.maximum(new_pos, 0.0)
return {"position": new_pos, "velocity": new_vel}
gm = GraphManager()
gm.add_node(BounceNode(name="ball", timestep=0.01))
gm.compile()
final_state, history = gm.run_scan_with_history(n_steps=500)
See docs/user_guide/quickstart.md for the full tutorial.
Cloud Deployment
Pre-built Docker image with JAX CUDA, GStreamer, and all server dependencies:
pip install maddening[runpod]
# Set up ~/.maddening/cloud_credentials.yaml (see examples/cloud/config/)
from maddening.cloud.launcher import CloudLauncher
launcher = CloudLauncher()
job = launcher.launch("job_config.yaml") # provisions GPU VM
job.ssh_run("python3 my_simulation.py") # run directly on GPU
job.teardown()
Docker image: ghcr.io/microrobotics-simulation-framework/maddening-cloud:latest
For MIME Developers
MADDENING is designed to be extended by MIME. See:
- docs/user_guide/installation.md — install options
- docs/developer_guide/node_authoring.md — writing custom nodes
- DESIGN.md — architecture decisions
- CLOUD_ROADMAP.md — cloud/multi-GPU/multi-job architecture
- DOCUMENTATION_ARCHITECTURE.md — regulatory compliance structure
License
LGPL-3.0-or-later. See LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file maddening-0.1.0.tar.gz.
File metadata
- Download URL: maddening-0.1.0.tar.gz
- Upload date:
- Size: 668.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9597c71cc2e2740a914356c8b28d6fed232ac773bbf9c04e71c019d36ac624c7
|
|
| MD5 |
f23a8cfdc7678b81a9771904375f4ce4
|
|
| BLAKE2b-256 |
1b46bf05e4fd357cc75e2abeac2fd7fa212b990da03993f78b21d2a2627ddb6a
|
Provenance
The following attestation bundles were made for maddening-0.1.0.tar.gz:
Publisher:
publish.yml on Microrobotics-Simulation-Framework/MADDENING
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
maddening-0.1.0.tar.gz -
Subject digest:
9597c71cc2e2740a914356c8b28d6fed232ac773bbf9c04e71c019d36ac624c7 - Sigstore transparency entry: 1500332284
- Sigstore integration time:
-
Permalink:
Microrobotics-Simulation-Framework/MADDENING@5cdfacbb3060ab18d4565df5f9c034f6478410cd -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/Microrobotics-Simulation-Framework
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@5cdfacbb3060ab18d4565df5f9c034f6478410cd -
Trigger Event:
release
-
Statement type:
File details
Details for the file maddening-0.1.0-py3-none-any.whl.
File metadata
- Download URL: maddening-0.1.0-py3-none-any.whl
- Upload date:
- Size: 434.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
042c064cbdd290df34377ade4118a3f30eb4aa6719ed868c42187cfa31cd60a6
|
|
| MD5 |
5cf1bb27fadfafc36b9ea6dc90fa6b7c
|
|
| BLAKE2b-256 |
d77b8232d8e2acbbf46ad4a9b685017fbff72c54dc2f1e87cbd8e247227f35fa
|
Provenance
The following attestation bundles were made for maddening-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on Microrobotics-Simulation-Framework/MADDENING
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
maddening-0.1.0-py3-none-any.whl -
Subject digest:
042c064cbdd290df34377ade4118a3f30eb4aa6719ed868c42187cfa31cd60a6 - Sigstore transparency entry: 1500332383
- Sigstore integration time:
-
Permalink:
Microrobotics-Simulation-Framework/MADDENING@5cdfacbb3060ab18d4565df5f9c034f6478410cd -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/Microrobotics-Simulation-Framework
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@5cdfacbb3060ab18d4565df5f9c034f6478410cd -
Trigger Event:
release
-
Statement type: