#ifndef LP_DATA_HIGHSMODELUTILS_H_
#define LP_DATA_HIGHSMODELUTILS_H_
#include "lp_data/HighsInfo.h"
#include "model/HighsModel.h"
void analyseModelBounds(const HighsLogOptions& log_options, const char* message,
HighsInt numBd, const std::vector<double>& lower,
const std::vector<double>& upper);
bool hasNamesWithSpaces(const HighsLogOptions& log_options, const HighsLp& lp);
bool hasNamesWithSpaces(const HighsLogOptions& log_options, const bool col,
const std::vector<std::string>& names);
void writeModelBoundSolution(
FILE* file, const HighsLogOptions& log_options, const bool columns,
const HighsInt dim, const std::vector<double>& lower,
const std::vector<double>& upper, const std::vector<std::string>& names,
const bool have_primal, const std::vector<double>& primal,
const bool have_dual, const std::vector<double>& dual,
const bool have_basis, const std::vector<HighsBasisStatus>& status,
const HighsVarType* integrality = NULL);
void writeModelObjective(FILE* file, const HighsLogOptions& log_options,
const HighsModel& model,
const std::vector<double>& primal_solution);
void writeLpObjective(FILE* file, const HighsLogOptions& log_options,
const HighsLp& lp,
const std::vector<double>& primal_solution);
void writeObjectiveValue(FILE* file, const HighsLogOptions& log_options,
const double objective_value);
void writePrimalSolution(FILE* file, const HighsLogOptions& log_options,
const HighsLp& lp,
const std::vector<double>& primal_solution,
const bool sparse = false);
void writeModelSolution(FILE* file, const HighsLogOptions& log_options,
const HighsModel& model, const HighsSolution& solution,
const HighsInfo& info, const bool sparse = false);
HighsInt maxNameLength(const HighsLp& lp);
HighsInt maxNameLength(const std::vector<std::string>& names);
HighsStatus normaliseNames(const HighsLogOptions& log_options, HighsLp& lp);
HighsStatus normaliseNames(const HighsLogOptions& log_options, bool column,
HighsInt num_name_required, std::string& name_prefix,
HighsInt& name_suffix,
std::vector<std::string>& names,
HighsNameHash& name_hash);
void writeSolutionFile(FILE* file, const HighsOptions& options,
const HighsModel& model, const HighsBasis& basis,
const HighsSolution& solution, const HighsInfo& info,
const HighsModelStatus model_status,
const HighsInt style);
void writeGlpsolCostRow(FILE* file, const HighsLogOptions& log_options,
const bool raw, const bool is_mip,
const HighsInt row_id,
const std::string& objective_name,
const double objective_function_value);
void writeGlpsolSolution(FILE* file, const HighsOptions& options,
const HighsModel& model, const HighsBasis& basis,
const HighsSolution& solution,
const HighsModelStatus model_status,
const HighsInfo& info, const bool raw);
void writeOldRawSolution(FILE* file, const HighsLogOptions& log_options,
const HighsLp& lp, const HighsBasis& basis,
const HighsSolution& solution);
HighsBasisStatus checkedVarHighsNonbasicStatus(
const HighsBasisStatus ideal_status, const double lower,
const double upper);
std::string utilModelStatusToString(const HighsModelStatus model_status);
std::string utilSolutionStatusToString(const HighsInt solution_status);
std::string utilBasisStatusToString(const HighsBasisStatus basis_status);
std::string utilBasisValidityToString(const HighsInt basis_validity);
std::string utilPresolveRuleTypeToString(const HighsInt rule_type);
HighsStatus highsStatusFromHighsModelStatus(HighsModelStatus model_status);
std::string statusToString(const HighsBasisStatus status, const double lower,
const double upper);
std::string typeToString(const HighsVarType type);
std::string findModelObjectiveName(const HighsLp* lp,
const HighsHessian* hessian = nullptr);
#endif