GCC Code Coverage Report


Directory: src/
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 99.5% 1707 / 0 / 1715
Functions: 100.0% 213 / 0 / 213
Branches: 74.3% 1222 / 258 / 1903

fft/multiply.hpp
Line Branch Exec Source
1 #pragma once
2
3 #include <algorithm>
4 #include <cassert>
5 #include <concepts>
6 #include <cstddef>
7 #include <span>
8 #include <utility>
9 #include <vector>
10
11 #include "fft/engine.hpp"
12
13 namespace wala::fft {
14
15 // ==== multiply layer ====
16 // These are free functions to convolve spans.
17 //
18 // The interfaces will typically take input spans, an output span, and an Op representing how to fold the result into the output.
19 // Output spans may alias one of the input spans.
20 // Output spans may be shorter than expected; the output will just be truncated.
21 //
22 // Some functions may also take E::transformed& objects associated with the input
23 // spans. These will be lazily filled (see E::extend_to) and used if available.
24
25 // Circular convolution mod n (power of 2)
26 template <engine E, typename Op = assign_op>
27 1818 void multiply_circular(std::span<const typename E::value_type> a, std::span<const typename E::value_type> b,
28 std::span<typename E::value_type> out, int n, Op op = {}) {
29 1818 assert(!(n & (n-1)));
30
17/17
void wala::fft::multiply_circular<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 5 → 6 taken 20 times.
void wala::fft::multiply_circular<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 5 → 6 taken 20 times.
void wala::fft::multiply_circular<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 5 → 6 taken 20 times.
void wala::fft::multiply_circular<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 5 → 6 taken 20 times.
void wala::fft::multiply_circular<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 5 → 6 taken 20 times.
void wala::fft::multiply_circular<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 5 → 6 taken 20 times.
void wala::fft::multiply_circular<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::assign_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 5 → 6 taken 66 times.
void wala::fft::multiply_circular<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 5 → 6 taken 66 times.
void wala::fft::multiply_circular<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 5 → 6 taken 168 times.
void wala::fft::multiply_circular<wala::fft::engines::real<double>, wala::fft::assign_op>(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 5 → 6 taken 68 times.
void wala::fft::multiply_circular<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::assign_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 5 → 6 taken 66 times.
void wala::fft::multiply_circular<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 5 → 6 taken 20 times.
void wala::fft::multiply_circular<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 5 → 6 taken 20 times.
void wala::fft::multiply_circular<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 5 → 6 taken 20 times.
void wala::fft::multiply_circular<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 5 → 6 taken 20 times.
void wala::fft::multiply_circular<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 5 → 6 taken 20 times.
void wala::fft::multiply_circular<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 5 → 6 taken 20 times.
1818 auto ta = E::transform(a, n);
31
18/18
void wala::fft::multiply_circular<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 7 → 8 taken 20 times.
void wala::fft::multiply_circular<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 7 → 8 taken 20 times.
void wala::fft::multiply_circular<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 7 → 8 taken 20 times.
void wala::fft::multiply_circular<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 7 → 8 taken 20 times.
void wala::fft::multiply_circular<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 7 → 8 taken 20 times.
void wala::fft::multiply_circular<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 7 → 8 taken 20 times.
void wala::fft::multiply_circular<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::assign_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 7 → 8 taken 66 times.
void wala::fft::multiply_circular<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 7 → 8 taken 66 times.
void wala::fft::multiply_circular<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 5 → 6 taken 1144 times.
✓ Branch 7 → 8 taken 168 times.
void wala::fft::multiply_circular<wala::fft::engines::real<double>, wala::fft::assign_op>(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 7 → 8 taken 68 times.
void wala::fft::multiply_circular<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::assign_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 7 → 8 taken 66 times.
void wala::fft::multiply_circular<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 7 → 8 taken 20 times.
void wala::fft::multiply_circular<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 7 → 8 taken 20 times.
void wala::fft::multiply_circular<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 7 → 8 taken 20 times.
void wala::fft::multiply_circular<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 7 → 8 taken 20 times.
void wala::fft::multiply_circular<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 7 → 8 taken 20 times.
void wala::fft::multiply_circular<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 7 → 8 taken 20 times.
1818 auto tb = E::transform(b, n);
32
36/36
void wala::fft::multiply_circular<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 9 → 10 taken 20 times.
✓ Branch 11 → 12 taken 20 times.
void wala::fft::multiply_circular<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 9 → 10 taken 20 times.
✓ Branch 11 → 12 taken 20 times.
void wala::fft::multiply_circular<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 9 → 10 taken 20 times.
✓ Branch 11 → 12 taken 20 times.
void wala::fft::multiply_circular<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 9 → 10 taken 20 times.
✓ Branch 11 → 12 taken 20 times.
void wala::fft::multiply_circular<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 9 → 10 taken 20 times.
✓ Branch 11 → 12 taken 20 times.
void wala::fft::multiply_circular<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 9 → 10 taken 20 times.
✓ Branch 11 → 12 taken 20 times.
void wala::fft::multiply_circular<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::assign_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 9 → 10 taken 66 times.
✓ Branch 11 → 12 taken 66 times.
void wala::fft::multiply_circular<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 9 → 10 taken 66 times.
✓ Branch 11 → 12 taken 66 times.
void wala::fft::multiply_circular<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 6 → 7 taken 1144 times.
✓ Branch 7 → 8 taken 1144 times.
✓ Branch 9 → 10 taken 168 times.
✓ Branch 11 → 12 taken 168 times.
void wala::fft::multiply_circular<wala::fft::engines::real<double>, wala::fft::assign_op>(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 9 → 10 taken 68 times.
✓ Branch 11 → 12 taken 68 times.
void wala::fft::multiply_circular<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::assign_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 9 → 10 taken 66 times.
✓ Branch 11 → 12 taken 66 times.
void wala::fft::multiply_circular<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 9 → 10 taken 20 times.
✓ Branch 11 → 12 taken 20 times.
void wala::fft::multiply_circular<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 9 → 10 taken 20 times.
✓ Branch 11 → 12 taken 20 times.
void wala::fft::multiply_circular<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 9 → 10 taken 20 times.
✓ Branch 11 → 12 taken 20 times.
void wala::fft::multiply_circular<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 9 → 10 taken 20 times.
✓ Branch 11 → 12 taken 20 times.
void wala::fft::multiply_circular<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 9 → 10 taken 20 times.
✓ Branch 11 → 12 taken 20 times.
void wala::fft::multiply_circular<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 9 → 10 taken 20 times.
✓ Branch 11 → 12 taken 20 times.
3504 E::finish(E::mul(ta, tb, n), out, op);
33 3100 }
34
35 template <engine E, typename Op = assign_op>
36 588 void square_circular(std::span<const typename E::value_type> a, std::span<typename E::value_type> out, int n, Op op = {}) {
37 588 assert(!(n & (n-1)));
38
11/11
void wala::fft::square_circular<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 5 → 6 taken 1 time.
void wala::fft::square_circular<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 5 → 6 taken 1 time.
void wala::fft::square_circular<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 5 → 6 taken 1 time.
void wala::fft::square_circular<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::assign_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 5 → 6 taken 4 times.
void wala::fft::square_circular<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 5 → 6 taken 4 times.
void wala::fft::square_circular<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 5 → 6 taken 29 times.
void wala::fft::square_circular<wala::fft::engines::real<double>, wala::fft::assign_op>(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 5 → 6 taken 4 times.
void wala::fft::square_circular<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::assign_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 5 → 6 taken 4 times.
void wala::fft::square_circular<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 5 → 6 taken 1 time.
void wala::fft::square_circular<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 5 → 6 taken 1 time.
void wala::fft::square_circular<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 5 → 6 taken 1 time.
588 auto ta = E::transform(a, n);
39
23/23
void wala::fft::square_circular<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 7 → 8 taken 1 time.
✓ Branch 9 → 10 taken 1 time.
void wala::fft::square_circular<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 7 → 8 taken 1 time.
✓ Branch 9 → 10 taken 1 time.
void wala::fft::square_circular<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 7 → 8 taken 1 time.
✓ Branch 9 → 10 taken 1 time.
void wala::fft::square_circular<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::assign_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 7 → 8 taken 4 times.
✓ Branch 9 → 10 taken 4 times.
void wala::fft::square_circular<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 7 → 8 taken 4 times.
✓ Branch 9 → 10 taken 4 times.
void wala::fft::square_circular<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 6 → 7 taken 537 times.
✓ Branch 7 → 8 taken 29 times.
✓ Branch 9 → 10 taken 29 times.
void wala::fft::square_circular<wala::fft::engines::real<double>, wala::fft::assign_op>(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 7 → 8 taken 4 times.
✓ Branch 9 → 10 taken 4 times.
void wala::fft::square_circular<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::assign_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 7 → 8 taken 4 times.
✓ Branch 9 → 10 taken 4 times.
void wala::fft::square_circular<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 7 → 8 taken 1 time.
✓ Branch 9 → 10 taken 1 time.
void wala::fft::square_circular<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 7 → 8 taken 1 time.
✓ Branch 9 → 10 taken 1 time.
void wala::fft::square_circular<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type, 18446744073709551615ul>, int, wala::fft::assign_op):
✓ Branch 7 → 8 taken 1 time.
✓ Branch 9 → 10 taken 1 time.
1168 E::finish(E::sq(ta, n), out, op);
40 592 }
41
42 namespace detail {
43 // Arrays of length 2^k + 1 are somewhat common, so we will optimize them by
44 // multiplying mod 2^k, and fixing up the leading coefficient.
45
46 // Helpers to detect and perform this optimization.
47 struct conv_size { int n; bool cut; };
48 3303441 inline conv_size conv_size_for(int s) {
49
2/2
✓ Branch 2 → 3 taken 3298400 times.
✓ Branch 2 → 4 taken 141 times.
3303441 int n = nextPow2(s);
50 3303441 bool cut = (n == 2 * (s - 1));
51
4/4
✓ Branch 3 → 4 taken 1493 times.
✓ Branch 3 → 5 taken 3407 times.
✓ Branch 4 → 5 taken 1648100 times.
✓ Branch 4 → 6 taken 1650441 times.
3303441 return {cut ? n / 2 : n, cut};
52 }
53
54 // Call op while lazily applying the correction if necessary
55 template <typename T, typename Op>
56 1520 void emit_linear(std::span<T> buf, int n, int s, bool cut, T c0, std::span<T> out, Op op) {
57
14/14
void wala::fft::detail::emit_linear<wala::trunc_series<wala::modnum<1000000007>, 2>, wala::fft::assign_op>(std::span<wala::trunc_series<wala::modnum<1000000007>, 2>, 18446744073709551615ul>, int, int, bool, wala::trunc_series<wala::modnum<1000000007>, 2>, std::span<wala::trunc_series<wala::modnum<1000000007>, 2>, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 11 → 3 taken 80 times.
✓ Branch 11 → 12 taken 40 times.
void wala::fft::detail::emit_linear<wala::trunc_series<wala::modnum<1000000007>, 3>, wala::fft::assign_op>(std::span<wala::trunc_series<wala::modnum<1000000007>, 3>, 18446744073709551615ul>, int, int, bool, wala::trunc_series<wala::modnum<1000000007>, 3>, std::span<wala::trunc_series<wala::modnum<1000000007>, 3>, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 11 → 3 taken 120 times.
✓ Branch 11 → 12 taken 40 times.
void wala::fft::detail::emit_linear<wala::trunc_series<wala::modnum<998244353>, 3>, wala::fft::assign_op>(std::span<wala::trunc_series<wala::modnum<998244353>, 3>, 18446744073709551615ul>, int, int, bool, wala::trunc_series<wala::modnum<998244353>, 3>, std::span<wala::trunc_series<wala::modnum<998244353>, 3>, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 11 → 3 taken 120 times.
✓ Branch 11 → 12 taken 40 times.
void wala::fft::detail::emit_linear<wala::mat<wala::modnum<1000000007>, 2>, wala::fft::assign_op>(std::span<wala::mat<wala::modnum<1000000007>, 2>, 18446744073709551615ul>, int, int, bool, wala::mat<wala::modnum<1000000007>, 2>, std::span<wala::mat<wala::modnum<1000000007>, 2>, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 11 → 3 taken 168 times.
✓ Branch 11 → 12 taken 42 times.
void wala::fft::detail::emit_linear<wala::mat<wala::modnum<1000000007>, 3>, wala::fft::assign_op>(std::span<wala::mat<wala::modnum<1000000007>, 3>, 18446744073709551615ul>, int, int, bool, wala::mat<wala::modnum<1000000007>, 3>, std::span<wala::mat<wala::modnum<1000000007>, 3>, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 11 → 3 taken 378 times.
✓ Branch 11 → 12 taken 42 times.
void wala::fft::detail::emit_linear<wala::mat<wala::modnum<998244353>, 3>, wala::fft::assign_op>(std::span<wala::mat<wala::modnum<998244353>, 3>, 18446744073709551615ul>, int, int, bool, wala::mat<wala::modnum<998244353>, 3>, std::span<wala::mat<wala::modnum<998244353>, 3>, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 11 → 3 taken 378 times.
✓ Branch 11 → 12 taken 42 times.
void wala::fft::detail::emit_linear<wala::modnum<998244353>, wala::fft::assign_op>(std::span<wala::modnum<998244353>, 18446744073709551615ul>, int, int, bool, wala::modnum<998244353>, std::span<wala::modnum<998244353>, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 2 → 3 taken 76 times.
✓ Branch 2 → 7 taken 998 times.
2764 T cn{};
58
26/30
void wala::fft::detail::emit_linear<wala::trunc_series<wala::modnum<1000000007>, 2>, wala::fft::assign_op>(std::span<wala::trunc_series<wala::modnum<1000000007>, 2>, 18446744073709551615ul>, int, int, bool, wala::trunc_series<wala::modnum<1000000007>, 2>, std::span<wala::trunc_series<wala::modnum<1000000007>, 2>, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 13 → 14 taken 18 times.
✓ Branch 13 → 27 taken 22 times.
void wala::fft::detail::emit_linear<wala::trunc_series<wala::modnum<1000000007>, 3>, wala::fft::assign_op>(std::span<wala::trunc_series<wala::modnum<1000000007>, 3>, 18446744073709551615ul>, int, int, bool, wala::trunc_series<wala::modnum<1000000007>, 3>, std::span<wala::trunc_series<wala::modnum<1000000007>, 3>, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 13 → 14 taken 18 times.
✓ Branch 13 → 27 taken 22 times.
void wala::fft::detail::emit_linear<wala::trunc_series<wala::modnum<998244353>, 3>, wala::fft::assign_op>(std::span<wala::trunc_series<wala::modnum<998244353>, 3>, 18446744073709551615ul>, int, int, bool, wala::trunc_series<wala::modnum<998244353>, 3>, std::span<wala::trunc_series<wala::modnum<998244353>, 3>, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 13 → 14 taken 18 times.
✓ Branch 13 → 27 taken 22 times.
void wala::fft::detail::emit_linear<wala::mod_goldilocks, wala::fft::add_op>(std::span<wala::mod_goldilocks, 18446744073709551615ul>, int, int, bool, wala::mod_goldilocks, std::span<wala::mod_goldilocks, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 6 → 7 not taken.
✓ Branch 6 → 18 taken 1 time.
void wala::fft::detail::emit_linear<wala::mod_goldilocks, wala::fft::assign_op>(std::span<wala::mod_goldilocks, 18446744073709551615ul>, int, int, bool, wala::mod_goldilocks, std::span<wala::mod_goldilocks, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 6 → 7 taken 10 times.
✓ Branch 6 → 18 taken 19 times.
void wala::fft::detail::emit_linear<wala::mat<wala::modnum<1000000007>, 2>, wala::fft::assign_op>(std::span<wala::mat<wala::modnum<1000000007>, 2>, 18446744073709551615ul>, int, int, bool, wala::mat<wala::modnum<1000000007>, 2>, std::span<wala::mat<wala::modnum<1000000007>, 2>, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 13 → 14 taken 20 times.
✓ Branch 13 → 27 taken 22 times.
void wala::fft::detail::emit_linear<wala::mat<wala::modnum<1000000007>, 3>, wala::fft::assign_op>(std::span<wala::mat<wala::modnum<1000000007>, 3>, 18446744073709551615ul>, int, int, bool, wala::mat<wala::modnum<1000000007>, 3>, std::span<wala::mat<wala::modnum<1000000007>, 3>, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 13 → 14 taken 20 times.
✓ Branch 13 → 27 taken 22 times.
void wala::fft::detail::emit_linear<wala::mat<wala::modnum<998244353>, 3>, wala::fft::assign_op>(std::span<wala::mat<wala::modnum<998244353>, 3>, 18446744073709551615ul>, int, int, bool, wala::mat<wala::modnum<998244353>, 3>, std::span<wala::mat<wala::modnum<998244353>, 3>, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 13 → 14 taken 20 times.
✓ Branch 13 → 27 taken 22 times.
void wala::fft::detail::emit_linear<wala::modnum<1000000007>, wala::fft::add_op>(std::span<wala::modnum<1000000007>, 18446744073709551615ul>, int, int, bool, wala::modnum<1000000007>, std::span<wala::modnum<1000000007>, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 6 → 7 not taken.
✓ Branch 6 → 18 taken 2 times.
void wala::fft::detail::emit_linear<wala::modnum<1000000007>, wala::fft::assign_op>(std::span<wala::modnum<1000000007>, 18446744073709551615ul>, int, int, bool, wala::modnum<1000000007>, std::span<wala::modnum<1000000007>, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 6 → 7 taken 20 times.
✓ Branch 6 → 18 taken 38 times.
void wala::fft::detail::emit_linear<wala::modnum<998244353>, wala::fft::add_op>(std::span<wala::modnum<998244353>, 18446744073709551615ul>, int, int, bool, wala::modnum<998244353>, std::span<wala::modnum<998244353>, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 6 → 7 not taken.
✓ Branch 6 → 18 taken 1 time.
void wala::fft::detail::emit_linear<wala::modnum<998244353>, wala::fft::assign_op>(std::span<wala::modnum<998244353>, 18446744073709551615ul>, int, int, bool, wala::modnum<998244353>, std::span<wala::modnum<998244353>, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 2 → 3 taken 76 times.
✓ Branch 2 → 7 taken 998 times.
✓ Branch 6 → 7 taken 22 times.
✓ Branch 6 → 18 taken 57 times.
void wala::fft::detail::emit_linear<double, wala::fft::add_op>(std::span<double, 18446744073709551615ul>, int, int, bool, double, std::span<double, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 10 taken 1 time.
void wala::fft::detail::emit_linear<double, wala::fft::assign_op>(std::span<double, 18446744073709551615ul>, int, int, bool, double, std::span<double, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 2 → 3 taken 10 times.
✓ Branch 2 → 10 taken 19 times.
1520 if (cut) {
59
1/2
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 76 times.
366 cn = buf[0] - c0;
60 252 buf[0] = c0;
61 }
62
1/2
✓ Branch 9 → 10 taken 1074 times.
✗ Branch 9 → 11 not taken.
1520 int lim = min(sz(out), min(s, n));
63
30/30
void wala::fft::detail::emit_linear<wala::trunc_series<wala::modnum<1000000007>, 2>, wala::fft::assign_op>(std::span<wala::trunc_series<wala::modnum<1000000007>, 2>, 18446744073709551615ul>, int, int, bool, wala::trunc_series<wala::modnum<1000000007>, 2>, std::span<wala::trunc_series<wala::modnum<1000000007>, 2>, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 45 → 36 taken 750 times.
✓ Branch 45 → 46 taken 40 times.
void wala::fft::detail::emit_linear<wala::trunc_series<wala::modnum<1000000007>, 3>, wala::fft::assign_op>(std::span<wala::trunc_series<wala::modnum<1000000007>, 3>, 18446744073709551615ul>, int, int, bool, wala::trunc_series<wala::modnum<1000000007>, 3>, std::span<wala::trunc_series<wala::modnum<1000000007>, 3>, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 45 → 36 taken 750 times.
✓ Branch 45 → 46 taken 40 times.
void wala::fft::detail::emit_linear<wala::trunc_series<wala::modnum<998244353>, 3>, wala::fft::assign_op>(std::span<wala::trunc_series<wala::modnum<998244353>, 3>, 18446744073709551615ul>, int, int, bool, wala::trunc_series<wala::modnum<998244353>, 3>, std::span<wala::trunc_series<wala::modnum<998244353>, 3>, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 45 → 36 taken 750 times.
✓ Branch 45 → 46 taken 40 times.
void wala::fft::detail::emit_linear<wala::mod_goldilocks, wala::fft::add_op>(std::span<wala::mod_goldilocks, 18446744073709551615ul>, int, int, bool, wala::mod_goldilocks, std::span<wala::mod_goldilocks, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 37 → 27 taken 59 times.
✓ Branch 37 → 38 taken 1 time.
void wala::fft::detail::emit_linear<wala::mod_goldilocks, wala::fft::assign_op>(std::span<wala::mod_goldilocks, 18446744073709551615ul>, int, int, bool, wala::mod_goldilocks, std::span<wala::mod_goldilocks, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 36 → 27 taken 1838 times.
✓ Branch 36 → 37 taken 29 times.
void wala::fft::detail::emit_linear<wala::mat<wala::modnum<1000000007>, 2>, wala::fft::assign_op>(std::span<wala::mat<wala::modnum<1000000007>, 2>, 18446744073709551615ul>, int, int, bool, wala::mat<wala::modnum<1000000007>, 2>, std::span<wala::mat<wala::modnum<1000000007>, 2>, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 45 → 36 taken 878 times.
✓ Branch 45 → 46 taken 42 times.
void wala::fft::detail::emit_linear<wala::mat<wala::modnum<1000000007>, 3>, wala::fft::assign_op>(std::span<wala::mat<wala::modnum<1000000007>, 3>, 18446744073709551615ul>, int, int, bool, wala::mat<wala::modnum<1000000007>, 3>, std::span<wala::mat<wala::modnum<1000000007>, 3>, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 45 → 36 taken 878 times.
✓ Branch 45 → 46 taken 42 times.
void wala::fft::detail::emit_linear<wala::mat<wala::modnum<998244353>, 3>, wala::fft::assign_op>(std::span<wala::mat<wala::modnum<998244353>, 3>, 18446744073709551615ul>, int, int, bool, wala::mat<wala::modnum<998244353>, 3>, std::span<wala::mat<wala::modnum<998244353>, 3>, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 45 → 36 taken 878 times.
✓ Branch 45 → 46 taken 42 times.
void wala::fft::detail::emit_linear<wala::modnum<1000000007>, wala::fft::add_op>(std::span<wala::modnum<1000000007>, 18446744073709551615ul>, int, int, bool, wala::modnum<1000000007>, std::span<wala::modnum<1000000007>, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 37 → 27 taken 118 times.
✓ Branch 37 → 38 taken 2 times.
void wala::fft::detail::emit_linear<wala::modnum<1000000007>, wala::fft::assign_op>(std::span<wala::modnum<1000000007>, 18446744073709551615ul>, int, int, bool, wala::modnum<1000000007>, std::span<wala::modnum<1000000007>, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 36 → 27 taken 3676 times.
✓ Branch 36 → 37 taken 58 times.
void wala::fft::detail::emit_linear<wala::modnum<998244353>, wala::fft::add_op>(std::span<wala::modnum<998244353>, 18446744073709551615ul>, int, int, bool, wala::modnum<998244353>, std::span<wala::modnum<998244353>, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 37 → 27 taken 59 times.
✓ Branch 37 → 38 taken 1 time.
void wala::fft::detail::emit_linear<wala::modnum<998244353>, wala::fft::assign_op>(std::span<wala::modnum<998244353>, 18446744073709551615ul>, int, int, bool, wala::modnum<998244353>, std::span<wala::modnum<998244353>, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 13 → 12 taken 38435720 times.
✓ Branch 13 → 14 taken 1074 times.
✓ Branch 36 → 27 taken 2766 times.
✓ Branch 36 → 37 taken 79 times.
void wala::fft::detail::emit_linear<double, wala::fft::add_op>(std::span<double, 18446744073709551615ul>, int, int, bool, double, std::span<double, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 26 → 19 taken 59 times.
✓ Branch 26 → 27 taken 1 time.
void wala::fft::detail::emit_linear<double, wala::fft::assign_op>(std::span<double, 18446744073709551615ul>, int, int, bool, double, std::span<double, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 27 → 19 taken 1838 times.
✓ Branch 27 → 28 taken 29 times.
38452537 for (int i = 0; i < lim; i++) op(out[i], buf[i]);
64
37/60
void wala::fft::detail::emit_linear<wala::trunc_series<wala::modnum<1000000007>, 2>, wala::fft::assign_op>(std::span<wala::trunc_series<wala::modnum<1000000007>, 2>, 18446744073709551615ul>, int, int, bool, wala::trunc_series<wala::modnum<1000000007>, 2>, std::span<wala::trunc_series<wala::modnum<1000000007>, 2>, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 46 → 47 taken 18 times.
✓ Branch 46 → 54 taken 22 times.
✓ Branch 48 → 49 taken 18 times.
✗ Branch 48 → 54 not taken.
void wala::fft::detail::emit_linear<wala::trunc_series<wala::modnum<1000000007>, 3>, wala::fft::assign_op>(std::span<wala::trunc_series<wala::modnum<1000000007>, 3>, 18446744073709551615ul>, int, int, bool, wala::trunc_series<wala::modnum<1000000007>, 3>, std::span<wala::trunc_series<wala::modnum<1000000007>, 3>, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 46 → 47 taken 18 times.
✓ Branch 46 → 54 taken 22 times.
✓ Branch 48 → 49 taken 18 times.
✗ Branch 48 → 54 not taken.
void wala::fft::detail::emit_linear<wala::trunc_series<wala::modnum<998244353>, 3>, wala::fft::assign_op>(std::span<wala::trunc_series<wala::modnum<998244353>, 3>, 18446744073709551615ul>, int, int, bool, wala::trunc_series<wala::modnum<998244353>, 3>, std::span<wala::trunc_series<wala::modnum<998244353>, 3>, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 46 → 47 taken 18 times.
✓ Branch 46 → 54 taken 22 times.
✓ Branch 48 → 49 taken 18 times.
✗ Branch 48 → 54 not taken.
void wala::fft::detail::emit_linear<wala::mod_goldilocks, wala::fft::add_op>(std::span<wala::mod_goldilocks, 18446744073709551615ul>, int, int, bool, wala::mod_goldilocks, std::span<wala::mod_goldilocks, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 38 → 39 not taken.
✓ Branch 38 → 46 taken 1 time.
✗ Branch 40 → 41 not taken.
✗ Branch 40 → 46 not taken.
void wala::fft::detail::emit_linear<wala::mod_goldilocks, wala::fft::assign_op>(std::span<wala::mod_goldilocks, 18446744073709551615ul>, int, int, bool, wala::mod_goldilocks, std::span<wala::mod_goldilocks, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 37 → 38 taken 10 times.
✓ Branch 37 → 45 taken 19 times.
✓ Branch 39 → 40 taken 10 times.
✗ Branch 39 → 45 not taken.
void wala::fft::detail::emit_linear<wala::mat<wala::modnum<1000000007>, 2>, wala::fft::assign_op>(std::span<wala::mat<wala::modnum<1000000007>, 2>, 18446744073709551615ul>, int, int, bool, wala::mat<wala::modnum<1000000007>, 2>, std::span<wala::mat<wala::modnum<1000000007>, 2>, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 46 → 47 taken 20 times.
✓ Branch 46 → 54 taken 22 times.
✓ Branch 48 → 49 taken 20 times.
✗ Branch 48 → 54 not taken.
void wala::fft::detail::emit_linear<wala::mat<wala::modnum<1000000007>, 3>, wala::fft::assign_op>(std::span<wala::mat<wala::modnum<1000000007>, 3>, 18446744073709551615ul>, int, int, bool, wala::mat<wala::modnum<1000000007>, 3>, std::span<wala::mat<wala::modnum<1000000007>, 3>, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 46 → 47 taken 20 times.
✓ Branch 46 → 54 taken 22 times.
✓ Branch 48 → 49 taken 20 times.
✗ Branch 48 → 54 not taken.
void wala::fft::detail::emit_linear<wala::mat<wala::modnum<998244353>, 3>, wala::fft::assign_op>(std::span<wala::mat<wala::modnum<998244353>, 3>, 18446744073709551615ul>, int, int, bool, wala::mat<wala::modnum<998244353>, 3>, std::span<wala::mat<wala::modnum<998244353>, 3>, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 46 → 47 taken 20 times.
✓ Branch 46 → 54 taken 22 times.
✓ Branch 48 → 49 taken 20 times.
✗ Branch 48 → 54 not taken.
void wala::fft::detail::emit_linear<wala::modnum<1000000007>, wala::fft::add_op>(std::span<wala::modnum<1000000007>, 18446744073709551615ul>, int, int, bool, wala::modnum<1000000007>, std::span<wala::modnum<1000000007>, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 38 → 39 not taken.
✓ Branch 38 → 46 taken 2 times.
✗ Branch 40 → 41 not taken.
✗ Branch 40 → 46 not taken.
void wala::fft::detail::emit_linear<wala::modnum<1000000007>, wala::fft::assign_op>(std::span<wala::modnum<1000000007>, 18446744073709551615ul>, int, int, bool, wala::modnum<1000000007>, std::span<wala::modnum<1000000007>, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 37 → 38 taken 20 times.
✓ Branch 37 → 45 taken 38 times.
✓ Branch 39 → 40 taken 20 times.
✗ Branch 39 → 45 not taken.
void wala::fft::detail::emit_linear<wala::modnum<998244353>, wala::fft::add_op>(std::span<wala::modnum<998244353>, 18446744073709551615ul>, int, int, bool, wala::modnum<998244353>, std::span<wala::modnum<998244353>, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 38 → 39 not taken.
✓ Branch 38 → 46 taken 1 time.
✗ Branch 40 → 41 not taken.
✗ Branch 40 → 46 not taken.
void wala::fft::detail::emit_linear<wala::modnum<998244353>, wala::fft::assign_op>(std::span<wala::modnum<998244353>, 18446744073709551615ul>, int, int, bool, wala::modnum<998244353>, std::span<wala::modnum<998244353>, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 14 → 15 taken 76 times.
✓ Branch 14 → 17 taken 998 times.
✓ Branch 15 → 16 taken 76 times.
✗ Branch 15 → 17 not taken.
✓ Branch 37 → 38 taken 22 times.
✓ Branch 37 → 45 taken 57 times.
✓ Branch 39 → 40 taken 22 times.
✗ Branch 39 → 45 not taken.
void wala::fft::detail::emit_linear<double, wala::fft::add_op>(std::span<double, 18446744073709551615ul>, int, int, bool, double, std::span<double, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 27 → 28 not taken.
✓ Branch 27 → 33 taken 1 time.
✗ Branch 29 → 30 not taken.
✗ Branch 29 → 33 not taken.
void wala::fft::detail::emit_linear<double, wala::fft::assign_op>(std::span<double, 18446744073709551615ul>, int, int, bool, double, std::span<double, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 28 → 29 taken 10 times.
✓ Branch 28 → 36 taken 19 times.
✓ Branch 30 → 31 taken 10 times.
✗ Branch 30 → 36 not taken.
1696 if (cut && sz(out) >= s) op(out[s-1], cn);
65 1520 }
66
67 // Applies op, diverting the wrapped leading coefficient of a cut product:
68 // out[0] receives c0 and the wraparound term is captured into cn for the
69 // caller to emit at out[s-1].
70 template <typename T, typename Op>
71 struct cut_op {
72 Op op;
73 T* out0;
74 T c0;
75 T& cn;
76 22158538 void operator()(T& x, T v) const {
77
32/32
wala::fft::detail::cut_op<wala::mod_goldilocks, wala::fft::add_twice_op>::operator()(wala::mod_goldilocks&, wala::mod_goldilocks) const:
✓ Branch 5 → 6 taken 84 times.
✓ Branch 5 → 29 taken 84 times.
wala::fft::detail::cut_op<wala::mod_goldilocks, wala::fft::add_op>::operator()(wala::mod_goldilocks&, wala::mod_goldilocks) const:
✓ Branch 5 → 6 taken 90 times.
✓ Branch 5 → 29 taken 90 times.
wala::fft::detail::cut_op<wala::mod_goldilocks, wala::fft::assign_op>::operator()(wala::mod_goldilocks&, wala::mod_goldilocks) const:
✓ Branch 5 → 6 taken 17 times.
✓ Branch 5 → 29 taken 233 times.
wala::fft::detail::cut_op<wala::mat<wala::modnum<1000000007>, 3>, wala::fft::add_op>::operator()(wala::mat<wala::modnum<1000000007>, 3>&, wala::mat<wala::modnum<1000000007>, 3>) const:
✓ Branch 5 → 6 taken 30 times.
✓ Branch 5 → 29 taken 30 times.
wala::fft::detail::cut_op<wala::mat<wala::modnum<998244353>, 3>, wala::fft::add_op>::operator()(wala::mat<wala::modnum<998244353>, 3>&, wala::mat<wala::modnum<998244353>, 3>) const:
✓ Branch 5 → 6 taken 30 times.
✓ Branch 5 → 29 taken 30 times.
wala::fft::detail::cut_op<wala::modnum<1000000007>, wala::fft::add_twice_op>::operator()(wala::modnum<1000000007>&, wala::modnum<1000000007>) const:
✓ Branch 5 → 6 taken 168 times.
✓ Branch 5 → 29 taken 168 times.
wala::fft::detail::cut_op<wala::modnum<1000000007>, wala::fft::add_op>::operator()(wala::modnum<1000000007>&, wala::modnum<1000000007>) const:
✓ Branch 5 → 6 taken 180 times.
✓ Branch 5 → 29 taken 180 times.
wala::fft::detail::cut_op<wala::modnum<1000000007>, wala::fft::assign_op>::operator()(wala::modnum<1000000007>&, wala::modnum<1000000007>) const:
✓ Branch 2 → 3 taken 16 times.
✓ Branch 2 → 7 taken 24 times.
✓ Branch 3 → 4 taken 6 times.
✓ Branch 3 → 5 taken 10 times.
✓ Branch 5 → 6 taken 34 times.
✓ Branch 5 → 29 taken 466 times.
wala::fft::detail::cut_op<wala::modnum<998244353>, wala::fft::add_twice_op>::operator()(wala::modnum<998244353>&, wala::modnum<998244353>) const:
✓ Branch 5 → 6 taken 84 times.
✓ Branch 5 → 29 taken 84 times.
wala::fft::detail::cut_op<wala::modnum<998244353>, wala::fft::add_op>::operator()(wala::modnum<998244353>&, wala::modnum<998244353>) const:
✓ Branch 5 → 6 taken 177 times.
✓ Branch 5 → 29 taken 177 times.
wala::fft::detail::cut_op<wala::modnum<998244353>, wala::fft::assign_op>::operator()(wala::modnum<998244353>&, wala::modnum<998244353>) const:
✓ Branch 2 → 3 taken 1647993 times.
✓ Branch 2 → 7 taken 20505600 times.
✓ Branch 3 → 4 taken 161148 times.
✓ Branch 3 → 5 taken 1486845 times.
✓ Branch 5 → 6 taken 268 times.
✓ Branch 5 → 29 taken 1966 times.
wala::fft::detail::cut_op<double, wala::fft::assign_op>::operator()(double&, double) const:
✓ Branch 5 → 6 taken 7 times.
✓ Branch 5 → 18 taken 228 times.
23806607 if (&x == out0) { cn = v - c0; v = c0; }
78 22158538 op(x, v);
79 22158538 }
80 };
81
82 // finish + emit_linear fused: write the finished product directly into out,
83 // applying the cut correction in place.
84 template <engine E, typename P, typename Op = assign_op>
85 1975461 void finish_linear(
86 P&& p, int n, int s, bool cut,
87 typename E::value_type c0, std::span<typename E::value_type> out, Op op = {}
88 ) {
89 using T = typename E::value_type;
90
27/54
void wala::fft::detail::finish_linear<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>, wala::fft::engines::componentwise<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::mat<wala::modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<1>, wala::fft::add_op>(wala::fft::engines::componentwise<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::mat<wala::modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<1>&&, int, int, bool, wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 3 → 4 taken 5 times.
✗ Branch 3 → 36 not taken.
void wala::fft::detail::finish_linear<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>, wala::fft::engines::componentwise<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::mat<wala::modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<2>, wala::fft::add_op>(wala::fft::engines::componentwise<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::mat<wala::modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<2>&&, int, int, bool, wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 3 → 4 taken 53 times.
✗ Branch 3 → 36 not taken.
void wala::fft::detail::finish_linear<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::engines::componentwise<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::mat<wala::modnum<998244353>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<0>, wala::fft::add_op>(wala::fft::engines::componentwise<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::mat<wala::modnum<998244353>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<0>&&, int, int, bool, wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 3 → 4 taken 58 times.
✗ Branch 3 → 36 not taken.
void wala::fft::detail::finish_linear<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>, wala::fft::engines::componentwise<wala::fft::engines::split<wala::modnum<1000000007> >, wala::mat<wala::modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<1>, wala::fft::add_op>(wala::fft::engines::componentwise<wala::fft::engines::split<wala::modnum<1000000007> >, wala::mat<wala::modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<1>&&, int, int, bool, wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 3 → 4 taken 5 times.
✗ Branch 3 → 36 not taken.
void wala::fft::detail::finish_linear<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>, wala::fft::engines::componentwise<wala::fft::engines::split<wala::modnum<1000000007> >, wala::mat<wala::modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<2>, wala::fft::add_op>(wala::fft::engines::componentwise<wala::fft::engines::split<wala::modnum<1000000007> >, wala::mat<wala::modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<2>&&, int, int, bool, wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 3 → 4 taken 53 times.
✗ Branch 3 → 36 not taken.
void wala::fft::detail::finish_linear<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<1>, wala::fft::add_twice_op>(wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<1>&&, int, int, bool, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::add_twice_op):
✓ Branch 3 → 4 taken 322 times.
✗ Branch 3 → 28 not taken.
void wala::fft::detail::finish_linear<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<1>, wala::fft::add_op>(wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<1>&&, int, int, bool, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 3 → 4 taken 36 times.
✗ Branch 3 → 30 not taken.
void wala::fft::detail::finish_linear<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<1>, wala::fft::assign_op>(wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<1>&&, int, int, bool, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 2 → 3 taken 48 times.
✗ Branch 2 → 17 not taken.
✓ Branch 3 → 4 taken 30 times.
✗ Branch 3 → 30 not taken.
void wala::fft::detail::finish_linear<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<2>, wala::fft::add_op>(wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<2>&&, int, int, bool, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 3 → 4 taken 322 times.
✗ Branch 3 → 30 not taken.
void wala::fft::detail::finish_linear<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<2>, wala::fft::assign_op>(wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<2>&&, int, int, bool, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 3 → 4 taken 8 times.
✗ Branch 3 → 30 not taken.
void wala::fft::detail::finish_linear<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed, wala::fft::add_twice_op>(wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&&, int, int, bool, wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::add_twice_op):
✓ Branch 3 → 4 taken 322 times.
✗ Branch 3 → 30 not taken.
void wala::fft::detail::finish_linear<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed, wala::fft::add_op>(wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&&, int, int, bool, wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 3 → 4 taken 358 times.
✗ Branch 3 → 32 not taken.
void wala::fft::detail::finish_linear<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed, wala::fft::assign_op>(wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&&, int, int, bool, wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 3 → 4 taken 38 times.
✗ Branch 3 → 32 not taken.
void wala::fft::detail::finish_linear<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed, wala::fft::add_twice_op>(wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&&, int, int, bool, wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::add_twice_op):
✓ Branch 3 → 4 taken 322 times.
✗ Branch 3 → 30 not taken.
void wala::fft::detail::finish_linear<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed, wala::fft::add_op>(wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&&, int, int, bool, wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 3 → 4 taken 358 times.
✗ Branch 3 → 32 not taken.
void wala::fft::detail::finish_linear<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed, wala::fft::assign_op>(wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&&, int, int, bool, wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 2 → 3 taken 1971379 times.
✗ Branch 2 → 17 not taken.
✓ Branch 3 → 4 taken 562 times.
✗ Branch 3 → 32 not taken.
void wala::fft::detail::finish_linear<wala::fft::engines::real<double>, wala::fft::engines::real<double>::transformed, wala::fft::assign_op>(wala::fft::engines::real<double>::transformed&&, int, int, bool, wala::fft::engines::real<double>::value_type, std::span<wala::fft::engines::real<double>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 3 → 4 taken 18 times.
✗ Branch 3 → 29 not taken.
void wala::fft::detail::finish_linear<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::engines::split<wala::modnum<1000000007> >::product_t<1>, wala::fft::add_twice_op>(wala::fft::engines::split<wala::modnum<1000000007> >::product_t<1>&&, int, int, bool, wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::add_twice_op):
✓ Branch 3 → 4 taken 322 times.
✗ Branch 3 → 28 not taken.
void wala::fft::detail::finish_linear<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::engines::split<wala::modnum<1000000007> >::product_t<1>, wala::fft::add_op>(wala::fft::engines::split<wala::modnum<1000000007> >::product_t<1>&&, int, int, bool, wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 3 → 4 taken 36 times.
✗ Branch 3 → 30 not taken.
void wala::fft::detail::finish_linear<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::engines::split<wala::modnum<1000000007> >::product_t<1>, wala::fft::assign_op>(wala::fft::engines::split<wala::modnum<1000000007> >::product_t<1>&&, int, int, bool, wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 2 → 3 taken 48 times.
✗ Branch 2 → 17 not taken.
✓ Branch 3 → 4 taken 30 times.
✗ Branch 3 → 30 not taken.
void wala::fft::detail::finish_linear<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::engines::split<wala::modnum<1000000007> >::product_t<2>, wala::fft::add_op>(wala::fft::engines::split<wala::modnum<1000000007> >::product_t<2>&&, int, int, bool, wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 3 → 4 taken 322 times.
✗ Branch 3 → 30 not taken.
void wala::fft::detail::finish_linear<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::engines::split<wala::modnum<1000000007> >::product_t<2>, wala::fft::assign_op>(wala::fft::engines::split<wala::modnum<1000000007> >::product_t<2>&&, int, int, bool, wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 3 → 4 taken 8 times.
✗ Branch 3 → 30 not taken.
void wala::fft::detail::finish_linear<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::engines::componentwise<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::mat<wala::modnum<998244353>, 3>, 9, std::array<int, 10ul>{int [10]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}}>::product_t<0>, wala::fft::add_op>(wala::fft::engines::componentwise<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::mat<wala::modnum<998244353>, 3>, 9, std::array<int, 10ul>{int [10]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}}>::product_t<0>&&, int, int, bool, wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 3 → 4 taken 58 times.
✗ Branch 3 → 36 not taken.
void wala::fft::detail::finish_linear<wala::fft::nc_engine, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed, wala::fft::add_op>(wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&&, int, int, bool, wala::fft::nc_engine::value_type, std::span<wala::fft::nc_engine::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 3 → 4 taken 340 times.
✗ Branch 3 → 32 not taken.
1975461 if (sz(out) == 0) return;
91
6/6
void wala::fft::detail::finish_linear<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<1>, wala::fft::assign_op>(wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<1>&&, int, int, bool, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 5 → 6 taken 8 times.
✓ Branch 5 → 7 taken 40 times.
void wala::fft::detail::finish_linear<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed, wala::fft::assign_op>(wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&&, int, int, bool, wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 5 → 6 taken 1647889 times.
✓ Branch 5 → 7 taken 323490 times.
void wala::fft::detail::finish_linear<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::engines::split<wala::modnum<1000000007> >::product_t<1>, wala::fft::assign_op>(wala::fft::engines::split<wala::modnum<1000000007> >::product_t<1>&&, int, int, bool, wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 5 → 6 taken 8 times.
✓ Branch 5 → 7 taken 40 times.
1975461 int lim = min(sz(out), min(s, n));
92
54/54
void wala::fft::detail::finish_linear<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>, wala::fft::engines::componentwise<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::mat<wala::modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<1>, wala::fft::add_op>(wala::fft::engines::componentwise<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::mat<wala::modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<1>&&, int, int, bool, wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 12 → 13 taken 4 times.
✓ Branch 12 → 15 taken 1 time.
void wala::fft::detail::finish_linear<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>, wala::fft::engines::componentwise<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::mat<wala::modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<2>, wala::fft::add_op>(wala::fft::engines::componentwise<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::mat<wala::modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<2>&&, int, int, bool, wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 12 → 13 taken 39 times.
✓ Branch 12 → 15 taken 14 times.
void wala::fft::detail::finish_linear<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::engines::componentwise<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::mat<wala::modnum<998244353>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<0>, wala::fft::add_op>(wala::fft::engines::componentwise<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::mat<wala::modnum<998244353>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<0>&&, int, int, bool, wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 12 → 13 taken 43 times.
✓ Branch 12 → 15 taken 15 times.
void wala::fft::detail::finish_linear<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>, wala::fft::engines::componentwise<wala::fft::engines::split<wala::modnum<1000000007> >, wala::mat<wala::modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<1>, wala::fft::add_op>(wala::fft::engines::componentwise<wala::fft::engines::split<wala::modnum<1000000007> >, wala::mat<wala::modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<1>&&, int, int, bool, wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 12 → 13 taken 4 times.
✓ Branch 12 → 15 taken 1 time.
void wala::fft::detail::finish_linear<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>, wala::fft::engines::componentwise<wala::fft::engines::split<wala::modnum<1000000007> >, wala::mat<wala::modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<2>, wala::fft::add_op>(wala::fft::engines::componentwise<wala::fft::engines::split<wala::modnum<1000000007> >, wala::mat<wala::modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<2>&&, int, int, bool, wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 12 → 13 taken 39 times.
✓ Branch 12 → 15 taken 14 times.
void wala::fft::detail::finish_linear<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<1>, wala::fft::add_twice_op>(wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<1>&&, int, int, bool, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::add_twice_op):
✓ Branch 12 → 13 taken 238 times.
✓ Branch 12 → 15 taken 84 times.
void wala::fft::detail::finish_linear<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<1>, wala::fft::add_op>(wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<1>&&, int, int, bool, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 12 → 13 taken 30 times.
✓ Branch 12 → 15 taken 6 times.
void wala::fft::detail::finish_linear<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<1>, wala::fft::assign_op>(wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<1>&&, int, int, bool, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 7 → 8 taken 40 times.
✓ Branch 7 → 11 taken 8 times.
✓ Branch 12 → 13 taken 18 times.
✓ Branch 12 → 15 taken 12 times.
void wala::fft::detail::finish_linear<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<2>, wala::fft::add_op>(wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<2>&&, int, int, bool, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 12 → 13 taken 238 times.
✓ Branch 12 → 15 taken 84 times.
void wala::fft::detail::finish_linear<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<2>, wala::fft::assign_op>(wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<2>&&, int, int, bool, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 12 → 13 taken 3 times.
✓ Branch 12 → 15 taken 5 times.
void wala::fft::detail::finish_linear<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed, wala::fft::add_twice_op>(wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&&, int, int, bool, wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::add_twice_op):
✓ Branch 12 → 13 taken 238 times.
✓ Branch 12 → 16 taken 84 times.
void wala::fft::detail::finish_linear<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed, wala::fft::add_op>(wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&&, int, int, bool, wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 12 → 13 taken 268 times.
✓ Branch 12 → 16 taken 90 times.
void wala::fft::detail::finish_linear<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed, wala::fft::assign_op>(wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&&, int, int, bool, wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 12 → 13 taken 21 times.
✓ Branch 12 → 16 taken 17 times.
void wala::fft::detail::finish_linear<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed, wala::fft::add_twice_op>(wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&&, int, int, bool, wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::add_twice_op):
✓ Branch 12 → 13 taken 238 times.
✓ Branch 12 → 16 taken 84 times.
void wala::fft::detail::finish_linear<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed, wala::fft::add_op>(wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&&, int, int, bool, wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 12 → 13 taken 268 times.
✓ Branch 12 → 16 taken 90 times.
void wala::fft::detail::finish_linear<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed, wala::fft::assign_op>(wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&&, int, int, bool, wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 7 → 8 taken 323386 times.
✓ Branch 7 → 11 taken 1647993 times.
✓ Branch 12 → 13 taken 294 times.
✓ Branch 12 → 16 taken 268 times.
void wala::fft::detail::finish_linear<wala::fft::engines::real<double>, wala::fft::engines::real<double>::transformed, wala::fft::assign_op>(wala::fft::engines::real<double>::transformed&&, int, int, bool, wala::fft::engines::real<double>::value_type, std::span<wala::fft::engines::real<double>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 12 → 13 taken 11 times.
✓ Branch 12 → 16 taken 7 times.
void wala::fft::detail::finish_linear<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::engines::split<wala::modnum<1000000007> >::product_t<1>, wala::fft::add_twice_op>(wala::fft::engines::split<wala::modnum<1000000007> >::product_t<1>&&, int, int, bool, wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::add_twice_op):
✓ Branch 12 → 13 taken 238 times.
✓ Branch 12 → 15 taken 84 times.
void wala::fft::detail::finish_linear<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::engines::split<wala::modnum<1000000007> >::product_t<1>, wala::fft::add_op>(wala::fft::engines::split<wala::modnum<1000000007> >::product_t<1>&&, int, int, bool, wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 12 → 13 taken 30 times.
✓ Branch 12 → 15 taken 6 times.
void wala::fft::detail::finish_linear<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::engines::split<wala::modnum<1000000007> >::product_t<1>, wala::fft::assign_op>(wala::fft::engines::split<wala::modnum<1000000007> >::product_t<1>&&, int, int, bool, wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 7 → 8 taken 40 times.
✓ Branch 7 → 11 taken 8 times.
✓ Branch 12 → 13 taken 18 times.
✓ Branch 12 → 15 taken 12 times.
void wala::fft::detail::finish_linear<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::engines::split<wala::modnum<1000000007> >::product_t<2>, wala::fft::add_op>(wala::fft::engines::split<wala::modnum<1000000007> >::product_t<2>&&, int, int, bool, wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 12 → 13 taken 238 times.
✓ Branch 12 → 15 taken 84 times.
void wala::fft::detail::finish_linear<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::engines::split<wala::modnum<1000000007> >::product_t<2>, wala::fft::assign_op>(wala::fft::engines::split<wala::modnum<1000000007> >::product_t<2>&&, int, int, bool, wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 12 → 13 taken 3 times.
✓ Branch 12 → 15 taken 5 times.
void wala::fft::detail::finish_linear<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::engines::componentwise<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::mat<wala::modnum<998244353>, 3>, 9, std::array<int, 10ul>{int [10]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}}>::product_t<0>, wala::fft::add_op>(wala::fft::engines::componentwise<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::mat<wala::modnum<998244353>, 3>, 9, std::array<int, 10ul>{int [10]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}}>::product_t<0>&&, int, int, bool, wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 12 → 13 taken 43 times.
✓ Branch 12 → 15 taken 15 times.
void wala::fft::detail::finish_linear<wala::fft::nc_engine, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed, wala::fft::add_op>(wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&&, int, int, bool, wala::fft::nc_engine::value_type, std::span<wala::fft::nc_engine::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 12 → 13 taken 253 times.
✓ Branch 12 → 16 taken 87 times.
1975461 if (!cut) {
93
3/6
void wala::fft::detail::finish_linear<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<1>, wala::fft::assign_op>(wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<1>&&, int, int, bool, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 8 → 9 not taken.
✓ Branch 8 → 10 taken 40 times.
void wala::fft::detail::finish_linear<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed, wala::fft::assign_op>(wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&&, int, int, bool, wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 8 → 9 not taken.
✓ Branch 8 → 10 taken 323386 times.
void wala::fft::detail::finish_linear<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::engines::split<wala::modnum<1000000007> >::product_t<1>, wala::fft::assign_op>(wala::fft::engines::split<wala::modnum<1000000007> >::product_t<1>&&, int, int, bool, wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 8 → 9 not taken.
✓ Branch 8 → 10 taken 40 times.
326283 E::finish(std::move(p), out.subspan(0, lim), op);
94 } else {
95
15/18
void wala::fft::detail::finish_linear<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>, wala::fft::engines::componentwise<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::mat<wala::modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<1>, wala::fft::add_op>(wala::fft::engines::componentwise<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::mat<wala::modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<1>&&, int, int, bool, wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 24 → 16 taken 9 times.
✓ Branch 24 → 25 taken 1 time.
void wala::fft::detail::finish_linear<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>, wala::fft::engines::componentwise<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::mat<wala::modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<2>, wala::fft::add_op>(wala::fft::engines::componentwise<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::mat<wala::modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<2>&&, int, int, bool, wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 24 → 16 taken 126 times.
✓ Branch 24 → 25 taken 14 times.
void wala::fft::detail::finish_linear<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::engines::componentwise<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::mat<wala::modnum<998244353>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<0>, wala::fft::add_op>(wala::fft::engines::componentwise<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::mat<wala::modnum<998244353>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<0>&&, int, int, bool, wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 24 → 16 taken 135 times.
✓ Branch 24 → 25 taken 15 times.
void wala::fft::detail::finish_linear<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>, wala::fft::engines::componentwise<wala::fft::engines::split<wala::modnum<1000000007> >, wala::mat<wala::modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<1>, wala::fft::add_op>(wala::fft::engines::componentwise<wala::fft::engines::split<wala::modnum<1000000007> >, wala::mat<wala::modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<1>&&, int, int, bool, wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 24 → 16 taken 9 times.
✓ Branch 24 → 25 taken 1 time.
void wala::fft::detail::finish_linear<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>, wala::fft::engines::componentwise<wala::fft::engines::split<wala::modnum<1000000007> >, wala::mat<wala::modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<2>, wala::fft::add_op>(wala::fft::engines::componentwise<wala::fft::engines::split<wala::modnum<1000000007> >, wala::mat<wala::modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<2>&&, int, int, bool, wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 24 → 16 taken 126 times.
✓ Branch 24 → 25 taken 14 times.
void wala::fft::detail::finish_linear<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<1>, wala::fft::assign_op>(wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<1>&&, int, int, bool, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 11 → 12 not taken.
✓ Branch 11 → 13 taken 8 times.
void wala::fft::detail::finish_linear<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed, wala::fft::assign_op>(wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&&, int, int, bool, wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 11 → 12 not taken.
✓ Branch 11 → 13 taken 1647993 times.
void wala::fft::detail::finish_linear<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::engines::split<wala::modnum<1000000007> >::product_t<1>, wala::fft::assign_op>(wala::fft::engines::split<wala::modnum<1000000007> >::product_t<1>&&, int, int, bool, wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 11 → 12 not taken.
✓ Branch 11 → 13 taken 8 times.
void wala::fft::detail::finish_linear<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::engines::componentwise<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::mat<wala::modnum<998244353>, 3>, 9, std::array<int, 10ul>{int [10]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}}>::product_t<0>, wala::fft::add_op>(wala::fft::engines::componentwise<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::mat<wala::modnum<998244353>, 3>, 9, std::array<int, 10ul>{int [10]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}}>::product_t<0>&&, int, int, bool, wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 24 → 16 taken 135 times.
✓ Branch 24 → 25 taken 15 times.
1649718 T cn{};
96
27/30
void wala::fft::detail::finish_linear<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>, wala::fft::engines::componentwise<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::mat<wala::modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<1>, wala::fft::add_op>(wala::fft::engines::componentwise<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::mat<wala::modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<1>&&, int, int, bool, wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 28 → 29 taken 1 time.
void wala::fft::detail::finish_linear<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>, wala::fft::engines::componentwise<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::mat<wala::modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<2>, wala::fft::add_op>(wala::fft::engines::componentwise<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::mat<wala::modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<2>&&, int, int, bool, wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 28 → 29 taken 14 times.
void wala::fft::detail::finish_linear<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::engines::componentwise<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::mat<wala::modnum<998244353>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<0>, wala::fft::add_op>(wala::fft::engines::componentwise<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::mat<wala::modnum<998244353>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<0>&&, int, int, bool, wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 28 → 29 taken 15 times.
void wala::fft::detail::finish_linear<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>, wala::fft::engines::componentwise<wala::fft::engines::split<wala::modnum<1000000007> >, wala::mat<wala::modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<1>, wala::fft::add_op>(wala::fft::engines::componentwise<wala::fft::engines::split<wala::modnum<1000000007> >, wala::mat<wala::modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<1>&&, int, int, bool, wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 28 → 29 taken 1 time.
void wala::fft::detail::finish_linear<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>, wala::fft::engines::componentwise<wala::fft::engines::split<wala::modnum<1000000007> >, wala::mat<wala::modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<2>, wala::fft::add_op>(wala::fft::engines::componentwise<wala::fft::engines::split<wala::modnum<1000000007> >, wala::mat<wala::modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<2>&&, int, int, bool, wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 28 → 29 taken 14 times.
void wala::fft::detail::finish_linear<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<1>, wala::fft::add_twice_op>(wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<1>&&, int, int, bool, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::add_twice_op):
✓ Branch 21 → 22 taken 84 times.
void wala::fft::detail::finish_linear<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<1>, wala::fft::add_op>(wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<1>&&, int, int, bool, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 21 → 22 taken 6 times.
void wala::fft::detail::finish_linear<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<1>, wala::fft::assign_op>(wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<1>&&, int, int, bool, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 11 → 12 not taken.
✓ Branch 11 → 13 taken 8 times.
✓ Branch 21 → 22 taken 12 times.
void wala::fft::detail::finish_linear<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<2>, wala::fft::add_op>(wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<2>&&, int, int, bool, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 21 → 22 taken 84 times.
void wala::fft::detail::finish_linear<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<2>, wala::fft::assign_op>(wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<2>&&, int, int, bool, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 21 → 22 taken 5 times.
void wala::fft::detail::finish_linear<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed, wala::fft::add_twice_op>(wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&&, int, int, bool, wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::add_twice_op):
✓ Branch 23 → 24 taken 84 times.
void wala::fft::detail::finish_linear<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed, wala::fft::add_op>(wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&&, int, int, bool, wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 23 → 24 taken 90 times.
void wala::fft::detail::finish_linear<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed, wala::fft::assign_op>(wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&&, int, int, bool, wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 23 → 24 taken 17 times.
void wala::fft::detail::finish_linear<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed, wala::fft::add_twice_op>(wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&&, int, int, bool, wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::add_twice_op):
✓ Branch 23 → 24 taken 84 times.
void wala::fft::detail::finish_linear<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed, wala::fft::add_op>(wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&&, int, int, bool, wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 23 → 24 taken 90 times.
void wala::fft::detail::finish_linear<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed, wala::fft::assign_op>(wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&&, int, int, bool, wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 11 → 12 not taken.
✓ Branch 11 → 13 taken 1647993 times.
✓ Branch 23 → 24 taken 268 times.
void wala::fft::detail::finish_linear<wala::fft::engines::real<double>, wala::fft::engines::real<double>::transformed, wala::fft::assign_op>(wala::fft::engines::real<double>::transformed&&, int, int, bool, wala::fft::engines::real<double>::value_type, std::span<wala::fft::engines::real<double>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 20 → 21 taken 7 times.
void wala::fft::detail::finish_linear<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::engines::split<wala::modnum<1000000007> >::product_t<1>, wala::fft::add_twice_op>(wala::fft::engines::split<wala::modnum<1000000007> >::product_t<1>&&, int, int, bool, wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::add_twice_op):
✓ Branch 21 → 22 taken 84 times.
void wala::fft::detail::finish_linear<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::engines::split<wala::modnum<1000000007> >::product_t<1>, wala::fft::add_op>(wala::fft::engines::split<wala::modnum<1000000007> >::product_t<1>&&, int, int, bool, wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 21 → 22 taken 6 times.
void wala::fft::detail::finish_linear<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::engines::split<wala::modnum<1000000007> >::product_t<1>, wala::fft::assign_op>(wala::fft::engines::split<wala::modnum<1000000007> >::product_t<1>&&, int, int, bool, wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 11 → 12 not taken.
✓ Branch 11 → 13 taken 8 times.
✓ Branch 21 → 22 taken 12 times.
void wala::fft::detail::finish_linear<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::engines::split<wala::modnum<1000000007> >::product_t<2>, wala::fft::add_op>(wala::fft::engines::split<wala::modnum<1000000007> >::product_t<2>&&, int, int, bool, wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 21 → 22 taken 84 times.
void wala::fft::detail::finish_linear<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::engines::split<wala::modnum<1000000007> >::product_t<2>, wala::fft::assign_op>(wala::fft::engines::split<wala::modnum<1000000007> >::product_t<2>&&, int, int, bool, wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 21 → 22 taken 5 times.
void wala::fft::detail::finish_linear<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::engines::componentwise<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::mat<wala::modnum<998244353>, 3>, 9, std::array<int, 10ul>{int [10]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}}>::product_t<0>, wala::fft::add_op>(wala::fft::engines::componentwise<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::mat<wala::modnum<998244353>, 3>, 9, std::array<int, 10ul>{int [10]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}}>::product_t<0>&&, int, int, bool, wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 28 → 29 taken 15 times.
void wala::fft::detail::finish_linear<wala::fft::nc_engine, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed, wala::fft::add_op>(wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&&, int, int, bool, wala::fft::nc_engine::value_type, std::span<wala::fft::nc_engine::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 23 → 24 taken 87 times.
1649178 E::finish(std::move(p), out.subspan(0, lim), cut_op<T, Op>{op, &out[0], c0, cn});
97
32/54
void wala::fft::detail::finish_linear<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>, wala::fft::engines::componentwise<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::mat<wala::modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<1>, wala::fft::add_op>(wala::fft::engines::componentwise<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::mat<wala::modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<1>&&, int, int, bool, wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 30 → 31 taken 1 time.
✗ Branch 30 → 35 not taken.
void wala::fft::detail::finish_linear<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>, wala::fft::engines::componentwise<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::mat<wala::modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<2>, wala::fft::add_op>(wala::fft::engines::componentwise<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::mat<wala::modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<2>&&, int, int, bool, wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 30 → 31 taken 14 times.
✗ Branch 30 → 35 not taken.
void wala::fft::detail::finish_linear<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::engines::componentwise<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::mat<wala::modnum<998244353>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<0>, wala::fft::add_op>(wala::fft::engines::componentwise<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::mat<wala::modnum<998244353>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<0>&&, int, int, bool, wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 30 → 31 taken 15 times.
✗ Branch 30 → 35 not taken.
void wala::fft::detail::finish_linear<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>, wala::fft::engines::componentwise<wala::fft::engines::split<wala::modnum<1000000007> >, wala::mat<wala::modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<1>, wala::fft::add_op>(wala::fft::engines::componentwise<wala::fft::engines::split<wala::modnum<1000000007> >, wala::mat<wala::modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<1>&&, int, int, bool, wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 30 → 31 taken 1 time.
✗ Branch 30 → 35 not taken.
void wala::fft::detail::finish_linear<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>, wala::fft::engines::componentwise<wala::fft::engines::split<wala::modnum<1000000007> >, wala::mat<wala::modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<2>, wala::fft::add_op>(wala::fft::engines::componentwise<wala::fft::engines::split<wala::modnum<1000000007> >, wala::mat<wala::modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<2>&&, int, int, bool, wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 30 → 31 taken 14 times.
✗ Branch 30 → 35 not taken.
void wala::fft::detail::finish_linear<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<1>, wala::fft::add_twice_op>(wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<1>&&, int, int, bool, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::add_twice_op):
✓ Branch 23 → 24 taken 84 times.
✗ Branch 23 → 27 not taken.
void wala::fft::detail::finish_linear<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<1>, wala::fft::add_op>(wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<1>&&, int, int, bool, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 23 → 24 taken 6 times.
✗ Branch 23 → 29 not taken.
void wala::fft::detail::finish_linear<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<1>, wala::fft::assign_op>(wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<1>&&, int, int, bool, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 14 → 15 taken 8 times.
✗ Branch 14 → 16 not taken.
✓ Branch 23 → 24 taken 2 times.
✓ Branch 23 → 29 taken 10 times.
void wala::fft::detail::finish_linear<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<2>, wala::fft::add_op>(wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<2>&&, int, int, bool, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 23 → 24 taken 84 times.
✗ Branch 23 → 29 not taken.
void wala::fft::detail::finish_linear<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<2>, wala::fft::assign_op>(wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::product_t<2>&&, int, int, bool, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 23 → 24 taken 5 times.
✗ Branch 23 → 29 not taken.
void wala::fft::detail::finish_linear<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed, wala::fft::add_twice_op>(wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&&, int, int, bool, wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::add_twice_op):
✓ Branch 25 → 26 taken 84 times.
✗ Branch 25 → 29 not taken.
void wala::fft::detail::finish_linear<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed, wala::fft::add_op>(wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&&, int, int, bool, wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 25 → 26 taken 90 times.
✗ Branch 25 → 31 not taken.
void wala::fft::detail::finish_linear<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed, wala::fft::assign_op>(wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&&, int, int, bool, wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 25 → 26 taken 7 times.
✓ Branch 25 → 31 taken 10 times.
void wala::fft::detail::finish_linear<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed, wala::fft::add_twice_op>(wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&&, int, int, bool, wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::add_twice_op):
✓ Branch 25 → 26 taken 84 times.
✗ Branch 25 → 29 not taken.
void wala::fft::detail::finish_linear<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed, wala::fft::add_op>(wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&&, int, int, bool, wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 25 → 26 taken 90 times.
✗ Branch 25 → 31 not taken.
void wala::fft::detail::finish_linear<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed, wala::fft::assign_op>(wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&&, int, int, bool, wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 14 → 15 taken 1647889 times.
✓ Branch 14 → 16 taken 104 times.
✓ Branch 25 → 26 taken 162 times.
✓ Branch 25 → 31 taken 106 times.
void wala::fft::detail::finish_linear<wala::fft::engines::real<double>, wala::fft::engines::real<double>::transformed, wala::fft::assign_op>(wala::fft::engines::real<double>::transformed&&, int, int, bool, wala::fft::engines::real<double>::value_type, std::span<wala::fft::engines::real<double>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 22 → 23 taken 7 times.
✗ Branch 22 → 28 not taken.
void wala::fft::detail::finish_linear<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::engines::split<wala::modnum<1000000007> >::product_t<1>, wala::fft::add_twice_op>(wala::fft::engines::split<wala::modnum<1000000007> >::product_t<1>&&, int, int, bool, wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::add_twice_op):
✓ Branch 23 → 24 taken 84 times.
✗ Branch 23 → 27 not taken.
void wala::fft::detail::finish_linear<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::engines::split<wala::modnum<1000000007> >::product_t<1>, wala::fft::add_op>(wala::fft::engines::split<wala::modnum<1000000007> >::product_t<1>&&, int, int, bool, wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 23 → 24 taken 6 times.
✗ Branch 23 → 29 not taken.
void wala::fft::detail::finish_linear<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::engines::split<wala::modnum<1000000007> >::product_t<1>, wala::fft::assign_op>(wala::fft::engines::split<wala::modnum<1000000007> >::product_t<1>&&, int, int, bool, wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 14 → 15 taken 8 times.
✗ Branch 14 → 16 not taken.
✓ Branch 23 → 24 taken 2 times.
✓ Branch 23 → 29 taken 10 times.
void wala::fft::detail::finish_linear<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::engines::split<wala::modnum<1000000007> >::product_t<2>, wala::fft::add_op>(wala::fft::engines::split<wala::modnum<1000000007> >::product_t<2>&&, int, int, bool, wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 23 → 24 taken 84 times.
✗ Branch 23 → 29 not taken.
void wala::fft::detail::finish_linear<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::engines::split<wala::modnum<1000000007> >::product_t<2>, wala::fft::assign_op>(wala::fft::engines::split<wala::modnum<1000000007> >::product_t<2>&&, int, int, bool, wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 23 → 24 taken 5 times.
✗ Branch 23 → 29 not taken.
void wala::fft::detail::finish_linear<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::engines::componentwise<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::mat<wala::modnum<998244353>, 3>, 9, std::array<int, 10ul>{int [10]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}}>::product_t<0>, wala::fft::add_op>(wala::fft::engines::componentwise<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::mat<wala::modnum<998244353>, 3>, 9, std::array<int, 10ul>{int [10]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}}>::product_t<0>&&, int, int, bool, wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 30 → 31 taken 15 times.
✗ Branch 30 → 35 not taken.
void wala::fft::detail::finish_linear<wala::fft::nc_engine, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed, wala::fft::add_op>(wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&&, int, int, bool, wala::fft::nc_engine::value_type, std::span<wala::fft::nc_engine::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 25 → 26 taken 87 times.
✗ Branch 25 → 31 not taken.
1649815 if (sz(out) >= s) op(out[s-1], cn);
98 }
99 }
100 } // namespace detail
101
102 template <engine E, typename Op = assign_op>
103 932 void multiply(std::span<const typename E::value_type> a, std::span<const typename E::value_type> b,
104 std::span<typename E::value_type> out, Op op = {}) {
105 using T = typename E::value_type;
106
46/91
void wala::fft::multiply<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 3 → 4 taken 20 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 8 taken 20 times.
void wala::fft::multiply<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 3 → 4 taken 20 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 8 taken 20 times.
void wala::fft::multiply<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 3 → 4 taken 20 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 8 taken 20 times.
void wala::fft::multiply<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 3 → 4 taken 20 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 8 taken 20 times.
void wala::fft::multiply<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 3 → 4 taken 20 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 8 taken 20 times.
void wala::fft::multiply<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 3 → 4 taken 20 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 8 taken 20 times.
void wala::fft::multiply<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::add_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 3 → 4 taken 1 time.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 8 taken 1 time.
void wala::fft::multiply<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::assign_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 3 → 4 taken 25 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 8 taken 25 times.
void wala::fft::multiply<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 3 → 4 taken 1 time.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 8 taken 1 time.
void wala::fft::multiply<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 3 → 4 taken 25 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 8 taken 25 times.
void wala::fft::multiply<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 3 → 4 taken 1 time.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 8 taken 1 time.
void wala::fft::multiply<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 2 → 3 taken 537 times.
✗ Branch 2 → 4 not taken.
✓ Branch 3 → 4 taken 50 times.
✓ Branch 3 → 5 taken 537 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 8 taken 50 times.
void wala::fft::multiply<wala::fft::engines::real<double>, wala::fft::add_op>(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 3 → 4 taken 1 time.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 7 taken 1 time.
void wala::fft::multiply<wala::fft::engines::real<double>, wala::fft::assign_op>(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 3 → 4 taken 25 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 7 taken 25 times.
void wala::fft::multiply<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::add_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 3 → 4 taken 1 time.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 8 taken 1 time.
void wala::fft::multiply<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::assign_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 3 → 4 taken 25 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 8 taken 25 times.
void wala::fft::multiply<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 3 → 4 taken 20 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 8 taken 20 times.
void wala::fft::multiply<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 3 → 4 taken 20 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 8 taken 20 times.
void wala::fft::multiply<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 3 → 4 taken 20 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 8 taken 20 times.
void wala::fft::multiply<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 3 → 4 taken 20 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 8 taken 20 times.
void wala::fft::multiply<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 3 → 4 taken 20 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 8 taken 20 times.
void wala::fft::multiply<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 3 → 4 taken 20 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 8 taken 20 times.
932 if (sz(a) == 0 || sz(b) == 0) return;
107 932 int s = sz(a) + sz(b) - 1;
108 932 auto [n, cut] = detail::conv_size_for(s);
109 932 T c0 = a[0] * b[0];
110
22/22
void wala::fft::multiply<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 18 → 19 taken 20 times.
void wala::fft::multiply<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 18 → 19 taken 20 times.
void wala::fft::multiply<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 18 → 19 taken 20 times.
void wala::fft::multiply<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 18 → 19 taken 20 times.
void wala::fft::multiply<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 18 → 19 taken 20 times.
void wala::fft::multiply<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 18 → 19 taken 20 times.
void wala::fft::multiply<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::add_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 18 → 19 taken 1 time.
void wala::fft::multiply<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::assign_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 18 → 19 taken 25 times.
void wala::fft::multiply<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 18 → 19 taken 1 time.
void wala::fft::multiply<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 18 → 19 taken 25 times.
void wala::fft::multiply<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 18 → 19 taken 1 time.
void wala::fft::multiply<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 18 → 19 taken 50 times.
void wala::fft::multiply<wala::fft::engines::real<double>, wala::fft::add_op>(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 17 → 18 taken 1 time.
void wala::fft::multiply<wala::fft::engines::real<double>, wala::fft::assign_op>(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 17 → 18 taken 25 times.
void wala::fft::multiply<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::add_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 18 → 19 taken 1 time.
void wala::fft::multiply<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::assign_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 18 → 19 taken 25 times.
void wala::fft::multiply<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 18 → 19 taken 20 times.
void wala::fft::multiply<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 18 → 19 taken 20 times.
void wala::fft::multiply<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 18 → 19 taken 20 times.
void wala::fft::multiply<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 18 → 19 taken 20 times.
void wala::fft::multiply<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 18 → 19 taken 20 times.
void wala::fft::multiply<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 18 → 19 taken 20 times.
932 auto buf = buffer_pool<T>::get(n);
111
24/25
void wala::fft::multiply<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 24 → 25 taken 20 times.
void wala::fft::multiply<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 24 → 25 taken 20 times.
void wala::fft::multiply<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 24 → 25 taken 20 times.
void wala::fft::multiply<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 24 → 25 taken 20 times.
void wala::fft::multiply<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 24 → 25 taken 20 times.
void wala::fft::multiply<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 24 → 25 taken 20 times.
void wala::fft::multiply<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::add_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 24 → 25 taken 1 time.
void wala::fft::multiply<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::assign_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 24 → 25 taken 25 times.
void wala::fft::multiply<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 24 → 25 taken 1 time.
void wala::fft::multiply<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 24 → 25 taken 25 times.
void wala::fft::multiply<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 24 → 25 taken 1 time.
void wala::fft::multiply<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 6 → 7 not taken.
✓ Branch 6 → 8 taken 537 times.
✓ Branch 8 → 9 taken 537 times.
✓ Branch 24 → 25 taken 50 times.
void wala::fft::multiply<wala::fft::engines::real<double>, wala::fft::add_op>(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 23 → 24 taken 1 time.
void wala::fft::multiply<wala::fft::engines::real<double>, wala::fft::assign_op>(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 23 → 24 taken 25 times.
void wala::fft::multiply<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::add_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 24 → 25 taken 1 time.
void wala::fft::multiply<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::assign_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 24 → 25 taken 25 times.
void wala::fft::multiply<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 24 → 25 taken 20 times.
void wala::fft::multiply<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 24 → 25 taken 20 times.
void wala::fft::multiply<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 24 → 25 taken 20 times.
void wala::fft::multiply<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 24 → 25 taken 20 times.
void wala::fft::multiply<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 24 → 25 taken 20 times.
void wala::fft::multiply<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 24 → 25 taken 20 times.
1327 multiply_circular<E>(a, b, buf.span(), n);
112
22/44
void wala::fft::multiply<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 20 times.
void wala::fft::multiply<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 20 times.
void wala::fft::multiply<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 20 times.
void wala::fft::multiply<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 20 times.
void wala::fft::multiply<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 20 times.
void wala::fft::multiply<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 20 times.
void wala::fft::multiply<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::add_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 1 time.
void wala::fft::multiply<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::assign_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 25 times.
void wala::fft::multiply<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 1 time.
void wala::fft::multiply<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 25 times.
void wala::fft::multiply<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 1 time.
void wala::fft::multiply<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 50 times.
void wala::fft::multiply<wala::fft::engines::real<double>, wala::fft::add_op>(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 24 → 25 not taken.
✓ Branch 24 → 26 taken 1 time.
void wala::fft::multiply<wala::fft::engines::real<double>, wala::fft::assign_op>(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 24 → 25 not taken.
✓ Branch 24 → 26 taken 25 times.
void wala::fft::multiply<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::add_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 1 time.
void wala::fft::multiply<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::assign_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 25 times.
void wala::fft::multiply<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 20 times.
void wala::fft::multiply<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 20 times.
void wala::fft::multiply<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>, wala::fft::assign_op>(std::span<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 20 times.
void wala::fft::multiply<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 20 times.
void wala::fft::multiply<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 20 times.
void wala::fft::multiply<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 20 times.
1327 detail::emit_linear<T>(buf.span(), n, s, cut, c0, out, op);
113 932 }
114
115 template <engine E, typename Op = assign_op>
116 3169 void multiply(std::span<const typename E::value_type> a, transformed<E>& ta,
117 std::span<const typename E::value_type> b, transformed<E>& tb,
118 std::span<typename E::value_type> out, Op op = {}) {
119 using T = typename E::value_type;
120
32/61
void wala::fft::multiply<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::add_twice_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::add_twice_op):
✓ Branch 3 → 4 taken 322 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 7 taken 322 times.
void wala::fft::multiply<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::add_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 3 → 4 taken 18 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 7 taken 18 times.
void wala::fft::multiply<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::assign_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 2 → 3 taken 48 times.
✗ Branch 2 → 4 not taken.
✓ Branch 3 → 4 taken 29 times.
✓ Branch 3 → 5 taken 48 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 7 taken 29 times.
void wala::fft::multiply<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::add_twice_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::add_twice_op):
✓ Branch 3 → 4 taken 322 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 7 taken 322 times.
void wala::fft::multiply<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 3 → 4 taken 18 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 7 taken 18 times.
void wala::fft::multiply<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 3 → 4 taken 27 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 7 taken 27 times.
void wala::fft::multiply<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::add_twice_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::add_twice_op):
✓ Branch 3 → 4 taken 322 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 7 taken 322 times.
void wala::fft::multiply<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 3 → 4 taken 18 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 7 taken 18 times.
void wala::fft::multiply<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 2 → 3 taken 1335 times.
✗ Branch 2 → 4 not taken.
✓ Branch 3 → 4 taken 286 times.
✓ Branch 3 → 5 taken 1335 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 7 taken 286 times.
void wala::fft::multiply<wala::fft::engines::real<double>, wala::fft::assign_op>(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, wala::fft::engines::real<double>::transformed&, std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, wala::fft::engines::real<double>::transformed&, std::span<wala::fft::engines::real<double>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 3 → 4 taken 7 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 7 taken 7 times.
void wala::fft::multiply<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::add_twice_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::add_twice_op):
✓ Branch 3 → 4 taken 322 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 7 taken 322 times.
void wala::fft::multiply<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::add_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 3 → 4 taken 18 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 7 taken 18 times.
void wala::fft::multiply<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::assign_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 2 → 3 taken 48 times.
✗ Branch 2 → 4 not taken.
✓ Branch 3 → 4 taken 29 times.
✓ Branch 3 → 5 taken 48 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 7 taken 29 times.
3169 if (sz(a) == 0 || sz(b) == 0) return;
121 3169 int s = sz(a) + sz(b) - 1;
122 3169 auto [n, cut] = detail::conv_size_for(s);
123 3169 T c0 = a[0] * b[0];
124
12/12
void wala::fft::multiply<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::add_twice_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::add_twice_op):
✓ Branch 17 → 18 taken 322 times.
void wala::fft::multiply<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::add_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 17 → 18 taken 18 times.
void wala::fft::multiply<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::assign_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 17 → 18 taken 29 times.
void wala::fft::multiply<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::add_twice_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::add_twice_op):
✓ Branch 17 → 18 taken 322 times.
void wala::fft::multiply<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 17 → 18 taken 18 times.
void wala::fft::multiply<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 17 → 18 taken 27 times.
void wala::fft::multiply<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::add_twice_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::add_twice_op):
✓ Branch 17 → 18 taken 322 times.
void wala::fft::multiply<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 17 → 18 taken 18 times.
void wala::fft::multiply<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 17 → 18 taken 286 times.
void wala::fft::multiply<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::add_twice_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::add_twice_op):
✓ Branch 17 → 18 taken 322 times.
void wala::fft::multiply<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::add_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 17 → 18 taken 18 times.
void wala::fft::multiply<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::assign_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 17 → 18 taken 29 times.
3169 E::extend_to(ta, n, a);
125
12/12
void wala::fft::multiply<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::add_twice_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::add_twice_op):
✓ Branch 19 → 20 taken 322 times.
void wala::fft::multiply<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::add_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 19 → 20 taken 18 times.
void wala::fft::multiply<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::assign_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 19 → 20 taken 29 times.
void wala::fft::multiply<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::add_twice_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::add_twice_op):
✓ Branch 19 → 20 taken 322 times.
void wala::fft::multiply<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 19 → 20 taken 18 times.
void wala::fft::multiply<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 19 → 20 taken 27 times.
void wala::fft::multiply<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::add_twice_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::add_twice_op):
✓ Branch 19 → 20 taken 322 times.
void wala::fft::multiply<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 19 → 20 taken 18 times.
void wala::fft::multiply<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 19 → 20 taken 286 times.
void wala::fft::multiply<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::add_twice_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::add_twice_op):
✓ Branch 19 → 20 taken 322 times.
void wala::fft::multiply<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::add_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 19 → 20 taken 18 times.
void wala::fft::multiply<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::assign_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 19 → 20 taken 29 times.
3169 E::extend_to(tb, n, b);
126
42/55
void wala::fft::multiply<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::add_twice_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::add_twice_op):
✗ Branch 20 → 21 not taken.
✓ Branch 20 → 22 taken 322 times.
✓ Branch 25 → 26 taken 322 times.
✓ Branch 27 → 28 taken 322 times.
void wala::fft::multiply<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::add_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 20 → 21 not taken.
✓ Branch 20 → 22 taken 18 times.
✓ Branch 25 → 26 taken 18 times.
✓ Branch 27 → 28 taken 18 times.
void wala::fft::multiply<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::assign_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 8 → 9 taken 48 times.
✗ Branch 20 → 21 not taken.
✓ Branch 20 → 22 taken 29 times.
✓ Branch 25 → 26 taken 29 times.
✓ Branch 27 → 28 taken 29 times.
void wala::fft::multiply<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::add_twice_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::add_twice_op):
✗ Branch 20 → 21 not taken.
✓ Branch 20 → 22 taken 322 times.
✓ Branch 25 → 26 taken 322 times.
✓ Branch 27 → 28 taken 322 times.
void wala::fft::multiply<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 20 → 21 not taken.
✓ Branch 20 → 22 taken 18 times.
✓ Branch 25 → 26 taken 18 times.
✓ Branch 27 → 28 taken 18 times.
void wala::fft::multiply<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 20 → 21 not taken.
✓ Branch 20 → 22 taken 27 times.
✓ Branch 25 → 26 taken 27 times.
✓ Branch 27 → 28 taken 27 times.
void wala::fft::multiply<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::add_twice_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::add_twice_op):
✗ Branch 20 → 21 not taken.
✓ Branch 20 → 22 taken 322 times.
✓ Branch 25 → 26 taken 322 times.
✓ Branch 27 → 28 taken 322 times.
void wala::fft::multiply<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 20 → 21 not taken.
✓ Branch 20 → 22 taken 18 times.
✓ Branch 25 → 26 taken 18 times.
✓ Branch 27 → 28 taken 18 times.
void wala::fft::multiply<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 8 → 9 taken 1335 times.
✗ Branch 20 → 21 not taken.
✓ Branch 20 → 22 taken 286 times.
✓ Branch 25 → 26 taken 286 times.
✓ Branch 27 → 28 taken 286 times.
void wala::fft::multiply<wala::fft::engines::real<double>, wala::fft::assign_op>(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, wala::fft::engines::real<double>::transformed&, std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, wala::fft::engines::real<double>::transformed&, std::span<wala::fft::engines::real<double>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 20 → 21 not taken.
✓ Branch 20 → 22 taken 7 times.
✓ Branch 25 → 26 taken 7 times.
✓ Branch 27 → 28 taken 7 times.
void wala::fft::multiply<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::add_twice_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::add_twice_op):
✗ Branch 20 → 21 not taken.
✓ Branch 20 → 22 taken 322 times.
✓ Branch 25 → 26 taken 322 times.
✓ Branch 27 → 28 taken 322 times.
void wala::fft::multiply<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::add_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 20 → 21 not taken.
✓ Branch 20 → 22 taken 18 times.
✓ Branch 25 → 26 taken 18 times.
✓ Branch 27 → 28 taken 18 times.
void wala::fft::multiply<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::assign_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 8 → 9 taken 48 times.
✗ Branch 20 → 21 not taken.
✓ Branch 20 → 22 taken 29 times.
✓ Branch 25 → 26 taken 29 times.
✓ Branch 27 → 28 taken 29 times.
5600 detail::finish_linear<E>(E::mul(ta, tb, n), n, s, cut, c0, out, op);
127 }
128
129 template <engine E, typename Op = assign_op>
130 1862 void multiply_add2(std::span<const typename E::value_type> a1, transformed<E>& ta1,
131 std::span<const typename E::value_type> b1, transformed<E>& tb1,
132 std::span<const typename E::value_type> a2, transformed<E>& ta2,
133 std::span<const typename E::value_type> b2, transformed<E>& tb2,
134 std::span<typename E::value_type> out, Op op = {}) {
135 using T = typename E::value_type;
136 1862 assert(sz(a1) > 0 && sz(b1) > 0 && sz(a2) > 0 && sz(b2) > 0);
137 1862 int s = sz(a1) + sz(b1) - 1;
138 1862 assert(sz(a2) + sz(b2) - 1 == s);
139 1862 auto [n, cut] = detail::conv_size_for(s);
140 2074 T c0 = a1[0] * b1[0] + a2[0] * b2[0];
141
26/26
void wala::fft::multiply_add2<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>, wala::fft::add_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 34 → 35 taken 53 times.
✓ Branch 36 → 37 taken 53 times.
void wala::fft::multiply_add2<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::add_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 34 → 35 taken 53 times.
✓ Branch 36 → 37 taken 53 times.
void wala::fft::multiply_add2<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>, wala::fft::add_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 34 → 35 taken 53 times.
✓ Branch 36 → 37 taken 53 times.
void wala::fft::multiply_add2<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::add_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 37 → 38 taken 322 times.
✓ Branch 39 → 40 taken 322 times.
void wala::fft::multiply_add2<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::assign_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 37 → 38 taken 8 times.
✓ Branch 39 → 40 taken 8 times.
void wala::fft::multiply_add2<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 37 → 38 taken 322 times.
✓ Branch 39 → 40 taken 322 times.
void wala::fft::multiply_add2<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 37 → 38 taken 8 times.
✓ Branch 39 → 40 taken 8 times.
void wala::fft::multiply_add2<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 37 → 38 taken 322 times.
✓ Branch 39 → 40 taken 322 times.
void wala::fft::multiply_add2<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 37 → 38 taken 8 times.
✓ Branch 39 → 40 taken 8 times.
void wala::fft::multiply_add2<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::add_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 37 → 38 taken 322 times.
✓ Branch 39 → 40 taken 322 times.
void wala::fft::multiply_add2<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::assign_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 37 → 38 taken 8 times.
✓ Branch 39 → 40 taken 8 times.
void wala::fft::multiply_add2<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::add_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::transformed&, std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::transformed&, std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::transformed&, std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::transformed&, std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 34 → 35 taken 53 times.
✓ Branch 36 → 37 taken 53 times.
void wala::fft::multiply_add2<wala::fft::nc_engine, wala::fft::add_op>(std::span<wala::fft::nc_engine::value_type const, 18446744073709551615ul>, wala::fft::nc_engine::transformed&, std::span<wala::fft::nc_engine::value_type const, 18446744073709551615ul>, wala::fft::nc_engine::transformed&, std::span<wala::fft::nc_engine::value_type const, 18446744073709551615ul>, wala::fft::nc_engine::transformed&, std::span<wala::fft::nc_engine::value_type const, 18446744073709551615ul>, wala::fft::nc_engine::transformed&, std::span<wala::fft::nc_engine::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 37 → 38 taken 322 times.
✓ Branch 39 → 40 taken 322 times.
1862 E::extend_to(ta1, n, a1); E::extend_to(tb1, n, b1);
142
26/26
void wala::fft::multiply_add2<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>, wala::fft::add_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 38 → 39 taken 53 times.
✓ Branch 40 → 41 taken 53 times.
void wala::fft::multiply_add2<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::add_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 38 → 39 taken 53 times.
✓ Branch 40 → 41 taken 53 times.
void wala::fft::multiply_add2<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>, wala::fft::add_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 38 → 39 taken 53 times.
✓ Branch 40 → 41 taken 53 times.
void wala::fft::multiply_add2<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::add_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 41 → 42 taken 322 times.
✓ Branch 43 → 44 taken 322 times.
void wala::fft::multiply_add2<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::assign_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 41 → 42 taken 8 times.
✓ Branch 43 → 44 taken 8 times.
void wala::fft::multiply_add2<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 41 → 42 taken 322 times.
✓ Branch 43 → 44 taken 322 times.
void wala::fft::multiply_add2<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 41 → 42 taken 8 times.
✓ Branch 43 → 44 taken 8 times.
void wala::fft::multiply_add2<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 41 → 42 taken 322 times.
✓ Branch 43 → 44 taken 322 times.
void wala::fft::multiply_add2<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 41 → 42 taken 8 times.
✓ Branch 43 → 44 taken 8 times.
void wala::fft::multiply_add2<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::add_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 41 → 42 taken 322 times.
✓ Branch 43 → 44 taken 322 times.
void wala::fft::multiply_add2<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::assign_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 41 → 42 taken 8 times.
✓ Branch 43 → 44 taken 8 times.
void wala::fft::multiply_add2<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::add_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::transformed&, std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::transformed&, std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::transformed&, std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::transformed&, std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 38 → 39 taken 53 times.
✓ Branch 40 → 41 taken 53 times.
void wala::fft::multiply_add2<wala::fft::nc_engine, wala::fft::add_op>(std::span<wala::fft::nc_engine::value_type const, 18446744073709551615ul>, wala::fft::nc_engine::transformed&, std::span<wala::fft::nc_engine::value_type const, 18446744073709551615ul>, wala::fft::nc_engine::transformed&, std::span<wala::fft::nc_engine::value_type const, 18446744073709551615ul>, wala::fft::nc_engine::transformed&, std::span<wala::fft::nc_engine::value_type const, 18446744073709551615ul>, wala::fft::nc_engine::transformed&, std::span<wala::fft::nc_engine::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 41 → 42 taken 322 times.
✓ Branch 43 → 44 taken 322 times.
1862 E::extend_to(ta2, n, a2); E::extend_to(tb2, n, b2);
143
42/56
void wala::fft::multiply_add2<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>, wala::fft::add_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 41 → 42 not taken.
✓ Branch 41 → 43 taken 53 times.
✓ Branch 48 → 49 taken 53 times.
✓ Branch 50 → 51 taken 53 times.
void wala::fft::multiply_add2<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::add_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 41 → 42 not taken.
✓ Branch 41 → 43 taken 53 times.
✓ Branch 48 → 49 taken 53 times.
✓ Branch 50 → 51 taken 53 times.
void wala::fft::multiply_add2<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>, wala::fft::add_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 41 → 42 not taken.
✓ Branch 41 → 43 taken 53 times.
✓ Branch 48 → 49 taken 53 times.
✓ Branch 50 → 51 taken 53 times.
void wala::fft::multiply_add2<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::add_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 44 → 45 not taken.
✓ Branch 44 → 46 taken 322 times.
✓ Branch 51 → 52 taken 322 times.
✓ Branch 53 → 54 taken 322 times.
void wala::fft::multiply_add2<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::assign_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 44 → 45 not taken.
✓ Branch 44 → 46 taken 8 times.
✓ Branch 51 → 52 taken 8 times.
✓ Branch 53 → 54 taken 8 times.
void wala::fft::multiply_add2<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 44 → 45 not taken.
✓ Branch 44 → 46 taken 322 times.
✓ Branch 51 → 52 taken 322 times.
✓ Branch 53 → 54 taken 322 times.
void wala::fft::multiply_add2<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 44 → 45 not taken.
✓ Branch 44 → 46 taken 8 times.
✓ Branch 51 → 52 taken 8 times.
✓ Branch 53 → 54 taken 8 times.
void wala::fft::multiply_add2<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 44 → 45 not taken.
✓ Branch 44 → 46 taken 322 times.
✓ Branch 51 → 52 taken 322 times.
✓ Branch 53 → 54 taken 322 times.
void wala::fft::multiply_add2<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 44 → 45 not taken.
✓ Branch 44 → 46 taken 8 times.
✓ Branch 51 → 52 taken 8 times.
✓ Branch 53 → 54 taken 8 times.
void wala::fft::multiply_add2<wala::fft::engines::real<double>, wala::fft::assign_op>(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, wala::fft::engines::real<double>::transformed&, std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, wala::fft::engines::real<double>::transformed&, std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, wala::fft::engines::real<double>::transformed&, std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, wala::fft::engines::real<double>::transformed&, std::span<wala::fft::engines::real<double>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 38 → 39 not taken.
✓ Branch 38 → 40 taken 8 times.
✓ Branch 45 → 46 taken 8 times.
✓ Branch 47 → 48 taken 8 times.
void wala::fft::multiply_add2<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::add_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 44 → 45 not taken.
✓ Branch 44 → 46 taken 322 times.
✓ Branch 51 → 52 taken 322 times.
✓ Branch 53 → 54 taken 322 times.
void wala::fft::multiply_add2<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::assign_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 44 → 45 not taken.
✓ Branch 44 → 46 taken 8 times.
✓ Branch 51 → 52 taken 8 times.
✓ Branch 53 → 54 taken 8 times.
void wala::fft::multiply_add2<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::add_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::transformed&, std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::transformed&, std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::transformed&, std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::transformed&, std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 41 → 42 not taken.
✓ Branch 41 → 43 taken 53 times.
✓ Branch 48 → 49 taken 53 times.
✓ Branch 50 → 51 taken 53 times.
void wala::fft::multiply_add2<wala::fft::nc_engine, wala::fft::add_op>(std::span<wala::fft::nc_engine::value_type const, 18446744073709551615ul>, wala::fft::nc_engine::transformed&, std::span<wala::fft::nc_engine::value_type const, 18446744073709551615ul>, wala::fft::nc_engine::transformed&, std::span<wala::fft::nc_engine::value_type const, 18446744073709551615ul>, wala::fft::nc_engine::transformed&, std::span<wala::fft::nc_engine::value_type const, 18446744073709551615ul>, wala::fft::nc_engine::transformed&, std::span<wala::fft::nc_engine::value_type, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 44 → 45 not taken.
✓ Branch 44 → 46 taken 322 times.
✓ Branch 51 → 52 taken 322 times.
✓ Branch 53 → 54 taken 322 times.
3064 detail::finish_linear<E>(E::mul2(ta1, tb1, ta2, tb2, n), n, s, cut, c0, out, op);
144 1862 }
145
146 // As multiply_add2, but also outputs the summed pointwise product as a reusable
147 // transform of the (full-length) result, like multiply_cached.
148 template <engine E>
149 644116 void multiply_add2_cached(
150 std::span<const typename E::value_type> a1, transformed<E>& ta1,
151 std::span<const typename E::value_type> b1, transformed<E>& tb1,
152 std::span<const typename E::value_type> a2, transformed<E>& ta2,
153 std::span<const typename E::value_type> b2, transformed<E>& tb2,
154 std::vector<typename E::value_type>& coeffs, transformed<E>& t) {
155 using T = typename E::value_type;
156 644116 assert(sz(a1) > 0 && sz(b1) > 0 && sz(a2) > 0 && sz(b2) > 0);
157 644116 int s = sz(a1) + sz(b1) - 1;
158 644116 assert(sz(a2) + sz(b2) - 1 == s);
159
1/1
✓ Branch 23 → 24 taken 65 times.
644181 coeffs.assign(size_t(s), T{});
160 644246 t = transformed<E>{};
161 if constexpr (std::same_as<typename E::product, transformed<E>>) {
162
2/2
✓ Branch 12 → 13 taken 321979 times.
✓ Branch 12 → 14 taken 322072 times.
644116 auto [n, cut] = detail::conv_size_for(s);
163
2/2
✓ Branch 12 → 13 taken 321979 times.
✓ Branch 12 → 14 taken 322072 times.
644116 T c0 = a1[0] * b1[0] + a2[0] * b2[0];
164
2/2
✓ Branch 72 → 73 taken 65 times.
✓ Branch 74 → 75 taken 65 times.
644116 E::extend_to(ta1, n, a1); E::extend_to(tb1, n, b1);
165
2/2
✓ Branch 76 → 77 taken 65 times.
✓ Branch 78 → 79 taken 65 times.
644116 E::extend_to(ta2, n, a2); E::extend_to(tb2, n, b2);
166
1/1
✓ Branch 84 → 85 taken 65 times.
644116 auto p = E::mul2(ta1, tb1, ta2, tb2, n);
167
1/2
✗ Branch 21 → 22 not taken.
✓ Branch 21 → 23 taken 644051 times.
644116 auto tp = p;
168
3/4
void wala::fft::multiply_add2_cached<wala::fft::engines::ntt<wala::modnum<998244353> > >(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::__debug::vector<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::allocator<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type> >&, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&):
✗ Branch 93 → 94 not taken.
✓ Branch 93 → 95 taken 65 times.
✓ Branch 95 → 96 taken 65 times.
void wala::fft::multiply_add2_cached<wala::fft::engines::ntt<wala::modnum<998244353> > >(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::vector<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::allocator<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type> >&, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&):
✓ Branch 23 → 24 taken 644051 times.
644116 detail::finish_linear<E>(std::move(p), n, s, cut, c0, std::span<T>(coeffs));
169 644181 t = std::move(tp);
170 644181 } else {
171 multiply_add2<E>(a1, ta1, b1, tb1, a2, ta2, b2, tb2, std::span<T>(coeffs));
172 }
173 644116 }
174
175 // This helper also accepts an output transform which will be populated if it is cheap to do so
176 template <engine E>
177 1326268 void multiply_cached(std::span<const typename E::value_type> a, transformed<E>& ta,
178 std::span<const typename E::value_type> b, transformed<E>& tb,
179 std::vector<typename E::value_type>& coeffs, transformed<E>& t) {
180 using T = typename E::value_type;
181
21/37
void wala::fft::multiply_cached<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> > >(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::__debug::vector<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::allocator<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type> >&, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&):
✓ Branch 9 → 10 taken 2 times.
✗ Branch 9 → 15 not taken.
✓ Branch 11 → 12 taken 2 times.
✗ Branch 11 → 15 not taken.
✓ Branch 15 → 16 taken 2 times.
void wala::fft::multiply_cached<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> > >(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::vector<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::allocator<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type> >&, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&):
✓ Branch 2 → 3 taken 48 times.
✗ Branch 2 → 5 not taken.
✓ Branch 3 → 4 taken 48 times.
✗ Branch 3 → 5 not taken.
void wala::fft::multiply_cached<wala::fft::engines::ntt<wala::mod_goldilocks> >(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::__debug::vector<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, std::allocator<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type> >&, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&):
✓ Branch 9 → 10 taken 2 times.
✗ Branch 9 → 15 not taken.
✓ Branch 11 → 12 taken 2 times.
✗ Branch 11 → 15 not taken.
✓ Branch 15 → 16 taken 2 times.
void wala::fft::multiply_cached<wala::fft::engines::ntt<wala::modnum<998244353> > >(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::__debug::vector<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::allocator<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type> >&, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&):
✓ Branch 9 → 10 taken 171 times.
✗ Branch 9 → 15 not taken.
✓ Branch 11 → 12 taken 171 times.
✗ Branch 11 → 15 not taken.
✓ Branch 15 → 16 taken 171 times.
void wala::fft::multiply_cached<wala::fft::engines::ntt<wala::modnum<998244353> > >(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::vector<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::allocator<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type> >&, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&):
✓ Branch 2 → 3 taken 1325993 times.
✗ Branch 2 → 5 not taken.
✓ Branch 3 → 4 taken 1325993 times.
✗ Branch 3 → 5 not taken.
void wala::fft::multiply_cached<wala::fft::engines::real<double> >(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, wala::fft::engines::real<double>::transformed&, std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, wala::fft::engines::real<double>::transformed&, std::__debug::vector<wala::fft::engines::real<double>::value_type, std::allocator<wala::fft::engines::real<double>::value_type> >&, wala::fft::engines::real<double>::transformed&):
✓ Branch 6 → 7 taken 2 times.
✗ Branch 6 → 12 not taken.
✓ Branch 8 → 9 taken 2 times.
✗ Branch 8 → 12 not taken.
✓ Branch 12 → 13 taken 2 times.
void wala::fft::multiply_cached<wala::fft::engines::split<wala::modnum<1000000007> > >(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::__debug::vector<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::allocator<wala::fft::engines::split<wala::modnum<1000000007> >::value_type> >&, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&):
✓ Branch 9 → 10 taken 2 times.
✗ Branch 9 → 15 not taken.
✓ Branch 11 → 12 taken 2 times.
✗ Branch 11 → 15 not taken.
✓ Branch 15 → 16 taken 2 times.
void wala::fft::multiply_cached<wala::fft::engines::split<wala::modnum<1000000007> > >(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::vector<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::allocator<wala::fft::engines::split<wala::modnum<1000000007> >::value_type> >&, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&):
✓ Branch 2 → 3 taken 48 times.
✗ Branch 2 → 5 not taken.
✓ Branch 3 → 4 taken 48 times.
✗ Branch 3 → 5 not taken.
1326445 coeffs.assign(size_t(sz(a) && sz(b) ? sz(a) + sz(b) - 1 : 0), T{});
182
3/6
void wala::fft::multiply_cached<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> > >(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::vector<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::allocator<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type> >&, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&):
✓ Branch 9 → 10 taken 48 times.
✗ Branch 9 → 14 not taken.
void wala::fft::multiply_cached<wala::fft::engines::ntt<wala::modnum<998244353> > >(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::vector<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::allocator<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type> >&, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&):
✓ Branch 8 → 9 taken 1325993 times.
✗ Branch 8 → 20 not taken.
void wala::fft::multiply_cached<wala::fft::engines::split<wala::modnum<1000000007> > >(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::vector<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::allocator<wala::fft::engines::split<wala::modnum<1000000007> >::value_type> >&, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&):
✓ Branch 8 → 9 taken 48 times.
✗ Branch 8 → 13 not taken.
1326670 t = transformed<E>{};
183
8/16
void wala::fft::multiply_cached<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> > >(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::__debug::vector<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::allocator<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type> >&, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&):
✓ Branch 27 → 28 taken 2 times.
✗ Branch 27 → 33 not taken.
void wala::fft::multiply_cached<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> > >(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::vector<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::allocator<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type> >&, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&):
✓ Branch 9 → 10 taken 48 times.
✗ Branch 9 → 14 not taken.
void wala::fft::multiply_cached<wala::fft::engines::ntt<wala::mod_goldilocks> >(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::__debug::vector<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, std::allocator<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type> >&, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&):
✓ Branch 48 → 49 taken 2 times.
✗ Branch 48 → 121 not taken.
void wala::fft::multiply_cached<wala::fft::engines::ntt<wala::modnum<998244353> > >(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::__debug::vector<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::allocator<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type> >&, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&):
✓ Branch 48 → 49 taken 171 times.
✗ Branch 48 → 121 not taken.
void wala::fft::multiply_cached<wala::fft::engines::ntt<wala::modnum<998244353> > >(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::vector<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::allocator<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type> >&, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&):
✓ Branch 8 → 9 taken 1325993 times.
✗ Branch 8 → 20 not taken.
void wala::fft::multiply_cached<wala::fft::engines::real<double> >(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, wala::fft::engines::real<double>::transformed&, std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, wala::fft::engines::real<double>::transformed&, std::__debug::vector<wala::fft::engines::real<double>::value_type, std::allocator<wala::fft::engines::real<double>::value_type> >&, wala::fft::engines::real<double>::transformed&):
✓ Branch 45 → 46 taken 2 times.
✗ Branch 45 → 117 not taken.
void wala::fft::multiply_cached<wala::fft::engines::split<wala::modnum<1000000007> > >(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::__debug::vector<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::allocator<wala::fft::engines::split<wala::modnum<1000000007> >::value_type> >&, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&):
✓ Branch 48 → 49 taken 2 times.
✗ Branch 48 → 54 not taken.
void wala::fft::multiply_cached<wala::fft::engines::split<wala::modnum<1000000007> > >(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::vector<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::allocator<wala::fft::engines::split<wala::modnum<1000000007> >::value_type> >&, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&):
✓ Branch 8 → 9 taken 48 times.
✗ Branch 8 → 13 not taken.
1326268 if (coeffs.empty()) return;
184
2/4
void wala::fft::multiply_cached<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> > >(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::vector<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::allocator<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type> >&, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&):
✗ Branch 10 → 11 not taken.
✓ Branch 10 → 12 taken 48 times.
void wala::fft::multiply_cached<wala::fft::engines::split<wala::modnum<1000000007> > >(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::vector<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::allocator<wala::fft::engines::split<wala::modnum<1000000007> >::value_type> >&, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&):
✗ Branch 9 → 10 not taken.
✓ Branch 9 → 11 taken 48 times.
1326268 int s = sz(coeffs);
185 if constexpr (std::same_as<typename E::product, transformed<E>>) {
186 1326168 auto [n, cut] = detail::conv_size_for(s);
187 1326168 T c0 = a[0] * b[0];
188
3/3
void wala::fft::multiply_cached<wala::fft::engines::ntt<wala::mod_goldilocks> >(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::__debug::vector<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, std::allocator<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type> >&, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&):
✓ Branch 58 → 59 taken 2 times.
void wala::fft::multiply_cached<wala::fft::engines::ntt<wala::modnum<998244353> > >(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::__debug::vector<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::allocator<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type> >&, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&):
✓ Branch 58 → 59 taken 171 times.
void wala::fft::multiply_cached<wala::fft::engines::real<double> >(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, wala::fft::engines::real<double>::transformed&, std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, wala::fft::engines::real<double>::transformed&, std::__debug::vector<wala::fft::engines::real<double>::value_type, std::allocator<wala::fft::engines::real<double>::value_type> >&, wala::fft::engines::real<double>::transformed&):
✓ Branch 55 → 56 taken 2 times.
1326168 E::extend_to(ta, n, a);
189
3/3
void wala::fft::multiply_cached<wala::fft::engines::ntt<wala::mod_goldilocks> >(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::__debug::vector<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, std::allocator<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type> >&, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&):
✓ Branch 60 → 61 taken 2 times.
void wala::fft::multiply_cached<wala::fft::engines::ntt<wala::modnum<998244353> > >(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::__debug::vector<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::allocator<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type> >&, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&):
✓ Branch 60 → 61 taken 171 times.
void wala::fft::multiply_cached<wala::fft::engines::real<double> >(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, wala::fft::engines::real<double>::transformed&, std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, wala::fft::engines::real<double>::transformed&, std::__debug::vector<wala::fft::engines::real<double>::value_type, std::allocator<wala::fft::engines::real<double>::value_type> >&, wala::fft::engines::real<double>::transformed&):
✓ Branch 57 → 58 taken 2 times.
1326168 E::extend_to(tb, n, b);
190
3/3
void wala::fft::multiply_cached<wala::fft::engines::ntt<wala::mod_goldilocks> >(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::__debug::vector<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, std::allocator<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type> >&, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&):
✓ Branch 64 → 65 taken 2 times.
void wala::fft::multiply_cached<wala::fft::engines::ntt<wala::modnum<998244353> > >(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::__debug::vector<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::allocator<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type> >&, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&):
✓ Branch 64 → 65 taken 171 times.
void wala::fft::multiply_cached<wala::fft::engines::real<double> >(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, wala::fft::engines::real<double>::transformed&, std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, wala::fft::engines::real<double>::transformed&, std::__debug::vector<wala::fft::engines::real<double>::value_type, std::allocator<wala::fft::engines::real<double>::value_type> >&, wala::fft::engines::real<double>::transformed&):
✓ Branch 61 → 62 taken 2 times.
1326168 auto p = E::mul(ta, tb, n);
191
1/2
✗ Branch 13 → 14 not taken.
✓ Branch 13 → 15 taken 1325993 times.
1326168 auto tp = p;
192
7/10
void wala::fft::multiply_cached<wala::fft::engines::ntt<wala::mod_goldilocks> >(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::__debug::vector<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, std::allocator<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type> >&, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&):
✗ Branch 73 → 74 not taken.
✓ Branch 73 → 75 taken 2 times.
✓ Branch 75 → 76 taken 2 times.
void wala::fft::multiply_cached<wala::fft::engines::ntt<wala::modnum<998244353> > >(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::__debug::vector<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::allocator<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type> >&, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&):
✗ Branch 73 → 74 not taken.
✓ Branch 73 → 75 taken 171 times.
✓ Branch 75 → 76 taken 171 times.
void wala::fft::multiply_cached<wala::fft::engines::ntt<wala::modnum<998244353> > >(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::vector<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::allocator<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type> >&, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&):
✓ Branch 15 → 16 taken 1325993 times.
void wala::fft::multiply_cached<wala::fft::engines::real<double> >(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, wala::fft::engines::real<double>::transformed&, std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, wala::fft::engines::real<double>::transformed&, std::__debug::vector<wala::fft::engines::real<double>::value_type, std::allocator<wala::fft::engines::real<double>::value_type> >&, wala::fft::engines::real<double>::transformed&):
✗ Branch 70 → 71 not taken.
✓ Branch 70 → 72 taken 2 times.
✓ Branch 72 → 73 taken 2 times.
1326168 detail::finish_linear<E>(std::move(p), n, s, cut, c0, std::span<T>(coeffs));
193 1326343 t = std::move(tp);
194 1326343 } else {
195
2/2
void wala::fft::multiply_cached<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> > >(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::__debug::vector<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::allocator<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type> >&, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&):
✓ Branch 31 → 32 taken 2 times.
void wala::fft::multiply_cached<wala::fft::engines::split<wala::modnum<1000000007> > >(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::__debug::vector<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::allocator<wala::fft::engines::split<wala::modnum<1000000007> >::value_type> >&, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&):
✓ Branch 52 → 53 taken 2 times.
100 multiply<E>(a, ta, b, tb, std::span<T>(coeffs));
196 }
197 }
198
199 template <engine E, typename Op = assign_op>
200 588 void square(std::span<const typename E::value_type> a, std::span<typename E::value_type> out, Op op = {}) {
201 using T = typename E::value_type;
202
12/24
void wala::fft::square<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 6 taken 1 time.
void wala::fft::square<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 6 taken 1 time.
void wala::fft::square<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 6 taken 1 time.
void wala::fft::square<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::assign_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 6 taken 4 times.
void wala::fft::square<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 6 taken 4 times.
void wala::fft::square<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 537 times.
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 6 taken 29 times.
void wala::fft::square<wala::fft::engines::real<double>, wala::fft::assign_op>(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 4 times.
void wala::fft::square<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::assign_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 6 taken 4 times.
void wala::fft::square<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 6 taken 1 time.
void wala::fft::square<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 6 taken 1 time.
void wala::fft::square<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 6 taken 1 time.
588 if (sz(a) == 0) return;
203 588 int s = 2 * sz(a) - 1;
204 588 auto [n, cut] = detail::conv_size_for(s);
205 588 T c0 = a[0] * a[0];
206
11/11
void wala::fft::square<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 15 → 16 taken 1 time.
void wala::fft::square<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 15 → 16 taken 1 time.
void wala::fft::square<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 15 → 16 taken 1 time.
void wala::fft::square<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::assign_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 15 → 16 taken 4 times.
void wala::fft::square<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 15 → 16 taken 4 times.
void wala::fft::square<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 15 → 16 taken 29 times.
void wala::fft::square<wala::fft::engines::real<double>, wala::fft::assign_op>(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 14 → 15 taken 4 times.
void wala::fft::square<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::assign_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 15 → 16 taken 4 times.
void wala::fft::square<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 15 → 16 taken 1 time.
void wala::fft::square<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 15 → 16 taken 1 time.
void wala::fft::square<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 15 → 16 taken 1 time.
588 auto buf = buffer_pool<T>::get(n);
207
13/14
void wala::fft::square<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 21 → 22 taken 1 time.
void wala::fft::square<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 21 → 22 taken 1 time.
void wala::fft::square<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 21 → 22 taken 1 time.
void wala::fft::square<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::assign_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 21 → 22 taken 4 times.
void wala::fft::square<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 21 → 22 taken 4 times.
void wala::fft::square<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 7 taken 537 times.
✓ Branch 7 → 8 taken 537 times.
✓ Branch 21 → 22 taken 29 times.
void wala::fft::square<wala::fft::engines::real<double>, wala::fft::assign_op>(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 20 → 21 taken 4 times.
void wala::fft::square<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::assign_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 21 → 22 taken 4 times.
void wala::fft::square<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 21 → 22 taken 1 time.
void wala::fft::square<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 21 → 22 taken 1 time.
void wala::fft::square<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 21 → 22 taken 1 time.
639 square_circular<E>(a, buf.span(), n);
208
11/22
void wala::fft::square<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 22 → 23 not taken.
✓ Branch 22 → 24 taken 1 time.
void wala::fft::square<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 22 → 23 not taken.
✓ Branch 22 → 24 taken 1 time.
void wala::fft::square<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 22 → 23 not taken.
✓ Branch 22 → 24 taken 1 time.
void wala::fft::square<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::assign_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 22 → 23 not taken.
✓ Branch 22 → 24 taken 4 times.
void wala::fft::square<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 22 → 23 not taken.
✓ Branch 22 → 24 taken 4 times.
void wala::fft::square<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 22 → 23 not taken.
✓ Branch 22 → 24 taken 29 times.
void wala::fft::square<wala::fft::engines::real<double>, wala::fft::assign_op>(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 21 → 22 not taken.
✓ Branch 21 → 23 taken 4 times.
void wala::fft::square<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::assign_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 22 → 23 not taken.
✓ Branch 22 → 24 taken 4 times.
void wala::fft::square<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 22 → 23 not taken.
✓ Branch 22 → 24 taken 1 time.
void wala::fft::square<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 22 → 23 not taken.
✓ Branch 22 → 24 taken 1 time.
void wala::fft::square<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>, wala::fft::assign_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 22 → 23 not taken.
✓ Branch 22 → 24 taken 1 time.
639 detail::emit_linear<T>(buf.span(), n, s, cut, c0, out, op);
209 588 }
210
211 template <engine E, typename Op = assign_op>
212 140 void square(std::span<const typename E::value_type> a, transformed<E>& ta,
213 std::span<typename E::value_type> out, Op op = {}) {
214 using T = typename E::value_type;
215
14/28
void wala::fft::square<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>, wala::fft::add_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 5 times.
void wala::fft::square<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::add_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 5 times.
void wala::fft::square<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>, wala::fft::add_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 5 times.
void wala::fft::square<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::add_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 18 times.
void wala::fft::square<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::assign_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 1 time.
void wala::fft::square<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 18 times.
void wala::fft::square<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 1 time.
void wala::fft::square<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 18 times.
void wala::fft::square<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 26 times.
void wala::fft::square<wala::fft::engines::real<double>, wala::fft::assign_op>(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, wala::fft::engines::real<double>::transformed&, std::span<wala::fft::engines::real<double>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 3 → 4 taken 1 time.
✗ Branch 3 → 39 not taken.
void wala::fft::square<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::add_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 18 times.
void wala::fft::square<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::assign_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 1 time.
void wala::fft::square<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::add_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::transformed&, std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 5 times.
void wala::fft::square<wala::fft::nc_engine, wala::fft::add_op>(std::span<wala::fft::nc_engine::value_type const, 18446744073709551615ul>, wala::fft::nc_engine::transformed&, std::span<wala::fft::nc_engine::value_type, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 18 times.
140 if (sz(a) == 0) return;
216 140 int s = 2 * sz(a) - 1;
217 140 auto [n, cut] = detail::conv_size_for(s);
218 140 T c0 = a[0] * a[0];
219
13/13
void wala::fft::square<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>, wala::fft::add_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 14 → 15 taken 5 times.
void wala::fft::square<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::add_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 14 → 15 taken 5 times.
void wala::fft::square<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>, wala::fft::add_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 14 → 15 taken 5 times.
void wala::fft::square<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::add_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 14 → 15 taken 18 times.
void wala::fft::square<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::assign_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 14 → 15 taken 1 time.
void wala::fft::square<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 14 → 15 taken 18 times.
void wala::fft::square<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 14 → 15 taken 1 time.
void wala::fft::square<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 14 → 15 taken 18 times.
void wala::fft::square<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 14 → 15 taken 26 times.
void wala::fft::square<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::add_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 14 → 15 taken 18 times.
void wala::fft::square<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::assign_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 14 → 15 taken 1 time.
void wala::fft::square<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::add_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::transformed&, std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 14 → 15 taken 5 times.
void wala::fft::square<wala::fft::nc_engine, wala::fft::add_op>(std::span<wala::fft::nc_engine::value_type const, 18446744073709551615ul>, wala::fft::nc_engine::transformed&, std::span<wala::fft::nc_engine::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 14 → 15 taken 18 times.
140 E::extend_to(ta, n, a);
220
42/56
void wala::fft::square<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>, wala::fft::add_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 15 → 16 not taken.
✓ Branch 15 → 17 taken 5 times.
✓ Branch 19 → 20 taken 5 times.
✓ Branch 21 → 22 taken 5 times.
void wala::fft::square<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::add_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 15 → 16 not taken.
✓ Branch 15 → 17 taken 5 times.
✓ Branch 19 → 20 taken 5 times.
✓ Branch 21 → 22 taken 5 times.
void wala::fft::square<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>, wala::fft::add_op>(std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::transformed&, std::span<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 15 → 16 not taken.
✓ Branch 15 → 17 taken 5 times.
✓ Branch 19 → 20 taken 5 times.
✓ Branch 21 → 22 taken 5 times.
void wala::fft::square<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::add_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 15 → 16 not taken.
✓ Branch 15 → 17 taken 18 times.
✓ Branch 19 → 20 taken 18 times.
✓ Branch 21 → 22 taken 18 times.
void wala::fft::square<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::assign_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::transformed&, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 15 → 16 not taken.
✓ Branch 15 → 17 taken 1 time.
✓ Branch 19 → 20 taken 1 time.
✓ Branch 21 → 22 taken 1 time.
void wala::fft::square<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 15 → 16 not taken.
✓ Branch 15 → 17 taken 18 times.
✓ Branch 19 → 20 taken 18 times.
✓ Branch 21 → 22 taken 18 times.
void wala::fft::square<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::mod_goldilocks>::transformed&, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 15 → 16 not taken.
✓ Branch 15 → 17 taken 1 time.
✓ Branch 19 → 20 taken 1 time.
✓ Branch 21 → 22 taken 1 time.
void wala::fft::square<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 15 → 16 not taken.
✓ Branch 15 → 17 taken 18 times.
✓ Branch 19 → 20 taken 18 times.
✓ Branch 21 → 22 taken 18 times.
void wala::fft::square<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 15 → 16 not taken.
✓ Branch 15 → 17 taken 26 times.
✓ Branch 19 → 20 taken 26 times.
✓ Branch 21 → 22 taken 26 times.
void wala::fft::square<wala::fft::engines::real<double>, wala::fft::assign_op>(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, wala::fft::engines::real<double>::transformed&, std::span<wala::fft::engines::real<double>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 14 → 15 not taken.
✓ Branch 14 → 16 taken 1 time.
✓ Branch 18 → 19 taken 1 time.
✓ Branch 20 → 21 taken 1 time.
void wala::fft::square<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::add_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 15 → 16 not taken.
✓ Branch 15 → 17 taken 18 times.
✓ Branch 19 → 20 taken 18 times.
✓ Branch 21 → 22 taken 18 times.
void wala::fft::square<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::assign_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, wala::fft::engines::split<wala::modnum<1000000007> >::transformed&, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 15 → 16 not taken.
✓ Branch 15 → 17 taken 1 time.
✓ Branch 19 → 20 taken 1 time.
✓ Branch 21 → 22 taken 1 time.
void wala::fft::square<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>, wala::fft::add_op>(std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::transformed&, std::span<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 15 → 16 not taken.
✓ Branch 15 → 17 taken 5 times.
✓ Branch 19 → 20 taken 5 times.
✓ Branch 21 → 22 taken 5 times.
void wala::fft::square<wala::fft::nc_engine, wala::fft::add_op>(std::span<wala::fft::nc_engine::value_type const, 18446744073709551615ul>, wala::fft::nc_engine::transformed&, std::span<wala::fft::nc_engine::value_type, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 15 → 16 not taken.
✓ Branch 15 → 17 taken 18 times.
✓ Branch 19 → 20 taken 18 times.
✓ Branch 21 → 22 taken 18 times.
242 detail::finish_linear<E>(E::sq(ta, n), n, s, cut, c0, out, op);
221 }
222
223 // As square, but also outputs the pointwise product as a reusable transform of
224 // the result (empty when the engine's product isn't a transform).
225 template <engine E>
226 6 void square_cached(std::span<const typename E::value_type> a, transformed<E>& ta,
227 std::vector<typename E::value_type>& coeffs, transformed<E>& t) {
228 using T = typename E::value_type;
229
2/3
✓ Branch 9 → 10 taken 6 times.
✗ Branch 9 → 12 not taken.
✓ Branch 12 → 13 taken 6 times.
12 coeffs.assign(size_t(sz(a) ? 2 * sz(a) - 1 : 0), T{});
230 18 t = transformed<E>{};
231
1/2
✓ Branch 45 → 46 taken 6 times.
✗ Branch 45 → 115 not taken.
6 if (coeffs.empty()) return;
232 6 int s = sz(coeffs);
233 if constexpr (std::same_as<typename E::product, transformed<E>>) {
234 6 auto [n, cut] = detail::conv_size_for(s);
235 6 T c0 = a[0] * a[0];
236
1/1
✓ Branch 55 → 56 taken 6 times.
6 E::extend_to(ta, n, a);
237
1/1
✓ Branch 58 → 59 taken 6 times.
6 auto p = E::sq(ta, n);
238 6 auto tp = p;
239
2/3
✗ Branch 67 → 68 not taken.
✓ Branch 67 → 69 taken 6 times.
✓ Branch 69 → 70 taken 6 times.
6 detail::finish_linear<E>(std::move(p), n, s, cut, c0, std::span<T>(coeffs));
240 12 t = std::move(tp);
241 12 } else {
242 square<E>(a, ta, std::span<T>(coeffs));
243 }
244 }
245
246 365 template <engine E> vector<typename E::value_type> multiply(
247 const vector<typename E::value_type>& a, const vector<typename E::value_type>& b) {
248 using T = typename E::value_type;
249
34/68
std::__debug::vector<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, std::allocator<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type> > wala::fft::multiply<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3> >(std::__debug::vector<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, std::allocator<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type> > const&, std::__debug::vector<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, std::allocator<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type> > const&):
✓ Branch 3 → 4 taken 20 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 12 taken 20 times.
std::__debug::vector<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::allocator<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type> > wala::fft::multiply<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3> >(std::__debug::vector<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::allocator<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type> > const&, std::__debug::vector<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::allocator<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type> > const&):
✓ Branch 3 → 4 taken 20 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 12 taken 20 times.
std::__debug::vector<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, std::allocator<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type> > wala::fft::multiply<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3> >(std::__debug::vector<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, std::allocator<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type> > const&, std::__debug::vector<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, std::allocator<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type> > const&):
✓ Branch 3 → 4 taken 20 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 12 taken 20 times.
std::__debug::vector<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, std::allocator<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type> > wala::fft::multiply<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3> >(std::__debug::vector<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, std::allocator<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type> > const&, std::__debug::vector<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, std::allocator<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type> > const&):
✓ Branch 3 → 4 taken 20 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 12 taken 20 times.
std::__debug::vector<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::allocator<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type> > wala::fft::multiply<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3> >(std::__debug::vector<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::allocator<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type> > const&, std::__debug::vector<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::allocator<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type> > const&):
✓ Branch 3 → 4 taken 20 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 12 taken 20 times.
std::__debug::vector<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, std::allocator<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type> > wala::fft::multiply<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3> >(std::__debug::vector<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, std::allocator<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type> > const&, std::__debug::vector<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, std::allocator<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type> > const&):
✓ Branch 3 → 4 taken 20 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 12 taken 20 times.
std::__debug::vector<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::allocator<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type> > wala::fft::multiply<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> > >(std::__debug::vector<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::allocator<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type> > const&, std::__debug::vector<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::allocator<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type> > const&):
✓ Branch 3 → 4 taken 25 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 12 taken 25 times.
std::__debug::vector<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, std::allocator<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type> > wala::fft::multiply<wala::fft::engines::ntt<wala::mod_goldilocks> >(std::__debug::vector<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, std::allocator<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type> > const&, std::__debug::vector<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, std::allocator<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type> > const&):
✓ Branch 3 → 4 taken 25 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 12 taken 25 times.
std::__debug::vector<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::allocator<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type> > wala::fft::multiply<wala::fft::engines::ntt<wala::modnum<998244353> > >(std::__debug::vector<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::allocator<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type> > const&, std::__debug::vector<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::allocator<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type> > const&):
✓ Branch 3 → 4 taken 25 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 12 taken 25 times.
std::__debug::vector<wala::fft::engines::real<double>::value_type, std::allocator<wala::fft::engines::real<double>::value_type> > wala::fft::multiply<wala::fft::engines::real<double> >(std::__debug::vector<wala::fft::engines::real<double>::value_type, std::allocator<wala::fft::engines::real<double>::value_type> > const&, std::__debug::vector<wala::fft::engines::real<double>::value_type, std::allocator<wala::fft::engines::real<double>::value_type> > const&):
✓ Branch 3 → 4 taken 25 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 12 taken 25 times.
std::__debug::vector<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::allocator<wala::fft::engines::split<wala::modnum<1000000007> >::value_type> > wala::fft::multiply<wala::fft::engines::split<wala::modnum<1000000007> > >(std::__debug::vector<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::allocator<wala::fft::engines::split<wala::modnum<1000000007> >::value_type> > const&, std::__debug::vector<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::allocator<wala::fft::engines::split<wala::modnum<1000000007> >::value_type> > const&):
✓ Branch 3 → 4 taken 25 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 12 taken 25 times.
std::__debug::vector<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type, std::allocator<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type> > wala::fft::multiply<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2> >(std::__debug::vector<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type, std::allocator<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type> > const&, std::__debug::vector<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type, std::allocator<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type> > const&):
✓ Branch 3 → 4 taken 20 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 12 taken 20 times.
std::__debug::vector<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::allocator<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type> > wala::fft::multiply<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3> >(std::__debug::vector<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::allocator<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type> > const&, std::__debug::vector<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::allocator<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type> > const&):
✓ Branch 3 → 4 taken 20 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 12 taken 20 times.
std::__debug::vector<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type, std::allocator<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type> > wala::fft::multiply<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2> >(std::__debug::vector<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type, std::allocator<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type> > const&, std::__debug::vector<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type, std::allocator<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type> > const&):
✓ Branch 3 → 4 taken 20 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 12 taken 20 times.
std::__debug::vector<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type, std::allocator<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type> > wala::fft::multiply<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2> >(std::__debug::vector<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type, std::allocator<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type> > const&, std::__debug::vector<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type, std::allocator<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type> > const&):
✓ Branch 3 → 4 taken 20 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 12 taken 20 times.
std::__debug::vector<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::allocator<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type> > wala::fft::multiply<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3> >(std::__debug::vector<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::allocator<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type> > const&, std::__debug::vector<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::allocator<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type> > const&):
✓ Branch 3 → 4 taken 20 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 12 taken 20 times.
std::__debug::vector<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type, std::allocator<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type> > wala::fft::multiply<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2> >(std::__debug::vector<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type, std::allocator<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type> > const&, std::__debug::vector<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type, std::allocator<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type> > const&):
✓ Branch 3 → 4 taken 20 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 12 taken 20 times.
365 if (sz(a) == 0 || sz(b) == 0) return {};
250
17/17
std::__debug::vector<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, std::allocator<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type> > wala::fft::multiply<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3> >(std::__debug::vector<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, std::allocator<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type> > const&, std::__debug::vector<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, std::allocator<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type> > const&):
✓ Branch 16 → 17 taken 20 times.
std::__debug::vector<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::allocator<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type> > wala::fft::multiply<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3> >(std::__debug::vector<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::allocator<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type> > const&, std::__debug::vector<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::allocator<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type> > const&):
✓ Branch 16 → 17 taken 20 times.
std::__debug::vector<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, std::allocator<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type> > wala::fft::multiply<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3> >(std::__debug::vector<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, std::allocator<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type> > const&, std::__debug::vector<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, std::allocator<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type> > const&):
✓ Branch 16 → 17 taken 20 times.
std::__debug::vector<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, std::allocator<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type> > wala::fft::multiply<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3> >(std::__debug::vector<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, std::allocator<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type> > const&, std::__debug::vector<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, std::allocator<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type> > const&):
✓ Branch 16 → 17 taken 20 times.
std::__debug::vector<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::allocator<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type> > wala::fft::multiply<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3> >(std::__debug::vector<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::allocator<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type> > const&, std::__debug::vector<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::allocator<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type> > const&):
✓ Branch 16 → 17 taken 20 times.
std::__debug::vector<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, std::allocator<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type> > wala::fft::multiply<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3> >(std::__debug::vector<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, std::allocator<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type> > const&, std::__debug::vector<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, std::allocator<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type> > const&):
✓ Branch 16 → 17 taken 20 times.
std::__debug::vector<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::allocator<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type> > wala::fft::multiply<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> > >(std::__debug::vector<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::allocator<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type> > const&, std::__debug::vector<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::allocator<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type> > const&):
✓ Branch 16 → 17 taken 25 times.
std::__debug::vector<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, std::allocator<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type> > wala::fft::multiply<wala::fft::engines::ntt<wala::mod_goldilocks> >(std::__debug::vector<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, std::allocator<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type> > const&, std::__debug::vector<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, std::allocator<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type> > const&):
✓ Branch 16 → 17 taken 25 times.
std::__debug::vector<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::allocator<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type> > wala::fft::multiply<wala::fft::engines::ntt<wala::modnum<998244353> > >(std::__debug::vector<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::allocator<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type> > const&, std::__debug::vector<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::allocator<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type> > const&):
✓ Branch 16 → 17 taken 25 times.
std::__debug::vector<wala::fft::engines::real<double>::value_type, std::allocator<wala::fft::engines::real<double>::value_type> > wala::fft::multiply<wala::fft::engines::real<double> >(std::__debug::vector<wala::fft::engines::real<double>::value_type, std::allocator<wala::fft::engines::real<double>::value_type> > const&, std::__debug::vector<wala::fft::engines::real<double>::value_type, std::allocator<wala::fft::engines::real<double>::value_type> > const&):
✓ Branch 16 → 17 taken 25 times.
std::__debug::vector<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::allocator<wala::fft::engines::split<wala::modnum<1000000007> >::value_type> > wala::fft::multiply<wala::fft::engines::split<wala::modnum<1000000007> > >(std::__debug::vector<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::allocator<wala::fft::engines::split<wala::modnum<1000000007> >::value_type> > const&, std::__debug::vector<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::allocator<wala::fft::engines::split<wala::modnum<1000000007> >::value_type> > const&):
✓ Branch 16 → 17 taken 25 times.
std::__debug::vector<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type, std::allocator<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type> > wala::fft::multiply<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2> >(std::__debug::vector<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type, std::allocator<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type> > const&, std::__debug::vector<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type, std::allocator<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type> > const&):
✓ Branch 16 → 17 taken 20 times.
std::__debug::vector<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::allocator<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type> > wala::fft::multiply<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3> >(std::__debug::vector<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::allocator<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type> > const&, std::__debug::vector<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::allocator<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type> > const&):
✓ Branch 16 → 17 taken 20 times.
std::__debug::vector<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type, std::allocator<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type> > wala::fft::multiply<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2> >(std::__debug::vector<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type, std::allocator<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type> > const&, std::__debug::vector<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type, std::allocator<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type> > const&):
✓ Branch 16 → 17 taken 20 times.
std::__debug::vector<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type, std::allocator<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type> > wala::fft::multiply<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2> >(std::__debug::vector<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type, std::allocator<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type> > const&, std::__debug::vector<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type, std::allocator<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type> > const&):
✓ Branch 16 → 17 taken 20 times.
std::__debug::vector<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::allocator<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type> > wala::fft::multiply<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3> >(std::__debug::vector<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::allocator<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type> > const&, std::__debug::vector<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::allocator<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type> > const&):
✓ Branch 16 → 17 taken 20 times.
std::__debug::vector<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type, std::allocator<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type> > wala::fft::multiply<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2> >(std::__debug::vector<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type, std::allocator<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type> > const&, std::__debug::vector<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type, std::allocator<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type> > const&):
✓ Branch 16 → 17 taken 20 times.
365 vector<T> r(sz(a) + sz(b) - 1);
251
17/17
std::__debug::vector<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, std::allocator<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type> > wala::fft::multiply<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3> >(std::__debug::vector<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, std::allocator<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type> > const&, std::__debug::vector<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, std::allocator<wala::fft::engines::trunc_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type> > const&):
✓ Branch 24 → 25 taken 20 times.
std::__debug::vector<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::allocator<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type> > wala::fft::multiply<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3> >(std::__debug::vector<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::allocator<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type> > const&, std::__debug::vector<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::allocator<wala::fft::engines::trunc_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type> > const&):
✓ Branch 24 → 25 taken 20 times.
std::__debug::vector<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, std::allocator<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type> > wala::fft::multiply<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3> >(std::__debug::vector<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, std::allocator<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type> > const&, std::__debug::vector<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, std::allocator<wala::fft::engines::trunc_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type> > const&):
✓ Branch 24 → 25 taken 20 times.
std::__debug::vector<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, std::allocator<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type> > wala::fft::multiply<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3> >(std::__debug::vector<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, std::allocator<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type> > const&, std::__debug::vector<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type, std::allocator<wala::fft::engines::matrix_stable<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 3>::value_type> > const&):
✓ Branch 24 → 25 taken 20 times.
std::__debug::vector<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::allocator<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type> > wala::fft::multiply<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3> >(std::__debug::vector<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::allocator<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type> > const&, std::__debug::vector<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::allocator<wala::fft::engines::matrix_stable<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type> > const&):
✓ Branch 24 → 25 taken 20 times.
std::__debug::vector<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, std::allocator<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type> > wala::fft::multiply<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3> >(std::__debug::vector<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, std::allocator<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type> > const&, std::__debug::vector<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type, std::allocator<wala::fft::engines::matrix_stable<wala::fft::engines::split<wala::modnum<1000000007> >, 3>::value_type> > const&):
✓ Branch 24 → 25 taken 20 times.
std::__debug::vector<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::allocator<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type> > wala::fft::multiply<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> > >(std::__debug::vector<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::allocator<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type> > const&, std::__debug::vector<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::allocator<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type> > const&):
✓ Branch 24 → 25 taken 25 times.
std::__debug::vector<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, std::allocator<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type> > wala::fft::multiply<wala::fft::engines::ntt<wala::mod_goldilocks> >(std::__debug::vector<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, std::allocator<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type> > const&, std::__debug::vector<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, std::allocator<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type> > const&):
✓ Branch 24 → 25 taken 25 times.
std::__debug::vector<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::allocator<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type> > wala::fft::multiply<wala::fft::engines::ntt<wala::modnum<998244353> > >(std::__debug::vector<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::allocator<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type> > const&, std::__debug::vector<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::allocator<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type> > const&):
✓ Branch 24 → 25 taken 25 times.
std::__debug::vector<wala::fft::engines::real<double>::value_type, std::allocator<wala::fft::engines::real<double>::value_type> > wala::fft::multiply<wala::fft::engines::real<double> >(std::__debug::vector<wala::fft::engines::real<double>::value_type, std::allocator<wala::fft::engines::real<double>::value_type> > const&, std::__debug::vector<wala::fft::engines::real<double>::value_type, std::allocator<wala::fft::engines::real<double>::value_type> > const&):
✓ Branch 24 → 25 taken 25 times.
std::__debug::vector<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::allocator<wala::fft::engines::split<wala::modnum<1000000007> >::value_type> > wala::fft::multiply<wala::fft::engines::split<wala::modnum<1000000007> > >(std::__debug::vector<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::allocator<wala::fft::engines::split<wala::modnum<1000000007> >::value_type> > const&, std::__debug::vector<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::allocator<wala::fft::engines::split<wala::modnum<1000000007> >::value_type> > const&):
✓ Branch 24 → 25 taken 25 times.
std::__debug::vector<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type, std::allocator<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type> > wala::fft::multiply<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2> >(std::__debug::vector<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type, std::allocator<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type> > const&, std::__debug::vector<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type, std::allocator<wala::fft::engines::trunc<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type> > const&):
✓ Branch 24 → 25 taken 20 times.
std::__debug::vector<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::allocator<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type> > wala::fft::multiply<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3> >(std::__debug::vector<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::allocator<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type> > const&, std::__debug::vector<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::allocator<wala::fft::engines::trunc<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type> > const&):
✓ Branch 24 → 25 taken 20 times.
std::__debug::vector<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type, std::allocator<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type> > wala::fft::multiply<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2> >(std::__debug::vector<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type, std::allocator<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type> > const&, std::__debug::vector<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type, std::allocator<wala::fft::engines::trunc<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type> > const&):
✓ Branch 24 → 25 taken 20 times.
std::__debug::vector<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type, std::allocator<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type> > wala::fft::multiply<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2> >(std::__debug::vector<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type, std::allocator<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type> > const&, std::__debug::vector<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type, std::allocator<wala::fft::engines::matrix<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, 2>::value_type> > const&):
✓ Branch 24 → 25 taken 20 times.
std::__debug::vector<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::allocator<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type> > wala::fft::multiply<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3> >(std::__debug::vector<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::allocator<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type> > const&, std::__debug::vector<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type, std::allocator<wala::fft::engines::matrix<wala::fft::engines::ntt<wala::modnum<998244353> >, 3>::value_type> > const&):
✓ Branch 24 → 25 taken 20 times.
std::__debug::vector<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type, std::allocator<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type> > wala::fft::multiply<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2> >(std::__debug::vector<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type, std::allocator<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type> > const&, std::__debug::vector<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type, std::allocator<wala::fft::engines::matrix<wala::fft::engines::split<wala::modnum<1000000007> >, 2>::value_type> > const&):
✓ Branch 24 → 25 taken 20 times.
365 multiply<E>(std::span<const T>(a), std::span<const T>(b), std::span<T>(r));
252 365 return r;
253 365 }
254
255 20 template <engine E> vector<typename E::value_type> square(const vector<typename E::value_type>& a) {
256 using T = typename E::value_type;
257
5/10
std::__debug::vector<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::allocator<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type> > wala::fft::square<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> > >(std::__debug::vector<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::allocator<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type> > const&):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 10 taken 4 times.
std::__debug::vector<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, std::allocator<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type> > wala::fft::square<wala::fft::engines::ntt<wala::mod_goldilocks> >(std::__debug::vector<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, std::allocator<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type> > const&):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 10 taken 4 times.
std::__debug::vector<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::allocator<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type> > wala::fft::square<wala::fft::engines::ntt<wala::modnum<998244353> > >(std::__debug::vector<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::allocator<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type> > const&):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 10 taken 4 times.
std::__debug::vector<wala::fft::engines::real<double>::value_type, std::allocator<wala::fft::engines::real<double>::value_type> > wala::fft::square<wala::fft::engines::real<double> >(std::__debug::vector<wala::fft::engines::real<double>::value_type, std::allocator<wala::fft::engines::real<double>::value_type> > const&):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 10 taken 4 times.
std::__debug::vector<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::allocator<wala::fft::engines::split<wala::modnum<1000000007> >::value_type> > wala::fft::square<wala::fft::engines::split<wala::modnum<1000000007> > >(std::__debug::vector<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::allocator<wala::fft::engines::split<wala::modnum<1000000007> >::value_type> > const&):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 10 taken 4 times.
20 if (sz(a) == 0) return {};
258
5/5
std::__debug::vector<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::allocator<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type> > wala::fft::square<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> > >(std::__debug::vector<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::allocator<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type> > const&):
✓ Branch 13 → 14 taken 4 times.
std::__debug::vector<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, std::allocator<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type> > wala::fft::square<wala::fft::engines::ntt<wala::mod_goldilocks> >(std::__debug::vector<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, std::allocator<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type> > const&):
✓ Branch 13 → 14 taken 4 times.
std::__debug::vector<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::allocator<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type> > wala::fft::square<wala::fft::engines::ntt<wala::modnum<998244353> > >(std::__debug::vector<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::allocator<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type> > const&):
✓ Branch 13 → 14 taken 4 times.
std::__debug::vector<wala::fft::engines::real<double>::value_type, std::allocator<wala::fft::engines::real<double>::value_type> > wala::fft::square<wala::fft::engines::real<double> >(std::__debug::vector<wala::fft::engines::real<double>::value_type, std::allocator<wala::fft::engines::real<double>::value_type> > const&):
✓ Branch 13 → 14 taken 4 times.
std::__debug::vector<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::allocator<wala::fft::engines::split<wala::modnum<1000000007> >::value_type> > wala::fft::square<wala::fft::engines::split<wala::modnum<1000000007> > >(std::__debug::vector<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::allocator<wala::fft::engines::split<wala::modnum<1000000007> >::value_type> > const&):
✓ Branch 13 → 14 taken 4 times.
20 vector<T> r(2 * sz(a) - 1);
259
5/5
std::__debug::vector<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::allocator<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type> > wala::fft::square<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> > >(std::__debug::vector<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::allocator<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type> > const&):
✓ Branch 19 → 20 taken 4 times.
std::__debug::vector<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, std::allocator<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type> > wala::fft::square<wala::fft::engines::ntt<wala::mod_goldilocks> >(std::__debug::vector<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, std::allocator<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type> > const&):
✓ Branch 19 → 20 taken 4 times.
std::__debug::vector<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::allocator<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type> > wala::fft::square<wala::fft::engines::ntt<wala::modnum<998244353> > >(std::__debug::vector<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::allocator<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type> > const&):
✓ Branch 19 → 20 taken 4 times.
std::__debug::vector<wala::fft::engines::real<double>::value_type, std::allocator<wala::fft::engines::real<double>::value_type> > wala::fft::square<wala::fft::engines::real<double> >(std::__debug::vector<wala::fft::engines::real<double>::value_type, std::allocator<wala::fft::engines::real<double>::value_type> > const&):
✓ Branch 19 → 20 taken 4 times.
std::__debug::vector<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::allocator<wala::fft::engines::split<wala::modnum<1000000007> >::value_type> > wala::fft::square<wala::fft::engines::split<wala::modnum<1000000007> > >(std::__debug::vector<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::allocator<wala::fft::engines::split<wala::modnum<1000000007> >::value_type> > const&):
✓ Branch 19 → 20 taken 4 times.
20 square<E>(std::span<const T>(a), std::span<T>(r));
260 20 return r;
261 20 }
262
263 namespace detail {
264 // emit_linear but for middle_product
265 template <typename T, typename Op>
266 1326258 void emit_middle(std::span<T> buf, bool cut, int la, int lb, T c0, T ctop, std::span<T> out, Op op) {
267 1326258 int m = la - lb + 1;
268
2/2
✓ Branch 2 → 3 taken 13 times.
✓ Branch 2 → 10 taken 1325939 times.
1326258 T cn{};
269
18/18
void wala::fft::detail::emit_middle<wala::mod_goldilocks, wala::fft::add_op>(std::span<wala::mod_goldilocks, 18446744073709551615ul>, bool, int, int, wala::mod_goldilocks, wala::mod_goldilocks, std::span<wala::mod_goldilocks, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 6 → 7 taken 6 times.
✓ Branch 6 → 8 taken 8 times.
void wala::fft::detail::emit_middle<wala::mod_goldilocks, wala::fft::assign_op>(std::span<wala::mod_goldilocks, 18446744073709551615ul>, bool, int, int, wala::mod_goldilocks, wala::mod_goldilocks, std::span<wala::mod_goldilocks, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 6 → 7 taken 6 times.
✓ Branch 6 → 8 taken 8 times.
void wala::fft::detail::emit_middle<wala::modnum<1000000007>, wala::fft::add_op>(std::span<wala::modnum<1000000007>, 18446744073709551615ul>, bool, int, int, wala::modnum<1000000007>, wala::modnum<1000000007>, std::span<wala::modnum<1000000007>, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 6 → 7 taken 12 times.
✓ Branch 6 → 8 taken 16 times.
void wala::fft::detail::emit_middle<wala::modnum<1000000007>, wala::fft::assign_op>(std::span<wala::modnum<1000000007>, 18446744073709551615ul>, bool, int, int, wala::modnum<1000000007>, wala::modnum<1000000007>, std::span<wala::modnum<1000000007>, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 6 → 7 taken 12 times.
✓ Branch 6 → 8 taken 16 times.
void wala::fft::detail::emit_middle<wala::modnum<998244353>, wala::fft::add_op>(std::span<wala::modnum<998244353>, 18446744073709551615ul>, bool, int, int, wala::modnum<998244353>, wala::modnum<998244353>, std::span<wala::modnum<998244353>, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 6 → 7 taken 6 times.
✓ Branch 6 → 8 taken 8 times.
void wala::fft::detail::emit_middle<wala::modnum<998244353>, wala::fft::assign_op>(std::span<wala::modnum<998244353>, 18446744073709551615ul>, bool, int, int, wala::modnum<998244353>, wala::modnum<998244353>, std::span<wala::modnum<998244353>, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 2 → 3 taken 13 times.
✓ Branch 2 → 10 taken 1325939 times.
✓ Branch 6 → 7 taken 144 times.
✓ Branch 6 → 8 taken 36 times.
void wala::fft::detail::emit_middle<double, wala::fft::add_op>(std::span<double, 18446744073709551615ul>, bool, int, int, double, double, std::span<double, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 2 → 3 taken 6 times.
✓ Branch 2 → 4 taken 8 times.
void wala::fft::detail::emit_middle<double, wala::fft::assign_op>(std::span<double, 18446744073709551615ul>, bool, int, int, double, double, std::span<double, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 2 → 3 taken 6 times.
✓ Branch 2 → 4 taken 8 times.
1326258 if (cut) {
270
2/2
✓ Branch 3 → 4 taken 4 times.
✓ Branch 3 → 5 taken 9 times.
121 cn = buf[0] - c0; // for lb == 1 these coincide: slot 0 = c_0 + c_n and ctop = c_n
271
2/2
✓ Branch 6 → 7 taken 2 times.
✓ Branch 6 → 8 taken 11 times.
134 buf[lb - 1] -= ctop;
272 }
273 1326258 int lim = min(sz(out), cut ? m - 1 : m);
274
18/18
void wala::fft::detail::emit_middle<wala::mod_goldilocks, wala::fft::add_op>(std::span<wala::mod_goldilocks, 18446744073709551615ul>, bool, int, int, wala::mod_goldilocks, wala::mod_goldilocks, std::span<wala::mod_goldilocks, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 41 → 31 taken 474 times.
✓ Branch 41 → 42 taken 14 times.
void wala::fft::detail::emit_middle<wala::mod_goldilocks, wala::fft::assign_op>(std::span<wala::mod_goldilocks, 18446744073709551615ul>, bool, int, int, wala::mod_goldilocks, wala::mod_goldilocks, std::span<wala::mod_goldilocks, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 40 → 31 taken 474 times.
✓ Branch 40 → 41 taken 14 times.
void wala::fft::detail::emit_middle<wala::modnum<1000000007>, wala::fft::add_op>(std::span<wala::modnum<1000000007>, 18446744073709551615ul>, bool, int, int, wala::modnum<1000000007>, wala::modnum<1000000007>, std::span<wala::modnum<1000000007>, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 41 → 31 taken 948 times.
✓ Branch 41 → 42 taken 28 times.
void wala::fft::detail::emit_middle<wala::modnum<1000000007>, wala::fft::assign_op>(std::span<wala::modnum<1000000007>, 18446744073709551615ul>, bool, int, int, wala::modnum<1000000007>, wala::modnum<1000000007>, std::span<wala::modnum<1000000007>, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 40 → 31 taken 948 times.
✓ Branch 40 → 41 taken 28 times.
void wala::fft::detail::emit_middle<wala::modnum<998244353>, wala::fft::add_op>(std::span<wala::modnum<998244353>, 18446744073709551615ul>, bool, int, int, wala::modnum<998244353>, wala::modnum<998244353>, std::span<wala::modnum<998244353>, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 41 → 31 taken 474 times.
✓ Branch 41 → 42 taken 14 times.
void wala::fft::detail::emit_middle<wala::modnum<998244353>, wala::fft::assign_op>(std::span<wala::modnum<998244353>, 18446744073709551615ul>, bool, int, int, wala::modnum<998244353>, wala::modnum<998244353>, std::span<wala::modnum<998244353>, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 12 → 11 taken 26087200 times.
✓ Branch 12 → 13 taken 1325952 times.
✓ Branch 40 → 31 taken 1392 times.
✓ Branch 40 → 41 taken 180 times.
void wala::fft::detail::emit_middle<double, wala::fft::add_op>(std::span<double, 18446744073709551615ul>, bool, int, int, double, double, std::span<double, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 31 → 24 taken 474 times.
✓ Branch 31 → 32 taken 14 times.
void wala::fft::detail::emit_middle<double, wala::fft::assign_op>(std::span<double, 18446744073709551615ul>, bool, int, int, double, double, std::span<double, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 32 → 24 taken 474 times.
✓ Branch 32 → 33 taken 14 times.
27419116 for (int t = 0; t < lim; t++) op(out[t], buf[lb - 1 + t]);
275
27/36
void wala::fft::detail::emit_middle<wala::mod_goldilocks, wala::fft::add_op>(std::span<wala::mod_goldilocks, 18446744073709551615ul>, bool, int, int, wala::mod_goldilocks, wala::mod_goldilocks, std::span<wala::mod_goldilocks, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 42 → 43 taken 8 times.
✓ Branch 42 → 50 taken 6 times.
✓ Branch 44 → 45 taken 8 times.
✗ Branch 44 → 50 not taken.
void wala::fft::detail::emit_middle<wala::mod_goldilocks, wala::fft::assign_op>(std::span<wala::mod_goldilocks, 18446744073709551615ul>, bool, int, int, wala::mod_goldilocks, wala::mod_goldilocks, std::span<wala::mod_goldilocks, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 41 → 42 taken 8 times.
✓ Branch 41 → 49 taken 6 times.
✓ Branch 43 → 44 taken 8 times.
✗ Branch 43 → 49 not taken.
void wala::fft::detail::emit_middle<wala::modnum<1000000007>, wala::fft::add_op>(std::span<wala::modnum<1000000007>, 18446744073709551615ul>, bool, int, int, wala::modnum<1000000007>, wala::modnum<1000000007>, std::span<wala::modnum<1000000007>, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 42 → 43 taken 16 times.
✓ Branch 42 → 50 taken 12 times.
✓ Branch 44 → 45 taken 16 times.
✗ Branch 44 → 50 not taken.
void wala::fft::detail::emit_middle<wala::modnum<1000000007>, wala::fft::assign_op>(std::span<wala::modnum<1000000007>, 18446744073709551615ul>, bool, int, int, wala::modnum<1000000007>, wala::modnum<1000000007>, std::span<wala::modnum<1000000007>, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 41 → 42 taken 16 times.
✓ Branch 41 → 49 taken 12 times.
✓ Branch 43 → 44 taken 16 times.
✗ Branch 43 → 49 not taken.
void wala::fft::detail::emit_middle<wala::modnum<998244353>, wala::fft::add_op>(std::span<wala::modnum<998244353>, 18446744073709551615ul>, bool, int, int, wala::modnum<998244353>, wala::modnum<998244353>, std::span<wala::modnum<998244353>, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 42 → 43 taken 8 times.
✓ Branch 42 → 50 taken 6 times.
✓ Branch 44 → 45 taken 8 times.
✗ Branch 44 → 50 not taken.
void wala::fft::detail::emit_middle<wala::modnum<998244353>, wala::fft::assign_op>(std::span<wala::modnum<998244353>, 18446744073709551615ul>, bool, int, int, wala::modnum<998244353>, wala::modnum<998244353>, std::span<wala::modnum<998244353>, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 13 → 14 taken 13 times.
✓ Branch 13 → 16 taken 1325939 times.
✓ Branch 14 → 15 taken 13 times.
✗ Branch 14 → 16 not taken.
✓ Branch 41 → 42 taken 36 times.
✓ Branch 41 → 49 taken 144 times.
✓ Branch 43 → 44 taken 36 times.
✗ Branch 43 → 49 not taken.
void wala::fft::detail::emit_middle<double, wala::fft::add_op>(std::span<double, 18446744073709551615ul>, bool, int, int, double, double, std::span<double, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 32 → 33 taken 8 times.
✓ Branch 32 → 38 taken 6 times.
✓ Branch 34 → 35 taken 8 times.
✗ Branch 34 → 38 not taken.
void wala::fft::detail::emit_middle<double, wala::fft::assign_op>(std::span<double, 18446744073709551615ul>, bool, int, int, double, double, std::span<double, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 33 → 34 taken 8 times.
✓ Branch 33 → 41 taken 6 times.
✓ Branch 35 → 36 taken 8 times.
✗ Branch 35 → 41 not taken.
1326358 if (cut && sz(out) >= m) op(out[m-1], cn);
276 1326258 }
277 } // namespace detail
278
279 // Middle product (the transposed multiplication): takes only coefficients of a * b which include terms from all of b.
280 // Must have len(a) >= len(b)
281 template <engine E, typename Op = assign_op>
282 234 void middle_product(std::span<const typename E::value_type> a, std::span<const typename E::value_type> b,
283 std::span<typename E::value_type> out, Op op = {}) {
284 using T = typename E::value_type;
285
21/43
void wala::fft::middle_product<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::add_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 3 → 4 taken 15 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 7 taken 15 times.
void wala::fft::middle_product<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::assign_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 3 → 4 taken 16 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 7 taken 16 times.
void wala::fft::middle_product<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 3 → 4 taken 15 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 7 taken 15 times.
void wala::fft::middle_product<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 3 → 4 taken 16 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 7 taken 16 times.
void wala::fft::middle_product<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 3 → 4 taken 15 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 7 taken 15 times.
void wala::fft::middle_product<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 2 → 3 taken 29 times.
✗ Branch 2 → 21 not taken.
✓ Branch 3 → 4 taken 95 times.
✗ Branch 3 → 6 not taken.
✗ Branch 3 → 21 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 7 taken 66 times.
void wala::fft::middle_product<wala::fft::engines::real<double>, wala::fft::add_op>(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 3 → 4 taken 15 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 7 taken 15 times.
void wala::fft::middle_product<wala::fft::engines::real<double>, wala::fft::assign_op>(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 3 → 4 taken 16 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 7 taken 16 times.
void wala::fft::middle_product<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::add_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 3 → 4 taken 15 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 7 taken 15 times.
void wala::fft::middle_product<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::assign_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 3 → 4 taken 16 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 7 taken 16 times.
256 if (sz(a) == 0 || sz(b) == 0) return;
286 234 assert(sz(a) >= sz(b));
287
21/22
void wala::fft::middle_product<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::add_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 13 → 14 taken 1 time.
✓ Branch 13 → 40 taken 14 times.
void wala::fft::middle_product<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::assign_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 13 → 14 taken 2 times.
✓ Branch 13 → 40 taken 14 times.
void wala::fft::middle_product<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 13 → 14 taken 1 time.
✓ Branch 13 → 40 taken 14 times.
void wala::fft::middle_product<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 13 → 14 taken 2 times.
✓ Branch 13 → 40 taken 14 times.
void wala::fft::middle_product<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 13 → 14 taken 1 time.
✓ Branch 13 → 40 taken 14 times.
void wala::fft::middle_product<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 6 → 7 not taken.
✓ Branch 6 → 14 taken 29 times.
✓ Branch 13 → 14 taken 9 times.
✓ Branch 13 → 40 taken 57 times.
void wala::fft::middle_product<wala::fft::engines::real<double>, wala::fft::add_op>(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 13 → 22 taken 1 time.
✓ Branch 13 → 30 taken 14 times.
void wala::fft::middle_product<wala::fft::engines::real<double>, wala::fft::assign_op>(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 13 → 22 taken 2 times.
✓ Branch 13 → 32 taken 14 times.
void wala::fft::middle_product<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::add_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 13 → 14 taken 1 time.
✓ Branch 13 → 40 taken 14 times.
void wala::fft::middle_product<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::assign_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 13 → 14 taken 2 times.
✓ Branch 13 → 40 taken 14 times.
234 if (sz(a) == sz(b)) {
288 19 T r{};
289
20/22
void wala::fft::middle_product<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::add_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 31 → 19 taken 5 times.
✓ Branch 31 → 32 taken 1 time.
void wala::fft::middle_product<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::assign_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 31 → 19 taken 14 times.
✓ Branch 31 → 32 taken 2 times.
void wala::fft::middle_product<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 31 → 19 taken 5 times.
✓ Branch 31 → 32 taken 1 time.
void wala::fft::middle_product<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 31 → 19 taken 14 times.
✓ Branch 31 → 32 taken 2 times.
void wala::fft::middle_product<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 31 → 19 taken 5 times.
✓ Branch 31 → 32 taken 1 time.
void wala::fft::middle_product<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 10 → 8 not taken.
✗ Branch 10 → 11 not taken.
✓ Branch 31 → 19 taken 67 times.
✓ Branch 31 → 32 taken 9 times.
void wala::fft::middle_product<wala::fft::engines::real<double>, wala::fft::add_op>(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 23 → 14 taken 5 times.
✓ Branch 23 → 24 taken 1 time.
void wala::fft::middle_product<wala::fft::engines::real<double>, wala::fft::assign_op>(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 23 → 14 taken 14 times.
✓ Branch 23 → 24 taken 2 times.
void wala::fft::middle_product<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::add_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 31 → 19 taken 5 times.
✓ Branch 31 → 32 taken 1 time.
void wala::fft::middle_product<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::assign_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 31 → 19 taken 14 times.
✓ Branch 31 → 32 taken 2 times.
170 for (int i = 0; i < sz(a); i++) {
290 148 r += a[i] * b[sz(b) - 1 - i];
291 }
292
10/22
void wala::fft::middle_product<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::add_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 33 → 34 taken 1 time.
✗ Branch 33 → 39 not taken.
void wala::fft::middle_product<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::assign_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 33 → 34 taken 2 times.
✗ Branch 33 → 39 not taken.
void wala::fft::middle_product<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 33 → 34 taken 1 time.
✗ Branch 33 → 39 not taken.
void wala::fft::middle_product<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 33 → 34 taken 2 times.
✗ Branch 33 → 39 not taken.
void wala::fft::middle_product<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 33 → 34 taken 1 time.
✗ Branch 33 → 39 not taken.
void wala::fft::middle_product<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
✓ Branch 33 → 34 taken 9 times.
✗ Branch 33 → 39 not taken.
void wala::fft::middle_product<wala::fft::engines::real<double>, wala::fft::add_op>(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 25 → 26 taken 1 time.
✗ Branch 25 → 29 not taken.
void wala::fft::middle_product<wala::fft::engines::real<double>, wala::fft::assign_op>(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 25 → 26 taken 2 times.
✗ Branch 25 → 31 not taken.
void wala::fft::middle_product<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::add_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 33 → 34 taken 1 time.
✗ Branch 33 → 39 not taken.
void wala::fft::middle_product<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::assign_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 33 → 34 taken 2 times.
✗ Branch 33 → 39 not taken.
43 if (sz(out) > 0) op(out[0], r);
293 3 return;
294 }
295 212 auto [n, cut] = detail::conv_size_for(sz(a));
296
10/10
void wala::fft::middle_product<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::add_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 43 → 44 taken 14 times.
void wala::fft::middle_product<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::assign_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 43 → 44 taken 14 times.
void wala::fft::middle_product<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 43 → 44 taken 14 times.
void wala::fft::middle_product<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 43 → 44 taken 14 times.
void wala::fft::middle_product<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 43 → 44 taken 14 times.
void wala::fft::middle_product<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 43 → 44 taken 57 times.
void wala::fft::middle_product<wala::fft::engines::real<double>, wala::fft::add_op>(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 33 → 34 taken 14 times.
void wala::fft::middle_product<wala::fft::engines::real<double>, wala::fft::assign_op>(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 35 → 36 taken 14 times.
void wala::fft::middle_product<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::add_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 43 → 44 taken 14 times.
void wala::fft::middle_product<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::assign_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 43 → 44 taken 14 times.
212 auto buf = buffer_pool<T>::get(n);
297
12/13
void wala::fft::middle_product<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::add_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 49 → 50 taken 14 times.
void wala::fft::middle_product<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::assign_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 49 → 50 taken 14 times.
void wala::fft::middle_product<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 49 → 50 taken 14 times.
void wala::fft::middle_product<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 49 → 50 taken 14 times.
void wala::fft::middle_product<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 49 → 50 taken 14 times.
void wala::fft::middle_product<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 15 → 16 not taken.
✓ Branch 15 → 17 taken 29 times.
✓ Branch 17 → 18 taken 29 times.
✓ Branch 49 → 50 taken 57 times.
void wala::fft::middle_product<wala::fft::engines::real<double>, wala::fft::add_op>(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 39 → 40 taken 14 times.
void wala::fft::middle_product<wala::fft::engines::real<double>, wala::fft::assign_op>(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 41 → 42 taken 14 times.
void wala::fft::middle_product<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::add_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✓ Branch 49 → 50 taken 14 times.
void wala::fft::middle_product<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::assign_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✓ Branch 49 → 50 taken 14 times.
395 multiply_circular<E>(a, b, buf.span(), n);
298
10/20
void wala::fft::middle_product<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::add_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 64 → 65 not taken.
✓ Branch 64 → 66 taken 14 times.
void wala::fft::middle_product<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >, wala::fft::assign_op>(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 64 → 65 not taken.
✓ Branch 64 → 66 taken 14 times.
void wala::fft::middle_product<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 64 → 65 not taken.
✓ Branch 64 → 66 taken 14 times.
void wala::fft::middle_product<wala::fft::engines::ntt<wala::mod_goldilocks>, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 64 → 65 not taken.
✓ Branch 64 → 66 taken 14 times.
void wala::fft::middle_product<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::add_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 64 → 65 not taken.
✓ Branch 64 → 66 taken 14 times.
void wala::fft::middle_product<wala::fft::engines::ntt<wala::modnum<998244353> >, wala::fft::assign_op>(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 64 → 65 not taken.
✓ Branch 64 → 66 taken 57 times.
void wala::fft::middle_product<wala::fft::engines::real<double>, wala::fft::add_op>(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 56 → 57 not taken.
✓ Branch 56 → 58 taken 14 times.
void wala::fft::middle_product<wala::fft::engines::real<double>, wala::fft::assign_op>(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 58 → 59 not taken.
✓ Branch 58 → 60 taken 14 times.
void wala::fft::middle_product<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::add_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::add_op):
✗ Branch 64 → 65 not taken.
✓ Branch 64 → 66 taken 14 times.
void wala::fft::middle_product<wala::fft::engines::split<wala::modnum<1000000007> >, wala::fft::assign_op>(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, 18446744073709551615ul>, wala::fft::assign_op):
✗ Branch 64 → 65 not taken.
✓ Branch 64 → 66 taken 14 times.
944 detail::emit_middle<T>(buf.span(), cut, sz(a), sz(b),
299 761 a[0] * b[0], a[sz(a) - 1] * b[sz(b) - 1], out, op);
300 212 }
301
302 // TODO: Let's decide whether to keep vector<> returning forms or not; this
303 // largely depends on whether we think these functions are a public interface or
304 // merely convenience for value type implementors.
305 159 template <engine E> vector<typename E::value_type> middle_product(
306 std::span<const typename E::value_type> a, std::span<const typename E::value_type> b) {
307 using T = typename E::value_type;
308
12/24
std::__debug::vector<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::allocator<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type> > wala::fft::middle_product<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> > >(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>):
✓ Branch 3 → 4 taken 16 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 12 taken 16 times.
std::__debug::vector<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, std::allocator<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type> > wala::fft::middle_product<wala::fft::engines::ntt<wala::mod_goldilocks> >(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>):
✓ Branch 3 → 4 taken 16 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 12 taken 16 times.
std::__debug::vector<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::allocator<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type> > wala::fft::middle_product<wala::fft::engines::ntt<wala::modnum<998244353> > >(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>):
✓ Branch 3 → 4 taken 66 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 12 taken 66 times.
std::vector<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::allocator<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type> > wala::fft::middle_product<wala::fft::engines::ntt<wala::modnum<998244353> > >(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>):
✓ Branch 2 → 3 taken 29 times.
✗ Branch 2 → 4 not taken.
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 29 times.
std::__debug::vector<wala::fft::engines::real<double>::value_type, std::allocator<wala::fft::engines::real<double>::value_type> > wala::fft::middle_product<wala::fft::engines::real<double> >(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>):
✓ Branch 3 → 4 taken 16 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 12 taken 16 times.
std::__debug::vector<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::allocator<wala::fft::engines::split<wala::modnum<1000000007> >::value_type> > wala::fft::middle_product<wala::fft::engines::split<wala::modnum<1000000007> > >(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>):
✓ Branch 3 → 4 taken 16 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 12 taken 16 times.
159 if (sz(a) == 0 || sz(b) == 0) return {};
309 159 assert(sz(a) >= sz(b));
310
6/7
std::__debug::vector<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::allocator<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type> > wala::fft::middle_product<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> > >(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>):
✓ Branch 20 → 21 taken 16 times.
std::__debug::vector<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, std::allocator<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type> > wala::fft::middle_product<wala::fft::engines::ntt<wala::mod_goldilocks> >(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>):
✓ Branch 20 → 21 taken 16 times.
std::__debug::vector<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::allocator<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type> > wala::fft::middle_product<wala::fft::engines::ntt<wala::modnum<998244353> > >(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>):
✓ Branch 20 → 21 taken 66 times.
std::vector<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::allocator<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type> > wala::fft::middle_product<wala::fft::engines::ntt<wala::modnum<998244353> > >(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>):
✗ Branch 8 → 9 not taken.
✓ Branch 8 → 10 taken 29 times.
std::__debug::vector<wala::fft::engines::real<double>::value_type, std::allocator<wala::fft::engines::real<double>::value_type> > wala::fft::middle_product<wala::fft::engines::real<double> >(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>):
✓ Branch 20 → 21 taken 16 times.
std::__debug::vector<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::allocator<wala::fft::engines::split<wala::modnum<1000000007> >::value_type> > wala::fft::middle_product<wala::fft::engines::split<wala::modnum<1000000007> > >(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>):
✓ Branch 20 → 21 taken 16 times.
159 vector<T> r(size_t(sz(a) - sz(b) + 1));
311
6/6
std::__debug::vector<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type, std::allocator<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type> > wala::fft::middle_product<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> > >(std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::crt<wala::modnum<1000000007>, wala::mod_goldilocks, wala::modnum<2013265921> >::value_type const, 18446744073709551615ul>):
✓ Branch 24 → 25 taken 16 times.
std::__debug::vector<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type, std::allocator<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type> > wala::fft::middle_product<wala::fft::engines::ntt<wala::mod_goldilocks> >(std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::mod_goldilocks>::value_type const, 18446744073709551615ul>):
✓ Branch 24 → 25 taken 16 times.
std::__debug::vector<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::allocator<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type> > wala::fft::middle_product<wala::fft::engines::ntt<wala::modnum<998244353> > >(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>):
✓ Branch 24 → 25 taken 66 times.
std::vector<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::allocator<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type> > wala::fft::middle_product<wala::fft::engines::ntt<wala::modnum<998244353> > >(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>):
✓ Branch 10 → 11 taken 29 times.
std::__debug::vector<wala::fft::engines::real<double>::value_type, std::allocator<wala::fft::engines::real<double>::value_type> > wala::fft::middle_product<wala::fft::engines::real<double> >(std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::real<double>::value_type const, 18446744073709551615ul>):
✓ Branch 24 → 25 taken 16 times.
std::__debug::vector<wala::fft::engines::split<wala::modnum<1000000007> >::value_type, std::allocator<wala::fft::engines::split<wala::modnum<1000000007> >::value_type> > wala::fft::middle_product<wala::fft::engines::split<wala::modnum<1000000007> > >(std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<wala::fft::engines::split<wala::modnum<1000000007> >::value_type const, 18446744073709551615ul>):
✓ Branch 24 → 25 taken 16 times.
159 middle_product<E>(a, b, std::span<T>(r));
312 159 return r;
313 159 }
314
315 template <engine E, typename Op = assign_op>
316 2652143 void middle_product(std::span<const typename E::value_type> a, transformed<E>& ta,
317 std::span<const typename E::value_type> b, transformed<E>& tb,
318 std::span<typename E::value_type> out, Op op = {}) {
319 using T = typename E::value_type;
320
3/7
✓ Branch 2 → 3 taken 2651880 times.
✗ Branch 2 → 25 not taken.
✓ Branch 3 → 4 taken 2652143 times.
✗ Branch 3 → 6 not taken.
✗ Branch 3 → 25 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 7 taken 263 times.
3978240 if (sz(a) == 0 || sz(b) == 0) return;
321 2652143 assert(sz(a) >= sz(b));
322
4/4
✓ Branch 6 → 7 taken 1325957 times.
✓ Branch 6 → 14 taken 1325923 times.
✓ Branch 13 → 14 taken 140 times.
✓ Branch 13 → 40 taken 123 times.
2652143 if (sz(a) == sz(b)) {
323 1326097 T r{};
324
4/4
✓ Branch 10 → 8 taken 2651921 times.
✓ Branch 10 → 11 taken 1325957 times.
✓ Branch 31 → 19 taken 284 times.
✓ Branch 31 → 32 taken 140 times.
3978302 for (int i = 0; i < sz(a); i++) {
325 2652205 r += a[i] * b[sz(b) - 1 - i];
326 }
327
2/4
✓ Branch 11 → 12 taken 1325957 times.
✗ Branch 11 → 13 not taken.
✓ Branch 33 → 34 taken 140 times.
✗ Branch 33 → 39 not taken.
1326237 if (sz(out) > 0) op(out[0], r);
328 return;
329 }
330 1326046 auto [n, cut] = detail::conv_size_for(sz(a));
331
1/1
✓ Branch 43 → 44 taken 123 times.
1326046 E::extend_to(ta, n, a);
332
1/1
✓ Branch 45 → 46 taken 123 times.
1326046 E::extend_to(tb, n, b);
333
2/3
✗ Branch 17 → 18 not taken.
✓ Branch 17 → 19 taken 1325923 times.
✓ Branch 47 → 48 taken 123 times.
1326046 auto buf = buffer_pool<T>::get(n);
334
4/4
✓ Branch 19 → 20 taken 1325923 times.
✓ Branch 20 → 21 taken 1325923 times.
✓ Branch 56 → 57 taken 123 times.
✓ Branch 58 → 59 taken 123 times.
1326169 E::finish(E::mul(ta, tb, n), buf.span());
335
1/2
✗ Branch 91 → 92 not taken.
✓ Branch 91 → 93 taken 123 times.
1326538 detail::emit_middle<T>(buf.span(), cut, sz(a), sz(b),
336 1326415 a[0] * b[0], a[sz(a) - 1] * b[sz(b) - 1], out, op);
337 1326046 }
338
339 template <engine E>
340 2652143 vector<typename E::value_type> middle_product(std::span<const typename E::value_type> a, transformed<E>& ta,
341 std::span<const typename E::value_type> b, transformed<E>& tb) {
342 using T = typename E::value_type;
343
4/8
std::__debug::vector<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::allocator<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type> > wala::fft::middle_product<wala::fft::engines::ntt<wala::modnum<998244353> > >(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&):
✓ Branch 3 → 4 taken 263 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 12 taken 263 times.
std::vector<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::allocator<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type> > wala::fft::middle_product<wala::fft::engines::ntt<wala::modnum<998244353> > >(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&):
✓ Branch 2 → 3 taken 2651880 times.
✗ Branch 2 → 4 not taken.
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 2651880 times.
2652143 if (sz(a) == 0 || sz(b) == 0) return {};
344 2652143 assert(sz(a) >= sz(b));
345
2/3
std::__debug::vector<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::allocator<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type> > wala::fft::middle_product<wala::fft::engines::ntt<wala::modnum<998244353> > >(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&):
✓ Branch 20 → 21 taken 263 times.
std::vector<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::allocator<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type> > wala::fft::middle_product<wala::fft::engines::ntt<wala::modnum<998244353> > >(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&):
✗ Branch 8 → 9 not taken.
✓ Branch 8 → 10 taken 2651880 times.
2652143 vector<T> r(size_t(sz(a) - sz(b) + 1));
346
2/2
std::__debug::vector<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::allocator<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type> > wala::fft::middle_product<wala::fft::engines::ntt<wala::modnum<998244353> > >(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&):
✓ Branch 24 → 25 taken 263 times.
std::vector<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type, std::allocator<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type> > wala::fft::middle_product<wala::fft::engines::ntt<wala::modnum<998244353> > >(std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&, std::span<wala::fft::engines::ntt<wala::modnum<998244353> >::value_type const, 18446744073709551615ul>, wala::fft::engines::ntt<wala::modnum<998244353> >::transformed&):
✓ Branch 10 → 11 taken 2651880 times.
2652143 middle_product<E>(a, ta, b, tb, std::span<T>(r));
347 2652143 return r;
348 2652143 }
349
350 } // namespace wala::fft
351