Skip to content

Commit 5214f4d

Browse files
committed
cleanup moi wrapper
1 parent 3aed9bd commit 5214f4d

File tree

2 files changed

+76
-37
lines changed

2 files changed

+76
-37
lines changed

src/moi_wrapper.jl

Lines changed: 76 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ function MOI.set(model::Optimizer, attr::MOI.ObjectiveFunction{<: SUPPORTED_OBJE
8888
MOI.set(model.optimizer, attr, f)
8989
end
9090

91-
MOI.supports(::Optimizer, ::MOI.ObjectiveSense) = true
91+
MOI.supports(model::Optimizer, attr::MOI.ObjectiveSense) = MOI.supports(model.optimizer, attr)
9292

9393
function MOI.set(model::Optimizer, attr::MOI.ObjectiveSense, sense::MOI.OptimizationSense)
9494
model.diff = nothing
@@ -99,80 +99,111 @@ function MOI.get(model::Optimizer, attr::MOI.AbstractModelAttribute)
9999
return MOI.get(model.optimizer, attr)
100100
end
101101

102-
function MOI.get(model::Optimizer, attr::MOI.ListOfConstraintIndices{F, S}) where {F<:SUPPORTED_SCALAR_FUNCTIONS, S<:SUPPORTED_SCALAR_SETS}
102+
function MOI.get(
103+
model::Optimizer, attr::MOI.ListOfConstraintIndices{F, S}
104+
) where {F<:SUPPORTED_SCALAR_FUNCTIONS, S<:SUPPORTED_SCALAR_SETS}
103105
return MOI.get(model.optimizer, attr)
104106
end
105107

106-
function MOI.get(model::Optimizer, attr::MOI.ConstraintSet, ci::CI{F, S}) where {F<:SUPPORTED_SCALAR_FUNCTIONS, S<:SUPPORTED_SCALAR_SETS}
108+
function MOI.get(
109+
model::Optimizer, attr::MOI.ConstraintSet, ci::CI{F, S}
110+
) where {F<:SUPPORTED_SCALAR_FUNCTIONS, S<:SUPPORTED_SCALAR_SETS}
107111
return MOI.get(model.optimizer, attr, ci)
108112
end
109113

110-
function MOI.set(model::Optimizer, attr::MOI.ConstraintSet, ci::CI{F, S}, s::S) where {F<:SUPPORTED_SCALAR_FUNCTIONS, S<:SUPPORTED_SCALAR_SETS}
114+
function MOI.set(
115+
model::Optimizer, attr::MOI.ConstraintSet, ci::CI{F, S}, s::S
116+
) where {F<:SUPPORTED_SCALAR_FUNCTIONS, S<:SUPPORTED_SCALAR_SETS}
111117
model.diff = nothing
112118
return MOI.set(model.optimizer, attr, ci, s)
113119
end
114120

115-
function MOI.get(model::Optimizer, attr::MOI.ConstraintFunction, ci::CI{F, S}) where {F<:SUPPORTED_SCALAR_FUNCTIONS, S<:SUPPORTED_SCALAR_SETS}
121+
function MOI.get(
122+
model::Optimizer, attr::MOI.ConstraintFunction, ci::CI{F, S}
123+
) where {F<:SUPPORTED_SCALAR_FUNCTIONS, S<:SUPPORTED_SCALAR_SETS}
116124
return MOI.get(model.optimizer, attr, ci)
117125
end
118126

119-
function MOI.set(model::Optimizer, attr::MOI.ConstraintFunction, ci::CI{F, S}, f::F) where {F<:SUPPORTED_SCALAR_FUNCTIONS, S<:SUPPORTED_SCALAR_SETS}
127+
function MOI.set(
128+
model::Optimizer, attr::MOI.ConstraintFunction, ci::CI{F, S}, f::F
129+
) where {F<:SUPPORTED_SCALAR_FUNCTIONS, S<:SUPPORTED_SCALAR_SETS}
120130
model.diff = nothing
121131
return MOI.set(model.optimizer, attr, ci, f)
122132
end
123133

124-
function MOI.get(model::Optimizer, attr::MOI.ListOfConstraintIndices{F, S}) where {F<:SUPPORTED_VECTOR_FUNCTIONS, S<:SUPPORTED_VECTOR_SETS}
134+
function MOI.get(
135+
model::Optimizer, attr::MOI.ListOfConstraintIndices{F, S}
136+
) where {F<:SUPPORTED_VECTOR_FUNCTIONS, S<:SUPPORTED_VECTOR_SETS}
125137
return MOI.get(model.optimizer, attr)
126138
end
127139

128-
function MOI.get(model::Optimizer, attr::MOI.ConstraintSet, ci::CI{F, S}) where {F<:SUPPORTED_VECTOR_FUNCTIONS, S<:SUPPORTED_VECTOR_SETS}
140+
function MOI.get(
141+
model::Optimizer, attr::MOI.ConstraintSet, ci::CI{F, S}
142+
) where {F<:SUPPORTED_VECTOR_FUNCTIONS, S<:SUPPORTED_VECTOR_SETS}
129143
return MOI.get(model.optimizer, attr, ci)
130144
end
131145

132-
function MOI.set(model::Optimizer, attr::MOI.ConstraintSet, ci::CI{F, S}, s::S) where {F<:SUPPORTED_VECTOR_FUNCTIONS, S<:SUPPORTED_VECTOR_SETS}
146+
function MOI.set(
147+
model::Optimizer, attr::MOI.ConstraintSet, ci::CI{F, S}, s::S
148+
) where {F<:SUPPORTED_VECTOR_FUNCTIONS, S<:SUPPORTED_VECTOR_SETS}
133149
model.diff = nothing
134150
return MOI.set(model.optimizer, attr, ci, s)
135151
end
136152

137-
function MOI.get(model::Optimizer, attr::MOI.ConstraintFunction, ci::CI{F, S}) where {F<:SUPPORTED_VECTOR_FUNCTIONS, S<:SUPPORTED_VECTOR_SETS}
153+
function MOI.get(
154+
model::Optimizer, attr::MOI.ConstraintFunction, ci::CI{F, S}
155+
) where {F<:SUPPORTED_VECTOR_FUNCTIONS, S<:SUPPORTED_VECTOR_SETS}
138156
return MOI.get(model.optimizer, attr, ci)
139157
end
140158

141-
function MOI.set(model::Optimizer, attr::MOI.ConstraintFunction, ci::CI{F, S}, f::F) where {F<:SUPPORTED_VECTOR_FUNCTIONS, S<:SUPPORTED_VECTOR_SETS}
159+
function MOI.set(
160+
model::Optimizer, attr::MOI.ConstraintFunction, ci::CI{F, S}, f::F
161+
) where {F<:SUPPORTED_VECTOR_FUNCTIONS, S<:SUPPORTED_VECTOR_SETS}
142162
model.diff = nothing
143163
return MOI.set(model.optimizer, attr, ci, f)
144164
end
145165

146166
# `MOI.supports` methods
147167

148-
function MOI.supports(::Optimizer,
149-
::MOI.ObjectiveFunction{MOI.ScalarAffineFunction{Float64}})
150-
return true
151-
end
152-
153-
function MOI.supports(::Optimizer,
154-
::MOI.ObjectiveFunction{MOI.ScalarQuadraticFunction{Float64}})
155-
return true
156-
end
157-
158-
function MOI.supports(::Optimizer, ::MOI.AbstractModelAttribute)
159-
return true
160-
end
161-
162-
function MOI.supports(::Optimizer, ::MOI.ObjectiveFunction)
163-
return false
168+
function MOI.supports(model::Optimizer, attr::MOI.AbstractModelAttribute)
169+
return MOI.supports(model.optimizer, attr)
164170
end
165171

166-
function MOI.supports(::Optimizer, ::MOI.ObjectiveFunction{<: SUPPORTED_OBJECTIVES})
167-
return true
172+
function MOI.supports(
173+
model::Optimizer,
174+
attr::MOI.ObjectiveFunction{<: SUPPORTED_OBJECTIVES}
175+
)
176+
return MOI.supports(model.optimizer, attr)
168177
end
169178

170-
MOI.supports_constraint(::Optimizer, ::Type{<: SUPPORTED_SCALAR_FUNCTIONS}, ::Type{<: SUPPORTED_SCALAR_SETS}) = true
171-
MOI.supports_constraint(::Optimizer, ::Type{<: SUPPORTED_VECTOR_FUNCTIONS}, ::Type{<: SUPPORTED_VECTOR_SETS}) = true
172-
function MOI.supports(model::Optimizer, attr::MOI.ConstraintName, ::Type{CI{F, S}}) where {F<:SUPPORTED_SCALAR_FUNCTIONS, S<:SUPPORTED_SCALAR_SETS}
179+
function MOI.supports_constraint(
180+
model::Optimizer,
181+
::Type{F},
182+
::Type{S}
183+
) where {
184+
F <: SUPPORTED_SCALAR_FUNCTIONS,
185+
S <: SUPPORTED_SCALAR_SETS,
186+
}
187+
MOI.supports_constraint(model.optimizer, F, S)
188+
end
189+
function MOI.supports_constraint(
190+
model::Optimizer,
191+
::Type{F},
192+
::Type{S}
193+
) where {
194+
F <: SUPPORTED_VECTOR_FUNCTIONS,
195+
S <: SUPPORTED_VECTOR_SETS,
196+
}
197+
MOI.supports_constraint(model.optimizer, F, S)
198+
end
199+
function MOI.supports(
200+
model::Optimizer, attr::MOI.ConstraintName, ::Type{CI{F, S}}
201+
) where {F<:SUPPORTED_SCALAR_FUNCTIONS, S<:SUPPORTED_SCALAR_SETS}
173202
return MOI.supports(model.optimizer, attr, CI{F,S})
174203
end
175-
function MOI.supports(model::Optimizer, attr::MOI.ConstraintName, ::Type{CI{F, S}}) where {F<:SUPPORTED_VECTOR_FUNCTIONS, S<:SUPPORTED_VECTOR_SETS}
204+
function MOI.supports(
205+
model::Optimizer, attr::MOI.ConstraintName, ::Type{CI{F, S}}
206+
) where {F<:SUPPORTED_VECTOR_FUNCTIONS, S<:SUPPORTED_VECTOR_SETS}
176207
return MOI.supports(model.optimizer, attr, CI{F,S})
177208
end
178209

@@ -191,8 +222,15 @@ function MOI.is_empty(model::Optimizer)
191222
model.diff === nothing
192223
end
193224

194-
# now supports name too
195-
MOI.supports_incremental_interface(::Optimizer) = true
225+
function MOI.supports_incremental_interface(model::Optimizer)
226+
if !MOI.supports_incremental_interface(model.optimizer)
227+
error(
228+
"DiffOpt requires a solver that " *
229+
"`MOI.supports_incremental_interface`, which is not the case for " *
230+
"$(model.optimizer)")
231+
end
232+
return true
233+
end
196234

197235
function MOI.copy_to(model::Optimizer, src::MOI.ModelLike)
198236
model.diff = nothing
@@ -352,7 +390,9 @@ function MOI.get(model::Optimizer, ::Type{CI{VF, VS}}, name::String) where {VF<:
352390
return MOI.get(model.optimizer, CI{VF,VS}, name)
353391
end
354392

355-
MOI.supports(::Optimizer, ::MOI.TimeLimitSec) = true
393+
function MOI.supports(model::Optimizer, attr::MOI.TimeLimitSec)
394+
MOI.supports(model.optimizer, attr)
395+
end
356396
function MOI.set(model::Optimizer, ::MOI.TimeLimitSec, value::Union{Real, Nothing})
357397
MOI.set(model.optimizer, MOI.TimeLimitSec(), value)
358398
end

test/moi_wrapper.jl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ _vaf(c::Vector{Float64}) = VAF(MOI.ScalarAffineTerm{Float64}[], c)
1818
MOI.set(model, MOI.Silent(), true)
1919
MOI.Test.runtests(model, MOI.Test.Config(),
2020
exclude = [
21-
"test_model_copy_to_UnsupportedAttribute",
2221
"test_conic_linear_VectorOfVariables_2",
2322
"test_attribute_SolverVersion",
2423
]

0 commit comments

Comments
 (0)