Skip to content
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
1 change: 1 addition & 0 deletions src/Bridges/Constraint/bridges/BinPackingToMILPBridge.jl
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ function MOI.get(
end

function MOI.delete(model::MOI.ModelLike, bridge::BinPackingToMILPBridge)
# Delete is okay before `final_touch`
MOI.delete.(model, bridge.less_than)
empty!(bridge.less_than)
MOI.delete.(model, bridge.equal_to)
Expand Down
1 change: 1 addition & 0 deletions src/Bridges/Constraint/bridges/CountBelongsToMILPBridge.jl
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,7 @@ function MOI.get(
end

function MOI.delete(model::MOI.ModelLike, bridge::CountBelongsToMILPBridge)
# Delete is okay before `final_touch`
for ci in bridge.equal_to
MOI.delete(model, ci)
end
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,7 @@ function MOI.get(
end

function MOI.delete(model::MOI.ModelLike, bridge::CountDistinctToMILPBridge)
# Delete is okay before `final_touch`
for ci in bridge.equal_to
MOI.delete(model, ci)
end
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,7 @@ function MOI.get(
end

function MOI.delete(model::MOI.ModelLike, bridge::CountGreaterThanToMILPBridge)
# Delete is okay before `final_touch`
MOI.delete.(model, bridge.greater_than)
empty!(bridge.greater_than)
MOI.delete.(model, bridge.equal_to)
Expand Down
3 changes: 3 additions & 0 deletions src/Bridges/Constraint/bridges/IntegerToZeroOneBridge.jl
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,9 @@ function MOI.get(::MOI.ModelLike, ::MOI.ConstraintSet, ::IntegerToZeroOneBridge)
end

function MOI.delete(model::MOI.ModelLike, bridge::IntegerToZeroOneBridge)
if bridge.last_bounds === nothing
return # We're deleting the bridge before final_touch
end
MOI.delete(model, bridge.ci)
MOI.delete(model, bridge.y)
return
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,7 @@ function MOI.delete(
model::MOI.ModelLike,
bridge::ReifiedCountDistinctToMILPBridge,
)
# Delete is okay before `final_touch`
for ci in bridge.equal_to
MOI.delete(model, ci)
end
Expand Down
1 change: 1 addition & 0 deletions src/Bridges/Constraint/bridges/SemiToBinaryBridge.jl
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,7 @@ function MOI.get(
end

function MOI.delete(model::MOI.ModelLike, bridge::SemiToBinaryBridge)
# Delete is okay, even though we call `final_touch`
if bridge.integer_index !== nothing
MOI.delete(model, bridge.integer_index)
end
Expand Down
13 changes: 13 additions & 0 deletions test/Bridges/Constraint/test_BinPackingToMILPBridge.jl
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,19 @@ function test_runtests_error_affine()
return
end

function test_delete_before_final_touch()
inner = MOI.Utilities.Model{Int}()
model = MOI.Bridges.Constraint.BinPackingToMILP{Int}(inner)
x = MOI.add_variables(model, 2)
f = MOI.Utilities.operate(vcat, Int, 2, 1 * x[1], x[2])
c = MOI.add_constraint(model, f, MOI.BinPacking(3, [1, 2, 3]))
MOI.delete(model, c)
@test MOI.is_valid(model, x[1])
@test !MOI.is_valid(model, c)
MOI.Bridges.final_touch(model)
return
end

end # module

TestConstraintBinPacking.runtests()
13 changes: 13 additions & 0 deletions test/Bridges/Constraint/test_CountBelongsToMILPBridge.jl
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,19 @@ function test_runtests_error_affine()
return
end

function test_delete_before_final_touch()
inner = MOI.Utilities.Model{Int}()
model = MOI.Bridges.Constraint.CountBelongsToMILP{Int}(inner)
x = MOI.add_variables(model, 2)
f = MOI.Utilities.operate(vcat, Int, 2, 1 * x[1], x[2])
c = MOI.add_constraint(model, f, MOI.CountBelongs(3, Set([2, 4])))
MOI.delete(model, c)
@test MOI.is_valid(model, x[1])
@test !MOI.is_valid(model, c)
MOI.Bridges.final_touch(model)
return
end

end # module

TestConstraintCountBelongs.runtests()
13 changes: 13 additions & 0 deletions test/Bridges/Constraint/test_CountDistinctToMILPBridge.jl
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,19 @@ function test_resolve_with_modified_not_equal_to()
return
end

function test_delete_before_final_touch()
inner = MOI.Utilities.Model{Int}()
model = MOI.Bridges.Constraint.CountDistinctToMILP{Int}(inner)
x = MOI.add_variables(model, 2)
f = MOI.Utilities.operate(vcat, Int, 2, 1 * x[1], x[2])
c = MOI.add_constraint(model, f, MOI.CountDistinct(3))
MOI.delete(model, c)
@test MOI.is_valid(model, x[1])
@test !MOI.is_valid(model, c)
MOI.Bridges.final_touch(model)
return
end

end # module

TestConstraintCountDistinct.runtests()
13 changes: 13 additions & 0 deletions test/Bridges/Constraint/test_CountGreaterThanToMILPBridge.jl
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,19 @@ function test_runtests_error_affine()
return
end

function test_delete_before_final_touch()
inner = MOI.Utilities.Model{Int}()
model = MOI.Bridges.Constraint.CountGreaterThanToMILP{Int}(inner)
x = MOI.add_variables(model, 2)
f = MOI.Utilities.operate(vcat, Int, 2, x[1], 1 * x[1], x[2])
c = MOI.add_constraint(model, f, MOI.CountGreaterThan(3))
MOI.delete(model, c)
@test MOI.is_valid(model, x[1])
@test !MOI.is_valid(model, c)
MOI.Bridges.final_touch(model)
return
end

end # module

TestConstraintCountGreaterThan.runtests()
1 change: 1 addition & 0 deletions test/Bridges/Constraint/test_IndicatorToMILPBridge.jl
Original file line number Diff line number Diff line change
Expand Up @@ -298,6 +298,7 @@ function test_delete_before_final_touch()
)
MOI.delete(model, c)
@test !MOI.is_valid(model, c)
MOI.Bridges.final_touch(model)
return
end

Expand Down
12 changes: 12 additions & 0 deletions test/Bridges/Constraint/test_IntegerToZeroOneBridge.jl
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,18 @@ function test_final_touch_twice()
return
end

function test_delete_before_final_touch()
inner = MOI.Utilities.Model{Int}()
model = MOI.Bridges.Constraint.IntegerToZeroOne{Int}(inner)
x, cx = MOI.add_constrained_variable(model, MOI.Integer())
MOI.add_constraint(model, x, MOI.Interval(1, 3))
MOI.delete(model, x)
@test !MOI.is_valid(model, x)
@test !MOI.is_valid(model, cx)
MOI.Bridges.final_touch(model)
return
end

end # module

TestConstraintIntegerToZeroOne.runtests()
13 changes: 13 additions & 0 deletions test/Bridges/Constraint/test_ReifiedCountDistinctToMILPBridge.jl
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,19 @@ function test_runtests_error_affine()
return
end

function test_delete_before_final_touch()
inner = MOI.Utilities.Model{Int}()
model = MOI.Bridges.Constraint.ReifiedCountDistinctToMILP{Int}(inner)
x = MOI.add_variables(model, 3)
f = MOI.Utilities.operate(vcat, Int, x[1], 1, x[2], x[3])
c = MOI.add_constraint(model, f, MOI.Reified(MOI.CountDistinct(3)))
MOI.delete(model, c)
@test MOI.is_valid(model, x[1])
@test !MOI.is_valid(model, c)
MOI.Bridges.final_touch(model)
return
end

end # module

TestConstraintReifiedCountDistinct.runtests()
1 change: 1 addition & 0 deletions test/Bridges/Constraint/test_SOS1ToMILPBridge.jl
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ function test_delete_before_final_touch()
)
MOI.delete(model, c)
@test !MOI.is_valid(model, c)
MOI.Bridges.final_touch(model)
return
end

Expand Down
1 change: 1 addition & 0 deletions test/Bridges/Constraint/test_SOS2ToMILPBridge.jl
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,7 @@ function test_delete_before_final_touch()
)
MOI.delete(model, c)
@test !MOI.is_valid(model, c)
MOI.Bridges.final_touch(model)
return
end

Expand Down
12 changes: 12 additions & 0 deletions test/Bridges/Constraint/test_SemiToBinaryBridge.jl
Original file line number Diff line number Diff line change
Expand Up @@ -334,6 +334,18 @@ function test_open_interval()
return
end

function test_delete_before_final_touch()
inner = MOI.Utilities.Model{Float64}()
model = MOI.Bridges.Constraint.SemiToBinary{Float64}(inner)
x = MOI.add_variable(model)
c = MOI.add_constraint(model, 1.0 * x, MOI.Semicontinuous(1.0, 2.0))
MOI.delete(model, c)
@test MOI.is_valid(model, x)
@test !MOI.is_valid(model, c)
MOI.Bridges.final_touch(model)
return
end

end # module

TestConstraintSemiToBinary.runtests()
Loading