use crate::DType;
use super::GlobalOptions;
use numr::error::Result;
use numr::runtime::Runtime;
use numr::tensor::Tensor;
#[derive(Debug, Clone)]
pub struct BasinHoppingResult<R: Runtime<DType = DType>> {
pub x: Tensor<R>,
pub fun: f64,
pub iterations: usize,
pub nfev: usize,
pub converged: bool,
}
pub trait BasinHoppingAlgorithms<R: Runtime<DType = DType>> {
fn basinhopping<F>(
&self,
f: F,
x0: &Tensor<R>,
lower_bounds: &Tensor<R>,
upper_bounds: &Tensor<R>,
options: &GlobalOptions,
) -> Result<BasinHoppingResult<R>>
where
F: Fn(&Tensor<R>) -> Result<f64>;
}