Skip to content

Commit 1e290d0

Browse files
authored
Merge pull request #22 from JuliaAlgebra/bl/stopbaseimport
stop importing base methods
2 parents 866ab83 + b64a99a commit 1e290d0

File tree

5 files changed

+32
-36
lines changed

5 files changed

+32
-36
lines changed

src/DynamicPolynomials.jl

+2-4
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ __precompile__()
22

33
module DynamicPolynomials
44

5-
import Base: length, getindex, vect, isless, isempty, start, done, next, zero, one, *, +, -
6-
75
using Compat
86

97
using MultivariatePolynomials
@@ -13,8 +11,8 @@ using Nullables
1311

1412
#const PolyType{C} = Union{DMonomialLike{C}, RationalPoly{C}}
1513
#iscomm(::PolyType{C}) where {C} = C
16-
#zero(p::PolyType{C}) where {C} = zero(typeof(p))
17-
#one(p::PolyType{C}) where {C} = one(typeof(p))
14+
#Base.zero(p::PolyType{C}) where {C} = zero(typeof(p))
15+
#Base.one(p::PolyType{C}) where {C} = one(typeof(p))
1816

1917
include("var.jl")
2018
include("mono.jl")

src/cmult.jl

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Product between PolyVar and Monomial -> Monomial
2-
function (*)(x::PolyVar{true}, y::PolyVar{true})
2+
function Base.:(*)(x::PolyVar{true}, y::PolyVar{true})
33
if x === y
44
Monomial{true}([x], [2])
55
else
@@ -14,12 +14,12 @@ function multiplyvar(v::Vector{PolyVar{true}}, x::PolyVar{true})
1414
insertvar(v, x, (i == nothing || i == 0) ? length(v)+1 : i)
1515
end
1616
end
17-
function (*)(x::PolyVar{true}, y::Monomial{true})
17+
function Base.:(*)(x::PolyVar{true}, y::Monomial{true})
1818
w, updatez = multiplyvar(y.vars, x)
1919
Monomial{true}(w, updatez(y.z))
2020
end
21-
(*)(y::MonomialVector{true}, x::PolyVar{true}) = x * y
22-
function (*)(x::PolyVar{true}, y::MonomialVector{true})
21+
Base.:(*)(y::MonomialVector{true}, x::PolyVar{true}) = x * y
22+
function Base.:(*)(x::PolyVar{true}, y::MonomialVector{true})
2323
w, updatez = multiplyvar(y.vars, x)
2424
MonomialVector{true}(w, updatez.(y.Z))
2525
end
@@ -57,9 +57,9 @@ function MP.mapexponents(f, x::Monomial{true}, y::Monomial{true})
5757
w, updatez = multdivmono(x.vars, y, f)
5858
Monomial{true}(w, updatez(x.z))
5959
end
60-
function (*)(x::Monomial{true}, y::MonomialVector{true})
60+
function Base.:(*)(x::Monomial{true}, y::MonomialVector{true})
6161
w, updatez = multdivmono(y.vars, x, +)
6262
MonomialVector{true}(w, updatez.(y.Z))
6363
end
64-
(*)(y::MonomialVector{true}, x::Monomial{true}) = x * y
65-
(*)(x::Monomial{true}, y::PolyVar{true}) = y * x
64+
Base.:(*)(y::MonomialVector{true}, x::Monomial{true}) = x * y
65+
Base.:(*)(x::Monomial{true}, y::PolyVar{true}) = y * x

src/mult.jl

+6-6
Original file line numberDiff line numberDiff line change
@@ -33,16 +33,16 @@ MP.multconstant(α, x::Monomial) = Term(α, x)
3333
MP.mapcoefficientsnz(f::Function, p::Polynomial) = Polynomial(f.(p.a), p.x)
3434

3535
# I do not want to cast x to TermContainer because that would force the promotion of eltype(q) with Int
36-
function *(x::DMonomialLike, p::Polynomial)
36+
function Base.:(*)(x::DMonomialLike, p::Polynomial)
3737
# /!\ No copy of a is done
3838
Polynomial(p.a, x*p.x)
3939
end
40-
function *(x::DMonomialLike{false}, p::Polynomial)
40+
function Base.:(*)(x::DMonomialLike{false}, p::Polynomial)
4141
# /!\ No copy of a is done
4242
# Order may change, e.g. y * (x + y) = y^2 + yx
4343
Polynomial(monovec(p.a, [x*m for m in p.x])...)
4444
end
45-
function *(p::Polynomial, x::DMonomialLike)
45+
function Base.:(*)(p::Polynomial, x::DMonomialLike)
4646
# /!\ No copy of a is done
4747
Polynomial(p.a, p.x*x)
4848
end
@@ -64,10 +64,10 @@ function _term_poly_mult(t::Term{C, S}, p::Polynomial{C, T}, op::Function) where
6464
Polynomial(op.(t.α, p.a), MonomialVector(allvars, Z))
6565
end
6666
end
67-
*(p::Polynomial, t::Term) = _term_poly_mult(t, p, (α, β) -> β * α)
68-
*(t::Term, p::Polynomial) = _term_poly_mult(t, p, *)
67+
Base.:(*)(p::Polynomial, t::Term) = _term_poly_mult(t, p, (α, β) -> β * α)
68+
Base.:(*)(t::Term, p::Polynomial) = _term_poly_mult(t, p, *)
6969
_sumprod(a, b) = a * b + a * b
70-
function *(p::Polynomial{C, S}, q::Polynomial{C, T}) where {C, S, T}
70+
function Base.:(*)(p::Polynomial{C, S}, q::Polynomial{C, T}) where {C, S, T}
7171
U = Base.promote_op(_sumprod, S, T)
7272
if iszero(p) || iszero(q)
7373
zero(Polynomial{C, U})

