diff --git a/src/Rings/NumberField.jl b/src/Rings/NumberField.jl index 9fae563955d3..e646c15dbf97 100644 --- a/src/Rings/NumberField.jl +++ b/src/Rings/NumberField.jl @@ -327,7 +327,7 @@ end Base.://(a::NfNSGenElem{nf_elem, Generic.MPoly{nf_elem}}, b::nf_elem) = NfNSGenElem(divexact(Hecke.data(a), b), parent(a)) -divexact(a::NfNSGenElem{nf_elem, Generic.MPoly{nf_elem}}, b::nf_elem) = a//b +divexact(a::NfNSGenElem{nf_elem, Generic.MPoly{nf_elem}}, b::nf_elem; check::Bool=true) = a//b +(a::nf_elem, b::NfNSGenElem{nf_elem, Generic.MPoly{nf_elem}}) = b + a @@ -335,7 +335,7 @@ divexact(a::NfNSGenElem{nf_elem, Generic.MPoly{nf_elem}}, b::nf_elem) = a//b Base.://(a::nf_elem, b::NfNSGenElem{nf_elem, Generic.MPoly{nf_elem}}) = a * inv(b) -divexact(a::nf_elem, b::NfNSGenElem{nf_elem, Generic.MPoly{nf_elem}}) = a//b +divexact(a::nf_elem, b::NfNSGenElem{nf_elem, Generic.MPoly{nf_elem}}; check::Bool=true) = a//b # with QQFieldElem +(a::NfNSGenElem{T, S}, b::QQFieldElem) where {S, T} = @@ -347,7 +347,7 @@ divexact(a::nf_elem, b::NfNSGenElem{nf_elem, Generic.MPoly{nf_elem}}) = a//b Base.://(a::NfNSGenElem{T, S}, b::QQFieldElem) where {S, T} = NfNSGenElem(divexact(Hecke.data(a), b), parent(a)) -divexact(a::NfNSGenElem{T, S}, b::QQFieldElem) where {S, T} = a//b +divexact(a::NfNSGenElem{T, S}, b::QQFieldElem; check::Bool=true) where {S, T} = a//b +(a::QQFieldElem, b::NfNSGenElem{T, S}) where {S, T} = b + a @@ -355,7 +355,7 @@ divexact(a::NfNSGenElem{T, S}, b::QQFieldElem) where {S, T} = a//b Base.://(a::QQFieldElem, b::NfNSGenElem{T, S}) where {S, T} = a * inv(b) -divexact(a::QQFieldElem, b::NfNSGenElem{T, S}) where {S, T} = a//b +divexact(a::QQFieldElem, b::NfNSGenElem{T, S}; check::Bool=true) where {S, T} = a//b # with ZZRingElem +(a::NfNSGenElem{T, S}, b::ZZRingElem) where {S, T} = @@ -367,7 +367,7 @@ divexact(a::QQFieldElem, b::NfNSGenElem{T, S}) where {S, T} = a//b Base.://(a::NfNSGenElem{T, S}, b::ZZRingElem) where {S, T} = NfNSGenElem(divexact(Hecke.data(a), b), parent(a)) -divexact(a::NfNSGenElem{T, S}, b::ZZRingElem) where {S, T} = a//b +divexact(a::NfNSGenElem{T, S}, b::ZZRingElem; check::Bool=true) where {S, T} = a//b +(a::ZZRingElem, b::NfNSGenElem{T, S}) where {S, T} = b + a @@ -375,7 +375,7 @@ divexact(a::NfNSGenElem{T, S}, b::ZZRingElem) where {S, T} = a//b Base.://(a::ZZRingElem, b::NfNSGenElem{T, S}) where {S, T} = a * inv(b) -divexact(a::ZZRingElem, b::NfNSGenElem{T, S}) where {S, T} = a//b +divexact(a::ZZRingElem, b::NfNSGenElem{T, S}; check::Bool=true) where {S, T} = a//b # with Integer +(a::NfNSGenElem{T, S}, b::Base.Integer) where {S, T} = @@ -385,9 +385,9 @@ divexact(a::ZZRingElem, b::NfNSGenElem{T, S}) where {S, T} = a//b NfNSGenElem(Hecke.data(a) * b, parent(a)) Base.://(a::NfNSGenElem{nf_elem, Generic.MPoly{nf_elem}}, b::Base.Integer) = - NfNSGenElem(divexact(Hecke.data(a), b), parent(a)) + NfNSGenElem(divexact(Hecke.data(a), b; check=true), parent(a)) -divexact(a::NfNSGenElem{nf_elem, Generic.MPoly{nf_elem}}, b::Base.Integer) = a//b +divexact(a::NfNSGenElem{nf_elem, Generic.MPoly{nf_elem}}, b::Base.Integer; check::Bool=true) = a//b +(a::Base.Integer, b::NfNSGenElem{T, S}) where {S, T} = b + a @@ -395,7 +395,7 @@ divexact(a::NfNSGenElem{nf_elem, Generic.MPoly{nf_elem}}, b::Base.Integer) = a// Base.://(a::Base.Integer, b::NfNSGenElem{T, S}) where {S, T} = a * inv(b) -divexact(a::Base.Integer, b::NfNSGenElem{T, S}) where {S, T} = a//b +divexact(a::Base.Integer, b::NfNSGenElem{T, S}; check::Bool=true) where {S, T} = a//b # with Rational +(a::NfNSGenElem{T, S}, b::Base.Rational{<:Base.Integer}) where {T, S} = @@ -407,7 +407,7 @@ divexact(a::Base.Integer, b::NfNSGenElem{T, S}) where {S, T} = a//b Base.://(a::NfNSGenElem{nf_elem, Generic.MPoly{nf_elem}}, b::Base.Rational{<:Base.Integer}) = NfNSGenElem(divexact(Hecke.data(a), b), parent(a)) -divexact(a::NfNSGenElem{nf_elem, Generic.MPoly{nf_elem}}, b::Base.Rational{<:Base.Integer}) = +divexact(a::NfNSGenElem{nf_elem, Generic.MPoly{nf_elem}}, b::Base.Rational{<:Base.Integer}; check::Bool=true) = a//b +(a::Base.Rational{<:Base.Integer}, b::NfNSGenElem{T, S}) where {S, T} = b + a @@ -416,7 +416,7 @@ divexact(a::NfNSGenElem{nf_elem, Generic.MPoly{nf_elem}}, b::Base.Rational{<:Bas Base.://(a::Base.Rational{<:Base.Integer}, b::NfNSGenElem{T, S}) where {S, T} = a * inv(b) -divexact(a::Base.Rational{<:Base.Integer}, b::NfNSGenElem{T, S}) where {S, T} = +divexact(a::Base.Rational{<:Base.Integer}, b::NfNSGenElem{T, S}; check::Bool=true) where {S, T} = a//b ################################################################################ diff --git a/src/Rings/mpoly-graded.jl b/src/Rings/mpoly-graded.jl index e47bc8c13c0a..1142c4da8d1f 100644 --- a/src/Rings/mpoly-graded.jl +++ b/src/Rings/mpoly-graded.jl @@ -601,11 +601,14 @@ zero(W::MPolyDecRing) = MPolyDecRingElem(zero(forget_decoration(W)), W) # ################################################################################ -for T in [:(+), :(-), :(*), :divexact] +for T in [:(+), :(-), :(*)] @eval ($T)(a::MPolyDecRingElem, b::MPolyDecRingElem) = MPolyDecRingElem($T(forget_decoration(a), forget_decoration(b)), parent(a)) end +divexact(a::MPolyDecRingElem, b::MPolyDecRingElem; check::Bool=true) = MPolyDecRingElem(divexact(forget_decoration(a), forget_decoration(b); check=check), parent(a)) + + ################################################################################ # # Unitary operations @@ -620,11 +623,11 @@ end # ################################################################################ -divexact(a::MPolyDecRingElem, b::RingElem) = MPolyDecRingElem(divexact(forget_decoration(a), b), parent(a)) +divexact(a::MPolyDecRingElem, b::RingElem; check::Bool=true) = MPolyDecRingElem(divexact(forget_decoration(a), b; check=check), parent(a)) -divexact(a::MPolyDecRingElem, b::Integer) = MPolyDecRingElem(divexact(forget_decoration(a), b), parent(a)) +divexact(a::MPolyDecRingElem, b::Integer; check::Bool=true) = MPolyDecRingElem(divexact(forget_decoration(a), b; check=check), parent(a)) -divexact(a::MPolyDecRingElem, b::Rational) = MPolyDecRingElem(divexact(forget_decoration(a), b), parent(a)) +divexact(a::MPolyDecRingElem, b::Rational; check::Bool=true) = MPolyDecRingElem(divexact(forget_decoration(a), b; check=check), parent(a)) for T in [:(-), :(+)] @eval ($T)(a::MPolyDecRingElem, diff --git a/src/Rings/mpolyquo-localizations.jl b/src/Rings/mpolyquo-localizations.jl index 655bcc114fc3..c862808a6afe 100644 --- a/src/Rings/mpolyquo-localizations.jl +++ b/src/Rings/mpolyquo-localizations.jl @@ -822,11 +822,11 @@ function Base.:(/)(a::T, b::T) where {T<:MPolyQuoLocRingElem} return c end -function divexact(a::Oscar.IntegerUnion, b::MPolyQuoLocRingElem) +function divexact(a::Oscar.IntegerUnion, b::MPolyQuoLocRingElem; check::Bool=true) return a/b end -function divexact(a::T, b::T) where {T<:MPolyQuoLocRingElem} +function divexact(a::T, b::T; check::Bool=true) where {T<:MPolyQuoLocRingElem} return a/b end diff --git a/src/TropicalGeometry/semiring.jl b/src/TropicalGeometry/semiring.jl index 29cb2ba9e648..277a0aa3e99f 100644 --- a/src/TropicalGeometry/semiring.jl +++ b/src/TropicalGeometry/semiring.jl @@ -348,7 +348,7 @@ function Base.:(*)(x::TropicalSemiringElem{minOrMax}, y::TropicalSemiringElem{mi return parent(x)(data(x) + data(y)) # otherwise, return their sum end -function divexact(x::TropicalSemiringElem{minOrMax}, y::TropicalSemiringElem{minOrMax}) where {minOrMax<:Union{typeof(min),typeof(max)}} +function divexact(x::TropicalSemiringElem{minOrMax}, y::TropicalSemiringElem{minOrMax}; check::Bool=true) where {minOrMax<:Union{typeof(min),typeof(max)}} @req !iszero(y) "dividing by (tropical) zero" return (iszero(x) ? x : parent(x)(data(x)-data(y))) end