From 5a411ce1e567fc99baf1c82be10f9b2e73fb001b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Thu, 4 Jul 2024 10:28:11 +0200 Subject: [PATCH 1/2] Fix non_constant_coefficients for AlgebraElement --- src/constraint.jl | 9 ++++++--- test/constraint.jl | 9 +++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/constraint.jl b/src/constraint.jl index 149a1e1..9e13912 100644 --- a/src/constraint.jl +++ b/src/constraint.jl @@ -194,7 +194,11 @@ function non_constant(a::AbstractVector{T}) where {T} # also take care of `collect`ing into a `Vector` return convert(Vector{non_constant_type(T)}, a) end -non_constant_coefficients(p) = non_constant(MP.coefficients(p)) +non_constant_coefficients(p::MP.AbstractPolynomialLike) = non_constant(MP.coefficients(p)) +function non_constant_coefficients(p::SA.AlgebraElement) + MA.operate!(SA.canonical, SA.coeffs(p)) + return non_constant(values(SA.coeffs(p))) +end ## ZeroPoly function JuMP.build_constraint( @@ -205,7 +209,7 @@ function JuMP.build_constraint( kws..., ) coefs = non_constant_coefficients(p) - monos = MP.monomials(p) + basis = MB.explicit_basis(p) if domain isa SS.BasicSemialgebraicSet # p(x) = 0 for all x in a basic semialgebraic set. We replace it by # p(x) ≤ 0 and p(x) ≥ 0 for all x in the basic semialgebraic set. @@ -222,7 +226,6 @@ function JuMP.build_constraint( ) return Constraint(error_fn, p, s, all_kws) else - basis = MB.SubBasis{MB.Monomial}(monos) set = JuMP.moi_set(s, basis; domain = domain, kws...) constraint = JuMP.VectorConstraint(coefs, set, PolynomialShape(basis)) return bridgeable( diff --git a/test/constraint.jl b/test/constraint.jl index bdf80ee..1f91dd8 100644 --- a/test/constraint.jl +++ b/test/constraint.jl @@ -270,6 +270,15 @@ function test_ZeroPolynomialSet(var) [], [], ) + _test_constraint( + m, + @constraint(m, MB.algebra_element(p - q) in PolyJuMP.ZeroPoly()), + S, + jump_set, + p - q, + [], + [], + ) _test_constraint(m, @constraint(m, x == y), S, jump_set, x - y, [], []) _test_constraint( m, From 11be7854828591309070cbd4f1b662403aeaa74c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Thu, 4 Jul 2024 10:28:17 +0200 Subject: [PATCH 2/2] Fix format --- src/constraint.jl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/constraint.jl b/src/constraint.jl index 9e13912..039e795 100644 --- a/src/constraint.jl +++ b/src/constraint.jl @@ -194,7 +194,9 @@ function non_constant(a::AbstractVector{T}) where {T} # also take care of `collect`ing into a `Vector` return convert(Vector{non_constant_type(T)}, a) end -non_constant_coefficients(p::MP.AbstractPolynomialLike) = non_constant(MP.coefficients(p)) +function non_constant_coefficients(p::MP.AbstractPolynomialLike) + return non_constant(MP.coefficients(p)) +end function non_constant_coefficients(p::SA.AlgebraElement) MA.operate!(SA.canonical, SA.coeffs(p)) return non_constant(values(SA.coeffs(p)))