161161
162162function substitute_variables (variable_map:: Function ,
163163 term:: MOI.ScalarQuadraticTerm{T} ) where T
164- f1 = variable_map (term. variable_index_1)
165- f2 = variable_map (term. variable_index_2)
164+ # We could have `T = Complex{Float64}` and `variable_map(term.variable_index)`
165+ # be a `MOI.ScalarAffineFunction{Float64}` with the Hermitian to PSD bridge.
166+ # We convert to `MOI.ScalarAffineFunction{T}` to avoid any issue.
167+ f1:: MOI.ScalarAffineFunction{T} = variable_map (term. variable_index_1)
168+ f2:: MOI.ScalarAffineFunction{T} = variable_map (term. variable_index_2)
166169 f12 = operate (* , T, f1, f2):: MOI.ScalarQuadraticFunction{T}
167170 coef = term. coefficient
168171 # The quadratic terms are evaluated as x'Qx/2 so a diagonal term should
@@ -175,8 +178,9 @@ function substitute_variables(variable_map::Function,
175178end
176179function substitute_variables (variable_map:: Function ,
177180 term:: MOI.ScalarAffineTerm{T} ) where T
178- return operate (* , T, term. coefficient,
179- variable_map (term. variable_index)):: MOI.ScalarAffineFunction{T}
181+ # See comment for `term::MOI.ScalarQuadraticTerm` for the conversion.
182+ func:: MOI.ScalarAffineFunction{T} = variable_map (term. variable_index)
183+ return operate (* , T, term. coefficient, func):: MOI.ScalarAffineFunction{T}
180184end
181185function substitute_variables (
182186 variable_map:: Function ,
0 commit comments