Skip to content

Commit 87f6e6e

Browse files
blegatmlubin
authored andcommitted
Turn warnings into errors in CI and fix last remaining warnings (#393)
* Fix last remaining Julia v0.7 warnings * Turn warnings into errors in CI * Fix travis CI * Add Pkg.add Compat
1 parent cc56507 commit 87f6e6e

18 files changed

+32
-29
lines changed

.travis.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ notifications:
3030

3131
## uncomment the following lines to override the default test script
3232
script:
33-
- julia -e 'Pkg.clone(pwd()); Pkg.build("MathOptInterface"); Pkg.test("MathOptInterface"; coverage=true)'
33+
- julia -e 'Pkg.clone(pwd()); Pkg.build("MathOptInterface"); Pkg.add("Compat")' # warnings here about needed to do using Pkg but it also installs Compat
34+
- julia --depwarn=error -e 'using Compat; using Compat.Pkg; Pkg.test("MathOptInterface"; coverage=true)'
3435
after_success:
3536
# push coverage results to Coveralls
3637
#- julia -e 'cd(Pkg.dir("MathOptInterface")); Pkg.add("Coverage"); using Coverage; Coveralls.submit(Coveralls.process_folder())'

src/Bridges/Bridges.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module Bridges
22

3-
using Compat # For lastindex
3+
using Compat
44

55
using MathOptInterface
66
const MOI = MathOptInterface

src/Bridges/bridgeoptimizer.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,8 @@ function MOI.get(b::AbstractBridgeOptimizer, loc::MOI.ListOfConstraintIndices{F,
9797
end
9898
for bridge in values(b.bridges)
9999
for c in MOI.get(bridge, loc)
100-
i = findfirst(locr, c)
101-
if (VERSION >= v"0.7.0-DEV.3395" && i !== nothing) || (VERSION < v"0.7.0-DEV.3395" && !iszero(i))
100+
i = something(findfirst(isequal(c), locr), 0)
101+
if !iszero(i)
102102
MOI.deleteat!(locr, i)
103103
end
104104
end
@@ -128,7 +128,7 @@ function MOI.get(b::AbstractBridgeOptimizer, attr::MOI.ListOfConstraints)
128128
# of that type have been created by bridges and not by the user.
129129
# The code in `NumberOfConstraints` takes care of removing these constraints
130130
# from the counter so we can rely on it to remove these constraint types.
131-
types_to_remove = find(iszero.(map(FS -> MOI.get(b, MOI.NumberOfConstraints{FS...}()), list_of_types)))
131+
types_to_remove = findall(iszero.(map(FS -> MOI.get(b, MOI.NumberOfConstraints{FS...}()), list_of_types)))
132132
deleteat!(list_of_types, types_to_remove)
133133
list_of_types
134134
end

src/Bridges/detbridge.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ function LogDetBridge{T}(model, f::MOI.VectorAffineFunction{T}, s::MOI.LogDetCon
7979
d = s.dimension
8080
t, D, Δ, sdindex = extract_eigenvalues(model, f, d)
8181
l = MOI.addvariables!(model, d)
82-
lcindex = sublog.(model, l, D, T)
82+
lcindex = sublog.(Ref(model), l, D, T)
8383
tlindex = subsum(model, t, l, T)
8484

8585
LogDetBridge(Δ, l, sdindex, lcindex, tlindex)

src/Bridges/geomeanbridge.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ function GeoMeanBridge{T}(model, f::MOI.VectorAffineFunction{T}, s::MOI.Geometri
7171
# With sqrt(2)^l*t - xl1, we should scale both the ConstraintPrimal and ConstraintDual
7272
tubc = MOI.addconstraint!(model, MOI.ScalarAffineFunction([t.terms; MOI.ScalarAffineTerm(-sN, xl1)], t.constant), MOI.LessThan(zero(T)))
7373

74-
socrc = Vector{CI{MOI.VectorAffineFunction{T}, MOI.RotatedSecondOrderCone}}(N-1)
74+
socrc = Vector{CI{MOI.VectorAffineFunction{T}, MOI.RotatedSecondOrderCone}}(undef, N-1)
7575
offset = offsetnext = 0
7676
for i in 1:l
7777
offsetnext = offset + i
@@ -114,7 +114,7 @@ function MOI.canget(model::MOI.ModelLike, a::MOI.ConstraintPrimal, ::Type{GeoMea
114114
MOI.canget(model, a, CI{MOI.VectorAffineFunction{T}, MOI.RotatedSecondOrderCone})
115115
end
116116
function _getconstrattr(model, a, c::GeoMeanBridge{T}) where T
117-
output = Vector{T}(c.d)
117+
output = Vector{T}(undef, c.d)
118118
output[1] = MOI.get(model, a, c.tubc)
119119
N = length(c.xij)+1
120120
offset = div(N, 2) - 1 # 1 + 2 + ... + n/4

src/Bridges/soctopsdbridge.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,16 @@ function _SOCtoPSDCaff(f::MOI.VectorAffineFunction{T}, g::MOI.ScalarAffineFuncti
1212
N0 = length(f.terms)
1313
Ni = length(g.terms)
1414
N = N0 + (dim-1) * Ni
15-
terms = Vector{MOI.VectorAffineTerm{T}}(N)
15+
terms = Vector{MOI.VectorAffineTerm{T}}(undef, N)
1616
terms[1:N0] = MOI.VectorAffineTerm.(map(t -> trimap.(t.output_index, 1), f.terms),
1717
MOI.ScalarAffineTerm.(map(t -> t.scalar_term.coefficient, f.terms),
1818
map(t -> t.scalar_term.variable_index, f.terms)))
1919
constant = [f.constants; zeros(T, n - dim)]
2020
cur = N0
2121
for i in 2:dim
2222
k = trimap(i, i)
23-
terms[cur+(1:Ni)] = MOI.VectorAffineTerm.(k, MOI.ScalarAffineTerm.(map(t -> t.coefficient, g.terms),
24-
map(t -> t.variable_index, g.terms)))
23+
terms[cur.+(1:Ni)] = MOI.VectorAffineTerm.(k, MOI.ScalarAffineTerm.(map(t -> t.coefficient, g.terms),
24+
map(t -> t.variable_index, g.terms)))
2525
constant[k] = g.constant
2626
cur += Ni
2727
end

src/Test/UnitTests/basic_constraint_tests.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ function basic_constraint_test_helper(model::MOI.ModelLike, config::TestConfig,
220220
c_indices = MOI.get(model, MOI.ListOfConstraintIndices{F,S}())
221221
# for sanity, check that we've added 3 constraints as expected.
222222
@test length(c_indices) == 3
223-
@test all(MOI.isvalid.(model, c_indices))
223+
@test all(MOI.isvalid.(Ref(model), c_indices))
224224
end
225225

226226
if delete

src/Test/UnitTests/constraints.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ function solve_affine_deletion_edge_cases(model::MOI.ModelLike, config::TestConf
209209
MOI.empty!(model)
210210
x = MOI.addvariable!(model)
211211
# helpers. The function 1.0x + 0.0
212-
saf = MOI.ScalarAffineFunction(MOI.ScalarAffineTerm.([1.0], x), 0.0)
212+
saf = MOI.ScalarAffineFunction([MOI.ScalarAffineTerm(1.0, x)], 0.0)
213213
vaf = MOI.VectorAffineFunction([MOI.VectorAffineTerm(1, MOI.ScalarAffineTerm(1.0, x))], [0.0])
214214
vaf2 = MOI.VectorAffineFunction([MOI.VectorAffineTerm(1, MOI.ScalarAffineTerm(1.0, x))], [-2.0])
215215
# max x

src/Test/contconic.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# Continuous conic problems
2+
using Compat.LinearAlgebra # for dot
23

34
function _lin1test(model::MOI.ModelLike, config::TestConfig, vecofvars::Bool)
45
atol = config.atol

src/Test/modellike.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ function copytest(dest::MOI.ModelLike, src::MOI.ModelLike)
249249
@test MOI.get(dest, MOI.ConstraintSet(), dict[csv]) == MOI.EqualTo(2.)
250250
@test !MOI.canget(dest, MOI.ConstraintName(), typeof(cvv)) || MOI.get(dest, MOI.ConstraintName(), cvv) == ""
251251
@test MOI.canget(dest, MOI.ConstraintFunction(), typeof(dict[cvv]))
252-
@test MOI.get(dest, MOI.ConstraintFunction(), dict[cvv]) == MOI.VectorOfVariables(getindex.(dict, v))
252+
@test MOI.get(dest, MOI.ConstraintFunction(), dict[cvv]) == MOI.VectorOfVariables(getindex.(Ref(dict), v))
253253
@test MOI.canget(dest, MOI.ConstraintSet(), typeof(dict[cvv]))
254254
@test MOI.get(dest, MOI.ConstraintSet(), dict[cvv]) == MOI.Nonnegatives(3)
255255
@test !MOI.canget(dest, MOI.ConstraintName(), typeof(csa)) || MOI.get(dest, MOI.ConstraintName(), csa) == ""

src/Utilities/cachingoptimizer.jl

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -388,7 +388,7 @@ function MOI.get(m::CachingOptimizer, attr::Union{MOI.AbstractVariableAttribute,
388388
if MOI.canget(m.model_cache, attr, eltype(indices))
389389
return MOI.get(m.model_cache, attr, indices)
390390
elseif m.state == AttachedOptimizer && MOI.canget(m.optimizer, attr, eltype(indices))
391-
return attribute_value_map.(m.optimizer_to_model_map,MOI.get(m.optimizer, attr, getindex.(m.model_to_optimizer_map,indices)))
391+
return attribute_value_map.(Ref(m.optimizer_to_model_map),MOI.get(m.optimizer, attr, getindex.(Ref(m.model_to_optimizer_map),indices)))
392392
end
393393
error("Attribute $attr not accessible")
394394
end
@@ -478,10 +478,12 @@ function MOI.set!(m::CachingOptimizer, attr::AttributeFromOptimizer{T}, v) where
478478
return MOI.set!(m.optimizer, attr.attr, attribute_value_map(m.model_to_optimizer_map,v))
479479
end
480480

481+
# Map vector of indices into vector of indices or one index into one index
482+
map_indices_to_optimizer(m::CachingOptimizer, idx::MOI.Index) = m.model_to_optimizer_map[idx]
483+
map_indices_to_optimizer(m::CachingOptimizer, indices::Vector{<:MOI.Index}) = getindex.(Ref(m.model_to_optimizer_map), indices)
481484
function MOI.set!(m::CachingOptimizer, attr::AttributeFromOptimizer{T}, idx, v) where {T <: Union{MOI.AbstractVariableAttribute,MOI.AbstractConstraintAttribute}}
482485
@assert m.state == AttachedOptimizer
483-
# TODO: getindex. causes this to return a vector of results for scalar idx
484-
return MOI.set!(m.optimizer, attr.attr, getindex.(m.model_to_optimizer_map,idx), attribute_value_map(m.model_to_optimizer_map,v))
486+
return MOI.set!(m.optimizer, attr.attr, map_indices_to_optimizer(m, idx), attribute_value_map(m.model_to_optimizer_map,v))
485487
end
486488

487489
function MOI.canset(m::CachingOptimizer, attr::AttributeFromModelCache{T}) where {T <: MOI.AbstractModelAttribute}

src/Utilities/mockoptimizer.jl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,6 @@ end
158158
MOI.get(mock::MockOptimizer, attr::MOI.AbstractConstraintAttribute, idx::MOI.ConstraintIndex) = MOI.get(mock.inner_model, attr, xor_index(idx))
159159
MOI.get(mock::MockOptimizer, ::MOI.ConstraintDual, idx::MOI.ConstraintIndex) = mock.condual[xor_index(idx)]
160160
MOI.get(mock::MockOptimizer, ::MockConstraintAttribute, idx::MOI.ConstraintIndex) = mock.conattribute[xor_index(idx)]
161-
MOI.get(mock::MockOptimizer, attr::MOI.AnyAttribute, idx::Vector{<:MOI.Index}) = MOI.get.(mock, attr, idx)
162161

163162
function MOI.empty!(mock::MockOptimizer)
164163
MOI.empty!(mock.inner_model)

src/Utilities/parser.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ end
196196

197197
# Used for Vector{Symbol}, Vector{ParsedScalarAffineTerm}, Vector{ParsedVectorAffineTerm},
198198
# Vector{ParsedScalarQuadraticTerm} and Vector{ParsedVectorQuadraticTerm}
199-
parsedtoMOI(model, s::Vector) = parsedtoMOI.(model, s)
199+
parsedtoMOI(model, s::Vector) = parsedtoMOI.(Ref(model), s)
200200

201201
parsedtoMOI(model, s::Union{Float64, Int64}) = s
202202

src/attributes.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ function get end
112112
# We want to avoid being too specific in the type arguments to avoid method ambiguity.
113113
# For model, get(::ModelLike, ::AbstractVariableAttribute, ::Vector{VariableIndex}) would not allow
114114
# to define get(::SomeModel, ::AnyAttribute, ::Vector)
115-
get(model::ModelLike, attr::AnyAttribute, idxs::Vector) = get.(model, attr, idxs)
115+
get(model::ModelLike, attr::AnyAttribute, idxs::Vector) = get.(Ref(model), Ref(attr), idxs)
116116

117117
function get(model::ModelLike, attr::AnyAttribute, args...)
118118
throw(ArgumentError("ModelLike of type $(typeof(model)) does not support accessing the attribute $attr"))
@@ -228,7 +228,7 @@ Assign a value respectively to the attribute `attr` of each constraint in the co
228228
"""
229229
function set! end
230230
# See note with get
231-
set!(model::ModelLike, attr::Union{AbstractVariableAttribute, AbstractConstraintAttribute}, idxs::Vector, vector_of_values::Vector) = set!.(model, attr, idxs, vector_of_values)
231+
set!(model::ModelLike, attr::Union{AbstractVariableAttribute, AbstractConstraintAttribute}, idxs::Vector, vector_of_values::Vector) = set!.(Ref(model), Ref(attr), idxs, vector_of_values)
232232

233233
function set!(model::ModelLike, attr::AnyAttribute, args...)
234234
throw(ArgumentError("ModelLike of type $(typeof(model)) does not support setting the attribute $attr"))

src/constraints.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ This call is equivalent to `addconstraint!.(model, funcs, sets)` but may be more
4141
function addconstraints! end
4242

4343
# default fallback
44-
addconstraints!(model::ModelLike, funcs, sets) = addconstraint!.(model, funcs, sets)
44+
addconstraints!(model::ModelLike, funcs, sets) = addconstraint!.(Ref(model), funcs, sets)
4545

4646
"""
4747
## Modify Function

src/functions.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,7 @@ _pair(t::ScalarAffineTerm) = t.variable_index => t.coefficient
283283
_canonicalize(v1::VariableIndex, v2::VariableIndex) = VariableIndex.(extrema((v1.value, v2.value)))
284284
_pair(t::ScalarQuadraticTerm) = _canonicalize(t.variable_index_1, t.variable_index_2) => t.coefficient
285285

286-
_dicts(f::Union{ScalarAffineFunction, VectorAffineFunction}) = sum_dict(_pair.(f.terms))
286+
_dicts(f::Union{ScalarAffineFunction, VectorAffineFunction}) = (sum_dict(_pair.(f.terms)),)
287287

288288
_dicts(f::Union{ScalarQuadraticFunction, VectorQuadraticFunction}) = (sum_dict(_pair.(f.affine_terms)),
289289
sum_dict(_pair.(f.quadratic_terms)))

src/indextypes.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ Base.delete!(model::ModelLike, index::Index) = throw(MethodError(Base.delete!, (
5252
5353
Return a `Bool` indicating whether all the objects referred to by `indices` can be removed from the model `model`.
5454
"""
55-
candelete(model::ModelLike, indices::Vector{<:Index}) = all(candelete.(model, indices))
55+
candelete(model::ModelLike, indices::Vector{<:Index}) = all(candelete.(Ref(model), indices))
5656

5757
"""
5858
delete!{R}(model::ModelLike, indices::Vector{R<:Index})

test/bridge.jl

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ function test_delete_bridge(m::MOIB.AbstractBridgeOptimizer, ci::MOI.ConstraintI
3131
end
3232

3333
@testset "BridgeOptimizer" begin
34-
const mock = MOIU.MockOptimizer(SimpleModel{Float64}())
35-
const bridgedmock = MOIB.SplitInterval{Float64}(mock)
34+
mock = MOIU.MockOptimizer(SimpleModel{Float64}())
35+
bridgedmock = MOIB.SplitInterval{Float64}(mock)
3636

3737
@testset "Name test" begin
3838
MOIT.nametest(bridgedmock)
@@ -47,7 +47,7 @@ end
4747
end
4848

4949
@testset "Custom test" begin
50-
const model = MOIB.SplitInterval{Int}(SimpleModel{Int}())
50+
model = MOIB.SplitInterval{Int}(SimpleModel{Int}())
5151
@test !MOIB.supportsbridgingconstraint(model, MOI.VectorAffineFunction{Float64}, MOI.Interval{Float64})
5252

5353
x, y = MOI.addvariables!(model, 2)
@@ -95,8 +95,8 @@ end
9595
MOIU.@model NoRSOCModel () (EqualTo, GreaterThan, LessThan, Interval) (Zeros, Nonnegatives, Nonpositives, SecondOrderCone, ExponentialCone, PositiveSemidefiniteConeTriangle) () (SingleVariable,) (ScalarAffineFunction,) (VectorOfVariables,) (VectorAffineFunction,)
9696

9797
@testset "LazyBridgeOptimizer" begin
98-
const mock = MOIU.MockOptimizer(NoRSOCModel{Float64}())
99-
const bridgedmock = MOIB.LazyBridgeOptimizer(mock, Model{Float64}())
98+
mock = MOIU.MockOptimizer(NoRSOCModel{Float64}())
99+
bridgedmock = MOIB.LazyBridgeOptimizer(mock, Model{Float64}())
100100
MOIB.addbridge!(bridgedmock, MOIB.SplitIntervalBridge{Float64})
101101
MOIB.addbridge!(bridgedmock, MOIB.RSOCtoPSDCBridge{Float64})
102102
MOIB.addbridge!(bridgedmock, MOIB.SOCtoPSDCBridge{Float64})

0 commit comments

Comments
 (0)