Skip to content

Commit

Permalink
Implement filter_variables for VectorNonlinearFunction
Browse files Browse the repository at this point in the history
  • Loading branch information
blegat committed Oct 9, 2024
1 parent 2401296 commit 65ef322
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 0 deletions.
6 changes: 6 additions & 0 deletions src/Utilities/functions.jl
Original file line number Diff line number Diff line change
Expand Up @@ -1281,6 +1281,12 @@ function filter_variables(keep::Function, f::MOI.ScalarNonlinearFunction)
return MOI.ScalarNonlinearFunction(f.head, args)
end

function filter_variables(keep::Function, f::MOI.VectorNonlinearFunction)
return MOI.VectorNonlinearFunction(
MOI.ScalarNonlinearFunction[filter_variables(keep, row) for row in f.rows]
)
end

"""
remove_variable(f::AbstractFunction, vi::VariableIndex)
Expand Down
12 changes: 12 additions & 0 deletions test/Bridges/Constraint/slack.jl
Original file line number Diff line number Diff line change
Expand Up @@ -299,6 +299,18 @@ function test_vector_slack()
return
end

function test_basic_VectorNonlinearFunction()
mock = MOI.Utilities.MockOptimizer(
MOI.Utilities.UniversalFallback(MOI.Utilities.Model{Float64}()),
)
bridged_mock = MOI.Bridges.Constraint.VectorSlack{Float64}(mock)
MOI.Test.test_basic_VectorNonlinearFunction_Nonnegatives(
bridged_mock,
MOI.Test.Config(),
)
return
end

function test_runtests()
MOI.Bridges.runtests(
MOI.Bridges.Constraint.ScalarSlackBridge,
Expand Down
14 changes: 14 additions & 0 deletions test/Utilities/functions.jl
Original file line number Diff line number Diff line change
Expand Up @@ -1933,6 +1933,20 @@ function test_filter_variables_scalarnonlinearfunction()
return
end

function test_filter_variables_vectornonlinearfunction()
x = MOI.VariableIndex(1)
y = MOI.VariableIndex(2)
f = MOI.ScalarNonlinearFunction(:+, Any[x, 2, y])
g = MOI.ScalarNonlinearFunction(:-, Any[x, 2, y])
fg = MOI.VectorNonlinearFunction([f, g])
new_f = MOI.ScalarNonlinearFunction(:+, Any[2, y])
new_g = MOI.ScalarNonlinearFunction(:-, Any[0, 2, y])
new_fg = MOI.VectorNonlinearFunction([new_f, new_g])
@test new_fg MOI.Utilities.filter_variables(xi -> xi != x, fg)
return
end


function test_ScalarNonlinearFunction_count_map_indices_and_print()
model = MOI.Utilities.CachingOptimizer(
MOI.Utilities.Model{Bool}(),
Expand Down

0 comments on commit 65ef322

Please sign in to comment.