From 12c11efaf5e40d5c6995c94259020b7fd6df5380 Mon Sep 17 00:00:00 2001 From: john verzani Date: Fri, 28 Feb 2025 18:28:09 -0500 Subject: [PATCH] close #598 (#599) --- Project.toml | 2 +- src/polynomials/ngcd.jl | 15 ++++++++++----- test/StandardBasis.jl | 9 +++++++++ 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/Project.toml b/Project.toml index fcc3c362..9e6c70fe 100644 --- a/Project.toml +++ b/Project.toml @@ -2,7 +2,7 @@ name = "Polynomials" uuid = "f27b6e38-b328-58d1-80ce-0feddd5e7a45" license = "MIT" author = "JuliaMath" -version = "4.0.17" +version = "4.0.18" [deps] LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" diff --git a/src/polynomials/ngcd.jl b/src/polynomials/ngcd.jl index b9e971a8..bdb3e494 100644 --- a/src/polynomials/ngcd.jl +++ b/src/polynomials/ngcd.jl @@ -12,6 +12,13 @@ function ngcd(p::P, q::Q, args...; kwargs...) where {T,X,P<:StandardBasisPolynomial{T,X}, S,Y,Q<:StandardBasisPolynomial{S,Y}} + + # easy cases + degree(p) < 0 && return (u=q, v=p, w=one(q), θ=NaN, κ=NaN) + degree(p) == 0 && return (u=one(q), v=p, w=q, θ=NaN, κ=NaN) + degree(q) < 0 && return (u=one(q), v=p, w=zero(q), θ=NaN, κ=NaN) + degree(q) == 0 && return (u=one(p), v=p, w=q, Θ=NaN, κ=NaN) + if (degree(q) > degree(p)) u,w,v,Θ,κ = ngcd(q,p,args...; kwargs...) return (u=u,v=v,w=w, Θ=Θ, κ=κ) @@ -21,14 +28,12 @@ function ngcd(p::P, q::Q, return ngcd(q, b, args...; λ=100, kwargs...) end - # easy cases - degree(p) < 0 && return (u=q, v=p, w=one(q), θ=NaN, κ=NaN) - degree(p) == 0 && return (u=one(q), v=p, w=q, θ=NaN, κ=NaN) - degree(q) < 0 && return (u=one(q), v=p, w=zero(q), θ=NaN, κ=NaN) - degree(q) == 0 && return (u=one(p), v=p, w=q, Θ=NaN, κ=NaN) + # other easy cases p ≈ q && return (u=p,v=one(p), w=one(p), θ=NaN, κ=NaN) Polynomials.assert_same_variable(p,q) + + R = promote_type(float(T)) 𝑷 = Polynomials.constructorof(P){R,X} diff --git a/test/StandardBasis.jl b/test/StandardBasis.jl index 2762adba..f9ef0784 100644 --- a/test/StandardBasis.jl +++ b/test/StandardBasis.jl @@ -1558,6 +1558,15 @@ end @test out.u == x^k end end + + # issue #598 ultimately ngcd issue not checking 0 polynomial earlier + x = Polynomial([0,1]) + A = (1.0 + 2.0*x^2) // (1.0 + 2.0*x^2) + B = (0.0) // (1.0 + 2.0*x^2) + C = (3.0*x) // (1.0 + 2.0*x^2) + D = (1.0 + 2.0*x^2) // (1.0 + 2.0*x^2) + ab,cd = [A B], [C D] + @test [A B; C D] == [ab; cd] end @testset "Showing" begin