Skip to content

Commit

Permalink
Add missing 'check' argument to many divexact methods (oscar-system#3126
Browse files Browse the repository at this point in the history
)

We need this in order to write generic code
  • Loading branch information
fingolfin authored Dec 21, 2023
1 parent 30ee7e0 commit a53ac4d
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 18 deletions.
22 changes: 11 additions & 11 deletions src/Rings/NumberField.jl
Original file line number Diff line number Diff line change
Expand Up @@ -327,15 +327,15 @@ 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

*(a::nf_elem, b::NfNSGenElem{nf_elem, Generic.MPoly{nf_elem}}) = b * a

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} =
Expand All @@ -347,15 +347,15 @@ 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

*(a::QQFieldElem, b::NfNSGenElem{T, S}) where {S, T} = b * a

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} =
Expand All @@ -367,15 +367,15 @@ 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

*(a::ZZRingElem, b::NfNSGenElem{T, S}) where {S, T} = b * a

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} =
Expand All @@ -385,17 +385,17 @@ 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

*(a::Base.Integer, b::NfNSGenElem{T, S}) where {S, T} = b * 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} =
Expand All @@ -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
Expand All @@ -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

################################################################################
Expand Down
11 changes: 7 additions & 4 deletions src/Rings/mpoly-graded.jl
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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,
Expand Down
4 changes: 2 additions & 2 deletions src/Rings/mpolyquo-localizations.jl
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
2 changes: 1 addition & 1 deletion src/TropicalGeometry/semiring.jl
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit a53ac4d

Please sign in to comment.