Skip to content

Commit 31e1e2b

Browse files
committed
Fix bridge choice for non-Float64
1 parent 0a3e7f1 commit 31e1e2b

File tree

2 files changed

+20
-13
lines changed

2 files changed

+20
-13
lines changed

src/constraints.jl

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -293,24 +293,24 @@ function JuMP.moi_set(
293293
end
294294

295295
function PolyJuMP.bridges(
296-
::Type{<:MOI.AbstractVectorFunction},
296+
F::Type{<:MOI.AbstractVectorFunction},
297297
::Type{EmptyCone},
298298
)
299-
return [(Bridges.Constraint.EmptyBridge, Float64)]
299+
return Tuple{Type,Type}[(Bridges.Constraint.EmptyBridge, PolyJuMP.coefficient_type_or_float(F))]
300300
end
301301

302302
function PolyJuMP.bridges(
303-
::Type{<:MOI.AbstractVectorFunction},
303+
F::Type{<:MOI.AbstractVectorFunction},
304304
::Type{PositiveSemidefinite2x2ConeTriangle},
305305
)
306-
return [(Bridges.Constraint.PositiveSemidefinite2x2Bridge, Float64)]
306+
return Tuple{Type,Type}[(Bridges.Constraint.PositiveSemidefinite2x2Bridge, PolyJuMP.coefficient_type_or_float(F))]
307307
end
308308

309309
function PolyJuMP.bridges(
310-
::Type{<:MOI.AbstractVectorFunction},
310+
F::Type{<:MOI.AbstractVectorFunction},
311311
::Type{<:DiagonallyDominantConeTriangle},
312312
)
313-
return [(Bridges.Constraint.DiagonallyDominantBridge, Float64)]
313+
return Tuple{Type,Type}[(Bridges.Constraint.DiagonallyDominantBridge, PolyJuMP.coefficient_type_or_float(F))]
314314
end
315315

316316
function PolyJuMP.bridges(
@@ -333,23 +333,30 @@ function PolyJuMP.bridges(
333333
)]
334334
end
335335

336+
function _bridge_coefficient_type(
337+
T::Type,
338+
::Type{SOSPolynomialSet{S,M,MV,C}},
339+
) where {S,M,MV,C}
340+
return _complex(T, matrix_cone_type(C))
341+
end
342+
336343
function PolyJuMP.bridges(
337-
::Type{<:MOI.AbstractVectorFunction},
344+
F::Type{<:MOI.AbstractVectorFunction},
338345
S::Type{<:SOSPolynomialSet{<:AbstractAlgebraicSet}},
339346
)
340347
return Tuple{Type,Type}[(
341348
Bridges.Constraint.SOSPolynomialBridge,
342-
_bridge_coefficient_type(S),
349+
_bridge_coefficient_type(PolyJuMP.coefficient_type_or_float(F), S),
343350
)]
344351
end
345352

346353
function PolyJuMP.bridges(
347-
::Type{<:MOI.AbstractVectorFunction},
354+
F::Type{<:MOI.AbstractVectorFunction},
348355
S::Type{<:SOSPolynomialSet{<:BasicSemialgebraicSet}},
349356
)
350-
return [(
357+
return Tuple{Type,Type}[(
351358
Bridges.Constraint.SOSPolynomialInSemialgebraicSetBridge,
352-
_bridge_coefficient_type(S),
359+
_bridge_coefficient_type(PolyJuMP.coefficient_type_or_float(F), S),
353360
)]
354361
end
355362

@@ -462,7 +469,7 @@ function JuMP.build_constraint(
462469
_coefs = PolyJuMP.non_constant(__coefs)
463470
# If a polynomial with real coefficients is used with the Hermitian SOS
464471
# cone, we want to promote the coefficients to complex
465-
T = _bridge_coefficient_type(typeof(set))
472+
T = _bridge_coefficient_type(JuMP.value_type(JuMP.variable_ref_type(eltype(_coefs))), typeof(set))
466473
coefs = convert(Vector{_promote_coef_type(eltype(_coefs), T)}, _coefs)
467474
shape = PolyJuMP.PolynomialShape(basis)
468475
return PolyJuMP.bridgeable(

src/variables.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,6 @@ function JuMP.add_variable(
9090
JuMP.VariableRef[JuMP.VariableRef(model, vi) for vi in Q],
9191
v.p.basis,
9292
MCT,
93-
Float64,
93+
JuMP.value_type(typeof(model)),
9494
)
9595
end

0 commit comments

Comments
 (0)