Skip to content

Commit ae31986

Browse files
remove ArrayLayouts (#177)
cuts down the load time by about 1/3 -- 1/2. The calling sequences were probably dangerous too since an AbstractVector with AbstractColumnMajor layout could be conceived for which we don't point to the data.
1 parent 3bd5a9a commit ae31986

File tree

4 files changed

+15
-19
lines changed

4 files changed

+15
-19
lines changed

Project.toml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ version = "0.14.1"
44

55
[deps]
66
AbstractFFTs = "621f4979-c628-5d54-868e-fcf4e3e8185c"
7-
ArrayLayouts = "4c555306-a7a7-4459-81d9-ec55ddd5c99a"
87
DSP = "717857b8-e6f2-59f4-9121-6e50c889abd2"
98
FFTW = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341"
109
FastGaussQuadrature = "442a2c76-b920-505d-bb47-c5924d526838"
@@ -19,7 +18,6 @@ ToeplitzMatrices = "c751599d-da0a-543b-9d20-d0a503d91d24"
1918

2019
[compat]
2120
AbstractFFTs = "1.0"
22-
ArrayLayouts = "0.4, 0.5, 0.6, 0.7, 0.8"
2321
DSP = "0.6, 0.7"
2422
FFTW = "1"
2523
FastGaussQuadrature = "0.4"

src/FastTransforms.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module FastTransforms
22

3-
using ArrayLayouts, FastGaussQuadrature, FillArrays, LinearAlgebra,
3+
using FastGaussQuadrature, FillArrays, LinearAlgebra,
44
Reexport, SpecialFunctions, ToeplitzMatrices
55

66
import DSP

src/clenshaw.jl

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -164,9 +164,7 @@ clenshaw!(c::AbstractVector, x::AbstractVector) = clenshaw!(c, x, x)
164164
evaluates the first-kind Chebyshev (T) expansion with coefficients `c` at points `x`,
165165
overwriting `f` with the results.
166166
"""
167-
clenshaw!(c::AbstractVector, x::AbstractVector, f::AbstractVector) = _clenshaw!(MemoryLayout(c), MemoryLayout(x), MemoryLayout(f), c, x, f)
168-
169-
function _clenshaw!(_, _, _, c::AbstractVector, x::AbstractVector, f::AbstractVector)
167+
function clenshaw!(c::AbstractVector, x::AbstractVector, f::AbstractVector)
170168
f .= clenshaw.(Ref(c), x)
171169
end
172170

@@ -212,4 +210,4 @@ end
212210

213211
clenshaw(c::AbstractVector, x::AbstractVector) = clenshaw!(c, copy(x))
214212
clenshaw(c::AbstractMatrix, x::Number) = clenshaw!(c, x, Vector{promote_type(eltype(c),typeof(x))}(undef, size(c,2)))
215-
clenshaw(c::AbstractMatrix, x::AbstractVector) = clenshaw!(c, x, Matrix{promote_type(eltype(c),eltype(x))}(undef, size(x,1), size(c,2)))
213+
clenshaw(c::AbstractMatrix, x::AbstractVector) = clenshaw!(c, x, Matrix{promote_type(eltype(c),eltype(x))}(undef, size(x,1), size(c,2)))

src/libfasttransforms.jl

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -49,15 +49,15 @@ function renew!(x::Array{BigFloat})
4949
return x
5050
end
5151

52-
function horner!(c::Vector{Float64}, x::Vector{Float64}, f::Vector{Float64})
52+
function horner!(c::StridedVector{Float64}, x::Vector{Float64}, f::Vector{Float64})
5353
@assert length(x) == length(f)
54-
ccall((:ft_horner, libfasttransforms), Cvoid, (Cint, Ptr{Float64}, Cint, Cint, Ptr{Float64}, Ptr{Float64}), length(c), c, 1, length(x), x, f)
54+
ccall((:ft_horner, libfasttransforms), Cvoid, (Cint, Ptr{Float64}, Cint, Cint, Ptr{Float64}, Ptr{Float64}), length(c), c, stride(c, 1), length(x), x, f)
5555
f
5656
end
5757

58-
function horner!(c::Vector{Float32}, x::Vector{Float32}, f::Vector{Float32})
58+
function horner!(c::StridedVector{Float32}, x::Vector{Float32}, f::Vector{Float32})
5959
@assert length(x) == length(f)
60-
ccall((:ft_hornerf, libfasttransforms), Cvoid, (Cint, Ptr{Float32}, Cint, Cint, Ptr{Float32}, Ptr{Float32}), length(c), c, 1, length(x), x, f)
60+
ccall((:ft_hornerf, libfasttransforms), Cvoid, (Cint, Ptr{Float32}, Cint, Cint, Ptr{Float32}, Ptr{Float32}), length(c), c, stride(c, 1), length(x), x, f)
6161
f
6262
end
6363

@@ -75,31 +75,31 @@ function check_clenshaw_points(x, f)
7575
length(x) == length(f) || throw(ArgumentError("Dimensions must match"))
7676
end
7777

78-
function _clenshaw!(::AbstractStridedLayout, ::AbstractColumnMajor, ::AbstractColumnMajor, c::AbstractVector{Float64}, x::AbstractVector{Float64}, f::AbstractVector{Float64})
78+
function clenshaw!(c::StridedVector{Float64}, x::Vector{Float64}, f::Vector{Float64})
7979
@boundscheck check_clenshaw_points(x, f)
80-
ccall((:ft_clenshaw, libfasttransforms), Cvoid, (Cint, Ptr{Float64}, Cint, Cint, Ptr{Float64}, Ptr{Float64}), length(c), c, stride(c,1), length(x), x, f)
80+
ccall((:ft_clenshaw, libfasttransforms), Cvoid, (Cint, Ptr{Float64}, Cint, Cint, Ptr{Float64}, Ptr{Float64}), length(c), c, stride(c, 1), length(x), x, f)
8181
f
8282
end
8383

84-
function _clenshaw!(::AbstractStridedLayout, ::AbstractColumnMajor, ::AbstractColumnMajor, c::AbstractVector{Float32}, x::AbstractVector{Float32}, f::AbstractVector{Float32})
84+
function clenshaw!(c::StridedVector{Float32}, x::Vector{Float32}, f::Vector{Float32})
8585
@boundscheck check_clenshaw_points(x, f)
86-
ccall((:ft_clenshawf, libfasttransforms), Cvoid, (Cint, Ptr{Float32}, Cint, Cint, Ptr{Float32}, Ptr{Float32}), length(c), c, stride(c,1), length(x), x, f)
86+
ccall((:ft_clenshawf, libfasttransforms), Cvoid, (Cint, Ptr{Float32}, Cint, Cint, Ptr{Float32}, Ptr{Float32}), length(c), c, stride(c, 1), length(x), x, f)
8787
f
8888
end
8989

90-
function clenshaw!(c::Vector{Float64}, A::Vector{Float64}, B::Vector{Float64}, C::Vector{Float64}, x::Vector{Float64}, ϕ₀::Vector{Float64}, f::Vector{Float64})
90+
function clenshaw!(c::StridedVector{Float64}, A::Vector{Float64}, B::Vector{Float64}, C::Vector{Float64}, x::Vector{Float64}, ϕ₀::Vector{Float64}, f::Vector{Float64})
9191
N = length(c)
9292
@boundscheck check_clenshaw_recurrences(N, A, B, C)
9393
@boundscheck check_clenshaw_points(x, ϕ₀, f)
94-
ccall((:ft_orthogonal_polynomial_clenshaw, libfasttransforms), Cvoid, (Cint, Ptr{Float64}, Cint, Ptr{Float64}, Ptr{Float64}, Ptr{Float64}, Cint, Ptr{Float64}, Ptr{Float64}, Ptr{Float64}), N, c, 1, A, B, C, length(x), x, ϕ₀, f)
94+
ccall((:ft_orthogonal_polynomial_clenshaw, libfasttransforms), Cvoid, (Cint, Ptr{Float64}, Cint, Ptr{Float64}, Ptr{Float64}, Ptr{Float64}, Cint, Ptr{Float64}, Ptr{Float64}, Ptr{Float64}), N, c, stride(c, 1), A, B, C, length(x), x, ϕ₀, f)
9595
f
9696
end
9797

98-
function clenshaw!(c::Vector{Float32}, A::Vector{Float32}, B::Vector{Float32}, C::Vector{Float32}, x::Vector{Float32}, ϕ₀::Vector{Float32}, f::Vector{Float32})
98+
function clenshaw!(c::StridedVector{Float32}, A::Vector{Float32}, B::Vector{Float32}, C::Vector{Float32}, x::Vector{Float32}, ϕ₀::Vector{Float32}, f::Vector{Float32})
9999
N = length(c)
100100
@boundscheck check_clenshaw_recurrences(N, A, B, C)
101101
@boundscheck check_clenshaw_points(x, ϕ₀, f)
102-
ccall((:ft_orthogonal_polynomial_clenshawf, libfasttransforms), Cvoid, (Cint, Ptr{Float32}, Cint, Ptr{Float32}, Ptr{Float32}, Ptr{Float32}, Cint, Ptr{Float32}, Ptr{Float32}, Ptr{Float32}), N, c, 1, A, B, C, length(x), x, ϕ₀, f)
102+
ccall((:ft_orthogonal_polynomial_clenshawf, libfasttransforms), Cvoid, (Cint, Ptr{Float32}, Cint, Ptr{Float32}, Ptr{Float32}, Ptr{Float32}, Cint, Ptr{Float32}, Ptr{Float32}, Ptr{Float32}), N, c, stride(c, 1), A, B, C, length(x), x, ϕ₀, f)
103103
f
104104
end
105105

0 commit comments

Comments
 (0)