use crate::{
core::Bounds,
traits::{Gradient, Status},
DVector, Float,
};
use dyn_clone::DynClone;
pub struct LineSearchOutput {
pub alpha: Float,
pub fx: Float,
pub g: DVector<Float>,
}
pub trait LineSearch<S: Status, U, E>: DynClone + Send + Sync {
#[allow(clippy::too_many_arguments)]
fn search(
&mut self,
x: &DVector<Float>,
p: &DVector<Float>,
max_step: Option<Float>,
problem: &dyn Gradient<U, E>,
bounds: Option<&Bounds>,
args: &U,
status: &mut S,
) -> Result<Result<LineSearchOutput, LineSearchOutput>, E>;
}
dyn_clone::clone_trait_object!(<S:Status, U, E> LineSearch<S, U, E>);