diff --git a/Project.toml b/Project.toml index cbeed64..3bc4bdc 100644 --- a/Project.toml +++ b/Project.toml @@ -13,11 +13,11 @@ MultivariatePolynomials = "102ac46a-7ee4-5c85-9060-abc95bfdeaa3" SemialgebraicSets = "8e049039-38e8-557d-ae3a-bc521ccf6204" [compat] -JuMP = "0.21.7" -MathOptInterface = "~0.9.6" -MultivariateBases = "0.1.2" +JuMP = "0.22" +MathOptInterface = "0.10" +MultivariateBases = "0.1.4" MultivariateMoments = "0.3" -MultivariatePolynomials = "~0.3" +MultivariatePolynomials = "0.4" SemialgebraicSets = "0.2" julia = "1" diff --git a/src/constraint.jl b/src/constraint.jl index 58c9b52..435d037 100644 --- a/src/constraint.jl +++ b/src/constraint.jl @@ -139,7 +139,7 @@ function bridgeable(c::JuMP.AbstractConstraint, return c end -### @constraint/@SDconstraint macros ### +### @constraint macro ### non_constant(a::Vector{<:Number}) = convert(Vector{AffExpr}, a) non_constant(a::Vector{<:JuMP.AbstractJuMPScalar}) = a diff --git a/src/variable.jl b/src/variable.jl index 6bc9de4..9161996 100644 --- a/src/variable.jl +++ b/src/variable.jl @@ -1,21 +1,26 @@ export Poly function JuMP.value( + f::Function, t::AbstractTerm{<:JuMP.AbstractJuMPScalar}, - f::Function = JuMP.value, ) - return JuMP.value(MultivariatePolynomials.coefficient(t), f) * monomial(t) + return JuMP.value(f, MultivariatePolynomials.coefficient(t)) * monomial(t) end + +JuMP.value(t::AbstractTerm{<:JuMP.AbstractJuMPScalar}) = JuMP.value(JuMP.value, t) + function JuMP.value( + f::Function, p::AbstractPolynomialLike{<:JuMP.AbstractJuMPScalar}, - f::Function = JuMP.value, ) return polynomial( - JuMP.value.(terms(p), f), + JuMP.value.(f, terms(p)), MultivariatePolynomials.SortedUniqState(), ) end +JuMP.value(p::AbstractPolynomialLike{<:JuMP.AbstractJuMPScalar}) = JuMP.value(JuMP.value, p) + abstract type AbstractPoly end """ diff --git a/test/Mock/plus_minus.jl b/test/Mock/plus_minus.jl index 2ceea8b..75fe01c 100644 --- a/test/Mock/plus_minus.jl +++ b/test/Mock/plus_minus.jl @@ -13,7 +13,7 @@ MOIU.@model( (), (MOI.LessThan,), (NonNeg,), (), (), (), (MOI.VectorOfVariables,), (MOI.VectorAffineFunction,)) -config = MOI.Test.TestConfig() +config = MOI.Test.Config() _optimize!(mock) = MOIU.mock_optimize!(mock, [1.0, 1.0], (MOI.VectorOfVariables, NonNeg) => [[0.0]], (MOI.VectorAffineFunction{Float64}, NonNeg) => [[0.0, -0.5], diff --git a/test/Mock/zero_polynomial.jl b/test/Mock/zero_polynomial.jl index 075a0c5..a549df6 100644 --- a/test/Mock/zero_polynomial.jl +++ b/test/Mock/zero_polynomial.jl @@ -1,4 +1,4 @@ -config = MOI.Test.TestConfig() +config = MOI.Test.Config() @testset "Model" begin optimize!(mock) = MOIU.mock_optimize!(mock, [1.0, 1.0, 0.0], diff --git a/test/Mock/zero_polynomial_in_algebraic_set.jl b/test/Mock/zero_polynomial_in_algebraic_set.jl index 925ffc4..f3ecc2e 100644 --- a/test/Mock/zero_polynomial_in_algebraic_set.jl +++ b/test/Mock/zero_polynomial_in_algebraic_set.jl @@ -1,4 +1,4 @@ -config = MOI.Test.TestConfig() +config = MOI.Test.Config() _optimize!(mock) = MOIU.mock_optimize!(mock, [1.0, 1.0], (MOI.VectorAffineFunction{Float64}, MOI.Zeros) => [[-1.0]]) mock = bridged_mock(_optimize!) diff --git a/test/Mock/zero_polynomial_in_fixed_variables_set.jl b/test/Mock/zero_polynomial_in_fixed_variables_set.jl index 7ecb551..5c2c331 100644 --- a/test/Mock/zero_polynomial_in_fixed_variables_set.jl +++ b/test/Mock/zero_polynomial_in_fixed_variables_set.jl @@ -1,4 +1,4 @@ -config = MOI.Test.TestConfig() +config = MOI.Test.Config() _optimize!(mock) = MOIU.mock_optimize!(mock, [1.0, 1.0], (MOI.VectorAffineFunction{Float64}, MOI.Zeros) => [[-1.0]]) mock = bridged_mock(_optimize!) diff --git a/test/Solvers/glpk_tests.jl b/test/Solvers/glpk_tests.jl index 2a11261..eb6bafb 100644 --- a/test/Solvers/glpk_tests.jl +++ b/test/Solvers/glpk_tests.jl @@ -5,6 +5,6 @@ using JuMP using GLPK optimizer = GLPK.Optimizer() bridged = MOI.Bridges.full_bridge_optimizer(optimizer, Float64) -config = MOI.Test.TestConfig(atol=1e-5, rtol=1e-5, query=false) +config = MOI.Test.Config(atol=1e-5, rtol=1e-5, query=false) exclude = ["plus_minus"] Tests.linear_test(bridged, config, exclude) diff --git a/test/Tests/plus_minus.jl b/test/Tests/plus_minus.jl index b070e0c..87d7a13 100644 --- a/test/Tests/plus_minus.jl +++ b/test/Tests/plus_minus.jl @@ -5,7 +5,7 @@ using PolyJuMP using DynamicPolynomials function plus_minus_test(optimizer, - config::MOI.Test.TestConfig; + config::MOI.Test.Config; polymodule = nothing) atol = config.atol rtol = config.rtol @@ -48,8 +48,8 @@ function plus_minus_test(optimizer, G = MOI.VectorAffineFunction{Float64} NonNeg = _NonNegType(c2) S = PolyJuMP.PlusMinusSet{NonNeg} - @test Set(MOI.get(model, MOI.ListOfConstraints())) == Set([ - (MOI.SingleVariable, MOI.LessThan{Float64}), (G, S), (F, S)]) + @test Set(MOI.get(model, MOI.ListOfConstraintTypesPresent())) == Set([ + (MOI.VariableIndex, MOI.LessThan{Float64}), (G, S), (F, S)]) test_delete_bridge(model, c2, 2, ((F, NonNeg, 0), (G, NonNeg, 0))) test_delete_bridge(model, c1, 2, ((F, NonNeg, 0), (G, NonNeg, 0))) end diff --git a/test/Tests/utilities.jl b/test/Tests/utilities.jl index 9ea8ab8..4f94c42 100644 --- a/test/Tests/utilities.jl +++ b/test/Tests/utilities.jl @@ -31,7 +31,7 @@ macro test_suite(setname, subsets=false) end esc(:( function $testname(model, # could be ModelLike or an optimizer constructor - config::$MOI.Test.TestConfig, + config::$MOI.Test.Config, exclude::Vector{String} = String[]) for (name,f) in $testdict if name in exclude @@ -48,7 +48,7 @@ end function test_noc(model, F, S, n) @test MOI.get(model, MOI.NumberOfConstraints{F, S}()) == n @test length(MOI.get(model, MOI.ListOfConstraintIndices{F, S}())) == n - @test ((F, S) in MOI.get(model, MOI.ListOfConstraints())) == !iszero(n) + @test ((F, S) in MOI.get(model, MOI.ListOfConstraintTypesPresent())) == !iszero(n) end # Test deletion of bridge diff --git a/test/Tests/zero_polynomial.jl b/test/Tests/zero_polynomial.jl index 5e9f28a..242c7ee 100644 --- a/test/Tests/zero_polynomial.jl +++ b/test/Tests/zero_polynomial.jl @@ -5,7 +5,7 @@ using PolyJuMP using DynamicPolynomials function zero_polynomial_test(optimizer::MOI.AbstractOptimizer, - config::MOI.Test.TestConfig) + config::MOI.Test.Config) atol = config.atol rtol = config.rtol @@ -45,8 +45,8 @@ function zero_polynomial_test(optimizer::MOI.AbstractOptimizer, F = MOI.VectorAffineFunction{Float64} S = PolyJuMP.ZeroPolynomialSet{FullSpace,MB.MonomialBasis,Monomial{true}, MonomialVector{true}} - @test Set(MOI.get(model, MOI.ListOfConstraints())) == Set([ - (MOI.SingleVariable, MOI.LessThan{Float64}), (F, S), (MOI.VectorOfVariables, S)]) + @test Set(MOI.get(model, MOI.ListOfConstraintTypesPresent())) == Set([ + (MOI.VariableIndex, MOI.LessThan{Float64}), (F, S), (MOI.VectorOfVariables, S)]) @testset "Delete" begin test_delete_bridge(model, cref, 3, ((F, MOI.Zeros, 0),)) end diff --git a/test/Tests/zero_polynomial_in_algebraic_set.jl b/test/Tests/zero_polynomial_in_algebraic_set.jl index 492e979..c4ddf4a 100644 --- a/test/Tests/zero_polynomial_in_algebraic_set.jl +++ b/test/Tests/zero_polynomial_in_algebraic_set.jl @@ -6,7 +6,7 @@ using PolyJuMP using DynamicPolynomials function zero_polynomial_in_algebraic_set_test(optimizer, - config::MOI.Test.TestConfig) + config::MOI.Test.Config) atol = config.atol rtol = config.rtol @@ -49,8 +49,8 @@ function zero_polynomial_in_algebraic_set_test(optimizer, F = MOI.VectorAffineFunction{Float64} S = PolyJuMP.ZeroPolynomialSet{typeof(@set x == y), MB.MonomialBasis, monomialtype(x), monovectype(x)} - @test MOI.get(model, MOI.ListOfConstraints()) == [ - (MOI.SingleVariable, MOI.LessThan{Float64}), (F, S)] + @test MOI.get(model, MOI.ListOfConstraintTypesPresent()) == [ + (MOI.VariableIndex, MOI.LessThan{Float64}), (F, S)] @testset "Delete" begin ST = PolyJuMP.ZeroPolynomialSet{FullSpace,MB.MonomialBasis,Monomial{true}, MonomialVector{true}} diff --git a/test/Tests/zero_polynomial_in_fixed_variables_set.jl b/test/Tests/zero_polynomial_in_fixed_variables_set.jl index 1835b1a..6dcd0a3 100644 --- a/test/Tests/zero_polynomial_in_fixed_variables_set.jl +++ b/test/Tests/zero_polynomial_in_fixed_variables_set.jl @@ -6,7 +6,7 @@ using PolyJuMP using DynamicPolynomials function zero_polynomial_in_fixed_variables_set_test( - optimizer, config::MOI.Test.TestConfig) + optimizer, config::MOI.Test.Config) atol = config.atol rtol = config.rtol @@ -49,8 +49,8 @@ function zero_polynomial_in_fixed_variables_set_test( F = MOI.VectorAffineFunction{Float64} S = PolyJuMP.ZeroPolynomialSet{typeof(@set x == 1), MB.MonomialBasis, monomialtype(x), monovectype(x)} - @test MOI.get(model, MOI.ListOfConstraints()) == [ - (MOI.SingleVariable, MOI.LessThan{Float64}), (F, S)] + @test MOI.get(model, MOI.ListOfConstraintTypesPresent()) == [ + (MOI.VariableIndex, MOI.LessThan{Float64}), (F, S)] @testset "Delete" begin ST = PolyJuMP.ZeroPolynomialSet{FullSpace,MB.MonomialBasis,Monomial{true}, MonomialVector{true}} diff --git a/test/constraint.jl b/test/constraint.jl index da61e8f..604899d 100644 --- a/test/constraint.jl +++ b/test/constraint.jl @@ -134,7 +134,7 @@ _canon(model, p::Matrix) = _canon.(model, p) end @testset "PosDefMatrix" begin jump_set = TestPolyModule.TestPosDefMatrix() - testcon(m, @SDconstraint(m, [p q; q 0] ⪰ [0 0; 0 p]), + testcon(m, @constraint(m, [p q; q 0] - [0 0; 0 p] in PSDCone()), TestPolyModule.PosDefMatrix, jump_set, [p q; q -p], [], []) end end diff --git a/test/functions.jl b/test/functions.jl index 5cb447d..64041fd 100644 --- a/test/functions.jl +++ b/test/functions.jl @@ -1,17 +1,14 @@ @testset "Functions" begin @polyvar x α = MOI.VariableIndex(1) - f = MOI.SingleVariable(α) - @test f * x isa AbstractTerm{MOI.SingleVariable} - @test x * f isa AbstractTerm{MOI.SingleVariable} - @test f * x^2 isa AbstractTerm{MOI.SingleVariable} - @test x^2 * f isa AbstractTerm{MOI.SingleVariable} - @test f * (1x) isa AbstractTerm{MOI.ScalarAffineFunction{Int}} - @test (1x) * f isa AbstractTerm{MOI.ScalarAffineFunction{Int}} - @test f * (1.0x) isa AbstractTerm{MOI.ScalarAffineFunction{Float64}} - @test (1.0x) * f isa AbstractTerm{MOI.ScalarAffineFunction{Float64}} - @test f * (1x + 2) isa AbstractPolynomial{MOI.ScalarAffineFunction{Int}} - @test (1x + 2) * f isa AbstractPolynomial{MOI.ScalarAffineFunction{Int}} - @test f * (1.0x + 2.0) isa AbstractPolynomial{MOI.ScalarAffineFunction{Float64}} - @test (1.0x + 2.0) * f isa AbstractPolynomial{MOI.ScalarAffineFunction{Float64}} + @test (1α) * x^2 isa AbstractTerm{MOI.ScalarAffineFunction{Int}} + @test (1x)^2 * α isa AbstractTerm{MOI.ScalarAffineFunction{Int}} + @test α * (1x) isa AbstractTerm{MOI.ScalarAffineFunction{Int}} + @test (1x) * α isa AbstractTerm{MOI.ScalarAffineFunction{Int}} + @test α * (1.0x) isa AbstractTerm{MOI.ScalarAffineFunction{Float64}} + @test (1.0x) * α isa AbstractTerm{MOI.ScalarAffineFunction{Float64}} + @test α * (1x + 2) isa AbstractPolynomial{MOI.ScalarAffineFunction{Int}} + @test (1x + 2) * α isa AbstractPolynomial{MOI.ScalarAffineFunction{Int}} + @test α * (1.0x + 2.0) isa AbstractPolynomial{MOI.ScalarAffineFunction{Float64}} + @test (1.0x + 2.0) * α isa AbstractPolynomial{MOI.ScalarAffineFunction{Float64}} end diff --git a/test/variable.jl b/test/variable.jl index 016a40b..1a5ba44 100644 --- a/test/variable.jl +++ b/test/variable.jl @@ -93,5 +93,5 @@ end JuMP.fix(α, 2) JuMP.fix(β, 3) @test_broken JuMP.value(p) == 2x*y + 3x^2 - @test JuMP.value(p, fix_value) == 2x*y + 3x^2 + @test JuMP.value(fix_value, p) == 2x*y + 3x^2 end