diff --git a/src/QCQP/MOI_wrapper.jl b/src/QCQP/MOI_wrapper.jl index 463c93a..35b666d 100644 --- a/src/QCQP/MOI_wrapper.jl +++ b/src/QCQP/MOI_wrapper.jl @@ -198,6 +198,16 @@ function MOI.supports_constraint( ) end +function MOI.get( + model::Optimizer{T}, + ::MOI.ConstraintBridgingCost{<:PolyJuMP.ScalarPolynomialFunction{T},S}, +) where {T,S<:MOI.AbstractScalarSet} + return MOI.get( + model.model, + MOI.ConstraintBridgingCost{MOI.ScalarQuadraticFunction{T},S}(), + ) +end + function MOI.add_constraint( model::Optimizer, func::MOI.AbstractFunction, diff --git a/test/qcqp.jl b/test/qcqp.jl index 3a517e7..f190061 100644 --- a/test/qcqp.jl +++ b/test/qcqp.jl @@ -373,6 +373,26 @@ function test_inner_bridge(x, y, T) MOI.get(inner, MOI.ListOfModelAttributesSet()) end +function test_constraint_bridging_cost_polynomial(x, y, T) + inner = MOI.Utilities.MockOptimizer(Model{T}()) + optimizer = PolyJuMP.QCQP.Optimizer{T}(inner) + F = typeof( + PolyJuMP.ScalarPolynomialFunction( + one(T) * x^3 - x * y^2, + [MOI.VariableIndex(1), MOI.VariableIndex(2)], + ), + ) + for S in + (MOI.LessThan{T}, MOI.GreaterThan{T}, MOI.EqualTo{T}, MOI.Interval{T}) + @test MOI.supports_constraint(optimizer, F, S) + @test MOI.get(optimizer, MOI.ConstraintBridgingCost{F,S}()) == MOI.get( + optimizer, + MOI.ConstraintBridgingCost{MOI.ScalarQuadraticFunction{T},S}(), + ) + end + return +end + function runtests(x, y) for name in names(@__MODULE__; all = true) if startswith("$name", "test_")