Software Resources
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
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.