Skip to content

Commit 024763e

Browse files
committed
Revert "Use broadcast for special functions"
This reverts commit 84c086a.
1 parent 3d8bb71 commit 024763e

File tree

3 files changed

+33
-6
lines changed

3 files changed

+33
-6
lines changed

src/FastTransforms.jl

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

44
using Base, ToeplitzMatrices
55

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

89
export cjt, icjt, jjt, plan_cjt, plan_icjt
910
export leg2cheb, cheb2leg, leg2chebu, ultra2ultra, jac2jac

src/specialfunctions.jl

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,11 +165,12 @@ 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) ]
168169

169170

170171
Cnλ(n::Integer::Float64) = 2^λ/sqrtpi*Λ(n+λ)
171172
Cnλ(n::Integer::Number) = 2^λ/sqrt(oftype(λ,π))*Λ(n+λ)
172-
function broadcast{T<:Integer}(::typeof(Cnλ),n::UnitRange{T}::Number)
173+
function Cnλ{T<:Integer}(n::UnitRange{T}::Number)
173174
ret = Vector{typeof(λ)}(length(n))
174175
ret[1] = Cnλ(first(n),λ)
175176
for i=2:length(n)
@@ -178,6 +179,9 @@ function broadcast{T<:Integer}(::typeof(Cnλ),n::UnitRange{T},λ::Number)
178179
ret
179180
end
180181

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+
181185
function Cnmλ(n::Integer,m::Integer::Number)
182186
if m == 0
183187
Cnλ(n,λ)
@@ -186,6 +190,9 @@ function Cnmλ(n::Integer,m::Integer,λ::Number)
186190
end
187191
end
188192

193+
Cnmλ{T<:Integer}(n::AbstractVector{T},m::Integer::Number) = [ Cnmλ(n[i],m,λ) for i=1:length(n) ]
194+
195+
189196
function Cnαβ(n::Integer::Number::Number)
190197
if n==0
191198
2^+β+1)*beta+1+1)/π
@@ -206,6 +213,9 @@ function Cnαβ(n::Integer,α::Float64,β::Float64)
206213
end
207214
end
208215

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+
209219
function Cnmαβ(n::Integer,m::Integer::Number::Number)
210220
if m == 0
211221
Cnαβ(n,α,β)
@@ -214,6 +224,15 @@ function Cnmαβ(n::Integer,m::Integer,α::Number,β::Number)
214224
end
215225
end
216226

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+
217236
function absf::Number::Number,m::Int::Number)
218237
ret = zero(θ)
219238
for l=0:m
@@ -222,7 +241,12 @@ function absf(α::Number,β::Number,m::Int,θ::Number)
222241
ret
223242
end
224243

225-
function broadcast{T<:Number}(::typeof(absf),α::Number::Number,m::Int::AbstractArray{T,1})
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})
226250
ret = zero(θ)
227251
cfs = zeros(T,m+1)
228252
for l=0:m
@@ -233,6 +257,8 @@ function broadcast{T<:Number}(::typeof(absf),α::Number,β::Number,m::Int,θ::Ab
233257
end
234258
ret
235259
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(θ))
236262

237263
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)
238264
@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)