gram function

List<List<List<num>>> gram(
  1. List<List<List<num>>> b
)

Gram matrix G = B * B^* of the 2x2 basis b (coefficient representation).

Implementation

List<List<List<num>>> gram(List<List<List<num>>> b) {
  final rows = b.length;
  final ncols = b[0].length;
  final deg = b[0][0].length;
  final g = [
    for (var i = 0; i < rows; i++)
      [for (var j = 0; j < rows; j++) List<num>.filled(deg, 0)],
  ];
  for (var i = 0; i < rows; i++) {
    for (var j = 0; j < rows; j++) {
      var acc = List<num>.filled(deg, 0);
      for (var k = 0; k < ncols; k++) {
        acc = FalconFFT.add(
          acc,
          FalconFFT.mul(b[i][k], FalconFFT.adj(b[j][k])),
        );
      }
      g[i][j] = acc;
    }
  }
  return g;
}