Skip to content

Commit 84c086a

Browse files
committed
Use broadcast for special functions
1 parent 01bd59f commit 84c086a

File tree

3 files changed

+6
-33
lines changed

3 files changed

+6
-33
lines changed

src/FastTransforms.jl

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@ module FastTransforms
33

44
using Base, ToeplitzMatrices
55

6-
import Base: *
7-
import Base: view
6+
import Base: *, view, broadcast
87

98
export cjt, icjt, jjt, plan_cjt, plan_icjt
109
export leg2cheb, cheb2leg, leg2chebu, ultra2ultra, jac2jac

src/specialfunctions.jl

Lines changed: 2 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -165,12 +165,11 @@ function Λ(x::Float64,λ₁::Float64,λ₂::Float64)
165165
(x+λ₂)/(x+λ₁)*Λ(x+1.,λ₁,λ₂)
166166
end
167167
end
168-
Λ{T<:Number}(x::AbstractArray{T},λ₁::Number,λ₂::Number) = promote_type(T,typeof(λ₁),typeof(λ₂))[ Λ(x[i],λ₁,λ₂) for i in eachindex(x) ]
169168

170169

171170
Cnλ(n::Integer::Float64) = 2^λ/sqrtpi*Λ(n+λ)
172171
Cnλ(n::Integer::Number) = 2^λ/sqrt(oftype(λ,π))*Λ(n+λ)
173-
function Cnλ{T<:Integer}(n::UnitRange{T}::Number)
172+
function broadcast{T<:Integer}(::typeof(Cnλ),n::UnitRange{T}::Number)
174173
ret = Vector{typeof(λ)}(length(n))
175174
ret[1] = Cnλ(first(n),λ)
176175
for i=2:length(n)
@@ -179,9 +178,6 @@ function Cnλ{T<:Integer}(n::UnitRange{T},λ::Number)
179178
ret
180179
end
181180

182-
Cnλ{T<:Integer}(n::AbstractVector{T}::Number) = [ Cnλ(n[i],λ) for i=1:length(n) ]
183-
Cnλ{T<:Integer}(n::AbstractMatrix{T}::Number) = [ Cnλ(n[i,j],λ) for i=1:size(n,1), j=1:size(n,2) ]
184-
185181
function Cnmλ(n::Integer,m::Integer::Number)
186182
if m == 0
187183
Cnλ(n,λ)
@@ -190,9 +186,6 @@ function Cnmλ(n::Integer,m::Integer,λ::Number)
190186
end
191187
end
192188

193-
Cnmλ{T<:Integer}(n::AbstractVector{T},m::Integer::Number) = [ Cnmλ(n[i],m,λ) for i=1:length(n) ]
194-
195-
196189
function Cnαβ(n::Integer::Number::Number)
197190
if n==0
198191
2^+β+1)*beta+1+1)/π
@@ -213,9 +206,6 @@ function Cnαβ(n::Integer,α::Float64,β::Float64)
213206
end
214207
end
215208

216-
Cnαβ{T<:Integer}(n::AbstractVector{T}::Number::Number) = [ Cnαβ(n[i],α,β) for i=1:length(n) ]
217-
Cnαβ{T<:Integer}(n::AbstractMatrix{T}::Number::Number) = [ Cnαβ(n[i,j],α,β) for i=1:size(n,1), j=1:size(n,2) ]
218-
219209
function Cnmαβ(n::Integer,m::Integer::Number::Number)
220210
if m == 0
221211
Cnαβ(n,α,β)
@@ -224,15 +214,6 @@ function Cnmαβ(n::Integer,m::Integer,α::Number,β::Number)
224214
end
225215
end
226216

227-
Cnmαβ{T<:Integer}(n::AbstractVector{T},m::Integer::Number::Number) = [ Cnmαβ(n[i],m,α,β) for i=1:length(n) ]
228-
Cnmαβ{T<:Integer}(n::AbstractMatrix{T},m::Integer::Number::Number) = [ Cnmαβ(n[i,j],m,α,β) for i=1:size(n,1), j=1:size(n,2) ]
229-
230-
function Cnmαβ{T<:Number}(n::Integer,m::Integer::AbstractArray{T}::AbstractArray{T})
231-
shp = promote_shape(size(α),size(β))
232-
reshape([ Cnmαβ(n,m,α[i],β[i]) for i in eachindex(α,β) ], shp)
233-
end
234-
235-
236217
function absf::Number::Number,m::Int::Number)
237218
ret = zero(θ)
238219
for l=0:m
@@ -241,12 +222,7 @@ function absf(α::Number,β::Number,m::Int,θ::Number)
241222
ret
242223
end
243224

244-
function absf{T<:Number}::AbstractArray{T}::AbstractArray{T},m::Int::Number)
245-
shp = promote_shape(size(α),size(β))
246-
reshape([ absf(α[i],β[i],m,θ) for i in eachindex(α,β) ], shp)
247-
end
248-
249-
function absf{T<:Number}::Number::Number,m::Int::AbstractArray{T,1})
225+
function broadcast{T<:Number}(::typeof(absf),α::Number::Number,m::Int::AbstractArray{T,1})
250226
ret = zero(θ)
251227
cfs = zeros(T,m+1)
252228
for l=0:m
@@ -257,8 +233,6 @@ function absf{T<:Number}(α::Number,β::Number,m::Int,θ::AbstractArray{T,1})
257233
end
258234
ret
259235
end
260-
absf{T<:Number}::Number::Number,m::Int::AbstractArray{T,2}) = [ absf(α,β,m,θ[i,j]) for i=1:size(θ,1), j=1:size(θ,2) ]
261-
absf{T<:Number}::Number::Number,m::Int::AbstractArray{T}) = reshape([ absf(α,β,m,θ[i]) for i in eachindex(θ) ], size(θ))
262236

263237
function compute_absf!{T<:AbstractFloat}(ret::Vector{T},cfs::Matrix{T}::T::T,tempcos::Vector{T},tempsin::Vector{T},tempcosβsinα::Vector{T},m::Int)
264238
@inbounds for i=1:length(ret)

test/runtests.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ using Base.Test
44
println("Testing special functions")
55
n = 0:1000_000
66
λ = 0.123
7-
@time FastTransforms.Cnλ(n,λ);
8-
@time FastTransforms.Cnλ(n,λ);
7+
@time FastTransforms.Cnλ.(n,λ);
8+
@time FastTransforms.Cnλ.(n,λ);
99

1010
x = linspace(0,20,81);
1111
@test norm((FastTransforms.Λ.(x)-FastTransforms.Λ.(big.(x)))./FastTransforms.Λ.(big.(x)),Inf) < 2eps()
@@ -57,7 +57,7 @@ v = zeros(Nr)
5757
Na,Nb = 5,5
5858
V = zeros(Na,Nb)
5959

60-
for N in round.(Int,logspace(1,3,3))
60+
for N in round.([Int],logspace(1,3,3))
6161
println("")
6262
println("N = ",N)
6363
println("")

0 commit comments

Comments
 (0)