Skip to content

Commit a08c93c

Browse files
authored
Implement filter_variables for VectorNonlinearFunction (#2556)
1 parent 21da4b9 commit a08c93c

File tree

3 files changed

+33
-0
lines changed

3 files changed

+33
-0
lines changed

src/Utilities/functions.jl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1281,6 +1281,14 @@ function filter_variables(keep::Function, f::MOI.ScalarNonlinearFunction)
12811281
return MOI.ScalarNonlinearFunction(f.head, args)
12821282
end
12831283

1284+
function filter_variables(keep::Function, f::MOI.VectorNonlinearFunction)
1285+
return MOI.VectorNonlinearFunction(
1286+
MOI.ScalarNonlinearFunction[
1287+
filter_variables(keep, row) for row in f.rows
1288+
],
1289+
)
1290+
end
1291+
12841292
"""
12851293
remove_variable(f::AbstractFunction, vi::VariableIndex)
12861294

test/Bridges/Constraint/slack.jl

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,18 @@ function test_vector_slack()
299299
return
300300
end
301301

302+
function test_basic_VectorNonlinearFunction()
303+
mock = MOI.Utilities.MockOptimizer(
304+
MOI.Utilities.UniversalFallback(MOI.Utilities.Model{Float64}()),
305+
)
306+
bridged_mock = MOI.Bridges.Constraint.VectorSlack{Float64}(mock)
307+
MOI.Test.test_basic_VectorNonlinearFunction_Nonnegatives(
308+
bridged_mock,
309+
MOI.Test.Config(),
310+
)
311+
return
312+
end
313+
302314
function test_runtests()
303315
MOI.Bridges.runtests(
304316
MOI.Bridges.Constraint.ScalarSlackBridge,

test/Utilities/functions.jl

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1933,6 +1933,19 @@ function test_filter_variables_scalarnonlinearfunction()
19331933
return
19341934
end
19351935

1936+
function test_filter_variables_vectornonlinearfunction()
1937+
x = MOI.VariableIndex(1)
1938+
y = MOI.VariableIndex(2)
1939+
f = MOI.ScalarNonlinearFunction(:+, Any[x, 2, y])
1940+
g = MOI.ScalarNonlinearFunction(:-, Any[x, 2, y])
1941+
fg = MOI.VectorNonlinearFunction([f, g])
1942+
new_f = MOI.ScalarNonlinearFunction(:+, Any[2, y])
1943+
new_g = MOI.ScalarNonlinearFunction(:-, Any[0, 2, y])
1944+
new_fg = MOI.VectorNonlinearFunction([new_f, new_g])
1945+
@test new_fg MOI.Utilities.filter_variables(xi -> xi != x, fg)
1946+
return
1947+
end
1948+
19361949
function test_ScalarNonlinearFunction_count_map_indices_and_print()
19371950
model = MOI.Utilities.CachingOptimizer(
19381951
MOI.Utilities.Model{Bool}(),

0 commit comments

Comments
 (0)