circular_convolve

std.seq.circular_convolve · Level L4

The circular convolution of two real signals through the Fourier transform: transform both, multiply, transform back, keep the real part. Takes n log n operations instead of n².

(a ⊛ b)ₖ = Σⱼ aⱼ·b₍ₖ₋ⱼ₎ mod n

Signature

circular_convolve(a: f64[n], b: f64[n]) → f64[n]

Structure

The function as NOVA stores it: one box per input, operation and output, and arrows that carry values. A double border marks another library function this one runs — called once, or by Scan once per element; select it to open that function.

af64[n]bf64[n]Reshapeza_re0.0Reshapezb_re0.0Multiplyza_imMultiplyzb_imConcatzaConcatzbFFTAFFTBcomplex_multiplyABIFFTcSlicec_reReshapeconvconvf64[n]
  • input
  • operation
  • constant
  • call
  • output

Verification

  • Signature proven by NOVA’s shape solver, for every size.
  • Agrees with the reference Σⱼ a[j]·b[(k − j) mod n], summed directly to 80 digits (100-digit arithmetic), on all 40 test cases.
  • All 146 float64 results inside the running error bound; the closest uses 18% of it.
  • Interpreter and NumPy backend return bit-identical results.
Accuracy in detail
correctly rounded (the float64 nearest the exact value)
41%
bit-equal to the NumPy formula in float64
45%
largest error, in units in the last place
7.2e+7

Large ulp counts appear where a result is tiny next to the numbers it is computed from (after cancellation, for example), so one unit in the last place is tiny too; the absolute error is still inside the bound. Results within their own error of zero are not counted.

Note

The reference is the convolution sum itself, with no transform at all.

Identity

Calls
Called by
—
sha256:1ec42b9fc5b91eea456a3d436eed5dc07d13bd551cc1a4689375cb8d35ef6395

The semantic hash of the graph. It changes when the program changes, and never when only its documentation does.

Control handle

Symbol
Ω:std.seq.circular_convolve · Ω:circular_convolve
Pins
sha256:54a13d1e7fabe610497ac7195f033637fb06d2ba846cc053153669e838d3658dthis graph and the 1 it reaches through calls
Evidence
sha256:012064a75202439664512487ac2af71d4c9b2cf05bdbc7d876952e7e0705a2fbthe hash of its verification record
Needs
no capability: a pure function

Through NOVA’s control layer, the symbol launches this function only while the program still matches what it pins: a change to this graph, or to any graph it reaches, needs a migration first.