From 3f78ad4131e603be8343de7122e366fb3e7c59b6 Mon Sep 17 00:00:00 2001 From: odow Date: Sun, 8 Oct 2023 21:02:16 +0200 Subject: [PATCH 1/4] [Nonlinear] add support for is_empty and empty\! --- src/Nonlinear/model.jl | 21 +++++++++++++++++++++ test/Nonlinear/Nonlinear.jl | 28 ++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/src/Nonlinear/model.jl b/src/Nonlinear/model.jl index cc7c466402..531d715053 100644 --- a/src/Nonlinear/model.jl +++ b/src/Nonlinear/model.jl @@ -4,6 +4,27 @@ # Use of this source code is governed by an MIT-style license that can be found # in the LICENSE.md file or at https://opensource.org/licenses/MIT. +function MOI.empty!(model::Model) + model.objective = nothing + empty!(model.expressions) + empty!(model.constraints) + empty!(model.parameters) + model.operators = OperatorRegistry() + model.last_constraint_index = 0 + return +end + +function MOI.is_empty(model::Model) + return model.objective === nothing && + isempty(model.expressions) && + isempty(model.constraints) && + isempty(model.parameters) && + isempty(model.operators.registered_univariate_operators) && + isempty(model.operators.registered_multivariate_operators) && + model.last_constraint_index === 0 + return +end + function Base.copy(::Model) return error("Copying nonlinear problems not yet implemented") end diff --git a/test/Nonlinear/Nonlinear.jl b/test/Nonlinear/Nonlinear.jl index fe986bc43f..a5f2720817 100644 --- a/test/Nonlinear/Nonlinear.jl +++ b/test/Nonlinear/Nonlinear.jl @@ -1103,6 +1103,34 @@ function test_parse_unsupported_operator() return end +function test_is_empty() + model = MOI.Nonlinear.Model() + @test MOI.is_empty(model) + x = MOI.VariableIndex(1) + Nonlinear.set_objective(model, :(log($x))) + @test !MOI.is_empty(model) + MOI.empty!(model) + @test MOI.is_empty(model) + Nonlinear.add_constraint(model, :(log($x)), MOI.GreaterThan(1.0)) + @test !MOI.is_empty(model) + MOI.empty!(model) + @test MOI.is_empty(model) + Nonlinear.add_expression(model, :(sin($x)^2)) + @test !MOI.is_empty(model) + MOI.empty!(model) + @test MOI.is_empty(model) + Nonlinear.add_parameter(model, 1.2) + @test !MOI.is_empty(model) + MOI.empty!(model) + @test MOI.is_empty(model) + f(x) = log(x + 1) + Nonlinear.register_operator(model, :f, 1, f) + @test !MOI.is_empty(model) + MOI.empty!(model) + @test MOI.is_empty(model) + return +end + end TestNonlinear.runtests() From 774939cc838d028b0b5fbd53c6f8099aabfa5f84 Mon Sep 17 00:00:00 2001 From: Oscar Dowson Date: Sun, 8 Oct 2023 21:07:09 +0200 Subject: [PATCH 2/4] Update model.jl --- src/Nonlinear/model.jl | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Nonlinear/model.jl b/src/Nonlinear/model.jl index 531d715053..8755f41319 100644 --- a/src/Nonlinear/model.jl +++ b/src/Nonlinear/model.jl @@ -16,12 +16,12 @@ end function MOI.is_empty(model::Model) return model.objective === nothing && - isempty(model.expressions) && - isempty(model.constraints) && - isempty(model.parameters) && - isempty(model.operators.registered_univariate_operators) && - isempty(model.operators.registered_multivariate_operators) && - model.last_constraint_index === 0 + isempty(model.expressions) && + isempty(model.constraints) && + isempty(model.parameters) && + isempty(model.operators.registered_univariate_operators) && + isempty(model.operators.registered_multivariate_operators) && + model.last_constraint_index === 0 return end From 3fb243b32418dea923f92efb99e6c12d6eb9191f Mon Sep 17 00:00:00 2001 From: Oscar Dowson Date: Mon, 9 Oct 2023 08:12:04 +0200 Subject: [PATCH 3/4] Update src/Nonlinear/model.jl --- src/Nonlinear/model.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nonlinear/model.jl b/src/Nonlinear/model.jl index 8755f41319..26ce5f99bc 100644 --- a/src/Nonlinear/model.jl +++ b/src/Nonlinear/model.jl @@ -21,7 +21,7 @@ function MOI.is_empty(model::Model) isempty(model.parameters) && isempty(model.operators.registered_univariate_operators) && isempty(model.operators.registered_multivariate_operators) && - model.last_constraint_index === 0 + model.last_constraint_index === Int64(0) return end From 63f0139e3b36eb5e33d71ad5e5615bb7fa756207 Mon Sep 17 00:00:00 2001 From: Oscar Dowson Date: Mon, 9 Oct 2023 10:11:36 +0200 Subject: [PATCH 4/4] Update src/Nonlinear/model.jl --- src/Nonlinear/model.jl | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Nonlinear/model.jl b/src/Nonlinear/model.jl index 26ce5f99bc..feb33c7e27 100644 --- a/src/Nonlinear/model.jl +++ b/src/Nonlinear/model.jl @@ -22,7 +22,6 @@ function MOI.is_empty(model::Model) isempty(model.operators.registered_univariate_operators) && isempty(model.operators.registered_multivariate_operators) && model.last_constraint_index === Int64(0) - return end function Base.copy(::Model)