#![deny(missing_docs)]
#![forbid(unsafe_code)]
#![cfg_attr(docsrs, feature(doc_cfg))]
pub use affine_expression_trait::IntoAffineExpression;
pub use cardinality_constraint_solver_trait::CardinalityConstraintSolver;
pub use constraint::Constraint;
pub use expression::Expression;
#[cfg(not(any(
feature = "coin_cbc",
feature = "microlp",
feature = "lpsolve",
feature = "highs",
feature = "scip",
feature = "cplex-rs",
)))]
#[cfg(feature = "clarabel")]
pub use solvers::clarabel::clarabel as default_solver;
#[cfg_attr(docsrs, doc(cfg(feature = "clarabel")))]
#[cfg(feature = "clarabel")]
pub use solvers::clarabel::clarabel;
#[cfg_attr(docsrs, doc(cfg(feature = "coin_cbc")))]
#[cfg(feature = "coin_cbc")]
pub use solvers::coin_cbc::coin_cbc;
#[cfg(feature = "coin_cbc")]
pub use solvers::coin_cbc::coin_cbc as default_solver;
#[cfg(not(any(
feature = "coin_cbc",
feature = "microlp",
feature = "lpsolve",
feature = "highs"
)))]
#[cfg(feature = "cplex-rs")]
pub use solvers::cplex::cplex as default_solver;
#[cfg(feature = "highs")]
#[cfg_attr(docsrs, doc(cfg(feature = "highs")))]
pub use solvers::highs::highs;
#[cfg(not(any(feature = "coin_cbc", feature = "microlp", feature = "lpsolve")))]
#[cfg(feature = "highs")]
pub use solvers::highs::highs as default_solver;
#[cfg(feature = "lp-solvers")]
#[cfg_attr(docsrs, doc(cfg(feature = "lp-solvers")))]
pub use solvers::lp_solvers::LpSolver;
#[cfg(feature = "lpsolve")]
#[cfg_attr(docsrs, doc(cfg(feature = "lpsolve")))]
pub use solvers::lpsolve::lp_solve;
#[cfg(not(any(feature = "coin_cbc", feature = "microlp")))]
#[cfg(feature = "lpsolve")]
pub use solvers::lpsolve::lp_solve as default_solver;
#[cfg(feature = "microlp")]
#[cfg_attr(docsrs, doc(cfg(feature = "microlp")))]
pub use solvers::microlp::microlp;
#[cfg(not(feature = "coin_cbc"))]
#[cfg(feature = "microlp")]
pub use solvers::microlp::microlp as default_solver;
#[cfg(feature = "scip")]
#[cfg_attr(docsrs, doc(cfg(feature = "highs")))]
pub use solvers::scip::scip;
#[cfg(not(any(
feature = "coin_cbc",
feature = "microlp",
feature = "lpsolve",
feature = "highs"
)))]
#[cfg(feature = "scip")]
pub use solvers::scip::scip as default_solver;
pub use solvers::{
DualValues, ModelWithSOS1, ObjectiveDirection, ResolutionError, Solution, SolutionStatus,
SolutionWithDual, Solver, SolverModel, StaticSolver, WithInitialSolution, WithMipGap,
WithTimeLimit, solver_name,
};
pub use variable::{ProblemVariables, Variable, VariableDefinition, variable};
#[cfg(not(any(
feature = "coin_cbc",
feature = "microlp",
feature = "lpsolve",
feature = "highs",
feature = "scip",
)))]
#[cfg(feature = "lp-solvers")]
#[allow(non_upper_case_globals)]
pub const default_solver: LpSolver<
solvers::lp_solvers::StaticSolver<solvers::lp_solvers::AllSolvers>,
> = LpSolver(solvers::lp_solvers::StaticSolver::new());
#[cfg(not(any(
feature = "coin_cbc",
feature = "microlp",
feature = "lpsolve",
feature = "highs",
feature = "lp-solvers",
feature = "scip",
feature = "cplex-rs",
feature = "clarabel",
)))]
compile_error!(
"No solver available. \
You need to activate at least one solver feature flag in good_lp. \
You can do by adding the following to your Cargo.toml :
[dependencies]
good_lp = { version = \"*\", features = [\"microlp\"] }
"
);
#[cfg(all(feature = "lpsolve", feature = "cplex-rs",))]
compile_error!(
"'lpsolve' and 'cplex-rs' features are incompatible. \
Please select just one of the two. If you need all compatible solvers, use the 'all_deafult_solvers' feature. \
"
);
mod expression;
#[macro_use]
pub mod variable;
mod affine_expression_trait;
mod cardinality_constraint_solver_trait;
pub mod constraint;
pub mod solvers;
mod variables_macro;