Skip to main content

Physics supervision and audit tools for SciML models, with JAX-native residuals and PyTorch support.

Project description

moju

Physics supervision and audit tools for SciML and Physics AI.

pip install moju

Moju helps you turn predicted state fields into governing-law residuals, physics losses, constitutive consistency checks, and audit reports. It is JAX-native at the core, with a PyTorch-facing interface available through moju.torch.

What Moju Does

  • Builds residuals from composable Laws, Groups, and Models.
  • Turns governing-law residuals into a differentiable training loss with build_loss.
  • Audits predictions with per-key, per-category, and overall admissibility scores.
  • Infers law-linked constitutive checks where the governing equation implies a material property.
  • Visualizes training/eval diagnostics, spatial residuals, and constitutive divergence/dissonance.

Moju is not a training framework or a solver. It is a physics supervision layer you can use with PINNs, CFD surrogates, neural operators, digital twins, or any workflow that can provide a state_pred dictionary.

5-Minute Example: 1D Slab Cooling

This is the minimal Path B flow: pass state_pred directly. The derivatives are already in the state, so no finite-difference inference is needed. The Fourier law automatically adds the law-linked thermal_diffusivity implied audit.

import jax.numpy as jnp

from moju.monitor import audit, build_loss, build_minimal_residual_engine, visualize

L = 0.02
rho = 2700.0
cp = 900.0
k = 200.0
alpha = k / (rho * cp)

x = jnp.linspace(0.0, L, 64)
t = jnp.ones_like(x) * 10.0

# A toy variable temperature profile with supplied derivatives.
T = 300.0 + 20.0 * (1.0 - x / L) ** 2
T_laplacian = jnp.ones_like(x) * (40.0 / (L**2))
T_t = alpha * T_laplacian

state_pred = {
    "x": x,
    "t": t,
    "T": T,
    "T_t": T_t,
    "T_laplacian": T_laplacian,
    "L": jnp.ones_like(x) * L,
    "k": jnp.ones_like(x) * k,
    "rho": jnp.ones_like(x) * rho,
    "cp": jnp.ones_like(x) * cp,
    "alpha": jnp.ones_like(x) * alpha,
}

engine = build_minimal_residual_engine(
    law_names=["fourier_conduction"],
    coord_dimension=1,
)

residuals = engine.compute_residuals(state_pred, run_mode="training")
loss = build_loss(residuals)
report = audit(engine.log)
fig = visualize(engine.log, engine=engine)

print("Physics loss:", float(loss))
print("Overall admissibility:", report["overall_admissibility_score"])
print("Categories:", report["per_category"].keys())
fig.show()

What happens here:

  • build_minimal_residual_engine(...) creates the Fourier conduction law and the needed fo group row.
  • state_pred supplies the variable field T, its derivatives T_t and T_laplacian, coordinates, and material properties.
  • law_implied_audits=True is the default, so Moju adds constitutive/thermal_diffusivity/law_fourier_conduction/implied_delta.
  • build_loss uses governing-law residuals for training.
  • audit and visualize use the log plus engine.last_residuals to report physics diagnostics.

Core Concepts

  • moju.piratio.Models - constitutive relationships such as viscosity, density, diffusivity, wave speed, and turbulence closures.
  • moju.piratio.Groups - dimensionless quantities such as re, pr, pe, fo, ma, and bi, materialized into state for laws.
  • moju.piratio.Laws - governing-equation residuals for heat, diffusion, wave, momentum, mass, Darcy/Brinkman, Poisson, Burgers, and related equations.
  • moju.piratio.Operators - JAX autodiff helpers such as gradients, divergence, Laplacian, curl, and time derivatives.
  • moju.monitor.ResidualEngine - runs laws, groups, constitutive audits, optional data comparisons, and records audit logs.
  • moju.monitor.audit - converts logs into R_norm, admissibility scores, category summaries, and report data.
  • moju.monitor.visualize - Plotly dashboards for training/eval residuals, category scores, spatial fields, and constitutive diagnostics.

Training vs Eval

compute_residuals(..., run_mode="training") is the default for optimization loops. It runs laws, groups, and constitutive implied audits. state_ref is ignored in training mode.

Use run_mode="eval" when you want reference comparisons. In eval mode, state_ref enables constitutive ref_delta and data/ residuals.

Overall admissibility is the minimum of the finite category scores participating in the current run mode. Training rolls up laws and constitutive categories. Eval also includes data when present. Legacy logs may still contain a historical scaling category.

Details: docs/monitor_training_vs_eval.md.

PyTorch Support

Install the PyTorch extra:

pip install "moju[torch]"

moju.torch provides:

  • TorchResidualEngine - PyTorch-facing residual engine with parity-oriented behavior.
  • build_loss_torch and r_eff_scalar_torch - Torch-native R_eff loss helpers.
  • wrap_law_torch - wrap JAX Laws.* functions for use with Torch tensors through jax2torch.
  • Torch-native nondimensionalization helpers.

Start with scripts/torch_laws_jax2torch_example.py. The implementation is covered by tests/test_torch_engine.py and tests/test_torch_interop.py.

Installation Extras

  • moju[viz] - Plotly dashboards.
  • moju[report] - PDF report export.
  • moju[ref] - xarray-based reference loaders.
  • moju[ref_vtk] - VTK/VTU reference loaders.
  • moju[ref_foam] - OpenFOAM snapshot loaders.
  • moju[ref_hdf5] - HDF5 reference loaders.
  • moju[studio] - Streamlit-based Moju Studio.
  • moju[studio-science] - HDF5/NetCDF upload support for Studio.
  • moju[torch] - PyTorch and jax2torch integration.
  • moju[dev] - test and formatting tools.

Documentation

Examples

Philosophy

Moju does not define physics for you. It gives you a structured way to apply the physics you already trust, measure residuals consistently, and surface where a model agrees or disagrees with governing laws and constitutive assumptions.

License

MIT License. Developed by Ifimo Lab, a division of Ifimo Analytics.

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

moju-1.0.2.tar.gz (221.8 kB view details)

Uploaded Source

Built Distribution

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

moju-1.0.2-py3-none-any.whl (170.0 kB view details)

Uploaded Python 3

File details

Details for the file moju-1.0.2.tar.gz.

File metadata

  • Download URL: moju-1.0.2.tar.gz
  • Upload date:
  • Size: 221.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for moju-1.0.2.tar.gz
Algorithm Hash digest
SHA256 9f53ff1e6e1e91f4f8851816e8923b9c0b86ced2e6717cf21663c9a9fae10bd4
MD5 22dd804daeb2a73f24a3e6cdb403c66c
BLAKE2b-256 d5dd3a6b21e3c4abc810db98b232a0aca6e189506b6099db43cf80dbe53c356e

See more details on using hashes here.

File details

Details for the file moju-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: moju-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 170.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for moju-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 b910a6c4de088fcbe8c1c199beeda3c049bea613cfbb32dae9609c4d3bbc4bad
MD5 c2b9fdd3d00d1a14f9b871bf0cf40846
BLAKE2b-256 edea32dc29d58fdad51c1c4ca2c396c0e7fec01797e7d184ead938371ef86b79

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