First release.
fft_c2c(), fft_r2c() and
fft_c2r() compute complex, real-to-complex and
complex-to-real discrete Fourier transforms over any axes of an array,
with SciPy’s crop-or-pad n and
norm = "backward", "ortho",
"forward" or "none" (the unnormalised
convention of fftwtools and stats::fft()).axes = NULL, fft_r2c() and
fft_c2r() halve the first dimension, the contiguous one in
R, as fftwtools’ 2-D and 3-D real transforms do; give axes
explicitly to halve the last axis listed, as SciPy does.zufft_info()$fp_contract is "off" for every
build that cannot fuse multiply-adds, which includes all of CRAN’s.fft_dct() and fft_dst() compute discrete
cosine and sine transforms of types 1 to 4 and their inverses over any
axes, with SciPy’s definitions, norm and
orthogonalize.fft_next_len() and fft_prev_len() find
fast transform lengths; fft_freq(),
fft_rfreq(), fft_shift() and
fft_ishift() are SciPy’s frequency and shift helpers.fft_stats() and mvfft_stats() are drop-in
replacements for stats::fft() and
stats::mvfft().workers runs a transform on several threads, through
zufft’s own lazy thread pool; fft_workers(),
with_fft_workers() and local_fft_workers() set
the default. Results do not depend on the number of threads, and forked
children (parallel::mclapply()) are safe.inst/include/zufft.h let other packages call the transforms
from C with LinkingTo: zufft, from any thread.ZUFFT_CXXFLAGS (for
example to "-march=native") before installing from source
builds zufft for the local CPU on Linux and macOS; see the README.vignette("migrating-from-fftwtools") maps every
fftwtools function to zufft; an article covers scipy.fft
users.zufft_info() reports the vendored ducc0 and SciPy
commits, the SIMD backend and width, fused multiply-add support, the
threading mode and the complex path.