use crate::DType;
use numr::error::Result;
use numr::runtime::Runtime;
use numr::tensor::Tensor;
use crate::optimize::error::OptimizeResult;
use super::types::{Bounds, ConstrainedOptions, ConstrainedResult, Constraint};
pub trait TrustConstrAlgorithms<R: Runtime<DType = DType>> {
fn trust_constr<F>(
&self,
f: F,
x0: &Tensor<R>,
constraints: &[Constraint<'_, R>],
bounds: &Bounds<R>,
options: &ConstrainedOptions,
) -> OptimizeResult<ConstrainedResult<R>>
where
F: Fn(&Tensor<R>) -> Result<f64>;
}