///|
/// Numerical solvers in pure MoonBit: root finding, ordinary differential
/// equations, linear systems, and interpolation.
///
/// * root finding (`roots.mbt`) - where a function of one variable is zero:
///   `bisection`, `false_position`, `secant`, `newton` and `brent`, each
///   asked for a `tolerance` and a `max_iterations`, and each reporting what
///   went wrong — a bracket with no sign change, a slope of zero, a negative
///   tolerance, a search that ran out of iterations — as a `RootError`
///   carrying the values involved.
/// * ordinary differential equations (`ode.mbt` and `ode_system.mbt`) -
///   scalar `euler`, `midpoint`, `rk4` and adaptive `rk45`, plus vector-state
///   counterparts, a common `solve_ivp` entry point, cubic Hermite dense
///   output, and first-event detection. The system solvers use absolute and
///   relative component tolerances.
/// * linear systems (`linear.mbt` and `linear_iterative.mbt`) - an `LU`
///   factorization with partial pivoting and reusable transpose/multiple
///   solves, a `Cholesky` factorization for symmetric positive definite
///   matrices, compensated residual diagnostics and iterative refinement, the
///   Thomas recurrence for tridiagonal systems, a general banded solver,
///   Jacobi/Gauss-Seidel iterations, and conjugate-gradient methods for SPD
///   systems.
/// * interpolation (`interp.mbt`) - a line and a cubic spline through a table
///   of points, the spline under a natural, clamped or not-a-knot boundary.
///
/// The algorithms are standard published methods. Tests compare selected
/// results with analytic solutions or SciPy and measure the convergence the
/// algorithms claim rather than only their final answer: bisection's error
/// against `(b - a) / 2^k`, Newton's against its own square, the secant's
/// against the golden ratio's power, and the ODE steppers against their
/// advertised orders.
///
/// ```moonbit nocheck
/// ///|
/// let root = @numsolve.brent(fn(x) { x * x - 2.0 }, 1.0, 2.0)
/// ```