5#ifndef IDOL_OPTIMIZERS_OSI_H 
    6#define IDOL_OPTIMIZERS_OSI_H 
   10#include <OsiSolverInterface.hpp> 
   12#include "idol/general/optimizers/OptimizerWithLazyUpdates.h" 
   14namespace idol::Optimizers {
 
   18class idol::Optimizers::Osi : 
public OptimizerWithLazyUpdates<int, int, int, int> {
 
   19    bool m_continuous_relaxation;
 
   20    bool m_is_resolve = 
false;
 
   22    std::unique_ptr<OsiSolverInterface> m_solver_interface;
 
   24    [[nodiscard]] std::string name() 
const override;
 
   25    [[nodiscard]] SolutionStatus get_status() 
const override;
 
   26    [[nodiscard]] SolutionReason get_reason() 
const override;
 
   27    [[nodiscard]] 
double get_best_obj() 
const override;
 
   28    [[nodiscard]] 
double get_best_bound() 
const override;
 
   29    [[nodiscard]] 
double get_var_primal(
const Var &t_var) 
const override;
 
   30    [[nodiscard]] 
double get_var_reduced_cost(
const Var &t_var) 
const override;
 
   31    [[nodiscard]] 
double get_var_ray(
const Var &t_var) 
const override;
 
   32    [[nodiscard]] 
double get_ctr_dual(
const Ctr &t_ctr) 
const override;
 
   33    [[nodiscard]] 
double get_ctr_farkas(
const Ctr &t_ctr) 
const override;
 
   34    [[nodiscard]] 
double get_relative_gap() 
const override;
 
   35    [[nodiscard]] 
double get_absolute_gap() 
const override;
 
   36    [[nodiscard]] 
unsigned int get_n_solutions() 
const override;
 
   37    [[nodiscard]] 
unsigned int get_solution_index() 
const override;
 
   40    void hook_optimize() 
override;
 
   41    void set_solution_index(
unsigned int t_index) 
override;
 
   42    void hook_build() 
override;
 
   43    void hook_write(
const std::string &t_name) 
override;
 
   44    int hook_add(
const Var &t_var, 
bool t_add_column) 
override;
 
   45    int hook_add(
const Ctr &t_ctr) 
override;
 
   46    int hook_add(
const QCtr &t_ctr) 
override;
 
   47    int hook_add(
const SOSCtr &t_ctr) 
override;
 
   48    void hook_update_objective_sense() 
override;
 
   49    void hook_update_matrix(
const Ctr &t_ctr, 
const Var &t_var, 
double t_constant) 
override;
 
   50    void hook_update() 
override;
 
   51    void hook_update(
const Var &t_var) 
override;
 
   52    void hook_update(
const Ctr &t_ctr) 
override;
 
   53    void hook_update_objective() 
override;
 
   54    void hook_update_rhs() 
override;
 
   55    void hook_remove(
const Var &t_var) 
override;
 
   56    void hook_remove(
const Ctr &t_ctr) 
override;
 
   57    void hook_remove(
const QCtr &t_ctr) 
override;
 
   58    void hook_remove(
const SOSCtr &t_ctr) 
override;
 
   60    Osi(
const Model& t_model, 
const OsiSolverInterface& t_solver_interface, 
bool t_continuous_relaxation);
 
   62    void set_param_logs(
bool t_value) 
override;
 
   64    void set_param_presolve(
bool t_value) 
override;