One-sided spectral convolution #
Both execution paths use the same weights, indexed by [frequency, input channel, output channel].
Only the stored nonnegative frequencies are learned. The normalized inverse supplies the conjugate
negative frequencies and ignores imaginary DC and Nyquist coordinates.
Keeping the dense path explicit makes comparisons meaningful: changing SpectralPath changes the
implementation, while preserving the parameters, activation, and real-valued spectral map.
Floating-point results can differ; dense zero-coefficient products do not suppress NaN or infinity.
Apply learned channel maps to the first modes nonnegative Fourier bins.
Inputs and outputs have shape [grid, width]; both weights have shape [modes, width, width].
The arbitrary-rank full-DFT FNO has a different parameterization and cannot share these weights.
The four real matrix products implement ordinary complex multiplication, without conjugating the
weight. Padding occurs after that multiplication, so discarded frequencies have no parameters.
denseReference and automatic share a checkpoint. Only the transforms select native primitives;
the tape composes their packed-real adjoints with the channel maps and indexing operations.