Skip to content

Commit d24ec85

Browse files
authored
Various refactoring and tidying of src/MOI_wrapper/results.jl (#313)
1 parent 942f099 commit d24ec85

File tree

1 file changed

+16
-26
lines changed

1 file changed

+16
-26
lines changed

src/MOI_wrapper/results.jl

Lines changed: 16 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
# Use of this source code is governed by an MIT-style license that can be found
44
# in the LICENSE.md file or at https://opensource.org/licenses/MIT.
55

6-
# results
7-
86
const _TERMINATION_STATUS_MAP = Dict(
97
SCIP_STATUS_UNKNOWN => MOI.OTHER_ERROR,
108
SCIP_STATUS_USERINTERRUPT => MOI.INTERRUPTED,
@@ -32,40 +30,36 @@ function MOI.get(o::Optimizer, ::MOI.TerminationStatus)
3230
end
3331

3432
function MOI.get(o::Optimizer, attr::MOI.PrimalStatus)
35-
return if 1 <= attr.result_index <= MOI.get(o, MOI.ResultCount())
36-
MOI.FEASIBLE_POINT
37-
else
38-
MOI.NO_SOLUTION
33+
if 1 <= attr.result_index <= MOI.get(o, MOI.ResultCount())
34+
return MOI.FEASIBLE_POINT
3935
end
40-
end
41-
42-
function MOI.get(::Optimizer, ::MOI.DualStatus)
4336
return MOI.NO_SOLUTION
4437
end
4538

39+
MOI.get(::Optimizer, ::MOI.DualStatus) = MOI.NO_SOLUTION
40+
4641
function MOI.get(o::Optimizer, ::MOI.ResultCount)::Int
4742
status = SCIPgetStatus(o)
48-
if status in [SCIP_STATUS_UNBOUNDED, SCIP_STATUS_INFORUNBD]
43+
if status in (SCIP_STATUS_UNBOUNDED, SCIP_STATUS_INFORUNBD)
4944
return 0
5045
end
5146
return SCIPgetNSols(o)
5247
end
5348

54-
function MOI.get(o::Optimizer, ::MOI.RawStatusString)
55-
return string(SCIPgetStatus(o))
56-
end
49+
MOI.get(o::Optimizer, ::MOI.RawStatusString) = string(SCIPgetStatus(o))
5750

5851
"Make sure that SCIP is currently in one of the allowed stages."
5952
function assert_stage(o::Optimizer, stages)
6053
stage = SCIPgetStage(o)
6154
if !(stage in stages)
6255
error("SCIP is wrong stage ($stage, need $stages)!")
6356
end
57+
return
6458
end
6559

6660
"Make sure that the problem was solved (SCIP is in SOLVED stage)."
6761
function assert_solved(o::Optimizer)
68-
# SCIP's stage is SOLVING when stopped by user limit!
62+
# SCIP's stage is SCIP_STAGE_SOLVING when stopped by user limit!
6963
assert_stage(
7064
o,
7165
(
@@ -75,18 +69,15 @@ function assert_solved(o::Optimizer)
7569
SCIP_STAGE_SOLVED,
7670
),
7771
)
78-
79-
# Check for invalid status (when stage is SOLVING).
72+
# Check for invalid status (when stage is SCIP_STAGE_SOLVING).
8073
status = SCIPgetStatus(o)
8174
if status in
8275
(SCIP_STATUS_UNKNOWN, SCIP_STATUS_USERINTERRUPT, SCIP_STATUS_TERMINATE)
8376
error("SCIP's solving was interrupted, but not by a user-given limit!")
8477
end
78+
return
8579
end
8680

87-
"Make sure that: TRANSFORMED ≤ stage ≤ SOLVED."
88-
assert_after_prob(o::Optimizer) = assert_stage(o, SCIP_Stage.(3:10))
89-
9081
function MOI.get(o::Optimizer, attr::MOI.ObjectiveValue)
9182
assert_solved(o)
9283
MOI.check_result_index_bounds(o, attr)
@@ -128,14 +119,15 @@ function MOI.get(
128119
end
129120

130121
function MOI.get(o::Optimizer, ::MOI.ObjectiveBound)
131-
assert_after_prob(o)
122+
# Make sure that: TRANSFORMED ≤ stage ≤ SOLVED
123+
assert_stage(o, SCIP_Stage.(3:10))
132124
return SCIPgetDualbound(o)
133125
end
134126

135127
function MOI.get(o::Optimizer, ::MOI.RelativeGap)
136128
assert_stage(
137129
o,
138-
[SCIP_STAGE_PRESOLVING, SCIP_STAGE_SOLVING, SCIP_STAGE_SOLVED],
130+
(SCIP_STAGE_PRESOLVING, SCIP_STAGE_SOLVING, SCIP_STAGE_SOLVED),
139131
)
140132
return SCIPgetGap(o)
141133
end
@@ -144,14 +136,12 @@ function MOI.get(o::Optimizer, ::MOI.SolveTimeSec)
144136
return SCIPgetSolvingTime(o)
145137
end
146138

147-
function MOI.get(o::Optimizer, ::MOI.SimplexIterations)
139+
function MOI.get(o::Optimizer, ::MOI.SimplexIterations)::Int64
148140
assert_stage(
149141
o,
150-
[SCIP_STAGE_PRESOLVING, SCIP_STAGE_SOLVING, SCIP_STAGE_SOLVED],
142+
(SCIP_STAGE_PRESOLVING, SCIP_STAGE_SOLVING, SCIP_STAGE_SOLVED),
151143
)
152144
return SCIPgetNLPIterations(o)
153145
end
154146

155-
function MOI.get(o::Optimizer, ::MOI.NodeCount)
156-
return SCIPgetNNodes(o)
157-
end
147+
MOI.get(o::Optimizer, ::MOI.NodeCount)::Int64 = SCIPgetNNodes(o)

0 commit comments

Comments
 (0)