Skip to content

Use MOI.delete instead of Base.delete! #496

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Aug 26, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/src/apimanual.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ v2 = add_variables(model, 3)
set(model, VariablePrimalStart(), v2, [1.3,6.8,-4.6])
```

A variable can be deleted from a model with [`delete!(::ModelLike, ::VariableIndex)`](@ref MathOptInterface.delete!(::MathOptInterface.ModelLike, ::MathOptInterface.Index)).
A variable can be deleted from a model with [`delete(::ModelLike, ::VariableIndex)`](@ref MathOptInterface.delete(::MathOptInterface.ModelLike, ::MathOptInterface.Index)).
Not all models support deleting variables; an [`DeleteNotAllowed`](@ref MathOptInterface.DeleteNotAllowed)
error is thrown if this is not supported.

Expand Down
2 changes: 1 addition & 1 deletion docs/src/apireference.md
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ BasisStatusCode
VariableIndex
ConstraintIndex
is_valid
delete!(::ModelLike,::Index)
delete(::ModelLike, ::Index)
```

### Variables
Expand Down
10 changes: 5 additions & 5 deletions src/Bridges/bridgeoptimizer.jl
Original file line number Diff line number Diff line change
Expand Up @@ -100,17 +100,17 @@ function MOI.is_valid(b::AbstractBridgeOptimizer, ci::CI)
return MOI.is_valid(b.model, ci)
end
end
MOI.delete!(b::AbstractBridgeOptimizer, vi::VI) = MOI.delete!(b.model, vi)
function MOI.delete!(b::AbstractBridgeOptimizer, ci::CI)
MOI.delete(b::AbstractBridgeOptimizer, vi::VI) = MOI.delete(b.model, vi)
function MOI.delete(b::AbstractBridgeOptimizer, ci::CI)
if isbridged(b, typeof(ci))
if !MOI.is_valid(b, ci)
throw(MOI.InvalidIndex(ci))
end
MOI.delete!(b, bridge(b, ci))
MOI.delete(b, bridge(b, ci))
delete!(b.bridges, ci)
MOI.delete!(b.bridged, ci)
MOI.delete(b.bridged, ci)
else
MOI.delete!(b.model, ci)
MOI.delete(b.model, ci)
end
end

