Software Resources

Published

12/06/2026

This appendix lists the software packages used or referenced throughout the course, in the same style as the bibliographic references. Julia packages come first (the workshop’s primary language); Python packages follow. Each entry has a one-line description and a link to the canonical source.

A wider catalogue with commercial offerings and the residual-loss-PINN-vs-surrogate distinction lives in Unit 7 §7.6.

Julia packages

Core SciML stack — used throughout

NeuralPDE.jl — Symbolic PINN solver. Takes a ModelingToolkit.PDESystem (equation + domain + BCs) and a PhysicsInformedNN(chain, training_strategy) discretisation and builds the physics-informed loss automatically. The workshop’s primary PINN driver.

Lux.jl — Explicit-parameter neural-network framework. Keeps parameters ps and state st separated from the model so they compose cleanly with SciML solvers. Used inside NeuralPDE.jl for all network architectures from Unit 2 onwards.

ModelingToolkit.jl — Symbolic-numeric CAS. Defines PDESystem, the canonical symbolic-PDE input for both MethodOfLines.jl and NeuralPDE.jl.

MethodOfLines.jl — Automated finite-difference discretisation of PDESystems. Used in Unit 5 and Unit 10 to generate FD reference solutions against which PINNs are benchmarked.

OrdinaryDiffEq.jl — High-performance ODE/DAE solvers (Tsit5, Rodas5P, QNDF, etc.). Drives Neural-ODE / UDE training loops in Unit 4 and provides ground-truth trajectories throughout.

Optimization.jl — Unified wrapper over Optim, Optimisers.jl, NLopt, Ipopt, etc. The interface NeuralPDE.jl drives for Adam / L-BFGS PINN training.

SciMLSensitivity.jl — Forward and adjoint sensitivity backends (InterpolatingAdjoint, BacksolveAdjoint, EnzymeVJP, ZygoteVJP) for differentiating through ODE / PDE solves inside neural training. Required by the Neural-ODE / UDE workflow in Unit 4.

Automatic differentiation

Zygote.jl — Reverse-mode source-to-source AD. The default outer-gradient backend for PINN training in Units 5–9.

ForwardDiff.jl — Forward-mode AD via dual numbers. The default for inner derivatives (spatial / temporal derivatives of the network output) in PINN residuals. Unit 5 §5.2 walks the forward-over-forward recipe.

Enzyme.jl — LLVM-level AD; increasingly the default in 2025–26 across SciML (used by SciMLSensitivity as EnzymeVJP).

Neural networks and operator learning

DeepEquilibriumNetworks.jl — Implicit / equilibrium layers built on Lux + DifferentialEquations with O(1)-memory backprop.

NeuralOperators.jl — DeepONet, FNO, Markov NO, NOMAD in Julia. Pairs with NeuralPDE.jl for PINO-style losses; replaces the older FluxNeuralOperators.jl.

KolmogorovArnold.jl — Lux-compatible KAN layers (radial basis functions, custom gradients). Introduced in Unit 2 §2.7.

Classical ML and data

MLJ.jlscikit-learn-style classical ML framework. Used in Unit 2 for the random-forest baseline.

DecisionTree.jl — Pure-Julia decision-tree and random-forest implementation. The backend for the MNIST RF demo in Unit 2 §2.2.

MLDatasets.jl — Standard ML dataset loaders (MNIST, CIFAR, etc.). Required by the MNIST examples in Unit 2; not in the workshop default Project.toml to keep precompile light.

Plotting and IO

Plots.jl — High-level plotting (GR backend by default). Used for all inline figures.

CairoMakie.jl — High-quality static figures. Used for the published-quality plots in Unit 1 and Unit 10.

CSV.jl + DataFrames.jl — Tabular IO. Used throughout for synthetic-mooring data exchange.

Python packages

PINN libraries

DeepXDE — The reference Python PINN library (Lu Lu, originally Karniadakis group at Brown). Multi-backend (TF1/TF2, PyTorch, JAX, PaddlePaddle); forward + inverse ODE / PDE / IDE with CSG geometries. The closest Python analogue to NeuralPDE.jl. Used in Unit 10 §10.4 for the cross-language parallel.

NVIDIA PhysicsNeMo — PyTorch-based physics-ML framework (formerly Modulus). PINNs, FNOs, MeshGraphNets, diffusion surrogates. The commercial / production-grade stack catalogued in Unit 7 §7.8.

PhysicsNeMo-Sym — Symbolic PDE/BC layer on top of PhysicsNeMo (formerly Modulus-Sym); Python analogue of NeuralPDE.jl.

PINA — PyTorch-Lightning-based PINN + neural operator + PINO library from mathLab @ SISSA (Rozza group).

jinns — JAX-native PINN library (PINNs, SPINNs, HyperPINNs, adaptive weights) built on Equinox + Optax.

JAX ecosystem (cross-language pointers in Units 5 and 7)

Diffrax — Autodiff / GPU ODE / SDE / CDE solvers in JAX (Patrick Kidger). The JAX counterpart to OrdinaryDiffEq.jl.

Equinox — Callable-PyTree neural networks for JAX. Foundation of Diffrax and the typical NN layer for JAX PINNs.

Flax (NNX) — Google’s JAX neural-network library. NNX (2024) is the current object-oriented API replacing Linen.

PyTorch ecosystem

torchdiffeq — Differentiable ODE solvers in PyTorch with adjoint backprop. Standard for Neural-ODE and Burgers-class PINN demos. Used implicitly in the PyTorch examples of Unit 2 §2.6.

torchdyn — PyTorch library dedicated to neural differential equations and implicit models.

PyTorch — The deep-learning framework underpinning DeepXDE, PhysicsNeMo, PINA, torchdiffeq. The MNIST MLP in Unit 2 §2.6 is its first appearance.

Classical ML / data / discovery

scikit-learn — The Python classical-ML workhorse. Used in Unit 2 for the random-forest, softmax, and MLP baselines on MNIST.

SciPy — Scientific computing routines (scipy.integrate.solve_ivp, scipy.linalg.svd). Used in Unit 3 for the Python ODE / POD parallels.

NumPy — The Python array library. Foundation of everything else above.

PySINDy — Sparse identification of nonlinear dynamics (Brunton / Kutz groups). The Python equivalent of the hand-rolled STLSQ in Unit 3 §3.4.

pykan — Reference Kolmogorov-Arnold Network implementation (Liu et al. 2024). Used in Unit 2 §2.7 for the KAN demo.