Skip to content

Commit 6e8fbb6

Browse files
1D plans can have non-unit stride in dims > 1
1 parent f918bf6 commit 6e8fbb6

File tree

2 files changed

+46
-48
lines changed

2 files changed

+46
-48
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name = "FastTransforms"
22
uuid = "057dd010-8810-581a-b7be-e3fc3b93f78c"
3-
version = "0.14.2"
3+
version = "0.14.3"
44

55
[deps]
66
AbstractFFTs = "621f4979-c628-5d54-868e-fcf4e3e8185c"

src/libfasttransforms.jl

Lines changed: 45 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -230,11 +230,9 @@ function checksize(p::FTPlan{T, 1}, x::StridedArray{T}) where T
230230
end
231231
end
232232

233-
function checkstrides(p::FTPlan{T, 1}, x::StridedArray{T}) where T
234-
sz = size(x)
235-
st = strides(x)
236-
if (1, cumprod(sz)...) != (st..., length(x))
237-
error("FTPlan requires unit strides, x has strides $(strides(x))")
233+
function checkstride(p::FTPlan{T, 1}, x::StridedArray{T}) where T
234+
if stride(x, 1) != 1
235+
error("FTPlan requires unit stride in the leading dimension, x has stride $(stride(x, 1)) in the leading dimension.")
238236
end
239237
end
240238

@@ -336,11 +334,11 @@ function checksize(p::AdjointFTPlan, x)
336334
end
337335
end
338336

339-
function checkstrides(p::AdjointFTPlan, x)
337+
function checkstride(p::AdjointFTPlan, x)
340338
try
341-
checkstrides(p.adjoint, x)
339+
checkstride(p.adjoint, x)
342340
catch
343-
checkstrides(p.parent, x)
341+
checkstride(p.parent, x)
344342
end
345343
end
346344

@@ -392,11 +390,11 @@ function checksize(p::TransposeFTPlan, x)
392390
end
393391
end
394392

395-
function checkstrides(p::TransposeFTPlan, x)
393+
function checkstride(p::TransposeFTPlan, x)
396394
try
397-
checkstrides(p.transpose, x)
395+
checkstride(p.transpose, x)
398396
catch
399-
checkstrides(p.parent, x)
397+
checkstride(p.parent, x)
400398
end
401399
end
402400

