Skip to content

Commit 39f6583

Browse files
committed
Fix bridge choice for non-Float64
1 parent a668a7c commit 39f6583

File tree

2 files changed

+17
-16
lines changed

2 files changed

+17
-16
lines changed

src/constraints.jl

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -279,56 +279,57 @@ function JuMP.moi_set(
279279
end
280280

281281
function PolyJuMP.bridges(
282-
::Type{<:MOI.AbstractVectorFunction},
282+
F::Type{<:MOI.AbstractVectorFunction},
283283
::Type{EmptyCone},
284284
)
285-
return [(Bridges.Constraint.EmptyBridge, Float64)]
285+
return Tuple{Type,Type}[(Bridges.Constraint.EmptyBridge, PolyJuMP.coefficient_type_or_float(F))]
286286
end
287287

288288
function PolyJuMP.bridges(
289-
::Type{<:MOI.AbstractVectorFunction},
289+
F::Type{<:MOI.AbstractVectorFunction},
290290
::Type{PositiveSemidefinite2x2ConeTriangle},
291291
)
292-
return [(Bridges.Constraint.PositiveSemidefinite2x2Bridge, Float64)]
292+
return Tuple{Type,Type}[(Bridges.Constraint.PositiveSemidefinite2x2Bridge, PolyJuMP.coefficient_type_or_float(F))]
293293
end
294294

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

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

309309
function _bridge_coefficient_type(
310+
T::Type,
310311
::Type{SOSPolynomialSet{S,M,MV,C}},
311312
) where {S,M,MV,C}
312-
return _complex(Float64, matrix_cone_type(C))
313+
return _complex(T, matrix_cone_type(C))
313314
end
314315

315316
function PolyJuMP.bridges(
316-
::Type{<:MOI.AbstractVectorFunction},
317+
F::Type{<:MOI.AbstractVectorFunction},
317318
S::Type{<:SOSPolynomialSet{<:AbstractAlgebraicSet}},
318319
)
319320
return Tuple{Type,Type}[(
320321
Bridges.Constraint.SOSPolynomialBridge,
321-
_bridge_coefficient_type(S),
322+
_bridge_coefficient_type(PolyJuMP.coefficient_type_or_float(F), S),
322323
)]
323324
end
324325

325326
function PolyJuMP.bridges(
326-
::Type{<:MOI.AbstractVectorFunction},
327+
F::Type{<:MOI.AbstractVectorFunction},
327328
S::Type{<:SOSPolynomialSet{<:BasicSemialgebraicSet}},
328329
)
329-
return [(
330+
return Tuple{Type,Type}[(
330331
Bridges.Constraint.SOSPolynomialInSemialgebraicSetBridge,
331-
_bridge_coefficient_type(S),
332+
_bridge_coefficient_type(PolyJuMP.coefficient_type_or_float(F), S),
332333
)]
333334
end
334335

@@ -352,7 +353,7 @@ function JuMP.build_constraint(_error::Function, p, cone::SOSLikeCone; kws...)
352353
_coefs = PolyJuMP.non_constant_coefficients(p)
353354
# If a polynomial with real coefficients is used with the Hermitian SOS
354355
# cone, we want to promote the coefficients to complex
355-
T = _bridge_coefficient_type(typeof(set))
356+
T = _bridge_coefficient_type(JuMP.value_type(JuMP.variable_ref_type(eltype(_coefs))), typeof(set))
356357
coefs = convert(Vector{_promote_coef_type(eltype(_coefs), T)}, _coefs)
357358
shape = PolyJuMP.PolynomialShape(monos)
358359
return PolyJuMP.bridgeable(

src/variables.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,6 @@ function JuMP.add_variable(
7474
JuMP.VariableRef[JuMP.VariableRef(model, vi) for vi in Q],
7575
v.p.polynomial_basis,
7676
MCT,
77-
Float64,
77+
JuMP.value_type(typeof(model)),
7878
)
7979
end

0 commit comments

Comments
 (0)