soplex_rs/
status.rs

1use std::convert::From;
2
3/// Status of the solver
4#[derive(Debug, PartialEq, Clone)]
5pub enum Status {
6    /// An error occurred
7    Error,
8    /// No ratiotester loaded
9    NoRatioTester,
10    /// No pricer loaded
11    NoPricer,
12    /// No linear solver loaded
13    NoSolver,
14    /// Not initialised error
15    NotInit,
16    /// Solve() aborted to exit decomposition simplex
17    AbortExdecomp,
18    /// Solve() aborted due to commence decomposition simplex
19    AbortDecomp,
20    /// Solve() aborted due to detection of cycling
21    AbortCycling,
22    /// Solve() aborted due to time limit
23    AbortTime,
24    /// Solve() aborted due to iteration limit
25    AbortIter,
26    /// Solve() aborted due to objective limit
27    AbortValue,
28    /// Basis is singular, numerical troubles?
29    Singular,
30    /// No Problem has been loaded
31    NoProblem,
32    /// LP has a usable Basis (maybe LP is changed)
33    Regular,
34    /// Algorithm is running
35    Running,
36    /// Nothing known on loaded problem
37    Unknown,
38    /// LP has been solved to optimality
39    Optimal,
40    /// LP has been proven to be primal unbounded
41    Unbounded,
42    /// LP has been proven to be primal infeasible
43    Infeasible,
44    /// LP is primal infeasible or unbounded
45    InfOrUnbd,
46    /// LP has been solved to optimality but unscaled solution contains violations
47    OptimalUnscaledViolations,
48}
49
50impl From<i32> for Status {
51    fn from(item: i32) -> Self {
52        match item {
53            -15 => Status::Error,
54            -14 => Status::NoRatioTester,
55            -13 => Status::NoPricer,
56            -12 => Status::NoSolver,
57            -11 => Status::NotInit,
58            -10 => Status::AbortExdecomp,
59            -9 => Status::AbortDecomp,
60            -8 => Status::AbortCycling,
61            -7 => Status::AbortTime,
62            -6 => Status::AbortIter,
63            -5 => Status::AbortValue,
64            -4 => Status::Singular,
65            -3 => Status::NoProblem,
66            -2 => Status::Regular,
67            -1 => Status::Running,
68            0 => Status::Unknown,
69            1 => Status::Optimal,
70            2 => Status::Unbounded,
71            3 => Status::Infeasible,
72            4 => Status::InfOrUnbd,
73            5 => Status::OptimalUnscaledViolations,
74            _ => panic!("Invalid value for Status"),
75        }
76    }
77}