Expand Down
20 changes: 10 additions & 10 deletions src/Bridges/detbridge.jl
Original file line number Diff line number Diff line change
Expand Up @@ -122,12 +122,12 @@ MOI.get(b::LogDetBridge{T}, ::MOI.ListOfConstraintIndices{MOI.VectorAffineFuncti
MOI.get(b::LogDetBridge{T}, ::MOI.ListOfConstraintIndices{MOI.ScalarAffineFunction{T}, MOI.LessThan{T}}) where T = [b.tlindex]

# References
function MOI.delete!(model::MOI.ModelLike, c::LogDetBridge)
MOI.delete!(model, c.tlindex)
MOI.delete!(model, c.lcindex)
MOI.delete!(model, c.sdindex)
MOI.delete!(model, c.l)
MOI.delete!(model, c.Δ)
function MOI.delete(model::MOI.ModelLike, c::LogDetBridge)
MOI.delete(model, c.tlindex)
MOI.delete(model, c.lcindex)
MOI.delete(model, c.sdindex)
MOI.delete(model, c.l)
MOI.delete(model, c.Δ)
end

# Attributes, Bridge acting as a constraint
Expand Down Expand Up @@ -189,10 +189,10 @@ MOI.get(b::RootDetBridge{T}, ::MOI.ListOfConstraintIndices{MOI.VectorAffineFunct
MOI.get(b::RootDetBridge{T}, ::MOI.ListOfConstraintIndices{MOI.VectorAffineFunction{T}, MOI.GeometricMeanCone}) where T = [b.gmindex]

# References
function MOI.delete!(model::MOI.ModelLike, c::RootDetBridge)
MOI.delete!(model, c.gmindex)
MOI.delete!(model, c.sdindex)
MOI.delete!(model, c.Δ)
function MOI.delete(model::MOI.ModelLike, c::RootDetBridge)
MOI.delete(model, c.gmindex)
MOI.delete(model, c.sdindex)
MOI.delete(model, c.Δ)
end

# Attributes, Bridge acting as a constraint
Expand Down
8 changes: 4 additions & 4 deletions src/Bridges/geomeanbridge.jl
Original file line number Diff line number Diff line change
Expand Up @@ -133,10 +133,10 @@ function MOI.get(b::GeoMeanBridge{T, F, G},
end

# References
function MOI.delete!(model::MOI.ModelLike, c::GeoMeanBridge)
MOI.delete!(model, c.xij)
MOI.delete!(model, c.tubc)
MOI.delete!(model, c.socrc)
function MOI.delete(model::MOI.ModelLike, c::GeoMeanBridge)
MOI.delete(model, c.xij)
MOI.delete(model, c.tubc)
MOI.delete(model, c.socrc)
end

# Attributes, Bridge acting as a constraint
Expand Down
6 changes: 3 additions & 3 deletions src/Bridges/intervalbridge.jl
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,9 @@ MOI.get(b::SplitIntervalBridge{T, F}, ::MOI.ListOfConstraintIndices{F, MOI.Great
MOI.get(b::SplitIntervalBridge{T, F}, ::MOI.ListOfConstraintIndices{F, MOI.LessThan{T}}) where {T, F} = [b.upper]

# Indices
function MOI.delete!(model::MOI.ModelLike, c::SplitIntervalBridge)
MOI.delete!(model, c.lower)
MOI.delete!(model, c.upper)
function MOI.delete(model::MOI.ModelLike, c::SplitIntervalBridge)
MOI.delete(model, c.lower)
MOI.delete(model, c.upper)
end

# Attributes, Bridge acting as a constraint
Expand Down
4 changes: 2 additions & 2 deletions src/Bridges/rsocbridge.jl
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,8 @@ function MOI.get(b::RSOCBridge{T, F},
end

# References
function MOI.delete!(model::MOI.ModelLike, c::RSOCBridge)
MOI.delete!(model, c.soc)
function MOI.delete(model::MOI.ModelLike, c::RSOCBridge)
MOI.delete(model, c.soc)
end

# Attributes, Bridge acting as a constraint
Expand Down
8 changes: 4 additions & 4 deletions src/Bridges/soctopsdbridge.jl
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,8 @@ end
MOI.get(::SOCtoPSDBridge{T}, ::MOI.NumberOfConstraints{MOI.VectorAffineFunction{T}, MOI.PositiveSemidefiniteConeTriangle}) where T = 1
MOI.get(b::SOCtoPSDBridge{T}, ::MOI.ListOfConstraintIndices{MOI.VectorAffineFunction{T}, MOI.PositiveSemidefiniteConeTriangle}) where T = [b.cr]

function MOI.delete!(instance::MOI.AbstractOptimizer, c::SOCtoPSDBridge)
MOI.delete!(instance, c.cr)
function MOI.delete(instance::MOI.AbstractOptimizer, c::SOCtoPSDBridge)
MOI.delete(instance, c.cr)
end

MOI.supports(model::MOI.ModelLike, ::MOI.ConstraintSet, ::Type{<:SOCtoPSDBridge}) = false
Expand Down Expand Up @@ -145,8 +145,8 @@ end
MOI.get(::RSOCtoPSDBridge{T}, ::MOI.NumberOfConstraints{MOI.VectorAffineFunction{T}, MOI.PositiveSemidefiniteConeTriangle}) where T = 1
MOI.get(b::RSOCtoPSDBridge{T}, ::MOI.ListOfConstraintIndices{MOI.VectorAffineFunction{T}, MOI.PositiveSemidefiniteConeTriangle}) where T = [b.cr]

function MOI.delete!(instance::MOI.AbstractOptimizer, c::RSOCtoPSDBridge)
MOI.delete!(instance, c.cr)
function MOI.delete(instance::MOI.AbstractOptimizer, c::RSOCtoPSDBridge)
MOI.delete(instance, c.cr)
end

MOI.supports(model::MOI.ModelLike, ::MOI.ConstraintSet, ::Type{<:RSOCtoPSDBridge}) = false
Expand Down
6 changes: 3 additions & 3 deletions src/Bridges/squarepsdbridge.jl
Original file line number Diff line number Diff line change
Expand Up @@ -142,10 +142,10 @@ function MOI.get(bridge::SquarePSDBridge{T, F, G},
end

# Indices
function MOI.delete!(model::MOI.ModelLike, bridge::SquarePSDBridge)
MOI.delete!(model, bridge.psd)
function MOI.delete(model::MOI.ModelLike, bridge::SquarePSDBridge)
MOI.delete(model, bridge.psd)
for pair in bridge.sym
MOI.delete!(model, pair.second)
MOI.delete(model, pair.second)
end
end

Expand Down
4 changes: 2 additions & 2 deletions src/Test/UnitTests/basic_constraint_tests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -217,9 +217,9 @@ function basic_constraint_test_helper(model::MOI.ModelLike, config::TestConfig,
end

if delete
@testset "delete!" begin
@testset "delete" begin
c_indices = MOI.get(model, MOI.ListOfConstraintIndices{F,S}())
MOI.delete!(model, c_indices[1])
MOI.delete(model, c_indices[1])
@test MOI.get(model, MOI.NumberOfConstraints{F,S}()) == length(c_indices)-1
@test !MOI.is_valid(model, c_indices[1])
end
Expand Down
8 changes: 4 additions & 4 deletions src/Test/UnitTests/constraints.jl
Original file line number Diff line number Diff line change
Expand Up @@ -216,10 +216,10 @@ function solve_affine_deletion_edge_cases(model::MOI.ModelLike, config::TestConf
constraint_primal = [(c1, [0.0]), (c2, 0.0)]
)
# now delete the VectorAffineFunction
MOI.delete!(model, c1)
@test_throws MOI.InvalidIndex{typeof(c1)} MOI.delete!(model, c1)
MOI.delete(model, c1)
@test_throws MOI.InvalidIndex{typeof(c1)} MOI.delete(model, c1)
try
MOI.delete!(model, c1)
MOI.delete(model, c1)
catch err
@test err.index == c1
end
Expand All @@ -232,7 +232,7 @@ function solve_affine_deletion_edge_cases(model::MOI.ModelLike, config::TestConf
constraint_primal = [(c2, 1.0), (c3, [-1.0])]
)
# delete the ScalarAffineFunction
MOI.delete!(model, c2)
MOI.delete(model, c2)
test_model_solution(model, config; objective_value = 2.0,
constraint_primal = [(c3, [0.0])]
)
Expand Down
10 changes: 5 additions & 5 deletions src/Test/UnitTests/variables.jl
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ function delete_variable(model::MOI.ModelLike, config::TestConfig)
@test MOI.get(model, MOI.NumberOfVariables()) == 0
v = MOI.add_variable(model)
@test MOI.get(model, MOI.NumberOfVariables()) == 1
MOI.delete!(model, v)
MOI.delete(model, v)
@test MOI.get(model, MOI.NumberOfVariables()) == 0
end
unittests["delete_variable"] = delete_variable
Expand All @@ -72,15 +72,15 @@ function delete_variables(model::MOI.ModelLike, config::TestConfig)
@test MOI.get(model, MOI.NumberOfVariables()) == 0
v = MOI.add_variables(model, 2)
@test MOI.get(model, MOI.NumberOfVariables()) == 2
MOI.delete!(model, v)
MOI.delete(model, v)
@test MOI.get(model, MOI.NumberOfVariables()) == 0
v = MOI.add_variables(model, 2)
@test MOI.get(model, MOI.NumberOfVariables()) == 2
MOI.delete!(model, v[1])
MOI.delete(model, v[1])
@test MOI.get(model, MOI.NumberOfVariables()) == 1
@test_throws MOI.InvalidIndex{MOI.VariableIndex} MOI.delete!(model, v[1])
@test_throws MOI.InvalidIndex{MOI.VariableIndex} MOI.delete(model, v[1])
try
MOI.delete!(model, v[1])
MOI.delete(model, v[1])
catch err
@test err.index == v[1]
end
Expand Down
20 changes: 10 additions & 10 deletions src/Test/contlinear.jl
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ function linear1test(model::MOI.ModelLike, config::TestConfig)
if config.modify_lhs
MOI.modify(model, c, MOI.ScalarCoefficientChange{Float64}(z, 1.0))
else
MOI.delete!(model, c)
MOI.delete(model, c)
cf = MOI.ScalarAffineFunction(MOI.ScalarAffineTerm.([1.0,1.0,1.0], v), 0.0)
c = MOI.add_constraint(model, cf, MOI.LessThan(1.0))
end
Expand Down Expand Up @@ -205,7 +205,7 @@ function linear1test(model::MOI.ModelLike, config::TestConfig)
MOI.supports(model, MOI.ConstraintSet(), typeof(vc1))
MOI.set(model, MOI.ConstraintSet(), vc1, MOI.GreaterThan(0.0))

MOI.delete!(model, vc3)
MOI.delete(model, vc3)

vc3 = MOI.add_constraint(model, MOI.SingleVariable(v[3]), MOI.EqualTo(0.0))
@test MOI.get(model, MOI.NumberOfConstraints{MOI.SingleVariable,MOI.GreaterThan{Float64}}()) == 2
Expand All @@ -228,7 +228,7 @@ function linear1test(model::MOI.ModelLike, config::TestConfig)
# max x + 2z
# s.t. x + y + z == 2 (c)
# x,y >= 0, z = 0
MOI.delete!(model, c)
MOI.delete(model, c)
# note: adding some redundant zero coefficients to catch solvers that don't handle duplicate coefficients correctly:
cf = MOI.ScalarAffineFunction(MOI.ScalarAffineTerm.([0.0,0.0,0.0,1.0,1.0,1.0,0.0,0.0,0.0], [v; v; v]), 0.0)
c = MOI.add_constraint(model, cf, MOI.EqualTo(2.0))
Expand Down Expand Up @@ -337,7 +337,7 @@ function linear1test(model::MOI.ModelLike, config::TestConfig)
# y >= 0, z = 0

@test MOI.get(model, MOI.NumberOfConstraints{MOI.SingleVariable,MOI.GreaterThan{Float64}}()) == 2
MOI.delete!(model, v[1])
MOI.delete(model, v[1])
@test MOI.get(model, MOI.NumberOfConstraints{MOI.SingleVariable,MOI.GreaterThan{Float64}}()) == 1

if config.query
Expand Down Expand Up @@ -638,7 +638,7 @@ function linear5test(model::MOI.ModelLike, config::TestConfig)
if config.modify_lhs
MOI.modify(model, c1, MOI.ScalarCoefficientChange(y, 3.0))
else
MOI.delete!(model, c1)
MOI.delete(model, c1)
cf1 = MOI.ScalarAffineFunction(MOI.ScalarAffineTerm.([2.0,3.0], [x,y]), 0.0)
c1 = MOI.add_constraint(model, cf1, MOI.LessThan(4.0))
end
Expand All @@ -662,7 +662,7 @@ function linear5test(model::MOI.ModelLike, config::TestConfig)
# x >= 0, y >= 0
#
# solution: x = 4, y = 0, objv = 4
MOI.delete!(model, c1)
MOI.delete(model, c1)

if config.solve
MOI.optimize!(model)
Expand All @@ -683,7 +683,7 @@ function linear5test(model::MOI.ModelLike, config::TestConfig)
# y >= 0
#
# solution: y = 2, objv = 2
MOI.delete!(model, x)
MOI.delete(model, x)

if config.solve
MOI.optimize!(model)
Expand Down Expand Up @@ -810,7 +810,7 @@ function linear7test(model::MOI.ModelLike, config::TestConfig)
if config.modify_lhs
MOI.modify(model, c1, MOI.VectorConstantChange([-100.0]))
else
MOI.delete!(model, c1)
MOI.delete(model, c1)
c1 = MOI.add_constraint(model, MOI.VectorAffineFunction([MOI.VectorAffineTerm(1, MOI.ScalarAffineTerm(1.0, x))], [-100.0]), MOI.Nonnegatives(1))
end

Expand All @@ -831,7 +831,7 @@ function linear7test(model::MOI.ModelLike, config::TestConfig)
if config.modify_lhs
MOI.modify(model, c2, MOI.VectorConstantChange([100.0]))
else
MOI.delete!(model, c2)
MOI.delete(model, c2)
c2 = MOI.add_constraint(model, MOI.VectorAffineFunction([MOI.VectorAffineTerm(1, MOI.ScalarAffineTerm(1.0, y))], [100.0]), MOI.Nonpositives(1))
end

Expand Down Expand Up @@ -1349,7 +1349,7 @@ function linear14test(model::MOI.ModelLike, config::TestConfig)
end
end

MOI.delete!(model, [x, z])
MOI.delete(model, [x, z])

if config.solve
MOI.optimize!(model)
Expand Down
2 changes: 1 addition & 1 deletion src/Test/contquadratic.jl
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,7 @@ function qcp1test(model::MOI.ModelLike, config::TestConfig)
# try delete quadratic constraint and go back to linear

# FIXME why is this commented ?
# MOI.delete!(model, c2)
# MOI.delete(model, c2)
#
# MOI.optimize!(model)
#
Expand Down
6 changes: 3 additions & 3 deletions src/Test/intlinear.jl
Original file line number Diff line number Diff line change
Expand Up @@ -134,8 +134,8 @@ function int2test(model::MOI.ModelLike, config::TestConfig)
@test MOI.get(model, MOI.VariablePrimal(), v) ≈ [0,1,2] atol=atol rtol=rtol
end

MOI.delete!(model, c1)
MOI.delete!(model, c2)
MOI.delete(model, c1)
MOI.delete(model, c2)

if config.solve
MOI.optimize!(model)
Expand Down Expand Up @@ -220,7 +220,7 @@ function int2test(model::MOI.ModelLike, config::TestConfig)
end

for cref in bin_constraints
MOI.delete!(model, cref)
MOI.delete(model, cref)
end

if config.solve
Expand Down
10 changes: 5 additions & 5 deletions src/Test/modellike.jl
Original file line number Diff line number Diff line change
Expand Up @@ -69,10 +69,10 @@ function nametest(model::MOI.ModelLike)
@test MOI.get(model, MOI.ConstraintIndex, "Con0") == c2
@test MOI.get(model, MOI.ConstraintIndex, "Con1") == c

MOI.delete!(model, v[2])
MOI.delete(model, v[2])
@test MOI.get(model, MOI.VariableIndex, "Var2") === nothing

MOI.delete!(model, c)
MOI.delete(model, c)
@test MOI.get(model, MOI.ConstraintIndex{MOI.ScalarAffineFunction{Float64},MOI.LessThan{Float64}}, "Con1") === nothing
@test MOI.get(model, MOI.ConstraintIndex, "Con1") === nothing
end
Expand All @@ -85,7 +85,7 @@ function validtest(model::MOI.ModelLike)
@test MOI.is_valid(model, v[2])
x = MOI.add_variable(model)
@test MOI.is_valid(model, x)
MOI.delete!(model, x)
MOI.delete(model, x)
@test !MOI.is_valid(model, x)
cf = MOI.ScalarAffineFunction(MOI.ScalarAffineTerm.([1.0,1.0], v), 0.0)
@test MOI.supports_constraint(model, typeof(cf), MOI.LessThan{Float64})
Expand Down Expand Up @@ -256,7 +256,7 @@ function orderedindicestest(model::MOI.ModelLike)
@test MOI.get(model, MOI.ListOfVariableIndices()) == [v1]
v2 = MOI.add_variable(model)
@test MOI.get(model, MOI.ListOfVariableIndices()) == [v1, v2]
MOI.delete!(model, v1)
MOI.delete(model, v1)
@test MOI.get(model, MOI.ListOfVariableIndices()) == [v2]
v3 = MOI.add_variable(model)
@test MOI.get(model, MOI.ListOfVariableIndices()) == [v2, v3]
Expand All @@ -269,7 +269,7 @@ function orderedindicestest(model::MOI.ModelLike)
@test MOI.get(model, MOI.ListOfConstraintIndices{MOI.SingleVariable, MOI.LessThan{Float64}}()) == [c1]
c2 = MOI.add_constraint(model, MOI.SingleVariable(v3), MOI.LessThan(2.0))
@test MOI.get(model, MOI.ListOfConstraintIndices{MOI.SingleVariable, MOI.LessThan{Float64}}()) == [c1, c2]
MOI.delete!(model, c1)
MOI.delete(model, c1)
@test MOI.get(model, MOI.ListOfConstraintIndices{MOI.SingleVariable, MOI.LessThan{Float64}}()) == [c2]
c3 = MOI.add_constraint(model, MOI.SingleVariable(v4), MOI.LessThan(3.0))
@test MOI.get(model, MOI.ListOfConstraintIndices{MOI.SingleVariable, MOI.LessThan{Float64}}()) == [c2, c3]
Expand Down
Loading