The following packages extend the functionality provided by AbstractFFTs:
- FFTW.jl: Bindings for the FFTW library. This also used to be part of Base Julia.
- FastTransforms.jl: Pure-Julia implementation of FFT, with support for arbitrary AbstractFloat types.
Implementations should implement
LinearAlgebra.mul!(Y, plan, X) (or
A_mul_B!(y, p::MyPlan, x) on Julia prior to 0.7.0-DEV.3204) so as to support pre-allocated output arrays. We don't define
* in terms of
mul! generically here, however, because of subtleties for in-place and real FFT plans.
ldiv!(y, plan, x), we require
Plan subtypes to have a
pinv::Plan field, which caches the inverse plan, and which should be initially undefined. They should also implement
plan_inv(p) to construct the inverse of a plan
Implementations only need to provide the unnormalized backwards FFT, similar to FFTW, and we do the scaling generically to get the inverse FFT.