Skip to content

Commit 603d61c

Browse files
authored
Update to MutableArithmetics v0.3 (#181)
* Update to MutableArithmetics v0.3 * Fix * MA released
1 parent bb11e90 commit 603d61c

File tree

5 files changed

+44
-44
lines changed

5 files changed

+44
-44
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ MutableArithmetics = "d8a4904e-b15c-11e9-3269-09a3773c0cb0"
1212
[compat]
1313
DataStructures = "0.17.7, 0.18"
1414
DynamicPolynomials = "0.3.16"
15-
MutableArithmetics = "0.2"
15+
MutableArithmetics = "0.3"
1616
TypedPolynomials = "0.2.9"
1717
julia = "1"
1818

src/division.jl

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,9 @@ function _div(f::APL, g::APL)
5757
while !iszero(rf)
5858
ltf = leadingterm(rf)
5959
qt = _div(ltf, lt)
60-
q = MA.add!(q, qt)
61-
rf = MA.operate!(removeleadingterm, rf)
62-
rf = MA.operate!(MA.sub_mul, rf, qt, rg)
60+
q = MA.add!!(q, qt)
61+
rf = MA.operate!!(removeleadingterm, rf)
62+
rf = MA.operate!!(MA.sub_mul, rf, qt, rg)
6363
end
6464
return q
6565
end
@@ -165,20 +165,20 @@ function Base.divrem(f::APL{T}, g::APL{S}; kwargs...) where {T, S}
165165
while !iszero(rf)
166166
ltf = leadingterm(rf)
167167
if isapproxzero(ltf; kwargs...)
168-
rf = MA.operate!(removeleadingterm, rf)
168+
rf = MA.operate!!(removeleadingterm, rf)
169169
elseif divides(lm, ltf)
170170
qt = _div(ltf, lt)
171-
q = MA.add!(q, qt)
172-
rf = MA.operate!(removeleadingterm, rf)
173-
rf = MA.operate!(MA.sub_mul, rf, qt, rg)
171+
q = MA.add!!(q, qt)
172+
rf = MA.operate!!(removeleadingterm, rf)
173+
rf = MA.operate!!(MA.sub_mul, rf, qt, rg)
174174
elseif lm > monomial(ltf)
175175
# Since the monomials are sorted in decreasing order,
176176
# lm is larger than all of them hence it cannot divide any of them
177-
r = MA.add!(r, rf)
177+
r = MA.add!!(r, rf)
178178
break
179179
else
180-
r = MA.add!(r, ltf)
181-
rf = MA.operate!(removeleadingterm, rf)
180+
r = MA.add!!(r, ltf)
181+
rf = MA.operate!!(removeleadingterm, rf)
182182
end
183183
end
184184
q, r
@@ -197,16 +197,16 @@ function Base.divrem(f::APL{T}, g::AbstractVector{<:APL{S}}; kwargs...) where {T
197197
while !iszero(rf)
198198
ltf = leadingterm(rf)
199199
if isapproxzero(ltf; kwargs...)
200-
rf = MA.operate!(removeleadingterm, rf)
200+
rf = MA.operate!!(removeleadingterm, rf)
201201
continue
202202
end
203203
divisionoccured = false
204204
for i in useful
205205
if divides(lm[i], ltf)
206206
qt = _div(ltf, lt[i])
207-
q[i] = MA.add!(q[i], qt)
208-
rf = MA.operate!(removeleadingterm, rf)
209-
rf = MA.operate!(MA.sub_mul, rf, qt, rg[i])
207+
q[i] = MA.add!!(q[i], qt)
208+
rf = MA.operate!!(removeleadingterm, rf)
209+
rf = MA.operate!!(MA.sub_mul, rf, qt, rg[i])
210210
divisionoccured = true
211211
break
212212
elseif lm[i] > monomial(ltf)
@@ -217,11 +217,11 @@ function Base.divrem(f::APL{T}, g::AbstractVector{<:APL{S}}; kwargs...) where {T
217217
end
218218
if !divisionoccured
219219
if isempty(useful)
220-
r = MA.add!(r, rf)
220+
r = MA.add!!(r, rf)
221221
break
222222
else
223-
r = MA.add!(r, ltf)
224-
rf = MA.operate!(removeleadingterm, rf)
223+
r = MA.add!!(r, ltf)
224+
rf = MA.operate!!(removeleadingterm, rf)
225225
end
226226
end
227227
end

src/operators.jl

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,9 @@ Base.:/(A::AbstractArray, p::APL) = map(f -> f / p, A)
6565

6666
constant_function(::typeof(+)) = plusconstant
6767
constant_function(::typeof(-)) = minusconstant
68-
MA.mutable_operate!(op::Union{typeof(+), typeof(-)}, p::APL, α) = MA.mutable_operate!(constant_function(op), p, α)
69-
MA.mutable_operate_to!(output::AbstractPolynomial, op::typeof(*), α, p::APL) = MA.mutable_operate_to!(output, multconstant, α, p)
70-
MA.mutable_operate_to!(output::AbstractPolynomial, op::typeof(*), p::APL, α) = MA.mutable_operate_to!(output, multconstant, p, α)
68+
MA.operate!(op::Union{typeof(+), typeof(-)}, p::APL, α) = MA.operate!(constant_function(op), p, α)
69+
MA.operate_to!(output::AbstractPolynomial, op::typeof(*), α, p::APL) = MA.operate_to!(output, multconstant, α, p)
70+
MA.operate_to!(output::AbstractPolynomial, op::typeof(*), p::APL, α) = MA.operate_to!(output, multconstant, p, α)
7171

7272
function polynomial_merge!(
7373
n1::Int, n2::Int, get1::Function, get2::Function,
@@ -186,8 +186,8 @@ function polynomial_merge!(
186186
end
187187

188188

189-
#MA.mutable_operate!(op::Union{typeof(+), typeof(-)}, p::AbstractPolynomial, q::AbstractPolynomial) = MA.mutable_operate_to!(p, op, p, q)
190-
MA.mutable_operate!(op::Union{typeof(+), typeof(-)}, p::AbstractPolynomial, q::AbstractPolynomialLike) = MA.mutable_operate!(op, p, polynomial(q))
189+
#MA.operate!(op::Union{typeof(+), typeof(-)}, p::AbstractPolynomial, q::AbstractPolynomial) = MA.operate_to!(p, op, p, q)
190+
MA.operate!(op::Union{typeof(+), typeof(-)}, p::AbstractPolynomial, q::AbstractPolynomialLike) = MA.operate!(op, p, polynomial(q))
191191

192192
function mul_to_terms!(ts::Vector{<:AbstractTerm}, p1::APL, p2::APL)
193193
for t1 in terms(p1)
@@ -218,17 +218,17 @@ Base.:*(p::Union{APL, RationalPoly}) = p
218218
# Need to add polynomial conversion for type stability
219219
plusconstant(p::APL{S}, α::T) where {S, T} = iszero(α) ? polynomial( p, MA.promote_operation(+, S, T)) : p + constantterm(α, p)
220220
plusconstant::S, p::APL{T}) where {S, T} = iszero(α) ? polynomial( p, MA.promote_operation(+, S, T)) : constantterm(α, p) + p
221-
function MA.mutable_operate!(::typeof(plusconstant), p::APL, α)
221+
function MA.operate!(::typeof(plusconstant), p::APL, α)
222222
if !iszero(α)
223-
MA.mutable_operate!(+, p, constantterm(α, p))
223+
MA.operate!(+, p, constantterm(α, p))
224224
end
225225
return p
226226
end
227227
minusconstant(p::APL{S}, α::T) where {S, T} = iszero(α) ? polynomial( p, MA.promote_operation(-, S, T)) : p - constantterm(α, p)
228228
minusconstant::S, p::APL{T}) where {S, T} = iszero(α) ? polynomial(-p, MA.promote_operation(-, S, T)) : constantterm(α, p) - p
229-
function MA.mutable_operate!(::typeof(minusconstant), p::APL, α)
229+
function MA.operate!(::typeof(minusconstant), p::APL, α)
230230
if !iszero(α)
231-
MA.mutable_operate!(-, p, constantterm(α, p))
231+
MA.operate!(-, p, constantterm(α, p))
232232
end
233233
return p
234234
end
@@ -254,20 +254,20 @@ function mapcoefficientsnz_to! end
254254

255255
function _multconstant_to!(output, α, f, p)
256256
if iszero(α)
257-
MA.mutable_operate!(zero, output)
257+
MA.operate!(zero, output)
258258
else
259259
mapcoefficientsnz_to!(output, f, p)
260260
end
261261
end
262-
function MA.mutable_operate_to!(output, ::typeof(multconstant), p::APL, α)
262+
function MA.operate_to!(output, ::typeof(multconstant), p::APL, α)
263263
_multconstant_to!(output, α, β -> β*α, p)
264264
end
265-
function MA.mutable_operate_to!(output, ::typeof(multconstant), α, p::APL)
265+
function MA.operate_to!(output, ::typeof(multconstant), α, p::APL)
266266
_multconstant_to!(output, α, β -> α*β, p)
267267
end
268268

269-
MA.mutable_operate_to!(output::AbstractMonomial, ::typeof(*), m1::AbstractMonomialLike, m2::AbstractMonomialLike) = mapexponents_to!(output, +, m1, m2)
270-
MA.mutable_operate!(::typeof(*), m1::AbstractMonomial, m2::AbstractMonomialLike) = mapexponents!(+, m1, m2)
269+
MA.operate_to!(output::AbstractMonomial, ::typeof(*), m1::AbstractMonomialLike, m2::AbstractMonomialLike) = mapexponents_to!(output, +, m1, m2)
270+
MA.operate!(::typeof(*), m1::AbstractMonomial, m2::AbstractMonomialLike) = mapexponents!(+, m1, m2)
271271
Base.:*(m1::AbstractMonomialLike, m2::AbstractMonomialLike) = mapexponents(+, m1, m2)
272272
#Base.:*(m1::AbstractMonomialLike, m2::AbstractMonomialLike) = *(monomial(m1), monomial(m2))
273273

@@ -354,18 +354,18 @@ Base.vec(vars::Tuple{Vararg{AbstractVariable}}) = [vars...]
354354
# https://github.com/JuliaLang/julia/pull/23332
355355
Base.:^(x::AbstractPolynomialLike, p::Integer) = Base.power_by_squaring(x, p)
356356

357-
function MA.mutable_operate_to!(output::AbstractPolynomial, op::MA.AddSubMul, x, args::Vararg{Any, N}) where N
358-
return MA.mutable_operate_to!(output, MA.add_sub_op(op), x, *(args...))
357+
function MA.operate_to!(output::AbstractPolynomial, op::MA.AddSubMul, x, args::Vararg{Any, N}) where N
358+
return MA.operate_to!(output, MA.add_sub_op(op), x, *(args...))
359359
end
360-
function MA.mutable_operate!(op::MA.AddSubMul, x::AbstractPolynomial, y, z, args::Vararg{Any, N}) where N
361-
return MA.mutable_operate!(MA.add_sub_op(op), x, *(y, z, args...))
360+
function MA.operate!(op::MA.AddSubMul, x::AbstractPolynomial, y, z, args::Vararg{Any, N}) where N
361+
return MA.operate!(MA.add_sub_op(op), x, *(y, z, args...))
362362
end
363363
MA.buffer_for(::MA.AddSubMul, ::Type{<:AbstractPolynomial}, args::Vararg{Type, N}) where {N} = zero(MA.promote_operation(*, args...))
364-
function MA.mutable_buffered_operate_to!(buffer::AbstractPolynomial, output::AbstractPolynomial, op::MA.AddSubMul, x::AbstractPolynomial, y, z, args::Vararg{Any, N}) where N
365-
product = MA.operate_to!(buffer, *, y, z, args...)
366-
return MA.mutable_operate_to!(output, MA.add_sub_op(op), x, product)
364+
function MA.buffered_operate_to!(buffer::AbstractPolynomial, output::AbstractPolynomial, op::MA.AddSubMul, x::AbstractPolynomial, y, z, args::Vararg{Any, N}) where N
365+
product = MA.operate_to!!(buffer, *, y, z, args...)
366+
return MA.operate_to!(output, MA.add_sub_op(op), x, product)
367367
end
368-
function MA.mutable_buffered_operate!(buffer::AbstractPolynomial, op::MA.AddSubMul, x::AbstractPolynomial, y, z, args::Vararg{Any, N}) where N
369-
product = MA.operate_to!(buffer, *, y, z, args...)
370-
return MA.mutable_operate!(MA.add_sub_op(op), x, product)
368+
function MA.buffered_operate!(buffer::AbstractPolynomial, op::MA.AddSubMul, x::AbstractPolynomial, y, z, args::Vararg{Any, N}) where N
369+
product = MA.operate_to!!(buffer, *, y, z, args...)
370+
return MA.operate!(MA.add_sub_op(op), x, product)
371371
end

src/polynomial.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ function uniqterms!(ts::AbstractVector{<: AbstractTerm})
106106
for j in Iterators.drop(eachindex(ts), 1)
107107
if !iszero(ts[j])
108108
if monomial(ts[i]) == monomial(ts[j])
109-
ts[i] = term(MA.add!(coefficient(ts[i]), coefficient(ts[j])), monomial(ts[i]))
109+
ts[i] = term(MA.add!!(coefficient(ts[i]), coefficient(ts[j])), monomial(ts[i]))
110110
else
111111
if !iszero(ts[i])
112112
i += 1

test/polynomial.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ const MP = MultivariatePolynomials
179179
@testset "$f is a mutable copy, see issue DynamicPolynomials#62" for f in [zero, one]
180180
p = 2x + 1
181181
q = f(p)
182-
q = MA.add!(q, 2y)
182+
q = MA.add!!(q, 2y)
183183
@test p == 2x + 1
184184
end
185185
end

0 commit comments

Comments
 (0)