1#![deny(missing_docs)]
2#![forbid(unsafe_code)]
3#![cfg_attr(docsrs, feature(doc_cfg))]
4pub use affine_expression_trait::IntoAffineExpression;
69pub use cardinality_constraint_solver_trait::CardinalityConstraintSolver;
70pub use constraint::Constraint;
71pub use expression::Expression;
72#[cfg(not(any(
73 feature = "coin_cbc",
74 feature = "microlp",
75 feature = "lpsolve",
76 feature = "highs",
77 feature = "scip",
78 feature = "cplex-rs",
79)))]
80#[cfg(feature = "clarabel")]
81pub use solvers::clarabel::clarabel as default_solver;
82#[cfg_attr(docsrs, doc(cfg(feature = "clarabel")))]
83#[cfg(feature = "clarabel")]
84pub use solvers::clarabel::clarabel;
85#[cfg_attr(docsrs, doc(cfg(feature = "coin_cbc")))]
86#[cfg(feature = "coin_cbc")]
87pub use solvers::coin_cbc::coin_cbc;
88#[cfg(feature = "coin_cbc")]
89pub use solvers::coin_cbc::coin_cbc as default_solver;
91#[cfg(not(any(
92 feature = "coin_cbc",
93 feature = "microlp",
94 feature = "lpsolve",
95 feature = "highs"
96)))]
97#[cfg(feature = "cplex-rs")]
98pub use solvers::cplex::cplex as default_solver;
99#[cfg(feature = "highs")]
100#[cfg_attr(docsrs, doc(cfg(feature = "highs")))]
101pub use solvers::highs::highs;
102#[cfg(not(any(feature = "coin_cbc", feature = "microlp", feature = "lpsolve")))]
103#[cfg(feature = "highs")]
104pub use solvers::highs::highs as default_solver;
106#[cfg(feature = "lp-solvers")]
107#[cfg_attr(docsrs, doc(cfg(feature = "lp-solvers")))]
108pub use solvers::lp_solvers::LpSolver;
109#[cfg(feature = "lpsolve")]
110#[cfg_attr(docsrs, doc(cfg(feature = "lpsolve")))]
111pub use solvers::lpsolve::lp_solve;
112#[cfg(not(any(feature = "coin_cbc", feature = "microlp")))]
113#[cfg(feature = "lpsolve")]
114pub use solvers::lpsolve::lp_solve as default_solver;
116#[cfg(feature = "microlp")]
117#[cfg_attr(docsrs, doc(cfg(feature = "microlp")))]
118pub use solvers::microlp::microlp;
119#[cfg(not(feature = "coin_cbc"))]
120#[cfg(feature = "microlp")]
121pub use solvers::microlp::microlp as default_solver;
123#[cfg(feature = "scip")]
124#[cfg_attr(docsrs, doc(cfg(feature = "highs")))]
125pub use solvers::scip::scip;
126#[cfg(not(any(
127 feature = "coin_cbc",
128 feature = "microlp",
129 feature = "lpsolve",
130 feature = "highs"
131)))]
132#[cfg(feature = "scip")]
133pub use solvers::scip::scip as default_solver;
134
135pub use solvers::{
136 solver_name, DualValues, ModelWithSOS1, ObjectiveDirection, ResolutionError, Solution,
137 SolutionStatus, SolutionWithDual, Solver, SolverModel, StaticSolver, WithInitialSolution,
138 WithMipGap, WithTimeLimit,
139};
140pub use variable::{variable, ProblemVariables, Variable, VariableDefinition};
141
142#[cfg(not(any(
143 feature = "coin_cbc",
144 feature = "microlp",
145 feature = "lpsolve",
146 feature = "highs",
147 feature = "scip",
148)))]
149#[cfg(feature = "lp-solvers")]
150#[allow(non_upper_case_globals)]
152pub const default_solver: LpSolver<
153 solvers::lp_solvers::StaticSolver<solvers::lp_solvers::AllSolvers>,
154> = LpSolver(solvers::lp_solvers::StaticSolver::new());
155
156#[cfg(not(any(
157 feature = "coin_cbc",
158 feature = "microlp",
159 feature = "lpsolve",
160 feature = "highs",
161 feature = "lp-solvers",
162 feature = "scip",
163 feature = "cplex-rs",
164 feature = "clarabel",
165)))]
166compile_error!(
167 "No solver available. \
168You need to activate at least one solver feature flag in good_lp. \
169You can do by adding the following to your Cargo.toml :
170[dependencies]
171good_lp = { version = \"*\", features = [\"microlp\"] }
172"
173);
174
175#[cfg(all(feature = "lpsolve", feature = "cplex-rs",))]
179compile_error!(
180 "'lpsolve' and 'cplex-rs' features are incompatible. \
181Please select just one of the two. If you need all compatible solvers, use the 'all_deafult_solvers' feature. \
182"
183);
184
185mod expression;
186#[macro_use]
187pub mod variable;
188mod affine_expression_trait;
189mod cardinality_constraint_solver_trait;
190pub mod constraint;
191pub mod solvers;
192mod variables_macro;