From ae45d28a6b70760cc90486c0d1ea9902aab523c2 Mon Sep 17 00:00:00 2001 From: Oscar Dowson Date: Mon, 14 Sep 2026 09:35:37 +1200 Subject: [PATCH] [Bridges.Constraint] fix ConstraintBasisStatus in ScalarSlackBridge --- src/Bridges/Constraint/bridges/ScalarSlackBridge.jl | 8 ++++---- test/Bridges/Constraint/test_ScalarSlackBridge.jl | 12 ++++++++++-- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/Bridges/Constraint/bridges/ScalarSlackBridge.jl b/src/Bridges/Constraint/bridges/ScalarSlackBridge.jl index fd7d46ae17..da0a3fdb3e 100644 --- a/src/Bridges/Constraint/bridges/ScalarSlackBridge.jl +++ b/src/Bridges/Constraint/bridges/ScalarSlackBridge.jl @@ -301,24 +301,24 @@ MOI.get(b::ScalarSlackBridge, ::MOI.ListOfVariableIndices) = [b.slack] function MOI.get( model::MOI.ModelLike, - ::MOI.ConstraintBasisStatus, + attr::MOI.ConstraintBasisStatus, bridge::ScalarSlackBridge{T,F,S}, ) where {T,F,S<:MOI.Interval} return MOI.get( model, - MOI.VariableBasisStatus(), + MOI.VariableBasisStatus(attr.result_index), MOI.VariableIndex(bridge.slack_in_set.value), ) end function MOI.get( model::MOI.ModelLike, - ::MOI.ConstraintBasisStatus, + attr::MOI.ConstraintBasisStatus, bridge::ScalarSlackBridge, ) status = MOI.get( model, - MOI.VariableBasisStatus(), + MOI.VariableBasisStatus(attr.result_index), MOI.VariableIndex(bridge.slack_in_set.value), ) if status == MOI.NONBASIC_AT_LOWER || status == MOI.NONBASIC_AT_UPPER diff --git a/test/Bridges/Constraint/test_ScalarSlackBridge.jl b/test/Bridges/Constraint/test_ScalarSlackBridge.jl index eb5a932fb1..2f81061963 100644 --- a/test/Bridges/Constraint/test_ScalarSlackBridge.jl +++ b/test/Bridges/Constraint/test_ScalarSlackBridge.jl @@ -419,12 +419,20 @@ function test_basis_status() x = MOI.add_variable(model) c = MOI.add_constraint(model, 1.0 * x, MOI.GreaterThan(1.0)) y = MOI.get(inner, MOI.ListOfVariableIndices()) - MOI.set.(inner, MOI.VariableBasisStatus(), y, MOI.BASIC) - @test MOI.get(model, MOI.ConstraintBasisStatus(), c) == MOI.BASIC d = MOI.add_constraint(model, 1.0 * x, MOI.Interval(1.0, 2.0)) z = last(MOI.get(inner, MOI.ListOfVariableIndices())) + MOI.set(inner, MOI.TerminationStatus(), MOI.OPTIMAL) + MOI.set(inner, MOI.ResultCount(), 2) + MOI.set(inner, MOI.PrimalStatus(1), MOI.FEASIBLE_POINT) + MOI.set(inner, MOI.PrimalStatus(2), MOI.FEASIBLE_POINT) + MOI.set.(inner, MOI.VariableBasisStatus(), y, MOI.BASIC) MOI.set(inner, MOI.VariableBasisStatus(), z, MOI.SUPER_BASIC) + MOI.set.(inner, MOI.VariableBasisStatus(2), y, MOI.SUPER_BASIC) + MOI.set(inner, MOI.VariableBasisStatus(2), z, MOI.BASIC) + @test MOI.get(model, MOI.ConstraintBasisStatus(), c) == MOI.BASIC @test MOI.get(model, MOI.ConstraintBasisStatus(), d) == MOI.SUPER_BASIC + @test MOI.get(model, MOI.ConstraintBasisStatus(2), c) == MOI.SUPER_BASIC + @test MOI.get(model, MOI.ConstraintBasisStatus(2), d) == MOI.BASIC return end