20        : armijo_c1(1e-4), wolfe_c2(0.9), dphi_thresh(1e-13), alpha_min(1e-6),
 
   21          max_num_steps(20), interp_type(LSInterpolation::CUBIC),
 
   22          contraction_min(0.5), contraction_max(0.8) {}
 
   27    std::size_t max_num_steps;
 
   28    LSInterpolation interp_type;
 
   31    friend std::ostream &operator<<(std::ostream &oss, 
const Options &self) {
 
   33      oss << fmt::format(
"armijo_c1 = {:.3e}", self.armijo_c1);
 
   35          << fmt::format(
"contraction_min = {:.3e}", self.contraction_min);
 
   37          << fmt::format(
"contraction_max = {:.3e}", self.contraction_max);
 
 
   45  struct FunctionSample {
 
   50    FunctionSample() : alpha(0.), phi(0.), dphi(0.), valid(
false) {}
 
   51    FunctionSample(
T a, 
T v) : alpha(a), phi(v), dphi(0.), valid(
true) {}
 
   52    FunctionSample(
T a, 
T v, 
T g) : alpha(a), phi(v), dphi(g), valid(
true) {}