pub trait FirstOrderObjective: ZerothOrderObjective {
// Required method
fn eval_grad(
&mut self,
x: &Array1<f64>,
) -> Result<FirstOrderSample, ObjectiveEvalError>;
// Provided method
fn set_finite_difference_bounds(&mut self, _bounds: Option<&Bounds>) { ... }
}