//! Derivative-free stochastic optimizers: simulated annealing and a genetic
//! (differential-evolution) optimizer.
//!
//! Both explore a bounded box and use only objective *values* (no gradient),
//! driven by a seeded [`SplitMix64`](crate::rng::SplitMix64) so a fixed seed
//! reproduces the run exactly. They are the stats-claw
//! counterparts of `scipy.optimize.dual_annealing` and
//! `scipy.optimize.differential_evolution`.
pub use genetic;
pub use simulated_annealing;
/// Maps a unit-interval draw `u ∈ [0, 1)` into the closed box coordinate
/// `[lo, hi]`.
///
/// # Arguments
///
/// * `u` — a uniform draw in `[0, 1)`.
/// * `lo`, `hi` — the lower and upper bounds of the coordinate.
///
/// # Returns
///
/// `lo + u·(hi − lo)`.
pub
/// Clamps `v` into `[lo, hi]`.
pub const