ldlFft function

LdlFft ldlFft(
  1. List<List<List<Complex>>> g
)

LDL* decomposition of a 2x2 Gram matrix g in FFT representation. Corresponds to algorithm 8 (LDL*) of the Falcon documentation.

Implementation

LdlFft ldlFft(List<List<List<Complex>>> g) {
  final deg = g[0][0].length;
  final zero = List<Complex>.filled(deg, Complex.zero);
  final one = List<Complex>.filled(deg, Complex.one);

  final d00 = List<Complex>.from(g[0][0]);
  final l10 = FalconFFT.divFft(g[1][0], g[0][0]);
  final d11 = FalconFFT.subFft(
    g[1][1],
    FalconFFT.mulFft(FalconFFT.mulFft(l10, FalconFFT.adjFft(l10)), g[0][0]),
  );

  return LdlFft(
    [
      [one, zero],
      [l10, one],
    ],
    [
      [d00, zero],
      [zero, d11],
    ],
  );
}