Skip to content

Commit 0d49cc1

Browse files
odowblegat
authored andcommitted
Improve type inference in Utilities (#1316)
1 parent 41ba192 commit 0d49cc1

File tree

3 files changed

+33
-32
lines changed

3 files changed

+33
-32
lines changed

src/Utilities/cachingoptimizer.jl

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -127,9 +127,9 @@ function reset_optimizer(m::CachingOptimizer, optimizer::MOI.AbstractOptimizer)
127127
for attr in MOI.get(m.model_cache, MOI.ListOfOptimizerAttributesSet())
128128
# Skip attributes which don't apply to the new optimizer.
129129
if attr isa MOI.RawParameter
130-
# Even if the optimizer claims to `supports` `attr`, the value
130+
# Even if the optimizer claims to `supports` `attr`, the value
131131
# might have a different meaning (e.g., two solvers with `logLevel`
132-
# as a RawParameter). To be on the safe side, just skip all raw
132+
# as a RawParameter). To be on the safe side, just skip all raw
133133
# parameters.
134134
continue
135135
elseif !MOI.is_copyable(attr) || !MOI.supports(m.optimizer, attr)
@@ -280,7 +280,8 @@ function MOI.add_variables(m::CachingOptimizer, n)
280280
if m.state == ATTACHED_OPTIMIZER
281281
if m.mode == AUTOMATIC
282282
try
283-
vindices_optimizer = MOI.add_variables(m.optimizer, n)
283+
vindices_optimizer =
284+
MOI.add_variables(m.optimizer, n)::Vector{MOI.VariableIndex}
284285
catch err
285286
if err isa MOI.NotAllowedError
286287
reset_optimizer(m)
@@ -289,7 +290,8 @@ function MOI.add_variables(m::CachingOptimizer, n)
289290
end
290291
end
291292
else
292-
vindices_optimizer = MOI.add_variables(m.optimizer, n)
293+
vindices_optimizer =
294+
MOI.add_variables(m.optimizer, n)::Vector{MOI.VariableIndex}
293295
end
294296
end
295297
vindices = MOI.add_variables(m.model_cache, n)

src/Utilities/model.jl

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -614,31 +614,30 @@ function MOI.get(
614614
return MOI.get(model.constraints, noc)
615615
end
616616

617-
function _add_contraint_type(
617+
function _add_constraint_type(
618618
list,
619619
model::AbstractModel,
620620
S::Type{<:MOI.AbstractScalarSet},
621621
)
622-
flag = single_variable_flag(S)
622+
flag = single_variable_flag(S)::UInt8
623623
if any(mask -> !iszero(flag & mask), model.single_variable_mask)
624624
push!(list, (MOI.SingleVariable, S))
625625
end
626626
return
627627
end
628-
function MOI.get(model::AbstractModel{T}, loc::MOI.ListOfConstraints) where {T}
629-
list = copy(MOI.get(model.constraints, loc))
630-
for S in (
631-
MOI.EqualTo{T},
632-
MOI.GreaterThan{T},
633-
MOI.LessThan{T},
634-
MOI.Interval{T},
635-
MOI.Semicontinuous{T},
636-
MOI.Semiinteger{T},
637-
MOI.Integer,
638-
MOI.ZeroOne,
639-
)
640-
_add_contraint_type(list, model, S)
641-
end
628+
function MOI.get(
629+
model::AbstractModel{T},
630+
attr::MOI.ListOfConstraints,
631+
) where {T}
632+
list = MOI.get(model.constraints, attr)::Vector{Tuple{DataType,DataType}}
633+
_add_constraint_type(list, model, MOI.EqualTo{T})
634+
_add_constraint_type(list, model, MOI.GreaterThan{T})
635+
_add_constraint_type(list, model, MOI.LessThan{T})
636+
_add_constraint_type(list, model, MOI.Interval{T})
637+
_add_constraint_type(list, model, MOI.Semicontinuous{T})
638+
_add_constraint_type(list, model, MOI.Semiinteger{T})
639+
_add_constraint_type(list, model, MOI.Integer)
640+
_add_constraint_type(list, model, MOI.ZeroOne)
642641
return list
643642
end
644643

src/Utilities/vector_of_constraints.jl

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -148,14 +148,14 @@ end
148148
# Deletion of variables in vector of variables
149149

150150
function _remove_variable(v::VectorOfConstraints, vi::MOI.VariableIndex)
151-
CleverDicts.map_values!(v.constraints) do func_set
152-
return remove_variable(func_set..., vi)
151+
CleverDicts.map_values!(v.constraints) do (f, s)
152+
return remove_variable(f, s, vi)
153153
end
154154
return
155155
end
156-
function _filter_variables(keep::Function, v::VectorOfConstraints)
157-
CleverDicts.map_values!(v.constraints) do func_set
158-
return filter_variables(keep, func_set...)
156+
function _filter_variables(keep::F, v::VectorOfConstraints) where {F<:Function}
157+
CleverDicts.map_values!(v.constraints) do (f, s)
158+
return filter_variables(keep, f, s)
159159
end
160160
return
161161
end
@@ -203,10 +203,10 @@ function _delete_variables(
203203
end
204204

205205
function _delete_variables(
206-
callback::Function,
207-
v::VectorOfConstraints{MOI.VectorOfVariables,S},
206+
callback::F,
207+
v::VectorOfConstraints{MOI.VectorOfVariables,<:MOI.AbstractVectorSet},
208208
vis::Vector{MOI.VariableIndex},
209-
) where {S<:MOI.AbstractVectorSet}
209+
) where {F<:Function}
210210
filter!(v.constraints) do p
211211
f = p.second[1]
212212
del = if length(f.variables) == 1
@@ -223,21 +223,21 @@ function _delete_variables(
223223
end
224224

225225
function _deleted_constraints(
226-
callback::Function,
226+
callback::F,
227227
v::VectorOfConstraints,
228228
vi::MOI.VariableIndex,
229-
)
229+
) where {F<:Function}
230230
vis = [vi]
231231
_delete_variables(callback, v, vis)
232232
_remove_variable(v, vi)
233233
return
234234
end
235235

236236
function _deleted_constraints(
237-
callback::Function,
237+
callback::F,
238238
v::VectorOfConstraints,
239239
vis::Vector{MOI.VariableIndex},
240-
)
240+
) where {F<:Function}
241241
removed = Set(vis)
242242
_delete_variables(callback, v, vis)
243243
_filter_variables(vi -> !(vi in removed), v)

0 commit comments

Comments
 (0)