From 2fc39bc868b351fb29d39c2e05edeef6ac09ac12 Mon Sep 17 00:00:00 2001 From: Tommy Hofmann Date: Wed, 8 Jan 2025 21:29:52 +0100 Subject: [PATCH] fix: irreducibility of constant polynomials over finite fields --- src/flint/fmpz_mod_poly.jl | 1 + src/flint/fq_default_poly.jl | 1 + src/flint/fq_nmod_poly.jl | 1 + src/flint/fq_poly.jl | 1 + src/flint/gfp_fmpz_poly.jl | 1 + src/flint/gfp_poly.jl | 1 + src/flint/nmod_poly.jl | 1 + test/flint/fmpz_mod_poly-test.jl | 3 +++ test/flint/fq_default_poly-test.jl | 3 +++ test/flint/fq_nmod_poly-test.jl | 3 +++ test/flint/fq_poly-test.jl | 3 +++ test/flint/gfp_fmpz_poly-test.jl | 3 +++ test/flint/gfp_poly-test.jl | 3 +++ test/flint/nmod_poly-test.jl | 3 +++ 14 files changed, 28 insertions(+) diff --git a/src/flint/fmpz_mod_poly.jl b/src/flint/fmpz_mod_poly.jl index 0658b758ad..58123e64d7 100644 --- a/src/flint/fmpz_mod_poly.jl +++ b/src/flint/fmpz_mod_poly.jl @@ -645,6 +645,7 @@ end function is_irreducible(x::ZZModPolyRingElem) !is_probable_prime(modulus(x)) && error("Modulus not prime in is_irreducible") + is_constant(x) && return false return Bool(@ccall libflint.fmpz_mod_poly_is_irreducible(x::Ref{ZZModPolyRingElem}, x.parent.base_ring.ninv::Ref{fmpz_mod_ctx_struct})::Cint) end diff --git a/src/flint/fq_default_poly.jl b/src/flint/fq_default_poly.jl index 5e6670f245..8e8abc0fad 100644 --- a/src/flint/fq_default_poly.jl +++ b/src/flint/fq_default_poly.jl @@ -513,6 +513,7 @@ end ################################################################################ function is_irreducible(x::FqPolyRingElem) + is_constant(x) && return false return Bool(@ccall libflint.fq_default_poly_is_irreducible(x::Ref{FqPolyRingElem}, base_ring(parent(x))::Ref{FqField})::Int32) end diff --git a/src/flint/fq_nmod_poly.jl b/src/flint/fq_nmod_poly.jl index 69c1da09b6..c6e60dddeb 100644 --- a/src/flint/fq_nmod_poly.jl +++ b/src/flint/fq_nmod_poly.jl @@ -519,6 +519,7 @@ end ################################################################################ function is_irreducible(x::fqPolyRepPolyRingElem) + is_constant(x) && return false return Bool(@ccall libflint.fq_nmod_poly_is_irreducible(x::Ref{fqPolyRepPolyRingElem}, base_ring(parent(x))::Ref{fqPolyRepField})::Int32) end diff --git a/src/flint/fq_poly.jl b/src/flint/fq_poly.jl index ab033b5dcc..e574060928 100644 --- a/src/flint/fq_poly.jl +++ b/src/flint/fq_poly.jl @@ -519,6 +519,7 @@ end ################################################################################ function is_irreducible(x::FqPolyRepPolyRingElem) + is_constant(x) && return false return Bool(@ccall libflint.fq_poly_is_irreducible(x::Ref{FqPolyRepPolyRingElem}, base_ring(parent(x))::Ref{FqPolyRepField})::Int32) end diff --git a/src/flint/gfp_fmpz_poly.jl b/src/flint/gfp_fmpz_poly.jl index 991a7ca2da..456564c1f5 100644 --- a/src/flint/gfp_fmpz_poly.jl +++ b/src/flint/gfp_fmpz_poly.jl @@ -242,6 +242,7 @@ end ################################################################################ function is_irreducible(x::FpPolyRingElem) + is_constant(x) && return false return Bool(@ccall libflint.fmpz_mod_poly_is_irreducible(x::Ref{FpPolyRingElem}, x.parent.base_ring.ninv::Ref{fmpz_mod_ctx_struct})::Cint) end diff --git a/src/flint/gfp_poly.jl b/src/flint/gfp_poly.jl index 36d68ce521..0945a49e64 100644 --- a/src/flint/gfp_poly.jl +++ b/src/flint/gfp_poly.jl @@ -302,6 +302,7 @@ end ################################################################################ function is_irreducible(x::fpPolyRingElem) + is_constant(x) && return false return Bool(@ccall libflint.nmod_poly_is_irreducible(x::Ref{fpPolyRingElem})::Int32) end diff --git a/src/flint/nmod_poly.jl b/src/flint/nmod_poly.jl index bd4bab902d..677f23571d 100644 --- a/src/flint/nmod_poly.jl +++ b/src/flint/nmod_poly.jl @@ -641,6 +641,7 @@ end function is_irreducible(x::zzModPolyRingElem) !is_prime(modulus(x)) && error("Modulus not prime in is_irreducible") + is_constant(x) && return false return Bool(@ccall libflint.nmod_poly_is_irreducible(x::Ref{zzModPolyRingElem})::Int32) end diff --git a/test/flint/fmpz_mod_poly-test.jl b/test/flint/fmpz_mod_poly-test.jl index c6f8b729c2..6a877662f2 100644 --- a/test/flint/fmpz_mod_poly-test.jl +++ b/test/flint/fmpz_mod_poly-test.jl @@ -498,6 +498,9 @@ end f = x^2 + 2x + 1 @test is_irreducible(f) == false + + @test !is_irreducible(x^0) + @test !is_irreducible(0*x^0) end @testset "ZZModPolyRingElem.is_squarefree" begin diff --git a/test/flint/fq_default_poly-test.jl b/test/flint/fq_default_poly-test.jl index 448f6cda2a..720d86a945 100644 --- a/test/flint/fq_default_poly-test.jl +++ b/test/flint/fq_default_poly-test.jl @@ -490,6 +490,9 @@ end @test is_irreducible(x) @test is_irreducible(x^16+2*x^9+x^8+x^2+x+1) + + @test !is_irreducible(x^0) + @test !is_irreducible(0*x^0) end @testset "FqPolyRingElem.is_squarefree" begin diff --git a/test/flint/fq_nmod_poly-test.jl b/test/flint/fq_nmod_poly-test.jl index 4dae83da00..104e35c6cd 100644 --- a/test/flint/fq_nmod_poly-test.jl +++ b/test/flint/fq_nmod_poly-test.jl @@ -501,6 +501,9 @@ end @test is_irreducible(x) @test is_irreducible(x^16+2*x^9+x^8+x^2+x+1) + + @test !is_irreducible(x^0) + @test !is_irreducible(0*x^0) end @testset "fqPolyRepPolyRingElem.is_squarefree" begin diff --git a/test/flint/fq_poly-test.jl b/test/flint/fq_poly-test.jl index 2cd14ee5d5..14e0274eab 100644 --- a/test/flint/fq_poly-test.jl +++ b/test/flint/fq_poly-test.jl @@ -502,6 +502,9 @@ end @test is_irreducible(x) @test is_irreducible(x^16+2*x^9+x^8+x^2+x+1) + + @test !is_irreducible(x^0) + @test !is_irreducible(0*x^0) end @testset "FqPolyRepPolyRingElem.is_squarefree" begin diff --git a/test/flint/gfp_fmpz_poly-test.jl b/test/flint/gfp_fmpz_poly-test.jl index fbbdf4c4e1..bf895af3d0 100644 --- a/test/flint/gfp_fmpz_poly-test.jl +++ b/test/flint/gfp_fmpz_poly-test.jl @@ -497,6 +497,9 @@ end f = x^2 + 2x + 1 @test is_irreducible(f) == false + + @test !is_irreducible(x^0) + @test !is_irreducible(0*x^0) end @testset "FpPolyRingElem.is_squarefree" begin diff --git a/test/flint/gfp_poly-test.jl b/test/flint/gfp_poly-test.jl index de0bb91b92..480e4ae839 100644 --- a/test/flint/gfp_poly-test.jl +++ b/test/flint/gfp_poly-test.jl @@ -564,6 +564,9 @@ end @test is_irreducible(x) @test is_irreducible(x^16+2*x^9+x^8+x^2+x+1) + + @test !is_irreducible(x^0) + @test !is_irreducible(0*x^0) end @testset "fpPolyRingElem.is_squarefree" begin diff --git a/test/flint/nmod_poly-test.jl b/test/flint/nmod_poly-test.jl index aa200ea024..e78a6d8b65 100644 --- a/test/flint/nmod_poly-test.jl +++ b/test/flint/nmod_poly-test.jl @@ -587,6 +587,9 @@ end @test is_irreducible(x) @test is_irreducible(x^16+2*x^9+x^8+x^2+x+1) + + @test !is_irreducible(x^0) + @test !is_irreducible(0*x^0) end @testset "zzModPolyRingElem.is_squarefree" begin