Skip to content

Commit d0964e3

Browse files
authored
Fix degree with noncommutative variables (#150)
1 parent 45e69b8 commit d0964e3

File tree

2 files changed

+14
-5
lines changed

2 files changed

+14
-5
lines changed

src/monomial.jl

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -75,12 +75,14 @@ degree(v::AbstractVariable, var::AbstractVariable) = (v == var ? 1 : 0)
7575
#degree(m::AbstractMonomial, v::AbstractVariable) = _deg(v, powers(t)...)
7676

7777
function degree(m::AbstractMonomial, v::AbstractVariable)
78-
i = findfirst(isequal(v), variables(m))
79-
if i === nothing || iszero(i)
80-
0
81-
else
82-
exponents(m)[i]
78+
deg = 0
79+
# With Noncommutative variables, there may be several powers with the same variable
80+
for (var, exp) in powers(m)
81+
if var == v
82+
deg += exp
83+
end
8384
end
85+
return deg
8486
end
8587

8688
"""

test/ncmonomial.jl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,13 @@
2424
@test collect(exponents(Y)) == [2]
2525
end
2626
end
27+
@testset "Issue #148" begin
28+
Mod.@ncpolyvar x y z
29+
m = x * y^4 * x^2
30+
@test 3 == @inferred degree(m, x)
31+
@test 4 == @inferred degree(m, y)
32+
@test 0 == @inferred degree(m, z)
33+
end
2734
@testset "Issue #71 of DynamicPolynomials" begin
2835
Mod.@ncpolyvar x y
2936
@test x^0 * y == y * x^0

0 commit comments

Comments
 (0)