Skip to content

Commit 9a1a8f1

Browse files
authored
Merge pull request #76 from aytekinar/71-cosmetic-changes
Cosmetic changes
2 parents 6bb8e2e + c7bb45d commit 9a1a8f1

File tree

2 files changed

+32
-40
lines changed

2 files changed

+32
-40
lines changed

src/Polynomials.jl

Lines changed: 28 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,13 @@ export Pade, padeval
1414

1515
import Base: length, endof, getindex, setindex!, copy, zero, one, convert, norm, gcd
1616
import Base: show, print, *, /, //, -, +, ==, divrem, div, rem, eltype, .*, .-, .+
17-
import Base: promote_rule, truncate, chop
18-
if VERSION >= v"0.4"
19-
import Base.call
20-
end
17+
import Base: promote_rule, truncate, chop, call, conj, ctranspose, dot, hash
2118

2219
eps{T}(::Type{T}) = zero(T)
2320
eps{F<:AbstractFloat}(x::Type{F}) = Base.eps(F)
2421
eps{T}(x::Type{Complex{T}}) = eps(T)
2522

23+
typealias SymbolLike Union{AbstractString,Char,Symbol}
2624

2725
"""
2826
@@ -60,22 +58,22 @@ p + q # ERROR: Polynomials must have same variable.
6058
```
6159
6260
"""
63-
immutable Poly{T<:Number}
64-
a::Vector{T}
65-
var::Symbol
66-
function Poly(a::Vector{T}, var)
67-
# if a == [] we replace it with a = [0]
68-
if length(a) == 0
69-
return new(zeros(T,1), @compat Symbol(var))
70-
else
71-
# determine the last nonzero element and truncate a accordingly
72-
a_last = max(1,findlast(x->x!=zero(T), a))
73-
new(a[1:a_last], @compat Symbol(var))
74-
end
61+
immutable Poly{T}
62+
a::Vector{T}
63+
var::Symbol
64+
@compat function (::Type{Poly}){T<:Number}(a::Vector{T}, var::SymbolLike = :x)
65+
# if a == [] we replace it with a = [0]
66+
if length(a) == 0
67+
return new{T}(zeros(T,1), @compat Symbol(var))
68+
else
69+
# determine the last nonzero element and truncate a accordingly
70+
a_last = max(1,findlast(x->x!=zero(T), a))
71+
new{T}(a[1:a_last], @compat Symbol(var))
7572
end
73+
end
7674
end
7775

78-
@compat Poly{T<:Number}(a::Vector{T}, var::Union{AbstractString,Symbol,Char}=:x) = Poly{T}(a, var)
76+
Poly(n::Number, var::SymbolLike = :x) = Poly([n], var)
7977

8078
# create a Poly object from its roots
8179
"""
@@ -90,7 +88,7 @@ Example:
9088
poly([1,2,3]) # Poly(-6 + 11x - 6x^2 + x^3)
9189
```
9290
"""
93-
function poly{T}(r::AbstractVector{T}, var=:x)
91+
function poly{T}(r::AbstractVector{T}, var::SymbolLike=:x)
9492
n = length(r)
9593
c = zeros(T, n+1)
9694
c[1] = one(T)
@@ -101,9 +99,7 @@ function poly{T}(r::AbstractVector{T}, var=:x)
10199
end
102100
return Poly(reverse(c), var)
103101
end
104-
poly(A::Matrix, var=:x) = poly(eigvals(A), var)
105-
poly(A::Matrix, var::AbstractString) = poly(eigvals(A), @compat Symbol(var))
106-
poly(A::Matrix, var::Char) = poly(eig(A)[1], @compat Symbol(var))
102+
poly(A::Matrix, var::SymbolLike=:x) = poly(eigvals(A), var)
107103

108104

109105
include("show.jl") # display polynomials.
@@ -148,9 +144,9 @@ Return the indeterminate of a polynomial, `x`.
148144
* `variable([var::Symbol])`: return polynomial 1x over `Float64`.
149145
150146
"""
151-
variable{T<:Number}(::Type{T}, var=:x) = Poly([zero(T), one(T)], var)
147+
variable{T<:Number}(::Type{T}, var::SymbolLike=:x) = Poly([zero(T), one(T)], var)
152148
variable{T}(p::Poly{T}) = variable(T, p.var)
153-
variable(var::Symbol=:x) = variable(Float64, var)
149+
variable(var::SymbolLike=:x) = variable(Float64, var)
154150

155151
"""
156152
@@ -206,7 +202,7 @@ norm(q::Poly, args...) = norm(coeffs(q), args...)
206202
* `conj(p::Poly`): return conjugate of polynomial `p`. (Polynomial with conjugate of each coefficient.)
207203
208204
"""
209-
Base.conj{T<:Complex}(p::Poly{T}) = Poly(conj(coeffs(p)))
205+
conj{T<:Complex}(p::Poly{T}) = Poly(conj(coeffs(p)))
210206

211207
"""
212208
@@ -228,21 +224,21 @@ function setindex!(p::Poly, vs, idx::AbstractArray)
228224
[setindex!(p, v, i) for (i,v) in zip(idx, vs)]
229225
p
230226
end
231-
Base.eachindex{T}(p::Poly{T}) = 0:(length(p)-1)
227+
eachindex{T}(p::Poly{T}) = 0:(length(p)-1)
228+
232229

