Skip to content

Commit e84a75b

Browse files
committed
Remove unnecessary compare implementations
1 parent 8da2586 commit e84a75b

File tree

4 files changed

+37
-41
lines changed

4 files changed

+37
-41
lines changed

src/comparison.jl

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -308,20 +308,22 @@ ordering(p::AbstractPolynomialLike) = ordering(typeof(p))
308308
# Without `Base.@pure`, TypedPolynomials allocates on Julia v1.6
309309
# with `promote(x * y, x)`
310310
Base.@pure function Base.cmp(
311-
::AbstractMonomialOrdering,
312311
v1::AbstractVariable,
313312
v2::AbstractVariable,
314313
)
315314
return -cmp(name(v1), name(v2))
316315
end
317316

318-
function compare(
317+
function Base.:(==)(m1::AbstractMonomialLike, m2::AbstractMonomialLike)
318+
return iszero(cmp(m1, m2))
319+
end
320+
321+
function Base.cmp(
319322
m1::AbstractMonomial,
320323
m2::AbstractMonomial,
321-
::Type{O},
322-
) where {O<:AbstractMonomialOrdering}
324+
)
323325
s1, s2 = promote_variables(m1, m2)
324-
return cmp(O(), exponents(s1), exponents(s2))
326+
return cmp(ordering(m1)(), exponents(s1), exponents(s2))
325327
end
326328

327329
# Implement this to make coefficients be compared with terms.
@@ -336,22 +338,17 @@ end
336338
_cmp_coefficient(a, b) = 0
337339

338340
function Base.cmp(
339-
ordering::O,
340341
t1::AbstractTermLike,
341342
t2::AbstractTermLike,
342-
) where {O<:AbstractMonomialOrdering}
343-
Δ = cmp(ordering, monomial(t1), monomial(t2))
343+
)
344+
Δ = cmp(monomial(t1), monomial(t2))
344345
if iszero(Δ)
345346
return _cmp_coefficient(coefficient(t1), coefficient(t2))
346347
end
347348
return Δ
348349
end
349350

350-
function Base.cmp(t1::AbstractTermLike, t2::AbstractTermLike)
351-
return cmp(ordering(t1)(), t1, t2)
352-
end
353-
354-
Base.isless(t1::AbstractTermLike, t2::AbstractTermLike) = compare(t1, t2) < 0
351+
Base.isless(t1::AbstractTermLike, t2::AbstractTermLike) = cmp(t1, t2) < 0
355352

356353
_last_lex_index(n, ::Type{LexOrder}) = n
357354
_prev_lex_index(i, ::Type{LexOrder}) = i - 1

src/default_polynomial.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ Base.one(p::Polynomial) = one(typeof(p))
9393
Base.zero(::Type{Polynomial{C,T,A}}) where {C,T,A} = Polynomial{C,T,A}(A())
9494
Base.zero(t::Polynomial) = zero(typeof(t))
9595

96-
compare_monomials(a, b) = compare(monomial(a), monomial(b))
96+
compare_monomials(a, b) = cmp(monomial(a), monomial(b))
9797

9898
function join_terms(
9999
terms1::AbstractArray{<:Term},
@@ -294,7 +294,7 @@ function __polynomial_merge!(
294294
if tp isa Int && j isa Int
295295
tp = get1(tp)
296296
end
297-
compare(monomial(*(monomials(q)[j], monomial.(t)...)), monomial(tp))
297+
cmp(monomial(*(monomials(q)[j], monomial.(t)...)), monomial(tp))
298298
end
299299
end
300300
get2 = let t = t, q = q
@@ -385,7 +385,7 @@ function __polynomial_merge!(
385385
if tp isa Int && j isa Int
386386
tp = get1(tp)
387387
end
388-
compare(monomial(monomial(t) * monomials(q)[j]), monomial(tp))
388+
cmp(monomial(monomial(t) * monomials(q)[j]), monomial(tp))
389389
end
390390
end
391391
get2 = let t = t, q = q
@@ -460,7 +460,7 @@ function __polynomial_merge!(
460460
if t isa Int && j isa Int
461461
t = get1(t)
462462
end
463-
compare(monomials(q)[j], monomial(t))
463+
cmp(monomials(q)[j], monomial(t))
464464
end
465465
end
466466
get2 = let q = q

src/sequences.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ function merge_sorted!(
1818
while i1 <= lastindex(v1) && i2 <= lastindex(v2)
1919
x1 = v1[i1]
2020
x2 = v2[i2]
21-
Δ = compare(x1, x2)
21+
Δ = cmp(x1, x2)
2222
if Δ < 0
2323
if filter(x1)
2424
result[i] = x1

test/commutative/comparison.jl

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -141,28 +141,27 @@
141141
@test p !== nothing
142142
@test p !== Dict{Int,Int}()
143143
end
144-
@testset "compare" begin
145-
lex = LexOrder
146-
grlex = Graded{lex}
147-
rinvlex = Reverse{InverseLexOrder}
148-
grevlex = Graded{rinvlex}
149-
Mod.@polyvar x y z
150-
# [CLO13, p. 58]
151-
@test compare(x * y^2 * z^3, x^3 * y^2, lex) < 0
152-
@test compare(x * y^2 * z^3, x^3 * y^2, grlex) > 0
153-
@test compare(x * y^2 * z^3, x^3 * y^2, rinvlex) < 0
154-
@test compare(x * y^2 * z^3, x^3 * y^2, grevlex) > 0
155-
@test compare(x * y^2 * z^4, x * y * z^5, lex) > 0
156-
@test compare(x * y^2 * z^4, x * y * z^5, grlex) > 0
157-
@test compare(x * y^2 * z^4, x * y * z^5, rinvlex) > 0
158-
@test compare(x * y^2 * z^4, x * y * z^5, grevlex) > 0
159-
# [CLO13, p. 59]
160-
@test compare(x^5 * y * z, x^4 * y * z^2, lex) > 0
161-
@test compare(x^5 * y * z, x^4 * y * z^2, grlex) > 0
162-
@test compare(x^5 * y * z, x^4 * y * z^2, rinvlex) > 0
163-
@test compare(x^5 * y * z, x^4 * y * z^2, grevlex) > 0
164-
# [CLO13] Cox, D., Little, J., & OShea, D.
165-
# *Ideals, varieties, and algorithms: an introduction to computational algebraic geometry and commutative algebra*.
166-
# Springer Science & Business Media, **2013**.
144+
lex = LexOrder
145+
grlex = Graded{lex}
146+
rinvlex = Reverse{InverseLexOrder}
147+
grevlex = Graded{rinvlex}
148+
if Mod == DynamicPolynomials
149+
@testset "compare $M" for M in [
150+
lex,
151+
grlex,
152+
rinvlex,
153+
grevlex,
154+
]
155+
Mod.@polyvar x y z monomial_order = M
156+
# [CLO13, p. 58]
157+
sgn = (M == lex || M == rinvlex) ? -1 : 1
158+
@test sgn * cmp(x * y^2 * z^3, x^3 * y^2) > 0
159+
@test cmp(x * y^2 * z^4, x * y * z^5) > 0
160+
# [CLO13, p. 59]
161+
@test cmp(x^5 * y * z, x^4 * y * z^2) > 0
162+
# [CLO13] Cox, D., Little, J., & OShea, D.
163+
# *Ideals, varieties, and algorithms: an introduction to computational algebraic geometry and commutative algebra*.
164+
# Springer Science & Business Media, **2013**.
165+
end
167166
end
168167
end

0 commit comments

Comments
 (0)