Skip to content

Commit 8e55f79

Browse files
feat: support GCD for non-concrete polynomial types (#338)
* feat: support GCD for non-concrete polynomial types * feat: support complex coefficient GCD
1 parent 0e6fbb0 commit 8e55f79

File tree

2 files changed

+25
-5
lines changed

2 files changed

+25
-5
lines changed

src/gcd.jl

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,16 @@ end
7979
_coefficient_gcd(α, β) = gcd(α, β)
8080
_coefficient_gcd::AbstractFloat, β) = one(Base.promote_typeof(α, β))
8181
_coefficient_gcd(α, β::AbstractFloat) = one(Base.promote_typeof(α, β))
82+
_coefficient_gcd::Complex, β) = one(Base.promote_typeof(α, β))
83+
_coefficient_gcd(α, β::Complex) = one(Base.promote_typeof(α, β))
84+
_coefficient_gcd::Complex, β::AbstractFloat) = one(Base.promote_typeof(α, β))
85+
_coefficient_gcd::AbstractFloat, β::Complex) = one(Base.promote_typeof(α, β))
8286
function _coefficient_gcd::AbstractFloat, β::AbstractFloat)
8387
return one(Base.promote_typeof(α, β))
8488
end
89+
function _coefficient_gcd::Complex, β::Complex)
90+
return one(Base.promote_typeof(α, β))
91+
end
8592

8693
function Base.lcm(
8794
p::_APL,
@@ -306,11 +313,9 @@ function MA.operate(
306313
defl,
307314
)
308315
return polynomial(
309-
map(terms(p)) do t
310-
return term(
311-
coefficient(t),
312-
MA.operate(op, monomial(t), shift, defl),
313-
)
316+
coefficients(p),
317+
map(monomials(p)) do m
318+
return MA.operate(op, m, shift, defl)
314319
end,
315320
)
316321
end

test/commutative/gcd.jl

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,4 +291,19 @@ end
291291
end
292292
end
293293
end
294+
@testset "Non-concrete polynomial GCD" begin
295+
Mod.@polyvar p q
296+
p1 = MP.polynomial(p^2 + q^2, Number)
297+
p2 = MP.polynomial(p * q, Number)
298+
g = @inferred gcd(p1, p2)
299+
@test isone(g)
300+
end
301+
302+
@testset "Complex coefficient GCD" begin
303+
Mod.@polyvar p q
304+
p1 = MP.polynomial(p^2 + q^2, ComplexF64)
305+
p2 = MP.polynomial(p * q, ComplexF64)
306+
g = @inferred gcd(p1, p2)
307+
@test isone(g)
308+
end
294309
end

0 commit comments

Comments
 (0)