Skip to content

Commit 45d6596

Browse files
authored
Add compare_monomials (#258)
* Add compare_monomials * Fix format
1 parent e31f28a commit 45d6596

File tree

3 files changed

+22
-15
lines changed

3 files changed

+22
-15
lines changed

src/default_polynomial.jl

+10-2
Original file line numberDiff line numberDiff line change
@@ -93,19 +93,27 @@ 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))
97+
9698
function join_terms(
9799
terms1::AbstractArray{<:Term},
98100
terms2::AbstractArray{<:Term},
99101
)
100-
return Sequences.merge_sorted(terms1, terms2, compare, combine)
102+
return Sequences.merge_sorted(terms1, terms2, compare_monomials, combine)
101103
end
102104
function join_terms!(
103105
output::AbstractArray{<:Term},
104106
terms1::AbstractArray{<:Term},
105107
terms2::AbstractArray{<:Term},
106108
)
107109
resize!(output, length(terms1) + length(terms2))
108-
return Sequences.merge_sorted!(output, terms1, terms2, compare, combine)
110+
return Sequences.merge_sorted!(
111+
output,
112+
terms1,
113+
terms2,
114+
compare_monomials,
115+
combine,
116+
)
109117
end
110118

111119
function Base.:(+)(p1::Polynomial, p2::Polynomial)

src/deprecate.jl

-2
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@
1919
@deprecate leading_coefficient leading_coefficient
2020
@deprecate removeleadingterm remove_leading_term
2121
@deprecate removemonomials remove_monomials
22-
@deprecate mergesorted merge_sorted
23-
@deprecate mergesorted! merge_sorted!
2422
@deprecate coefficienttype coefficient_type
2523
@deprecate constantterm constant_term
2624
@deprecate zeroterm zero_term

src/sequences.jl

+12-11
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,24 @@ function merge_sorted!(
88
result,
99
v1::AbstractArray,
1010
v2::AbstractArray,
11-
isless,
11+
compare,
1212
combine,
1313
filter = x -> !iszero(x),
1414
)
15-
i = 1
16-
i1 = 1
17-
i2 = 1
18-
while i1 <= length(v1) && i2 <= length(v2)
15+
i = firstindex(result)
16+
i1 = firstindex(v1)
17+
i2 = firstindex(v2)
18+
while i1 <= lastindex(v1) && i2 <= lastindex(v2)
1919
x1 = v1[i1]
2020
x2 = v2[i2]
21-
if isless(x1, x2)
21+
Δ = compare(x1, x2)
22+
if Δ < 0
2223
if filter(x1)
2324
result[i] = x1
2425
i += 1
2526
end
2627
i1 += 1
27-
elseif isless(x2, x1)
28+
elseif Δ > 0
2829
if filter(x2)
2930
result[i] = x2
3031
i += 1
@@ -40,13 +41,13 @@ function merge_sorted!(
4041
i2 += 1
4142
end
4243
end
43-
for j in i1:length(v1)
44+
for j in i1:lastindex(v1)
4445
if filter(v1[j])
4546
result[i] = v1[j]
4647
i += 1
4748
end
4849
end
49-
for j in i2:length(v2)
50+
for j in i2:lastindex(v2)
5051
if filter(v2[j])
5152
result[i] = v2[j]
5253
i += 1
@@ -59,13 +60,13 @@ end
5960
function merge_sorted(
6061
v1::AbstractArray,
6162
v2::AbstractArray,
62-
isless = Base.isless,
63+
compare,
6364
combine = Base.:+,
6465
filter = x -> !iszero(x),
6566
)
6667
T = MA.promote_operation(combine, eltype(v1), eltype(v2))
6768
result = Vector{T}(undef, length(v1) + length(v2))
68-
return merge_sorted!(result, v1, v2, isless, combine, filter)
69+
return merge_sorted!(result, v1, v2, compare, combine, filter)
6970
end
7071

7172
end

0 commit comments

Comments
 (0)