@@ -4,7 +4,7 @@ using AbstractFFTs
4
4
using AbstractFFTs. LinearAlgebra
5
5
import ForwardDiff
6
6
import ForwardDiff: Dual
7
- import AbstractFFTs: Plan, mul!
7
+ import AbstractFFTs: Plan, mul!, dualplan, dual2array
8
8
9
9
10
10
AbstractFFTs. complexfloat (x:: AbstractArray{<:Dual} ) = AbstractFFTs. complexfloat .(x)
32
32
33
33
DualPlan (:: Type{Dual{Tag,V,N}} , p:: Plan{T} ) where {Tag,T<: Real ,V,N} = DualPlan {Dual{Tag,T,N},typeof(p)} (p)
34
34
DualPlan (:: Type{Dual{Tag,V,N}} , p:: Plan{Complex{T}} ) where {Tag,T<: Real ,V,N} = DualPlan {Complex{Dual{Tag,T,N}},typeof(p)} (p)
35
+ dualplan (D, p) = DualPlan (D, p)
35
36
Base. size (p:: DualPlan ) = Base. tail (size (p. p))
36
37
Base.:* (p:: DualPlan{DT} , x:: AbstractArray{DT} ) where DT<: Dual = array2dual (DT, p. p * dual2array (x))
37
38
Base.:* (p:: DualPlan{Complex{DT}} , x:: AbstractArray{Complex{DT}} ) where DT<: Dual = array2dual (DT, p. p * dual2array (x))
48
49
49
50
for plan in (:plan_fft , :plan_ifft , :plan_bfft , :plan_rfft )
50
51
@eval begin
51
- AbstractFFTs.$ plan (x:: AbstractArray{D} , dims= 1 : ndims (x)) where D<: Dual = DualPlan (D, AbstractFFTs.$ plan (dual2array (x), 1 .+ dims))
52
- AbstractFFTs.$ plan (x:: AbstractArray{<:Complex{D}} , dims= 1 : ndims (x)) where D<: Dual = DualPlan (D, AbstractFFTs.$ plan (dual2array (x), 1 .+ dims))
52
+ AbstractFFTs.$ plan (x:: AbstractArray{D} , dims= 1 : ndims (x)) where D<: Dual = dualplan (D, AbstractFFTs.$ plan (dual2array (x), 1 .+ dims))
53
+ AbstractFFTs.$ plan (x:: AbstractArray{<:Complex{D}} , dims= 1 : ndims (x)) where D<: Dual = dualplan (D, AbstractFFTs.$ plan (dual2array (x), 1 .+ dims))
53
54
end
54
55
end
55
56
56
57
58
+ for plan in (:plan_irfft , :plan_brfft ) # these take an extra argument, only when complex?
59
+ @eval begin
60
+ AbstractFFTs.$ plan (x:: AbstractArray{D} , dims= 1 : ndims (x)) where D<: Dual = dualplan (D, AbstractFFTs.$ plan (dual2array (x), 1 .+ dims))
61
+ AbstractFFTs.$ plan (x:: AbstractArray{<:Complex{D}} , d:: Integer , mdims= 1 : ndims (x)) where D<: Dual = dualplan (D, AbstractFFTs.$ plan (dual2array (x), d, 1 .+ dims))
62
+ end
63
+ end
64
+
57
65
58
66
end # module
0 commit comments