Fourier transforms, in POST Python.
ppfft reimplements scipy.fft in
POST Python — every kernel is
fully-typed Python that runs under the standard CPython interpreter and
compiles ahead-of-time to native code (a plain C shared library and a NumPy
ufunc extension module) with the POST Python reference compiler.
Status: Planning — this repository is scaffolding, ready for an agent or contributor to claim. It is part of the PostSciPy effort to rebuild SciPy one subpackage at a time as the compiler's proving ground.
Primary compiler pressure this package generates: complex-dtype array kernels end to end; constant tables; workspaces.
- Read the POST Python spec and the PostSciPy roadmap (package map, working rules, capability matrix).
- Copy the layout of ppspecial,
the exemplar package:
ppfft/sources,tests/,scripts/build_native.py,scripts/build_ext.py, a pixi workspace withtest/build-native/build-exttasks, a git dependency on postpython, and aROADMAP.mdtracking targets and upstream requests. - Start with a slice from "Compiles today" below; land it as a small PR with tests in both execution modes.
- Naive DFT/IDFT as
(n)->(n)Complex128 gufuncs — O(n²) but proves the complex-array pipeline through compile, link, and NumPy registration fftfreq,fftshift/ifftshiftas(n)->(n)kernels
File these as postpython issues with minimal reproducers when you start on them — the filing is part of the work and drives the compiler roadmap.
- Radix-2/4 fast paths — need constant arrays for twiddle tables (postpython#11 follow-up) and local workspaces (spec §7)
rfftpacking and N-D transforms — after the 1-D fast path
- Pure POST Python: no compiler-specific escape hatches; every kernel runs interpreted and compiled.
scipyis the reference, never a runtime dependency. Tests may use it optionally; prefer deterministic hardcoded reference values.- Compiler gaps go upstream as postpython issues with reproducers, not silent workarounds.
- Verify against a postpython checkout on
main. - Document accuracy targets and reference sources per function.
The full rules and the definition of done live in the PostSciPy roadmap.