From 66ad72f47ac444d3894c5f78578d3e58962f5a6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Fri, 3 Apr 2026 22:07:41 +0200 Subject: [PATCH 1/5] Add tests for is_commutative --- test/commutative/variable.jl | 12 ++++++++++++ test/noncommutative/monomial.jl | 12 ++++++++++++ 2 files changed, 24 insertions(+) diff --git a/test/commutative/variable.jl b/test/commutative/variable.jl index 366ee680..256c4ab3 100644 --- a/test/commutative/variable.jl +++ b/test/commutative/variable.jl @@ -2,6 +2,18 @@ import MultivariatePolynomials: AbstractVariable, similar_variable, @similar_variable @testset "Variable" begin + @testset "is_commutative" begin + function _is_comm_test(p) + @test MP.is_commutative(p) + @test MP.is_commutative(typeof(p)) + end + Mod.@polyvar x y[1:2] + @test _is_comm_test(x) + @test _is_comm_test(y) + @test _is_comm_test(x^2) + @test _is_comm_test(2x^2) + @test _is_comm_test(sum(y)) + end @testset "polyvar macro index set" begin Mod.@polyvar x y z Mod.@polyvar x[1:3] y z[1:2] diff --git a/test/noncommutative/monomial.jl b/test/noncommutative/monomial.jl index fe3252da..7f907d43 100644 --- a/test/noncommutative/monomial.jl +++ b/test/noncommutative/monomial.jl @@ -92,3 +92,15 @@ end @test collect(exponents(X1[i])) == collect(exponents(X2[i])) == Z[i] end end +@testset "is_commutative" begin + function _is_comm_test(p) + @test !MP.is_commutative(p) + @test !MP.is_commutative(typeof(p)) + end + Mod.@polyvar x y[1:2] + @test _is_comm_test(x) + @test _is_comm_test(y) + @test _is_comm_test(x^2) + @test _is_comm_test(2x^2) + @test _is_comm_test(sum(y)) +end From bf51e86ecc24bc861721bb54d1713a64a2286b52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Sat, 4 Apr 2026 14:25:39 +0200 Subject: [PATCH 2/5] Fix --- src/variable.jl | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/variable.jl b/src/variable.jl index 87e64a03..6637837f 100644 --- a/src/variable.jl +++ b/src/variable.jl @@ -47,6 +47,9 @@ Returns whether variables of the given type are commutative, i.e., whether `x * y == y * x`. """ function is_commutative end +function is_commutative(::Type{P}) where {P<:Union{AbstractTerm,AbstractPolynomial} + return is_commutative(monomial_type(P)) +end is_commutative(p::_APL) = is_commutative(typeof(p)) is_commutative(v::AbstractVector) = is_commutative(eltype(v)) is_commutative(v::Tuple) = all(is_commutative, v) From ea3addfd5a2226dc02c42902464f8aa759155855 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Sat, 4 Apr 2026 14:29:09 +0200 Subject: [PATCH 3/5] Fix --- src/variable.jl | 2 +- test/commutative/variable.jl | 10 +++++----- test/noncommutative/monomial.jl | 12 ++++++------ 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/variable.jl b/src/variable.jl index 6637837f..5cd859c8 100644 --- a/src/variable.jl +++ b/src/variable.jl @@ -47,7 +47,7 @@ Returns whether variables of the given type are commutative, i.e., whether `x * y == y * x`. """ function is_commutative end -function is_commutative(::Type{P}) where {P<:Union{AbstractTerm,AbstractPolynomial} +function is_commutative(::Type{P}) where {P<:Union{AbstractTerm,AbstractPolynomial}} return is_commutative(monomial_type(P)) end is_commutative(p::_APL) = is_commutative(typeof(p)) diff --git a/test/commutative/variable.jl b/test/commutative/variable.jl index 256c4ab3..53ee1391 100644 --- a/test/commutative/variable.jl +++ b/test/commutative/variable.jl @@ -8,11 +8,11 @@ import MultivariatePolynomials: @test MP.is_commutative(typeof(p)) end Mod.@polyvar x y[1:2] - @test _is_comm_test(x) - @test _is_comm_test(y) - @test _is_comm_test(x^2) - @test _is_comm_test(2x^2) - @test _is_comm_test(sum(y)) + _is_comm_test(x) + _is_comm_test(y) + _is_comm_test(x^2) + _is_comm_test(2x^2) + _is_comm_test(sum(y)) end @testset "polyvar macro index set" begin Mod.@polyvar x y z diff --git a/test/noncommutative/monomial.jl b/test/noncommutative/monomial.jl index 7f907d43..53ee1182 100644 --- a/test/noncommutative/monomial.jl +++ b/test/noncommutative/monomial.jl @@ -97,10 +97,10 @@ end @test !MP.is_commutative(p) @test !MP.is_commutative(typeof(p)) end - Mod.@polyvar x y[1:2] - @test _is_comm_test(x) - @test _is_comm_test(y) - @test _is_comm_test(x^2) - @test _is_comm_test(2x^2) - @test _is_comm_test(sum(y)) + Mod.@ncpolyvar x y[1:2] + _is_comm_test(x) + _is_comm_test(y) + _is_comm_test(x^2) + _is_comm_test(2x^2) + _is_comm_test(sum(y)) end From f198596580617ec59cbcdea7992af274918edefb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Sat, 4 Apr 2026 14:29:21 +0200 Subject: [PATCH 4/5] Fix format --- src/variable.jl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/variable.jl b/src/variable.jl index 5cd859c8..81a55058 100644 --- a/src/variable.jl +++ b/src/variable.jl @@ -47,7 +47,9 @@ Returns whether variables of the given type are commutative, i.e., whether `x * y == y * x`. """ function is_commutative end -function is_commutative(::Type{P}) where {P<:Union{AbstractTerm,AbstractPolynomial}} +function is_commutative( + ::Type{P}, +) where {P<:Union{AbstractTerm,AbstractPolynomial}} return is_commutative(monomial_type(P)) end is_commutative(p::_APL) = is_commutative(typeof(p)) From c8217efd688103da0688ff4b509f0582c0943db3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Sat, 4 Apr 2026 15:30:44 +0200 Subject: [PATCH 5/5] Fix --- src/variable.jl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/variable.jl b/src/variable.jl index 81a55058..8075b81a 100644 --- a/src/variable.jl +++ b/src/variable.jl @@ -54,7 +54,9 @@ function is_commutative( end is_commutative(p::_APL) = is_commutative(typeof(p)) is_commutative(v::AbstractVector) = is_commutative(eltype(v)) +is_commutative(::Type{V}) where {V<:AbstractVector} = is_commutative(eltype(V)) is_commutative(v::Tuple) = all(is_commutative, v) +is_commutative(::Type{T}) where {T<:Tuple} = all(is_commutative, fieldtypes(T)) """ name(v::AbstractVariable)::AbstractString