Skip to content

Commit 3c0d875

Browse files
authored
[Bridges] revert changes included in 1919 by mistake (#1928)
1 parent bca8480 commit 3c0d875

File tree

2 files changed

+17
-92
lines changed

2 files changed

+17
-92
lines changed

Diff for: src/Bridges/Constraint/bridges/semi_to_binary.jl

-35
Original file line numberDiff line numberDiff line change
@@ -75,19 +75,6 @@ function bridge_constraint(
7575
f::MOI.VariableIndex,
7676
s::S,
7777
) where {T<:Real,S<:Union{MOI.Semicontinuous{T},MOI.Semiinteger{T}}}
78-
F = MOI.VariableIndex
79-
if MOI.is_valid(model, MOI.ConstraintIndex{F,MOI.GreaterThan{T}}(f.value))
80-
throw(MOI.LowerBoundAlreadySet{MOI.GreaterThan{T},S}(f))
81-
end
82-
if MOI.is_valid(model, MOI.ConstraintIndex{F,MOI.LessThan{T}}(f.value))
83-
throw(MOI.UpperBoundAlreadySet{MOI.LessThan{T},S}(f))
84-
end
85-
if MOI.is_valid(model, MOI.ConstraintIndex{F,MOI.EqualTo{T}}(f.value))
86-
throw(MOI.LowerBoundAlreadySet{MOI.EqualTo{T},S}(f))
87-
end
88-
if MOI.is_valid(model, MOI.ConstraintIndex{F,MOI.Interval{T}}(f.value))
89-
throw(MOI.LowerBoundAlreadySet{MOI.Interval{T},S}(f))
90-
end
9178
binary, binary_con = MOI.add_constrained_variable(model, MOI.ZeroOne())
9279
# var - LB * bin >= 0
9380
lb = MOI.Utilities.operate(*, T, -s.lower, binary)
@@ -340,25 +327,3 @@ function MOI.get(
340327
) where {T,S}
341328
return [b.lower_bound_index]
342329
end
343-
344-
MOI.Bridges.needs_final_touch(b::SemiToBinaryBridge) = true
345-
346-
function MOI.Bridges.final_touch(
347-
b::SemiToBinaryBridge{T,S},
348-
model::MOI.ModelLike,
349-
) where {T,S}
350-
F, f = MOI.VariableIndex, b.variable
351-
if MOI.is_valid(model, MOI.ConstraintIndex{F,MOI.GreaterThan{T}}(f.value))
352-
throw(MOI.LowerBoundAlreadySet{S,MOI.GreaterThan{T}}(f))
353-
end
354-
if MOI.is_valid(model, MOI.ConstraintIndex{F,MOI.LessThan{T}}(f.value))
355-
throw(MOI.UpperBoundAlreadySet{S,MOI.LessThan{T}}(f))
356-
end
357-
if MOI.is_valid(model, MOI.ConstraintIndex{F,MOI.EqualTo{T}}(f.value))
358-
throw(MOI.LowerBoundAlreadySet{S,MOI.EqualTo{T}}(f))
359-
end
360-
if MOI.is_valid(model, MOI.ConstraintIndex{F,MOI.Interval{T}}(f.value))
361-
throw(MOI.LowerBoundAlreadySet{S,MOI.Interval{T}}(f))
362-
end
363-
return
364-
end

Diff for: test/Bridges/Constraint/semi_to_binary.jl

+17-57
Original file line numberDiff line numberDiff line change
@@ -242,65 +242,25 @@ function test_SemiToBinary()
242242
end
243243

244244
"""
245-
Test an error is thrown if a bound is added _after_ the semi-xxx constraint.
245+
test_lower_bound_already_set()
246246
247-
Note that this means the error is thrown from `Bridges.final_touch`.
247+
The second call to `add_constraint` is broken because it should throw:
248+
```julia
249+
MOI.LowerBoundAlreadySet{
250+
MOI.Semicontinuous{Float64},
251+
MOI.GreaterThan{Float64},
252+
}
253+
```
254+
See MathOptInterface issue #1431.
248255
"""
249-
function test_bounds_already_set_final_touch()
250-
for set in [MOI.GreaterThan(0.0), MOI.EqualTo(1.4), MOI.Interval(0.0, 2.0)]
251-
model = MOI.Utilities.Model{Float64}()
252-
bridged = MOI.Bridges.Constraint.SemiToBinary{Float64}(model)
253-
x = MOI.add_variable(bridged)
254-
semi_set = MOI.Semicontinuous(1.0, 2.0)
255-
MOI.add_constraint(bridged, x, semi_set)
256-
MOI.add_constraint(bridged, x, set)
257-
@test_throws(
258-
MOI.LowerBoundAlreadySet{typeof(semi_set),typeof(set)}(x),
259-
MOI.Bridges.final_touch(bridged),
260-
)
261-
end
262-
for set in [MOI.LessThan(2.0)]
263-
model = MOI.Utilities.Model{Float64}()
264-
bridged = MOI.Bridges.Constraint.SemiToBinary{Float64}(model)
265-
x = MOI.add_variable(bridged)
266-
semi_set = MOI.Semicontinuous(1.0, 2.0)
267-
MOI.add_constraint(bridged, x, semi_set)
268-
MOI.add_constraint(bridged, x, set)
269-
@test_throws(
270-
MOI.UpperBoundAlreadySet{typeof(semi_set),typeof(set)}(x),
271-
MOI.Bridges.final_touch(bridged),
272-
)
273-
end
274-
return
275-
end
276-
277-
"""
278-
Test an error is thrown if a bound exists prior to adding the semi-xxx
279-
constraint.
280-
"""
281-
function test_bounds_already_set()
282-
for set in [MOI.GreaterThan(0.0), MOI.EqualTo(1.4), MOI.Interval(0.0, 2.0)]
283-
model = MOI.Utilities.Model{Float64}()
284-
bridged = MOI.Bridges.Constraint.SemiToBinary{Float64}(model)
285-
x = MOI.add_variable(bridged)
286-
semi_set = MOI.Semicontinuous(1.0, 2.0)
287-
MOI.add_constraint(bridged, x, set)
288-
@test_throws(
289-
MOI.LowerBoundAlreadySet{typeof(set),typeof(semi_set)}(x),
290-
MOI.add_constraint(bridged, x, semi_set),
291-
)
292-
end
293-
for set in [MOI.LessThan(2.0)]
294-
model = MOI.Utilities.Model{Float64}()
295-
bridged = MOI.Bridges.Constraint.SemiToBinary{Float64}(model)
296-
x = MOI.add_variable(bridged)
297-
semi_set = MOI.Semicontinuous(1.0, 2.0)
298-
MOI.add_constraint(bridged, x, set)
299-
@test_throws(
300-
MOI.UpperBoundAlreadySet{typeof(set),typeof(semi_set)}(x),
301-
MOI.add_constraint(bridged, x, semi_set)
302-
)
303-
end
256+
function test_lower_bound_already_set()
257+
model = MOI.Utilities.Model{Float64}()
258+
bridged = MOI.Bridges.Constraint.SemiToBinary{Float64}(model)
259+
x = MOI.add_variable(bridged)
260+
MOI.add_constraint(bridged, x, MOI.Semicontinuous(1.0, 2.0))
261+
@test_broken(
262+
MOI.add_constraint(bridged, x, MOI.GreaterThan(0.0)) === nothing,
263+
)
304264
return
305265
end
306266

0 commit comments

Comments
 (0)