Skip to content

Commit 4fa7efb

Browse files
authored
Fix bridge addition with complex coef (#90)
* Fix bridge addition with complex coef * Fix format
1 parent f143991 commit 4fa7efb

File tree

4 files changed

+21
-16
lines changed

4 files changed

+21
-16
lines changed

Project.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ MutableArithmetics = "d8a4904e-b15c-11e9-3269-09a3773c0cb0"
1515
SemialgebraicSets = "8e049039-38e8-557d-ae3a-bc521ccf6204"
1616

1717
[compat]
18+
DynamicPolynomials = "0.5"
1819
JuMP = "1"
1920
MathOptInterface = "1"
2021
MultivariateBases = "0.2"

src/constraint.jl

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -78,21 +78,24 @@ by the bridges.
7878
bridges(S::Type{<:MOI.AbstractSet}) = bridges(MOI.VectorOfVariables, S)
7979

8080
function bridges(
81-
::Type{<:MOI.AbstractVectorFunction},
81+
F::Type{<:MOI.AbstractVectorFunction},
8282
::Type{<:ZeroPolynomialSet{FullSpace}},
8383
)
84-
return [Bridges.Constraint.ZeroPolynomialBridge]
84+
return [(Bridges.Constraint.ZeroPolynomialBridge, _coef_type(F))]
8585
end
8686

8787
function bridges(
88-
::Type{<:MOI.AbstractVectorFunction},
88+
F::Type{<:MOI.AbstractVectorFunction},
8989
::Type{<:ZeroPolynomialSet{<:AbstractAlgebraicSet}},
9090
)
91-
return [Bridges.Constraint.ZeroPolynomialInAlgebraicSetBridge]
91+
return [(
92+
Bridges.Constraint.ZeroPolynomialInAlgebraicSetBridge,
93+
_coef_type(F),
94+
)]
9295
end
9396

94-
function bridges(::Type{<:MOI.AbstractVectorFunction}, ::Type{<:PlusMinusSet})
95-
return [Bridges.Constraint.PlusMinusBridge]
97+
function bridges(F::Type{<:MOI.AbstractVectorFunction}, ::Type{<:PlusMinusSet})
98+
return [(Bridges.Constraint.PlusMinusBridge, _coef_type(F))]
9699
end
97100

98101
"""
@@ -128,8 +131,9 @@ end
128131
function bridgeable(c::JuMP.AbstractConstraint, S::Type{<:MOI.AbstractSet})
129132
bridge_types = bridges(S)
130133
for bridge_type in bridge_types
131-
c = BridgeableConstraint(c, bridge_type)
132-
concrete_bridge_type = _concrete(bridge_type{Float64}, S)
134+
BT, T = bridge_type
135+
c = BridgeableConstraint(c, BT; coefficient_type = T)
136+
concrete_bridge_type = _concrete(BT{T}, S)
133137
for (ST,) in
134138
MOI.Bridges.added_constrained_variable_types(concrete_bridge_type)
135139
c = bridgeable(c, ST)
@@ -151,12 +155,10 @@ function bridgeable(
151155
)
152156
bridge_types = bridges(F, S)
153157
for bridge_type in bridge_types
154-
c = BridgeableConstraint(c, bridge_type)
155-
concrete_bridge_type = MOI.Bridges.Constraint.concrete_bridge_type(
156-
bridge_type{_coef_type(F)},
157-
F,
158-
S,
159-
)
158+
BT, T = bridge_type
159+
c = BridgeableConstraint(c, BT, coefficient_type = T)
160+
concrete_bridge_type =
161+
MOI.Bridges.Constraint.concrete_bridge_type(BT{T}, F, S)
160162
for (ST,) in
161163
MOI.Bridges.added_constrained_variable_types(concrete_bridge_type)
162164
c = bridgeable(c, ST)

test/constraint.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ function test_NonNeg(var)
172172
S = DummyPolyModule.NonNeg
173173
jump_set = DummyPolyModule.DummyNonNeg()
174174
_test_constraint(m, @constraint(m, x >= y), S, jump_set, x - y, [], [])
175+
@test DummyPolyModule.DummyNonNegBridge{Float64} in m.bridge_types
175176
_test_constraint(
176177
m,
177178
@constraint(m, im * x >= y),
@@ -182,6 +183,7 @@ function test_NonNeg(var)
182183
[],
183184
T = ComplexF64,
184185
)
186+
@test DummyPolyModule.DummyNonNegBridge{ComplexF64} in m.bridge_types
185187
_test_constraint(
186188
m,
187189
@constraint(m, p >= q + 1, domain = @set y >= 1 && dom),

test/testpolymodule.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,10 @@ JuMP.reshape_set(::NonNeg, ::PolyJuMP.PolynomialShape) = DummyNonNeg()
3030

3131
struct DummyNonNegBridge{T,F} <: MOI.Bridges.Constraint.AbstractBridge end
3232
function PolyJuMP.bridges(
33-
::Type{<:MOI.AbstractVectorFunction},
33+
F::Type{<:MOI.AbstractVectorFunction},
3434
::Type{<:NonNeg},
3535
)
36-
return [DummyNonNegBridge]
36+
return [(DummyNonNegBridge, PolyJuMP._coef_type(F))]
3737
end
3838
function MOI.Bridges.added_constrained_variable_types(
3939
::Type{<:DummyNonNegBridge},

0 commit comments

Comments
 (0)