diff --git a/src/Misc/FactoredElem.jl b/src/Misc/FactoredElem.jl index 0e8ffb5283..6d5a1d7c5b 100644 --- a/src/Misc/FactoredElem.jl +++ b/src/Misc/FactoredElem.jl @@ -61,6 +61,13 @@ function FacElem(d::Dict{B, fmpz}) where B return z end +function FacElem(R::Ring) + z = FacElem{elem_type(R), typeof(R)}() + z.fac = Dict{elem_type(R), fmpz}() + z.parent = FacElemMon(R) + return z +end + function FacElem(d::Dict{B, T}) where {B, T <: Integer} length(d) == 0 && error("Dictionary must not be empty") @@ -450,6 +457,9 @@ function simplify!(x::FacElem{fmpq}) end function simplify!(x::FacElem{fmpz}) + if length(x.fac) < 1 + return x + end if length(x.fac) <= 1 k,v = first(x.fac) if isone(k) diff --git a/src/NfOrd/FacElem.jl b/src/NfOrd/FacElem.jl index 0ba2e8a959..37a6f31fc5 100644 --- a/src/NfOrd/FacElem.jl +++ b/src/NfOrd/FacElem.jl @@ -122,6 +122,9 @@ function factored_norm(x::FacElem{nf_elem}) push!(c, -e) end end + if length(b) == 0 + return FacElem(FlintZZ) + end f = FacElem(b, c) simplify!(f) return f diff --git a/src/NfOrd/Ideal/FacElem.jl b/src/NfOrd/Ideal/FacElem.jl index 225544e603..63d6faa634 100644 --- a/src/NfOrd/Ideal/FacElem.jl +++ b/src/NfOrd/Ideal/FacElem.jl @@ -60,6 +60,9 @@ function abs(A::FacElemQ) B[ak] = v end end + if length(B) == 0 + return FacElem(FlintZZ) + end return FacElem(B) end