Skip to content

Commit b34036e

Browse files
authored
[Bridges] fix ConstraintFunction getter of SplitComplexZerosBridge (#1953)
* Get function without cache for SplitComplexZerosBridge * Fix format
1 parent a199e3e commit b34036e

File tree

1 file changed

+17
-7
lines changed

1 file changed

+17
-7
lines changed

src/Bridges/Constraint/bridges/split_complex_zeros.jl

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ struct SplitComplexZerosBridge{
3434
G<:MOI.Utilities.TypedLike{Complex{T}},
3535
} <: AbstractBridge
3636
dimension::Int
37-
func::G # Simplify querying ConstraintFunction.
3837
constraint::MOI.ConstraintIndex{F,MOI.Zeros}
3938
real_indices::Vector{Int}
4039
imag_indices::Vector{Int}
@@ -73,7 +72,6 @@ function bridge_constraint(
7372
)
7473
return SplitComplexZerosBridge{T,F,G}(
7574
MOI.dimension(set),
76-
f,
7775
constraint,
7876
real_indices,
7977
imag_indices,
@@ -112,11 +110,23 @@ function concrete_bridge_type(
112110
end
113111

114112
function MOI.get(
115-
::MOI.ModelLike,
116-
::MOI.ConstraintFunction,
117-
bridge::SplitComplexZerosBridge,
118-
)
119-
return bridge.func
113+
model::MOI.ModelLike,
114+
attr::MOI.ConstraintFunction,
115+
bridge::SplitComplexZerosBridge{T,F,G},
116+
) where {T,F,G}
117+
g = MOI.Utilities.zero_with_output_dimension(G, bridge.dimension)
118+
f = MOI.get(model, attr, bridge.constraint)
119+
S = MOI.Utilities.scalar_type(G)
120+
for (f_i, g_i) in enumerate(bridge.real_indices)
121+
complex_f = convert(S, MOI.Utilities.eachscalar(f)[f_i])
122+
MOI.Utilities.operate_output_index!(+, Complex{T}, g_i, g, complex_f)
123+
end
124+
for (f_i, g_i) in enumerate(bridge.imag_indices)
125+
scalar = MOI.Utilities.eachscalar(f)[length(bridge.real_indices)+f_i]
126+
complex_f = im * scalar
127+
MOI.Utilities.operate_output_index!(+, Complex{T}, g_i, g, complex_f)
128+
end
129+
return g
120130
end
121131

122132
function MOI.get(

0 commit comments

Comments
 (0)