Skip to content

num::transform_plan

Defined in header <spectral/concepts.hpp>

template <class P, class V = vec<cplx>>
concept transform_plan =
    inner_product_space<V> && requires(const P &plan, const V &in, V &out) {
      { plan.size() } -> std::convertible_to<int>;
      plan.execute(in, out);
    };

Reusable plan executing a fixed-length transform.

\[ X_k = \sum_{n=0}^{N-1} x_n \, e^{-2\pi i k n / N} \]

A plan is built once for a length and reused, which is what lets a backend precompute twiddle factors or hand the length to FFTW. Transform length is fixed at construction, so a plan and a vector must agree on it.