@@ -832,19 +830,19 @@ for (fJ, fC, elty) in ((:lmul!, :ft_bfmvf, :Float32),
832830
@eval begin
833831
function $fJ(p::FTPlan{$elty, 1}, x::StridedVector{$elty})
834832
checksize(p, x)
835-
checkstrides(p, x)
833+
checkstride(p, x)
836834
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Ptr{ft_plan_struct}, Ptr{$elty}), 'N', p, x)
837835
return x
838836
end
839837
function $fJ(p::AdjointFTPlan{$elty, FTPlan{$elty, 1, K}}, x::StridedVector{$elty}) where K
840838
checksize(p, x)
841-
checkstrides(p, x)
839+
checkstride(p, x)
842840
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Ptr{ft_plan_struct}, Ptr{$elty}), 'T', p, x)
843841
return x
844842
end
845843
function $fJ(p::TransposeFTPlan{$elty, FTPlan{$elty, 1, K}}, x::StridedVector{$elty}) where K
846844
checksize(p, x)
847-
checkstrides(p, x)
845+
checkstride(p, x)
848846
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Ptr{ft_plan_struct}, Ptr{$elty}), 'T', p, x)
849847
return x
850848
end
@@ -856,19 +854,19 @@ for (fJ, fC, elty) in ((:lmul!, :ft_bbbfmvf, :Float32),
856854
@eval begin
857855
function $fJ(p::FTPlan{$elty, 1, ASSOCIATEDJAC2JAC}, x::StridedVector{$elty})
858856
checksize(p, x)
859-
checkstrides(p, x)
857+
checkstride(p, x)
860858
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Cint, Cint, Ptr{ft_plan_struct}, Ptr{$elty}), 'N', '2', '1', p, x)
861859
return x
862860
end
863861
function $fJ(p::AdjointFTPlan{$elty, FTPlan{$elty, 1, ASSOCIATEDJAC2JAC}}, x::StridedVector{$elty})
864862
checksize(p, x)
865-
checkstrides(p, x)
863+
checkstride(p, x)
866864
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Cint, Cint, Ptr{ft_plan_struct}, Ptr{$elty}), 'T', '1', '2', p, x)
867865
return x
868866
end
869867
function $fJ(p::TransposeFTPlan{$elty, FTPlan{$elty, 1, ASSOCIATEDJAC2JAC}}, x::StridedVector{$elty})
870868
checksize(p, x)
871-
checkstrides(p, x)
869+
checkstride(p, x)
872870
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Cint, Cint, Ptr{ft_plan_struct}, Ptr{$elty}), 'T', '1', '2', p, x)
873871
return x
874872
end
@@ -880,19 +878,19 @@ for (fJ, fC, elty) in ((:lmul!, :ft_mpmv, :Float64),
880878
@eval begin
881879
function $fJ(p::ModifiedFTPlan{$elty}, x::StridedVector{$elty})
882880
checksize(p, x)
883-
checkstrides(p, x)
881+
checkstride(p, x)
884882
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Ptr{ft_plan_struct}, Ptr{$elty}), 'N', p, x)
885883
return x
886884
end
887885
function $fJ(p::AdjointFTPlan{$elty, ModifiedFTPlan{$elty}}, x::StridedVector{$elty})
888886
checksize(p, x)
889-
checkstrides(p, x)
887+
checkstride(p, x)
890888
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Ptr{ft_plan_struct}, Ptr{$elty}), 'T', p, x)
891889
return x
892890
end
893891
function $fJ(p::TransposeFTPlan{$elty, ModifiedFTPlan{$elty}}, x::StridedVector{$elty})
894892
checksize(p, x)
895-
checkstrides(p, x)
893+
checkstride(p, x)
896894
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Ptr{ft_plan_struct}, Ptr{$elty}), 'T', p, x)
897895
return x
898896
end
@@ -904,19 +902,19 @@ for (fJ, fC) in ((:lmul!, :ft_mpfr_trmv_ptr),
904902
@eval begin
905903
function $fJ(p::FTPlan{BigFloat, 1}, x::StridedVector{BigFloat})
906904
checksize(p, x)
907-
checkstrides(p, x)
905+
checkstride(p, x)
908906
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Cint, Ptr{mpfr_t}, Cint, Ptr{BigFloat}, Int32), 'N', p.n, p, p.n, renew!(x), Base.MPFR.ROUNDING_MODE[])
909907
return x
910908
end
911909
function $fJ(p::AdjointFTPlan{BigFloat, FTPlan{BigFloat, 1, K}}, x::StridedVector{BigFloat}) where K
912910
checksize(p, x)
913-
checkstrides(p, x)
911+
checkstride(p, x)
914912
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Cint, Ptr{mpfr_t}, Cint, Ptr{BigFloat}, Int32), 'T', p.parent.n, p, p.parent.n, renew!(x), Base.MPFR.ROUNDING_MODE[])
915913
return x
916914
end
917915
function $fJ(p::TransposeFTPlan{BigFloat, FTPlan{BigFloat, 1, K}}, x::StridedVector{BigFloat}) where K
918916
checksize(p, x)
919-
checkstrides(p, x)
917+
checkstride(p, x)
920918
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Cint, Ptr{mpfr_t}, Cint, Ptr{BigFloat}, Int32), 'T', p.parent.n, p, p.parent.n, renew!(x), Base.MPFR.ROUNDING_MODE[])
921919
return x
922920
end
@@ -930,20 +928,20 @@ for (fJ, fC, elty) in ((:lmul!, :ft_bfmmf, :Float32),
930928
@eval begin
931929
function $fJ(p::FTPlan{$elty, 1}, x::StridedMatrix{$elty})
932930
checksize(p, x)
933-
checkstrides(p, x)
934-
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Ptr{ft_plan_struct}, Ptr{$elty}, Cint, Cint), 'N', p, x, size(x, 1), size(x, 2))
931+
checkstride(p, x)
932+
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Ptr{ft_plan_struct}, Ptr{$elty}, Cint, Cint), 'N', p, x, stride(x, 2), size(x, 2))
935933
return x
936934
end
937935
function $fJ(p::AdjointFTPlan{$elty, FTPlan{$elty, 1, K}}, x::StridedMatrix{$elty}) where K
938936
checksize(p, x)
939-
checkstrides(p, x)
940-
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Ptr{ft_plan_struct}, Ptr{$elty}, Cint, Cint), 'T', p, x, size(x, 1), size(x, 2))
937+
checkstride(p, x)
938+
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Ptr{ft_plan_struct}, Ptr{$elty}, Cint, Cint), 'T', p, x, stride(x, 2), size(x, 2))
941939
return x
942940
end
943941
function $fJ(p::TransposeFTPlan{$elty, FTPlan{$elty, 1, K}}, x::StridedMatrix{$elty}) where K
944942
checksize(p, x)
945-
checkstrides(p, x)
946-
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Ptr{ft_plan_struct}, Ptr{$elty}, Cint, Cint), 'T', p, x, size(x, 1), size(x, 2))
943+
checkstride(p, x)
944+
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Ptr{ft_plan_struct}, Ptr{$elty}, Cint, Cint), 'T', p, x, stride(x, 2), size(x, 2))
947945
return x
948946
end
949947
end
@@ -954,20 +952,20 @@ for (fJ, fC, elty) in ((:lmul!, :ft_bbbfmmf, :Float32),
954952
@eval begin
955953
function $fJ(p::FTPlan{$elty, 1, ASSOCIATEDJAC2JAC}, x::StridedMatrix{$elty})
956954
checksize(p, x)
957-
checkstrides(p, x)
958-
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Cint, Cint, Ptr{ft_plan_struct}, Ptr{$elty}, Cint, Cint), 'N', '2', '1', p, x, size(x, 1), size(x, 2))
955+
checkstride(p, x)
956+
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Cint, Cint, Ptr{ft_plan_struct}, Ptr{$elty}, Cint, Cint), 'N', '2', '1', p, x, stride(x, 2), size(x, 2))
959957
return x
960958
end
961959
function $fJ(p::AdjointFTPlan{$elty, FTPlan{$elty, 1, ASSOCIATEDJAC2JAC}}, x::StridedMatrix{$elty})
962960
checksize(p, x)
963-
checkstrides(p, x)
964-
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Cint, Cint, Ptr{ft_plan_struct}, Ptr{$elty}, Cint, Cint), 'T', '1', '2', p, x, size(x, 1), size(x, 2))
961+
checkstride(p, x)
962+
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Cint, Cint, Ptr{ft_plan_struct}, Ptr{$elty}, Cint, Cint), 'T', '1', '2', p, x, stride(x, 2), size(x, 2))
965963
return x
966964
end
967965
function $fJ(p::TransposeFTPlan{$elty, FTPlan{$elty, 1, ASSOCIATEDJAC2JAC}}, x::StridedMatrix{$elty})
968966
checksize(p, x)
969-
checkstrides(p, x)
970-
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Cint, Cint, Ptr{ft_plan_struct}, Ptr{$elty}, Cint, Cint), 'T', '1', '2', p, x, size(x, 1), size(x, 2))
967+
checkstride(p, x)
968+
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Cint, Cint, Ptr{ft_plan_struct}, Ptr{$elty}, Cint, Cint), 'T', '1', '2', p, x, stride(x, 2), size(x, 2))
971969
return x
972970
end
973971
end
@@ -978,20 +976,20 @@ for (fJ, fC, elty) in ((:lmul!, :ft_mpmm, :Float64),
978976
@eval begin
979977
function $fJ(p::ModifiedFTPlan{$elty}, x::StridedMatrix{$elty})
980978
checksize(p, x)
981-
checkstrides(p, x)
982-
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Ptr{ft_plan_struct}, Ptr{$elty}, Cint, Cint), 'N', p, x, size(x, 1), size(x, 2))
979+
checkstride(p, x)
980+
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Ptr{ft_plan_struct}, Ptr{$elty}, Cint, Cint), 'N', p, x, stride(x, 2), size(x, 2))
983981
return x
984982
end
985983
function $fJ(p::AdjointFTPlan{$elty, ModifiedFTPlan{$elty}}, x::StridedMatrix{$elty})
986984
checksize(p, x)
987-
checkstrides(p, x)
988-
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Ptr{ft_plan_struct}, Ptr{$elty}, Cint, Cint), 'T', p, x, size(x, 1), size(x, 2))
985+
checkstride(p, x)
986+
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Ptr{ft_plan_struct}, Ptr{$elty}, Cint, Cint), 'T', p, x, stride(x, 2), size(x, 2))
989987
return x
990988
end
991989
function $fJ(p::TransposeFTPlan{$elty, ModifiedFTPlan{$elty}}, x::StridedMatrix{$elty})
992990
checksize(p, x)
993-
checkstrides(p, x)
994-
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Ptr{ft_plan_struct}, Ptr{$elty}, Cint, Cint), 'T', p, x, size(x, 1), size(x, 2))
991+
checkstride(p, x)
992+
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Ptr{ft_plan_struct}, Ptr{$elty}, Cint, Cint), 'T', p, x, stride(x, 2), size(x, 2))
995993
return x
996994
end
997995
end
@@ -1002,20 +1000,20 @@ for (fJ, fC) in ((:lmul!, :ft_mpfr_trmm_ptr),
10021000
@eval begin
10031001
function $fJ(p::FTPlan{BigFloat, 1}, x::StridedMatrix{BigFloat})
10041002
checksize(p, x)
1005-
checkstrides(p, x)
1006-
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Cint, Ptr{mpfr_t}, Cint, Ptr{BigFloat}, Cint, Cint, Int32), 'N', p.n, p, p.n, renew!(x), size(x, 1), size(x, 2), Base.MPFR.ROUNDING_MODE[])
1003+
checkstride(p, x)
1004+
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Cint, Ptr{mpfr_t}, Cint, Ptr{BigFloat}, Cint, Cint, Int32), 'N', p.n, p, p.n, renew!(x), stride(x, 2), size(x, 2), Base.MPFR.ROUNDING_MODE[])
10071005
return x
10081006
end
10091007
function $fJ(p::AdjointFTPlan{BigFloat, FTPlan{BigFloat, 1, K}}, x::StridedMatrix{BigFloat}) where K
10101008
checksize(p, x)
1011-
checkstrides(p, x)
1012-
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Cint, Ptr{mpfr_t}, Cint, Ptr{BigFloat}, Cint, Cint, Int32), 'T', p.parent.n, p, p.parent.n, renew!(x), size(x, 1), size(x, 2), Base.MPFR.ROUNDING_MODE[])
1009+
checkstride(p, x)
1010+
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Cint, Ptr{mpfr_t}, Cint, Ptr{BigFloat}, Cint, Cint, Int32), 'T', p.parent.n, p, p.parent.n, renew!(x), stride(x, 2), size(x, 2), Base.MPFR.ROUNDING_MODE[])
10131011
return x
10141012
end
10151013
function $fJ(p::TransposeFTPlan{BigFloat, FTPlan{BigFloat, 1, K}}, x::StridedMatrix{BigFloat}) where K
10161014
checksize(p, x)
1017-
checkstrides(p, x)
1018-
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Cint, Ptr{mpfr_t}, Cint, Ptr{BigFloat}, Cint, Cint, Int32), 'T', p.parent.n, p, p.parent.n, renew!(x), size(x, 1), size(x, 2), Base.MPFR.ROUNDING_MODE[])
1015+
checkstride(p, x)
1016+
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Cint, Ptr{mpfr_t}, Cint, Ptr{BigFloat}, Cint, Cint, Int32), 'T', p.parent.n, p, p.parent.n, renew!(x), stride(x, 2), size(x, 2), Base.MPFR.ROUNDING_MODE[])
10191017
return x
10201018
end
10211019
end

0 commit comments

Comments
 (0)