src/ncmult.jl

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
function (*)(x::PolyVar{false}, y::PolyVar{false})
1+
function Base.:(*)(x::PolyVar{false}, y::PolyVar{false})
22
if x === y
33
Monomial{false}([x], [2])
44
else
@@ -85,16 +85,16 @@ function multiplyvar(x::PolyVar{false}, v::Vector{PolyVar{false}}, z::Vector{Int
8585
end
8686
end
8787
end
88-
function (*)(x::PolyVar{false}, y::Monomial{false})
88+
function Base.:(*)(x::PolyVar{false}, y::Monomial{false})
8989
w, updatez = multiplyvar(x, y.vars, y.z)
9090
Monomial{false}(w, updatez(y.z))
9191
end
92-
function (*)(y::Monomial{false}, x::PolyVar{false})
92+
function Base.:(*)(y::Monomial{false}, x::PolyVar{false})
9393
w, updatez = multiplyvar(y.vars, y.z, x)
9494
Monomial{false}(w, updatez(y.z))
9595
end
9696

97-
function (*)(x::Monomial{false}, y::Monomial{false})
97+
function Base.:(*)(x::Monomial{false}, y::Monomial{false})
9898
i = findlast(z -> z > 0, x.z)
9999
if i == nothing || i == 0
100100
return y
@@ -113,10 +113,10 @@ function (*)(x::Monomial{false}, y::Monomial{false})
113113
return Monomial{false}(w, z)
114114
end
115115

116-
function (*)(y::MonomialVector{false}, x::DMonomialLike{false})
116+
function Base.:(*)(y::MonomialVector{false}, x::DMonomialLike{false})
117117
MonomialVector{false}([yi * x for yi in y])
118118
end
119-
function (*)(x::DMonomialLike{false}, y::MonomialVector{false})
119+
function Base.:(*)(x::DMonomialLike{false}, y::MonomialVector{false})
120120
# The order may change
121121
# Example: y * [x^2, y^2] == [y^3, yx^2]
122122
MonomialVector{false}([x * yi for yi in y])

src/operators.jl

+11-13
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,19 @@
1-
import Base.(^), Base.(+)
2-
31
# In Base/intfuncs.jl, x^p returns zero(x) when p == 0
42
# Since one(PolyVar) and one(Monomial) do not return
53
# a PolyVar and a Monomial, this results in type instability
64
# Defining the specific methods solve this problem and also make
75
# them a lot faster
8-
^(x::PolyVar{C}, i::Int) where {C} = Monomial{C}([x], [i])
9-
^(x::Monomial{true}, i::Int) = Monomial{true}(x.vars, i*x.z)
6+
Base.:(^)(x::PolyVar{C}, i::Int) where {C} = Monomial{C}([x], [i])
7+
Base.:(^)(x::Monomial{true}, i::Int) = Monomial{true}(x.vars, i*x.z)
108

119
myminivect(x::T, y::T) where {T} = [x, y]
1210
function myminivect(x::S, y::T) where {S,T}
1311
U = promote_type(S, T)
1412
[U(x), U(y)]
1513
end
1614

17-
(+)(x::DMonomialLike, y::DMonomialLike) = Term(x) + Term(y)
18-
(-)(x::DMonomialLike, y::DMonomialLike) = Term(x) - Term(y)
15+
Base.:(+)(x::DMonomialLike, y::DMonomialLike) = Term(x) + Term(y)
16+
Base.:(-)(x::DMonomialLike, y::DMonomialLike) = Term(x) - Term(y)
1917

2018
_getindex(p::Polynomial, i) = p[i]
2119
_getindex(t::Term, i) = t
@@ -55,14 +53,14 @@ function plusorminus(p::TermPoly{C, S}, q::TermPoly{C, T}, op) where {C, S, T}
5553
end
5654

5755

58-
(+)(x::TermPoly{C}, y::TermPoly{C}) where C = plusorminus(x, y, +)
59-
(-)(x::TermPoly{C}, y::TermPoly{C}) where C = plusorminus(x, y, -)
60-
(+)(x::TermPoly{C, T}, y::Union{Monomial,PolyVar}) where {C, T} = x + Term{C, T}(y)
61-
(+)(x::Union{Monomial,PolyVar}, y::TermPoly{C, T}) where {C, T} = Term{C, T}(x) + y
56+
Base.:(+)(x::TermPoly{C}, y::TermPoly{C}) where C = plusorminus(x, y, +)
57+
Base.:(-)(x::TermPoly{C}, y::TermPoly{C}) where C = plusorminus(x, y, -)
58+
Base.:(+)(x::TermPoly{C, T}, y::Union{Monomial,PolyVar}) where {C, T} = x + Term{C, T}(y)
59+
Base.:(+)(x::Union{Monomial,PolyVar}, y::TermPoly{C, T}) where {C, T} = Term{C, T}(x) + y
6260

63-
(-)(x::TermPoly{T}, y::DMonomialLike) where T = x - Term{T}(y)
64-
(-)(x::DMonomialLike, y::TermPoly{T}) where T = Term{T}(x) - y
61+
Base.:(-)(x::TermPoly{T}, y::DMonomialLike) where T = x - Term{T}(y)
62+
Base.:(-)(x::DMonomialLike, y::TermPoly{T}) where T = Term{T}(x) - y
6563

66-
(-)(p::Polynomial) = Polynomial(-p.a, p.x)
64+
Base.:(-)(p::Polynomial) = Polynomial(-p.a, p.x)
6765

6866
include("mult.jl")

0 commit comments

Comments
 (0)