233-
234230
copy(p::Poly) = Poly(copy(p.a), p.var)
235231

236-
zero{T}(p::Poly{T}) = Poly([zero(T)], p.var)
232+
zero{T}(p::Poly{T}) = Poly(T[], p.var)
237233
zero{T}(::Type{Poly{T}}) = Poly(T[])
238234
one{T}(p::Poly{T}) = Poly([one(T)], p.var)
239235
one{T}(::Type{Poly{T}}) = Poly([one(T)])
240236

241237
## Overload arithmetic operators for polynomial operations between polynomials and scalars
242238
*{T<:Number,S}(c::T, p::Poly{S}) = Poly(c * p.a, p.var)
243239
*{T<:Number,S}(p::Poly{S}, c::T) = Poly(p.a * c, p.var)
244-
Base.dot{T<:Number,S}(p::Poly{S}, c::T) = p * c
245-
Base.dot{T<:Number,S}(c::T, p::Poly{S}) = c * p
240+
dot{T<:Number,S}(p::Poly{S}, c::T) = p * c
241+
dot{T<:Number,S}(c::T, p::Poly{S}) = c * p
246242
.*{T<:Number,S}(c::T, p::Poly{S}) = Poly(c * p.a, p.var)
247243
.*{T<:Number,S}(p::Poly{S}, c::T) = Poly(p.a * c, p.var)
248244
/(p::Poly, c::Number) = Poly(p.a / c, p.var)
@@ -348,7 +344,7 @@ function ==(p1::Poly, p2::Poly)
348344
end
349345
end
350346

351-
Base.hash(f::Poly, h::UInt) = hash(f.var, hash(f.a, h))
347+
hash(f::Poly, h::UInt) = hash(f.var, hash(f.a, h))
352348

353349
"""
354350
* `polyval(p::Poly, x::Number)`: Evaluate the polynomial `p` at `x` using Horner's method.
@@ -382,9 +378,7 @@ end
382378

383379
polyval(p::Poly, v::AbstractVector) = map(x->polyval(p, x), v)
384380

385-
if VERSION >= v"0.4"
386-
@compat (p::Poly)(x) = polyval(p, x)
387-
end
381+
@compat (p::Poly)(x) = polyval(p, x)
388382

389383
"""
390384
@@ -437,7 +431,7 @@ function polyder{T}(p::Poly{T}, order::Int=1)
437431
return Poly(a2, p.var)
438432
end
439433
end
440-
Base.ctranspose{T}(p::Poly{T}) = polyder(p)
434+
ctranspose{T}(p::Poly{T}) = polyder(p)
441435

442436
polyint{T}(a::Array{Poly{T},1}, k::Number = 0) = [ polyint(p,k) for p in a ]
443437
polyder{T}(a::Array{Poly{T},1}, order::Int = 1) = [ polyder(p,order) for p in a ]

test/runtests.jl

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,8 @@ sprint(show, pNULL)
5252
@test polyder(p3) == Poly([2,2])
5353
@test polyder(p1) == polyder(p0) == polyder(pNULL) == pNULL
5454

55-
if VERSION >= v"0.4"
56-
@test pN(-.125) == 276.9609375
57-
@test pN([0.1, 0.2, 0.3]) == polyval(pN, [0.1, 0.2, 0.3])
58-
end
55+
@test pN(-.125) == 276.9609375
56+
@test pN([0.1, 0.2, 0.3]) == polyval(pN, [0.1, 0.2, 0.3])
5957

6058
@test poly([-1,-1]) == p3
6159
@test roots(p0)==roots(p1)==roots(pNULL)==[]
@@ -173,7 +171,7 @@ q = [3, p1]
173171
psum = p+3
174172
pprod = p*3
175173
pmin = p-3
176-
@test isa(psum, Vector{Poly{Float64}})
174+
@test isa(psum, Vector{Poly{Float64}})
177175
@test isa(pprod,Vector{Poly{Float64}})
178176
@test isa(pmin, Vector{Poly{Float64}})
179177

@@ -245,7 +243,7 @@ r = Poly([1.0, 2, 3])
245243
@test string_eval_poly(p, 5) == p(5)
246244
@test string_eval_poly(q, 5) == q(5)
247245
@test string_eval_poly(r, 5) == r(5)
248-
246+
249247
## check hashing
250248
p = poly([1,2,3])
251249
q = poly([1,2,3])

0 commit comments

Comments
 (0)