Skip to main content
Every component has a solver that computes outputs from inputs. The default solver is the component’s own solve() method, but you can inject a more sophisticated one at any time without changing the component’s interface or graph wiring.

FormulaSolver

Wrap any callable. The callable receives (inputs, component) and returns a dict of output port values.

LookupTableSolver

Interpolate measured or datasheet data:

ODESolver

Physics-based transient models. Define state evolution and output mapping functions:
Built-in components like DCMotor, Capacitor, Inductor, and LiPoCell use ODESolver internally and automatically participate in transient runs.

Hosted ML models

Train a model in the Hardwave cloud from records owned by that model, then attach it as a remote solver. See Hosted ML models for the full workflow.

Simulation domains

Solvers declare which simulation domain they support: Set the domain in SimulationConfig when running the engine. Algebraic solvers participate in both domains; ODE solvers advance state only in transient mode.

Swapping solvers without rewiring

Because solvers are injected at the instance level, you can calibrate a component against real data without changing any graph connections: