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 ecnerwala::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 1758 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 1758 assert(!(n & (n-1)));
30
17/17
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 5 → 6 taken 20 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 5 → 6 taken 20 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 5 → 6 taken 20 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 5 → 6 taken 20 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 5 → 6 taken 20 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 5 → 6 taken 20 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 5 → 6 taken 54 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 5 → 6 taken 54 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 5 → 6 taken 156 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::real<double>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 5 → 6 taken 56 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 5 → 6 taken 54 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 5 → 6 taken 20 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 5 → 6 taken 20 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 5 → 6 taken 20 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 5 → 6 taken 20 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 5 → 6 taken 20 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 5 → 6 taken 20 times.
1758 auto ta = E::transform(a, n);
31
18/18
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 7 → 8 taken 20 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 7 → 8 taken 20 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 7 → 8 taken 20 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 7 → 8 taken 20 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 7 → 8 taken 20 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 7 → 8 taken 20 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 7 → 8 taken 54 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 7 → 8 taken 54 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 5 → 6 taken 1144 times.
✓ Branch 7 → 8 taken 156 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::real<double>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 7 → 8 taken 56 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 7 → 8 taken 54 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 7 → 8 taken 20 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 7 → 8 taken 20 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 7 → 8 taken 20 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 7 → 8 taken 20 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 7 → 8 taken 20 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 7 → 8 taken 20 times.
1758 auto tb = E::transform(b, n);
32
36/36
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 9 → 10 taken 20 times.
✓ Branch 11 → 12 taken 20 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 9 → 10 taken 20 times.
✓ Branch 11 → 12 taken 20 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 9 → 10 taken 20 times.
✓ Branch 11 → 12 taken 20 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 9 → 10 taken 20 times.
✓ Branch 11 → 12 taken 20 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 9 → 10 taken 20 times.
✓ Branch 11 → 12 taken 20 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 9 → 10 taken 20 times.
✓ Branch 11 → 12 taken 20 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 9 → 10 taken 54 times.
✓ Branch 11 → 12 taken 54 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 9 → 10 taken 54 times.
✓ Branch 11 → 12 taken 54 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 6 → 7 taken 1144 times.
✓ Branch 7 → 8 taken 1144 times.
✓ Branch 9 → 10 taken 156 times.
✓ Branch 11 → 12 taken 156 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::real<double>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 9 → 10 taken 56 times.
✓ Branch 11 → 12 taken 56 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 9 → 10 taken 54 times.
✓ Branch 11 → 12 taken 54 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 9 → 10 taken 20 times.
✓ Branch 11 → 12 taken 20 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 9 → 10 taken 20 times.
✓ Branch 11 → 12 taken 20 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 9 → 10 taken 20 times.
✓ Branch 11 → 12 taken 20 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 9 → 10 taken 20 times.
✓ Branch 11 → 12 taken 20 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 9 → 10 taken 20 times.
✓ Branch 11 → 12 taken 20 times.
void ecnerwala::fft::multiply_circular<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 9 → 10 taken 20 times.
✓ Branch 11 → 12 taken 20 times.
3408 E::finish(E::mul(ta, tb, n), out, op);
33 2932 }
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 ecnerwala::fft::square_circular<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 5 → 6 taken 1 time.
void ecnerwala::fft::square_circular<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 5 → 6 taken 1 time.
void ecnerwala::fft::square_circular<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 5 → 6 taken 1 time.
void ecnerwala::fft::square_circular<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 5 → 6 taken 4 times.
void ecnerwala::fft::square_circular<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 5 → 6 taken 4 times.
void ecnerwala::fft::square_circular<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 5 → 6 taken 29 times.
void ecnerwala::fft::square_circular<ecnerwala::fft::engines::real<double>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 5 → 6 taken 4 times.
void ecnerwala::fft::square_circular<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 5 → 6 taken 4 times.
void ecnerwala::fft::square_circular<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 5 → 6 taken 1 time.
void ecnerwala::fft::square_circular<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 5 → 6 taken 1 time.
void ecnerwala::fft::square_circular<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 5 → 6 taken 1 time.
588 auto ta = E::transform(a, n);
39
23/23
void ecnerwala::fft::square_circular<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 7 → 8 taken 1 time.
✓ Branch 9 → 10 taken 1 time.
void ecnerwala::fft::square_circular<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 7 → 8 taken 1 time.
✓ Branch 9 → 10 taken 1 time.
void ecnerwala::fft::square_circular<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 7 → 8 taken 1 time.
✓ Branch 9 → 10 taken 1 time.
void ecnerwala::fft::square_circular<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 7 → 8 taken 4 times.
✓ Branch 9 → 10 taken 4 times.
void ecnerwala::fft::square_circular<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 7 → 8 taken 4 times.
✓ Branch 9 → 10 taken 4 times.
void ecnerwala::fft::square_circular<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 6 → 7 taken 537 times.
✓ Branch 7 → 8 taken 29 times.
✓ Branch 9 → 10 taken 29 times.
void ecnerwala::fft::square_circular<ecnerwala::fft::engines::real<double>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 7 → 8 taken 4 times.
✓ Branch 9 → 10 taken 4 times.
void ecnerwala::fft::square_circular<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 7 → 8 taken 4 times.
✓ Branch 9 → 10 taken 4 times.
void ecnerwala::fft::square_circular<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 7 → 8 taken 1 time.
✓ Branch 9 → 10 taken 1 time.
void ecnerwala::fft::square_circular<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, int, ecnerwala::fft::assign_op):
✓ Branch 7 → 8 taken 1 time.
✓ Branch 9 → 10 taken 1 time.
void ecnerwala::fft::square_circular<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type, 18446744073709551615ul>, int, ecnerwala::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 3303381 inline conv_size conv_size_for(int s) {
49
2/2
✓ Branch 2 → 3 taken 3298363 times.
✓ Branch 2 → 4 taken 140 times.
3303381 int n = nextPow2(s);
50 3303381 bool cut = (n == 2 * (s - 1));
51
4/4
✓ Branch 3 → 4 taken 1485 times.
✓ Branch 3 → 5 taken 3393 times.
✓ Branch 4 → 5 taken 1648094 times.
✓ Branch 4 → 6 taken 1650409 times.
3303381 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 ecnerwala::fft::detail::emit_linear<modnum<998244353>, ecnerwala::fft::assign_op>(std::span<modnum<998244353>, 18446744073709551615ul>, int, int, bool, modnum<998244353>, std::span<modnum<998244353>, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 2 → 3 taken 76 times.
✓ Branch 2 → 7 taken 998 times.
void ecnerwala::fft::detail::emit_linear<ecnerwala::fft::engines::trunc_series<modnum<1000000007>, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc_series<modnum<1000000007>, 2>, 18446744073709551615ul>, int, int, bool, ecnerwala::fft::engines::trunc_series<modnum<1000000007>, 2>, std::span<ecnerwala::fft::engines::trunc_series<modnum<1000000007>, 2>, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 11 → 3 taken 80 times.
✓ Branch 11 → 12 taken 40 times.
void ecnerwala::fft::detail::emit_linear<ecnerwala::fft::engines::trunc_series<modnum<1000000007>, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc_series<modnum<1000000007>, 3>, 18446744073709551615ul>, int, int, bool, ecnerwala::fft::engines::trunc_series<modnum<1000000007>, 3>, std::span<ecnerwala::fft::engines::trunc_series<modnum<1000000007>, 3>, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 11 → 3 taken 120 times.
✓ Branch 11 → 12 taken 40 times.
void ecnerwala::fft::detail::emit_linear<ecnerwala::fft::engines::trunc_series<modnum<998244353>, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc_series<modnum<998244353>, 3>, 18446744073709551615ul>, int, int, bool, ecnerwala::fft::engines::trunc_series<modnum<998244353>, 3>, std::span<ecnerwala::fft::engines::trunc_series<modnum<998244353>, 3>, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 11 → 3 taken 120 times.
✓ Branch 11 → 12 taken 40 times.
void ecnerwala::fft::detail::emit_linear<ecnerwala::fft::engines::mat<modnum<1000000007>, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::mat<modnum<1000000007>, 2>, 18446744073709551615ul>, int, int, bool, ecnerwala::fft::engines::mat<modnum<1000000007>, 2>, std::span<ecnerwala::fft::engines::mat<modnum<1000000007>, 2>, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 11 → 3 taken 168 times.
✓ Branch 11 → 12 taken 42 times.
void ecnerwala::fft::detail::emit_linear<ecnerwala::fft::engines::mat<modnum<1000000007>, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::mat<modnum<1000000007>, 3>, 18446744073709551615ul>, int, int, bool, ecnerwala::fft::engines::mat<modnum<1000000007>, 3>, std::span<ecnerwala::fft::engines::mat<modnum<1000000007>, 3>, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 11 → 3 taken 378 times.
✓ Branch 11 → 12 taken 42 times.
void ecnerwala::fft::detail::emit_linear<ecnerwala::fft::engines::mat<modnum<998244353>, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::mat<modnum<998244353>, 3>, 18446744073709551615ul>, int, int, bool, ecnerwala::fft::engines::mat<modnum<998244353>, 3>, std::span<ecnerwala::fft::engines::mat<modnum<998244353>, 3>, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 11 → 3 taken 378 times.
✓ Branch 11 → 12 taken 42 times.
2764 T cn{};
58
26/30
void ecnerwala::fft::detail::emit_linear<mod_goldilocks, ecnerwala::fft::add_op>(std::span<mod_goldilocks, 18446744073709551615ul>, int, int, bool, mod_goldilocks, std::span<mod_goldilocks, 18446744073709551615ul>, ecnerwala::fft::add_op):
✗ Branch 6 → 7 not taken.
✓ Branch 6 → 18 taken 1 time.
void ecnerwala::fft::detail::emit_linear<mod_goldilocks, ecnerwala::fft::assign_op>(std::span<mod_goldilocks, 18446744073709551615ul>, int, int, bool, mod_goldilocks, std::span<mod_goldilocks, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 6 → 7 taken 10 times.
✓ Branch 6 → 18 taken 19 times.
void ecnerwala::fft::detail::emit_linear<modnum<1000000007>, ecnerwala::fft::add_op>(std::span<modnum<1000000007>, 18446744073709551615ul>, int, int, bool, modnum<1000000007>, std::span<modnum<1000000007>, 18446744073709551615ul>, ecnerwala::fft::add_op):
✗ Branch 6 → 7 not taken.
✓ Branch 6 → 18 taken 2 times.
void ecnerwala::fft::detail::emit_linear<modnum<1000000007>, ecnerwala::fft::assign_op>(std::span<modnum<1000000007>, 18446744073709551615ul>, int, int, bool, modnum<1000000007>, std::span<modnum<1000000007>, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 6 → 7 taken 20 times.
✓ Branch 6 → 18 taken 38 times.
void ecnerwala::fft::detail::emit_linear<modnum<998244353>, ecnerwala::fft::add_op>(std::span<modnum<998244353>, 18446744073709551615ul>, int, int, bool, modnum<998244353>, std::span<modnum<998244353>, 18446744073709551615ul>, ecnerwala::fft::add_op):
✗ Branch 6 → 7 not taken.
✓ Branch 6 → 18 taken 1 time.
void ecnerwala::fft::detail::emit_linear<modnum<998244353>, ecnerwala::fft::assign_op>(std::span<modnum<998244353>, 18446744073709551615ul>, int, int, bool, modnum<998244353>, std::span<modnum<998244353>, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::detail::emit_linear<ecnerwala::fft::engines::trunc_series<modnum<1000000007>, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc_series<modnum<1000000007>, 2>, 18446744073709551615ul>, int, int, bool, ecnerwala::fft::engines::trunc_series<modnum<1000000007>, 2>, std::span<ecnerwala::fft::engines::trunc_series<modnum<1000000007>, 2>, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 13 → 14 taken 18 times.
✓ Branch 13 → 27 taken 22 times.
void ecnerwala::fft::detail::emit_linear<ecnerwala::fft::engines::trunc_series<modnum<1000000007>, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc_series<modnum<1000000007>, 3>, 18446744073709551615ul>, int, int, bool, ecnerwala::fft::engines::trunc_series<modnum<1000000007>, 3>, std::span<ecnerwala::fft::engines::trunc_series<modnum<1000000007>, 3>, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 13 → 14 taken 18 times.
✓ Branch 13 → 27 taken 22 times.
void ecnerwala::fft::detail::emit_linear<ecnerwala::fft::engines::trunc_series<modnum<998244353>, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc_series<modnum<998244353>, 3>, 18446744073709551615ul>, int, int, bool, ecnerwala::fft::engines::trunc_series<modnum<998244353>, 3>, std::span<ecnerwala::fft::engines::trunc_series<modnum<998244353>, 3>, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 13 → 14 taken 18 times.
✓ Branch 13 → 27 taken 22 times.
void ecnerwala::fft::detail::emit_linear<ecnerwala::fft::engines::mat<modnum<1000000007>, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::mat<modnum<1000000007>, 2>, 18446744073709551615ul>, int, int, bool, ecnerwala::fft::engines::mat<modnum<1000000007>, 2>, std::span<ecnerwala::fft::engines::mat<modnum<1000000007>, 2>, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 13 → 14 taken 20 times.
✓ Branch 13 → 27 taken 22 times.
void ecnerwala::fft::detail::emit_linear<ecnerwala::fft::engines::mat<modnum<1000000007>, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::mat<modnum<1000000007>, 3>, 18446744073709551615ul>, int, int, bool, ecnerwala::fft::engines::mat<modnum<1000000007>, 3>, std::span<ecnerwala::fft::engines::mat<modnum<1000000007>, 3>, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 13 → 14 taken 20 times.
✓ Branch 13 → 27 taken 22 times.
void ecnerwala::fft::detail::emit_linear<ecnerwala::fft::engines::mat<modnum<998244353>, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::mat<modnum<998244353>, 3>, 18446744073709551615ul>, int, int, bool, ecnerwala::fft::engines::mat<modnum<998244353>, 3>, std::span<ecnerwala::fft::engines::mat<modnum<998244353>, 3>, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 13 → 14 taken 20 times.
✓ Branch 13 → 27 taken 22 times.
void ecnerwala::fft::detail::emit_linear<double, ecnerwala::fft::add_op>(std::span<double, 18446744073709551615ul>, int, int, bool, double, std::span<double, 18446744073709551615ul>, ecnerwala::fft::add_op):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 10 taken 1 time.
void ecnerwala::fft::detail::emit_linear<double, ecnerwala::fft::assign_op>(std::span<double, 18446744073709551615ul>, int, int, bool, double, std::span<double, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::detail::emit_linear<mod_goldilocks, ecnerwala::fft::add_op>(std::span<mod_goldilocks, 18446744073709551615ul>, int, int, bool, mod_goldilocks, std::span<mod_goldilocks, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 37 → 27 taken 59 times.
✓ Branch 37 → 38 taken 1 time.
void ecnerwala::fft::detail::emit_linear<mod_goldilocks, ecnerwala::fft::assign_op>(std::span<mod_goldilocks, 18446744073709551615ul>, int, int, bool, mod_goldilocks, std::span<mod_goldilocks, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 36 → 27 taken 1838 times.
✓ Branch 36 → 37 taken 29 times.
void ecnerwala::fft::detail::emit_linear<modnum<1000000007>, ecnerwala::fft::add_op>(std::span<modnum<1000000007>, 18446744073709551615ul>, int, int, bool, modnum<1000000007>, std::span<modnum<1000000007>, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 37 → 27 taken 118 times.
✓ Branch 37 → 38 taken 2 times.
void ecnerwala::fft::detail::emit_linear<modnum<1000000007>, ecnerwala::fft::assign_op>(std::span<modnum<1000000007>, 18446744073709551615ul>, int, int, bool, modnum<1000000007>, std::span<modnum<1000000007>, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 36 → 27 taken 3676 times.
✓ Branch 36 → 37 taken 58 times.
void ecnerwala::fft::detail::emit_linear<modnum<998244353>, ecnerwala::fft::add_op>(std::span<modnum<998244353>, 18446744073709551615ul>, int, int, bool, modnum<998244353>, std::span<modnum<998244353>, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 37 → 27 taken 59 times.
✓ Branch 37 → 38 taken 1 time.
void ecnerwala::fft::detail::emit_linear<modnum<998244353>, ecnerwala::fft::assign_op>(std::span<modnum<998244353>, 18446744073709551615ul>, int, int, bool, modnum<998244353>, std::span<modnum<998244353>, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::detail::emit_linear<ecnerwala::fft::engines::trunc_series<modnum<1000000007>, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc_series<modnum<1000000007>, 2>, 18446744073709551615ul>, int, int, bool, ecnerwala::fft::engines::trunc_series<modnum<1000000007>, 2>, std::span<ecnerwala::fft::engines::trunc_series<modnum<1000000007>, 2>, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 45 → 36 taken 750 times.
✓ Branch 45 → 46 taken 40 times.
void ecnerwala::fft::detail::emit_linear<ecnerwala::fft::engines::trunc_series<modnum<1000000007>, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc_series<modnum<1000000007>, 3>, 18446744073709551615ul>, int, int, bool, ecnerwala::fft::engines::trunc_series<modnum<1000000007>, 3>, std::span<ecnerwala::fft::engines::trunc_series<modnum<1000000007>, 3>, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 45 → 36 taken 750 times.
✓ Branch 45 → 46 taken 40 times.
void ecnerwala::fft::detail::emit_linear<ecnerwala::fft::engines::trunc_series<modnum<998244353>, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc_series<modnum<998244353>, 3>, 18446744073709551615ul>, int, int, bool, ecnerwala::fft::engines::trunc_series<modnum<998244353>, 3>, std::span<ecnerwala::fft::engines::trunc_series<modnum<998244353>, 3>, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 45 → 36 taken 750 times.
✓ Branch 45 → 46 taken 40 times.
void ecnerwala::fft::detail::emit_linear<ecnerwala::fft::engines::mat<modnum<1000000007>, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::mat<modnum<1000000007>, 2>, 18446744073709551615ul>, int, int, bool, ecnerwala::fft::engines::mat<modnum<1000000007>, 2>, std::span<ecnerwala::fft::engines::mat<modnum<1000000007>, 2>, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 45 → 36 taken 878 times.
✓ Branch 45 → 46 taken 42 times.
void ecnerwala::fft::detail::emit_linear<ecnerwala::fft::engines::mat<modnum<1000000007>, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::mat<modnum<1000000007>, 3>, 18446744073709551615ul>, int, int, bool, ecnerwala::fft::engines::mat<modnum<1000000007>, 3>, std::span<ecnerwala::fft::engines::mat<modnum<1000000007>, 3>, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 45 → 36 taken 878 times.
✓ Branch 45 → 46 taken 42 times.
void ecnerwala::fft::detail::emit_linear<ecnerwala::fft::engines::mat<modnum<998244353>, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::mat<modnum<998244353>, 3>, 18446744073709551615ul>, int, int, bool, ecnerwala::fft::engines::mat<modnum<998244353>, 3>, std::span<ecnerwala::fft::engines::mat<modnum<998244353>, 3>, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 45 → 36 taken 878 times.
✓ Branch 45 → 46 taken 42 times.
void ecnerwala::fft::detail::emit_linear<double, ecnerwala::fft::add_op>(std::span<double, 18446744073709551615ul>, int, int, bool, double, std::span<double, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 26 → 19 taken 59 times.
✓ Branch 26 → 27 taken 1 time.
void ecnerwala::fft::detail::emit_linear<double, ecnerwala::fft::assign_op>(std::span<double, 18446744073709551615ul>, int, int, bool, double, std::span<double, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::detail::emit_linear<mod_goldilocks, ecnerwala::fft::add_op>(std::span<mod_goldilocks, 18446744073709551615ul>, int, int, bool, mod_goldilocks, std::span<mod_goldilocks, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::detail::emit_linear<mod_goldilocks, ecnerwala::fft::assign_op>(std::span<mod_goldilocks, 18446744073709551615ul>, int, int, bool, mod_goldilocks, std::span<mod_goldilocks, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::detail::emit_linear<modnum<1000000007>, ecnerwala::fft::add_op>(std::span<modnum<1000000007>, 18446744073709551615ul>, int, int, bool, modnum<1000000007>, std::span<modnum<1000000007>, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::detail::emit_linear<modnum<1000000007>, ecnerwala::fft::assign_op>(std::span<modnum<1000000007>, 18446744073709551615ul>, int, int, bool, modnum<1000000007>, std::span<modnum<1000000007>, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::detail::emit_linear<modnum<998244353>, ecnerwala::fft::add_op>(std::span<modnum<998244353>, 18446744073709551615ul>, int, int, bool, modnum<998244353>, std::span<modnum<998244353>, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::detail::emit_linear<modnum<998244353>, ecnerwala::fft::assign_op>(std::span<modnum<998244353>, 18446744073709551615ul>, int, int, bool, modnum<998244353>, std::span<modnum<998244353>, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::detail::emit_linear<ecnerwala::fft::engines::trunc_series<modnum<1000000007>, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc_series<modnum<1000000007>, 2>, 18446744073709551615ul>, int, int, bool, ecnerwala::fft::engines::trunc_series<modnum<1000000007>, 2>, std::span<ecnerwala::fft::engines::trunc_series<modnum<1000000007>, 2>, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::detail::emit_linear<ecnerwala::fft::engines::trunc_series<modnum<1000000007>, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc_series<modnum<1000000007>, 3>, 18446744073709551615ul>, int, int, bool, ecnerwala::fft::engines::trunc_series<modnum<1000000007>, 3>, std::span<ecnerwala::fft::engines::trunc_series<modnum<1000000007>, 3>, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::detail::emit_linear<ecnerwala::fft::engines::trunc_series<modnum<998244353>, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc_series<modnum<998244353>, 3>, 18446744073709551615ul>, int, int, bool, ecnerwala::fft::engines::trunc_series<modnum<998244353>, 3>, std::span<ecnerwala::fft::engines::trunc_series<modnum<998244353>, 3>, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::detail::emit_linear<ecnerwala::fft::engines::mat<modnum<1000000007>, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::mat<modnum<1000000007>, 2>, 18446744073709551615ul>, int, int, bool, ecnerwala::fft::engines::mat<modnum<1000000007>, 2>, std::span<ecnerwala::fft::engines::mat<modnum<1000000007>, 2>, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::detail::emit_linear<ecnerwala::fft::engines::mat<modnum<1000000007>, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::mat<modnum<1000000007>, 3>, 18446744073709551615ul>, int, int, bool, ecnerwala::fft::engines::mat<modnum<1000000007>, 3>, std::span<ecnerwala::fft::engines::mat<modnum<1000000007>, 3>, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::detail::emit_linear<ecnerwala::fft::engines::mat<modnum<998244353>, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::mat<modnum<998244353>, 3>, 18446744073709551615ul>, int, int, bool, ecnerwala::fft::engines::mat<modnum<998244353>, 3>, std::span<ecnerwala::fft::engines::mat<modnum<998244353>, 3>, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::detail::emit_linear<double, ecnerwala::fft::add_op>(std::span<double, 18446744073709551615ul>, int, int, bool, double, std::span<double, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::detail::emit_linear<double, ecnerwala::fft::assign_op>(std::span<double, 18446744073709551615ul>, int, int, bool, double, std::span<double, 18446744073709551615ul>, ecnerwala::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 22158492 void operator()(T& x, T v) const {
77
32/32
ecnerwala::fft::detail::cut_op<mod_goldilocks, ecnerwala::fft::add_twice_op>::operator()(mod_goldilocks&, mod_goldilocks) const:
✓ Branch 5 → 6 taken 84 times.
✓ Branch 5 → 29 taken 84 times.
ecnerwala::fft::detail::cut_op<mod_goldilocks, ecnerwala::fft::add_op>::operator()(mod_goldilocks&, mod_goldilocks) const:
✓ Branch 5 → 6 taken 90 times.
✓ Branch 5 → 29 taken 90 times.
ecnerwala::fft::detail::cut_op<mod_goldilocks, ecnerwala::fft::assign_op>::operator()(mod_goldilocks&, mod_goldilocks) const:
✓ Branch 5 → 6 taken 17 times.
✓ Branch 5 → 29 taken 233 times.
ecnerwala::fft::detail::cut_op<modnum<1000000007>, ecnerwala::fft::add_twice_op>::operator()(modnum<1000000007>&, modnum<1000000007>) const:
✓ Branch 5 → 6 taken 168 times.
✓ Branch 5 → 29 taken 168 times.
ecnerwala::fft::detail::cut_op<modnum<1000000007>, ecnerwala::fft::add_op>::operator()(modnum<1000000007>&, modnum<1000000007>) const:
✓ Branch 5 → 6 taken 180 times.
✓ Branch 5 → 29 taken 180 times.
ecnerwala::fft::detail::cut_op<modnum<1000000007>, ecnerwala::fft::assign_op>::operator()(modnum<1000000007>&, 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.
ecnerwala::fft::detail::cut_op<modnum<998244353>, ecnerwala::fft::add_twice_op>::operator()(modnum<998244353>&, modnum<998244353>) const:
✓ Branch 5 → 6 taken 84 times.
✓ Branch 5 → 29 taken 84 times.
ecnerwala::fft::detail::cut_op<modnum<998244353>, ecnerwala::fft::add_op>::operator()(modnum<998244353>&, modnum<998244353>) const:
✓ Branch 5 → 6 taken 177 times.
✓ Branch 5 → 29 taken 177 times.
ecnerwala::fft::detail::cut_op<modnum<998244353>, ecnerwala::fft::assign_op>::operator()(modnum<998244353>&, modnum<998244353>) const:
✓ Branch 2 → 3 taken 1647987 times.
✓ Branch 2 → 7 taken 20505580 times.
✓ Branch 3 → 4 taken 161147 times.
✓ Branch 3 → 5 taken 1486840 times.
✓ Branch 5 → 6 taken 260 times.
✓ Branch 5 → 29 taken 1954 times.
ecnerwala::fft::detail::cut_op<ecnerwala::fft::engines::mat<modnum<1000000007>, 3>, ecnerwala::fft::add_op>::operator()(ecnerwala::fft::engines::mat<modnum<1000000007>, 3>&, ecnerwala::fft::engines::mat<modnum<1000000007>, 3>) const:
✓ Branch 5 → 6 taken 30 times.
✓ Branch 5 → 29 taken 30 times.
ecnerwala::fft::detail::cut_op<ecnerwala::fft::engines::mat<modnum<998244353>, 3>, ecnerwala::fft::add_op>::operator()(ecnerwala::fft::engines::mat<modnum<998244353>, 3>&, ecnerwala::fft::engines::mat<modnum<998244353>, 3>) const:
✓ Branch 5 → 6 taken 30 times.
✓ Branch 5 → 29 taken 30 times.
ecnerwala::fft::detail::cut_op<double, ecnerwala::fft::assign_op>::operator()(double&, double) const:
✓ Branch 5 → 6 taken 7 times.
✓ Branch 5 → 18 taken 228 times.
23806555 if (&x == out0) { cn = v - c0; v = c0; }
78 22158492 op(x, v);
79 22158492 }
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 1975401 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 ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>, ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::mat<modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<1>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::mat<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, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 3 → 4 taken 5 times.
✗ Branch 3 → 36 not taken.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>, ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::mat<modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<2>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::mat<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, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 3 → 4 taken 53 times.
✗ Branch 3 → 36 not taken.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::engines::mat<modnum<998244353>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<0>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::engines::mat<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, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 3 → 4 taken 58 times.
✗ Branch 3 → 36 not taken.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>, ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::mat<modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<1>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::mat<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, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 3 → 4 taken 5 times.
✗ Branch 3 → 36 not taken.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>, ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::mat<modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<2>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::mat<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, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 3 → 4 taken 53 times.
✗ Branch 3 → 36 not taken.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<1>, ecnerwala::fft::add_twice_op>(ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<1>&&, int, int, bool, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_twice_op):
✓ Branch 3 → 4 taken 322 times.
✗ Branch 3 → 28 not taken.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<1>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<1>&&, int, int, bool, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 3 → 4 taken 36 times.
✗ Branch 3 → 30 not taken.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<1>, ecnerwala::fft::assign_op>(ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<1>&&, int, int, bool, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<2>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<2>&&, int, int, bool, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 3 → 4 taken 322 times.
✗ Branch 3 → 30 not taken.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<2>, ecnerwala::fft::assign_op>(ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<2>&&, int, int, bool, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 3 → 4 taken 8 times.
✗ Branch 3 → 30 not taken.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed, ecnerwala::fft::add_twice_op>(ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&&, int, int, bool, ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_twice_op):
✓ Branch 3 → 4 taken 322 times.
✗ Branch 3 → 30 not taken.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed, ecnerwala::fft::add_op>(ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&&, int, int, bool, ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 3 → 4 taken 358 times.
✗ Branch 3 → 32 not taken.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed, ecnerwala::fft::assign_op>(ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&&, int, int, bool, ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 3 → 4 taken 38 times.
✗ Branch 3 → 32 not taken.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed, ecnerwala::fft::add_twice_op>(ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&&, int, int, bool, ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_twice_op):
✓ Branch 3 → 4 taken 322 times.
✗ Branch 3 → 30 not taken.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed, ecnerwala::fft::add_op>(ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&&, int, int, bool, ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 3 → 4 taken 358 times.
✗ Branch 3 → 32 not taken.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed, ecnerwala::fft::assign_op>(ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&&, int, int, bool, ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 2 → 3 taken 1971341 times.
✗ Branch 2 → 17 not taken.
✓ Branch 3 → 4 taken 540 times.
✗ Branch 3 → 32 not taken.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::real<double>, ecnerwala::fft::engines::real<double>::transformed, ecnerwala::fft::assign_op>(ecnerwala::fft::engines::real<double>::transformed&&, int, int, bool, ecnerwala::fft::engines::real<double>::value_type, std::span<ecnerwala::fft::engines::real<double>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 3 → 4 taken 18 times.
✗ Branch 3 → 29 not taken.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<1>, ecnerwala::fft::add_twice_op>(ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<1>&&, int, int, bool, ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_twice_op):
✓ Branch 3 → 4 taken 322 times.
✗ Branch 3 → 28 not taken.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<1>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<1>&&, int, int, bool, ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 3 → 4 taken 36 times.
✗ Branch 3 → 30 not taken.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<1>, ecnerwala::fft::assign_op>(ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<1>&&, int, int, bool, ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<2>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<2>&&, int, int, bool, ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 3 → 4 taken 322 times.
✗ Branch 3 → 30 not taken.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<2>, ecnerwala::fft::assign_op>(ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<2>&&, int, int, bool, ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 3 → 4 taken 8 times.
✗ Branch 3 → 30 not taken.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::engines::mat<modnum<998244353>, 3>, 9, std::array<int, 10ul>{int [10]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}}>::product_t<0>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::engines::mat<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, ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 3 → 4 taken 58 times.
✗ Branch 3 → 36 not taken.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::nc_engine, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed, ecnerwala::fft::add_op>(ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&&, int, int, bool, ecnerwala::fft::nc_engine::value_type, std::span<ecnerwala::fft::nc_engine::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 3 → 4 taken 340 times.
✗ Branch 3 → 32 not taken.
1975401 if (sz(out) == 0) return;
91
6/6
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<1>, ecnerwala::fft::assign_op>(ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<1>&&, int, int, bool, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 5 → 6 taken 8 times.
✓ Branch 5 → 7 taken 40 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed, ecnerwala::fft::assign_op>(ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&&, int, int, bool, ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 5 → 6 taken 1647889 times.
✓ Branch 5 → 7 taken 323452 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<1>, ecnerwala::fft::assign_op>(ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<1>&&, int, int, bool, ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 5 → 6 taken 8 times.
✓ Branch 5 → 7 taken 40 times.
1975401 int lim = min(sz(out), min(s, n));
92
54/54
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>, ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::mat<modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<1>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::mat<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, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 12 → 13 taken 4 times.
✓ Branch 12 → 15 taken 1 time.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>, ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::mat<modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<2>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::mat<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, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 12 → 13 taken 39 times.
✓ Branch 12 → 15 taken 14 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::engines::mat<modnum<998244353>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<0>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::engines::mat<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, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 12 → 13 taken 43 times.
✓ Branch 12 → 15 taken 15 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>, ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::mat<modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<1>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::mat<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, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 12 → 13 taken 4 times.
✓ Branch 12 → 15 taken 1 time.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>, ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::mat<modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<2>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::mat<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, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 12 → 13 taken 39 times.
✓ Branch 12 → 15 taken 14 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<1>, ecnerwala::fft::add_twice_op>(ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<1>&&, int, int, bool, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_twice_op):
✓ Branch 12 → 13 taken 238 times.
✓ Branch 12 → 15 taken 84 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<1>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<1>&&, int, int, bool, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 12 → 13 taken 30 times.
✓ Branch 12 → 15 taken 6 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<1>, ecnerwala::fft::assign_op>(ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<1>&&, int, int, bool, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<2>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<2>&&, int, int, bool, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 12 → 13 taken 238 times.
✓ Branch 12 → 15 taken 84 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<2>, ecnerwala::fft::assign_op>(ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<2>&&, int, int, bool, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 12 → 13 taken 3 times.
✓ Branch 12 → 15 taken 5 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed, ecnerwala::fft::add_twice_op>(ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&&, int, int, bool, ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_twice_op):
✓ Branch 12 → 13 taken 238 times.
✓ Branch 12 → 16 taken 84 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed, ecnerwala::fft::add_op>(ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&&, int, int, bool, ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 12 → 13 taken 268 times.
✓ Branch 12 → 16 taken 90 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed, ecnerwala::fft::assign_op>(ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&&, int, int, bool, ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 12 → 13 taken 21 times.
✓ Branch 12 → 16 taken 17 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed, ecnerwala::fft::add_twice_op>(ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&&, int, int, bool, ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_twice_op):
✓ Branch 12 → 13 taken 238 times.
✓ Branch 12 → 16 taken 84 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed, ecnerwala::fft::add_op>(ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&&, int, int, bool, ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 12 → 13 taken 268 times.
✓ Branch 12 → 16 taken 90 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed, ecnerwala::fft::assign_op>(ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&&, int, int, bool, ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 7 → 8 taken 323354 times.
✓ Branch 7 → 11 taken 1647987 times.
✓ Branch 12 → 13 taken 280 times.
✓ Branch 12 → 16 taken 260 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::real<double>, ecnerwala::fft::engines::real<double>::transformed, ecnerwala::fft::assign_op>(ecnerwala::fft::engines::real<double>::transformed&&, int, int, bool, ecnerwala::fft::engines::real<double>::value_type, std::span<ecnerwala::fft::engines::real<double>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 12 → 13 taken 11 times.
✓ Branch 12 → 16 taken 7 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<1>, ecnerwala::fft::add_twice_op>(ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<1>&&, int, int, bool, ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_twice_op):
✓ Branch 12 → 13 taken 238 times.
✓ Branch 12 → 15 taken 84 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<1>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<1>&&, int, int, bool, ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 12 → 13 taken 30 times.
✓ Branch 12 → 15 taken 6 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<1>, ecnerwala::fft::assign_op>(ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<1>&&, int, int, bool, ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<2>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<2>&&, int, int, bool, ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 12 → 13 taken 238 times.
✓ Branch 12 → 15 taken 84 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<2>, ecnerwala::fft::assign_op>(ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<2>&&, int, int, bool, ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 12 → 13 taken 3 times.
✓ Branch 12 → 15 taken 5 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::engines::mat<modnum<998244353>, 3>, 9, std::array<int, 10ul>{int [10]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}}>::product_t<0>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::engines::mat<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, ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 12 → 13 taken 43 times.
✓ Branch 12 → 15 taken 15 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::nc_engine, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed, ecnerwala::fft::add_op>(ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&&, int, int, bool, ecnerwala::fft::nc_engine::value_type, std::span<ecnerwala::fft::nc_engine::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 12 → 13 taken 253 times.
✓ Branch 12 → 16 taken 87 times.
1975401 if (!cut) {
93
3/6
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<1>, ecnerwala::fft::assign_op>(ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<1>&&, int, int, bool, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 8 → 9 not taken.
✓ Branch 8 → 10 taken 40 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed, ecnerwala::fft::assign_op>(ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&&, int, int, bool, ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 8 → 9 not taken.
✓ Branch 8 → 10 taken 323354 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<1>, ecnerwala::fft::assign_op>(ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<1>&&, int, int, bool, ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 8 → 9 not taken.
✓ Branch 8 → 10 taken 40 times.
326237 E::finish(std::move(p), out.subspan(0, lim), op);
94 } else {
95
15/18
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>, ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::mat<modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<1>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::mat<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, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 24 → 16 taken 9 times.
✓ Branch 24 → 25 taken 1 time.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>, ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::mat<modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<2>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::mat<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, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 24 → 16 taken 126 times.
✓ Branch 24 → 25 taken 14 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::engines::mat<modnum<998244353>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<0>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::engines::mat<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, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 24 → 16 taken 135 times.
✓ Branch 24 → 25 taken 15 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>, ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::mat<modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<1>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::mat<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, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 24 → 16 taken 9 times.
✓ Branch 24 → 25 taken 1 time.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>, ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::mat<modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<2>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::mat<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, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 24 → 16 taken 126 times.
✓ Branch 24 → 25 taken 14 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<1>, ecnerwala::fft::assign_op>(ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<1>&&, int, int, bool, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 11 → 12 not taken.
✓ Branch 11 → 13 taken 8 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed, ecnerwala::fft::assign_op>(ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&&, int, int, bool, ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 11 → 12 not taken.
✓ Branch 11 → 13 taken 1647987 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<1>, ecnerwala::fft::assign_op>(ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<1>&&, int, int, bool, ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 11 → 12 not taken.
✓ Branch 11 → 13 taken 8 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::engines::mat<modnum<998244353>, 3>, 9, std::array<int, 10ul>{int [10]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}}>::product_t<0>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::engines::mat<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, ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 24 → 16 taken 135 times.
✓ Branch 24 → 25 taken 15 times.
1649704 T cn{};
96
27/30
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>, ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::mat<modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<1>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::mat<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, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 28 → 29 taken 1 time.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>, ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::mat<modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<2>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::mat<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, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 28 → 29 taken 14 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::engines::mat<modnum<998244353>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<0>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::engines::mat<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, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 28 → 29 taken 15 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>, ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::mat<modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<1>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::mat<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, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 28 → 29 taken 1 time.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>, ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::mat<modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<2>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::mat<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, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 28 → 29 taken 14 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<1>, ecnerwala::fft::add_twice_op>(ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<1>&&, int, int, bool, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_twice_op):
✓ Branch 21 → 22 taken 84 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<1>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<1>&&, int, int, bool, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 21 → 22 taken 6 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<1>, ecnerwala::fft::assign_op>(ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<1>&&, int, int, bool, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 11 → 12 not taken.
✓ Branch 11 → 13 taken 8 times.
✓ Branch 21 → 22 taken 12 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<2>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<2>&&, int, int, bool, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 21 → 22 taken 84 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<2>, ecnerwala::fft::assign_op>(ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<2>&&, int, int, bool, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 21 → 22 taken 5 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed, ecnerwala::fft::add_twice_op>(ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&&, int, int, bool, ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_twice_op):
✓ Branch 23 → 24 taken 84 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed, ecnerwala::fft::add_op>(ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&&, int, int, bool, ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 23 → 24 taken 90 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed, ecnerwala::fft::assign_op>(ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&&, int, int, bool, ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 23 → 24 taken 17 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed, ecnerwala::fft::add_twice_op>(ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&&, int, int, bool, ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_twice_op):
✓ Branch 23 → 24 taken 84 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed, ecnerwala::fft::add_op>(ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&&, int, int, bool, ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 23 → 24 taken 90 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed, ecnerwala::fft::assign_op>(ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&&, int, int, bool, ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 11 → 12 not taken.
✓ Branch 11 → 13 taken 1647987 times.
✓ Branch 23 → 24 taken 260 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::real<double>, ecnerwala::fft::engines::real<double>::transformed, ecnerwala::fft::assign_op>(ecnerwala::fft::engines::real<double>::transformed&&, int, int, bool, ecnerwala::fft::engines::real<double>::value_type, std::span<ecnerwala::fft::engines::real<double>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 20 → 21 taken 7 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<1>, ecnerwala::fft::add_twice_op>(ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<1>&&, int, int, bool, ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_twice_op):
✓ Branch 21 → 22 taken 84 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<1>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<1>&&, int, int, bool, ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 21 → 22 taken 6 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<1>, ecnerwala::fft::assign_op>(ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<1>&&, int, int, bool, ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 11 → 12 not taken.
✓ Branch 11 → 13 taken 8 times.
✓ Branch 21 → 22 taken 12 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<2>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<2>&&, int, int, bool, ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 21 → 22 taken 84 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<2>, ecnerwala::fft::assign_op>(ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<2>&&, int, int, bool, ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 21 → 22 taken 5 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::engines::mat<modnum<998244353>, 3>, 9, std::array<int, 10ul>{int [10]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}}>::product_t<0>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::engines::mat<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, ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 28 → 29 taken 15 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::nc_engine, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed, ecnerwala::fft::add_op>(ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&&, int, int, bool, ecnerwala::fft::nc_engine::value_type, std::span<ecnerwala::fft::nc_engine::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 23 → 24 taken 87 times.
1649164 E::finish(std::move(p), out.subspan(0, lim), cut_op<T, Op>{op, &out[0], c0, cn});
97
32/54
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>, ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::mat<modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<1>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::mat<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, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 30 → 31 taken 1 time.
✗ Branch 30 → 35 not taken.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>, ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::mat<modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<2>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::mat<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, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 30 → 31 taken 14 times.
✗ Branch 30 → 35 not taken.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::engines::mat<modnum<998244353>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<0>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::engines::mat<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, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 30 → 31 taken 15 times.
✗ Branch 30 → 35 not taken.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>, ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::mat<modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<1>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::mat<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, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 30 → 31 taken 1 time.
✗ Branch 30 → 35 not taken.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>, ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::mat<modnum<1000000007>, 3>, 9, std::array<int, 10ul>{int [10]{0, 3, 6, 9, 12, 15, 18, 21, 24, 27}}>::product_t<2>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::mat<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, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 30 → 31 taken 14 times.
✗ Branch 30 → 35 not taken.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<1>, ecnerwala::fft::add_twice_op>(ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<1>&&, int, int, bool, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_twice_op):
✓ Branch 23 → 24 taken 84 times.
✗ Branch 23 → 27 not taken.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<1>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<1>&&, int, int, bool, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 23 → 24 taken 6 times.
✗ Branch 23 → 29 not taken.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<1>, ecnerwala::fft::assign_op>(ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<1>&&, int, int, bool, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<2>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<2>&&, int, int, bool, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 23 → 24 taken 84 times.
✗ Branch 23 → 29 not taken.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<2>, ecnerwala::fft::assign_op>(ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::product_t<2>&&, int, int, bool, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 23 → 24 taken 5 times.
✗ Branch 23 → 29 not taken.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed, ecnerwala::fft::add_twice_op>(ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&&, int, int, bool, ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_twice_op):
✓ Branch 25 → 26 taken 84 times.
✗ Branch 25 → 29 not taken.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed, ecnerwala::fft::add_op>(ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&&, int, int, bool, ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 25 → 26 taken 90 times.
✗ Branch 25 → 31 not taken.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed, ecnerwala::fft::assign_op>(ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&&, int, int, bool, ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 25 → 26 taken 7 times.
✓ Branch 25 → 31 taken 10 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed, ecnerwala::fft::add_twice_op>(ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&&, int, int, bool, ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_twice_op):
✓ Branch 25 → 26 taken 84 times.
✗ Branch 25 → 29 not taken.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed, ecnerwala::fft::add_op>(ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&&, int, int, bool, ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 25 → 26 taken 90 times.
✗ Branch 25 → 31 not taken.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed, ecnerwala::fft::assign_op>(ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&&, int, int, bool, ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 14 → 15 taken 1647889 times.
✓ Branch 14 → 16 taken 98 times.
✓ Branch 25 → 26 taken 162 times.
✓ Branch 25 → 31 taken 98 times.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::real<double>, ecnerwala::fft::engines::real<double>::transformed, ecnerwala::fft::assign_op>(ecnerwala::fft::engines::real<double>::transformed&&, int, int, bool, ecnerwala::fft::engines::real<double>::value_type, std::span<ecnerwala::fft::engines::real<double>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 22 → 23 taken 7 times.
✗ Branch 22 → 28 not taken.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<1>, ecnerwala::fft::add_twice_op>(ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<1>&&, int, int, bool, ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_twice_op):
✓ Branch 23 → 24 taken 84 times.
✗ Branch 23 → 27 not taken.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<1>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<1>&&, int, int, bool, ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 23 → 24 taken 6 times.
✗ Branch 23 → 29 not taken.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<1>, ecnerwala::fft::assign_op>(ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<1>&&, int, int, bool, ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<2>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<2>&&, int, int, bool, ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 23 → 24 taken 84 times.
✗ Branch 23 → 29 not taken.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<2>, ecnerwala::fft::assign_op>(ecnerwala::fft::engines::split<modnum<1000000007> >::product_t<2>&&, int, int, bool, ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 23 → 24 taken 5 times.
✗ Branch 23 → 29 not taken.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::engines::mat<modnum<998244353>, 3>, 9, std::array<int, 10ul>{int [10]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}}>::product_t<0>, ecnerwala::fft::add_op>(ecnerwala::fft::engines::componentwise<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::engines::mat<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, ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 30 → 31 taken 15 times.
✗ Branch 30 → 35 not taken.
void ecnerwala::fft::detail::finish_linear<ecnerwala::fft::nc_engine, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed, ecnerwala::fft::add_op>(ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&&, int, int, bool, ecnerwala::fft::nc_engine::value_type, std::span<ecnerwala::fft::nc_engine::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 25 → 26 taken 87 times.
✗ Branch 25 → 31 not taken.
1649801 if (sz(out) >= s) op(out[s-1], cn);
98 }
99 }
100
101 }
102
103 template <engine E, typename Op = assign_op>
104 932 void multiply(std::span<const typename E::value_type> a, std::span<const typename E::value_type> b,
105 std::span<typename E::value_type> out, Op op = {}) {
106 using T = typename E::value_type;
107
46/91
void ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::real<double>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::real<double>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type, 18446744073709551615ul>, ecnerwala::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;
108 932 int s = sz(a) + sz(b) - 1;
109 932 auto [n, cut] = detail::conv_size_for(s);
110 932 T c0 = a[0] * b[0];
111
22/22
void ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 18 → 19 taken 20 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 18 → 19 taken 20 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 18 → 19 taken 20 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 18 → 19 taken 20 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 18 → 19 taken 20 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 18 → 19 taken 20 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 18 → 19 taken 1 time.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 18 → 19 taken 25 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 18 → 19 taken 1 time.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 18 → 19 taken 25 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 18 → 19 taken 1 time.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 18 → 19 taken 50 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::real<double>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 17 → 18 taken 1 time.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::real<double>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 17 → 18 taken 25 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 18 → 19 taken 1 time.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 18 → 19 taken 25 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 18 → 19 taken 20 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 18 → 19 taken 20 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 18 → 19 taken 20 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 18 → 19 taken 20 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 18 → 19 taken 20 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 18 → 19 taken 20 times.
932 auto buf = buffer_pool<T>::get(n);
112
24/25
void ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 24 → 25 taken 20 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 24 → 25 taken 20 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 24 → 25 taken 20 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 24 → 25 taken 20 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 24 → 25 taken 20 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 24 → 25 taken 20 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 24 → 25 taken 1 time.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 24 → 25 taken 25 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 24 → 25 taken 1 time.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 24 → 25 taken 25 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 24 → 25 taken 1 time.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::real<double>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 23 → 24 taken 1 time.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::real<double>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 23 → 24 taken 25 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 24 → 25 taken 1 time.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 24 → 25 taken 25 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 24 → 25 taken 20 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 24 → 25 taken 20 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 24 → 25 taken 20 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 24 → 25 taken 20 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 24 → 25 taken 20 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 24 → 25 taken 20 times.
1327 multiply_circular<E>(a, b, buf.span(), n);
113
22/44
void ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 20 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 20 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 20 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 20 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 20 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 20 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 1 time.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 25 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 1 time.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 25 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 1 time.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 50 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::real<double>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✗ Branch 24 → 25 not taken.
✓ Branch 24 → 26 taken 1 time.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::real<double>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 24 → 25 not taken.
✓ Branch 24 → 26 taken 25 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 1 time.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 25 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 20 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 20 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 20 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 20 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 20 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type, 18446744073709551615ul>, ecnerwala::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);
114 932 }
115
116 template <engine E, typename Op = assign_op>
117 3109 void multiply(std::span<const typename E::value_type> a, transformed<E>& ta,
118 std::span<const typename E::value_type> b, transformed<E>& tb,
119 std::span<typename E::value_type> out, Op op = {}) {
120 using T = typename E::value_type;
121
32/61
void ecnerwala::fft::multiply<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::add_twice_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::add_twice_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::add_twice_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 2 → 3 taken 1297 times.
✗ Branch 2 → 4 not taken.
✓ Branch 3 → 4 taken 264 times.
✓ Branch 3 → 5 taken 1297 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 7 taken 264 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::real<double>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::real<double>::transformed&, std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::real<double>::transformed&, std::span<ecnerwala::fft::engines::real<double>::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::add_twice_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::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.
3109 if (sz(a) == 0 || sz(b) == 0) return;
122 3109 int s = sz(a) + sz(b) - 1;
123 3109 auto [n, cut] = detail::conv_size_for(s);
124 3109 T c0 = a[0] * b[0];
125
12/12
void ecnerwala::fft::multiply<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::add_twice_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_twice_op):
✓ Branch 17 → 18 taken 322 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 17 → 18 taken 18 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 17 → 18 taken 29 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::add_twice_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_twice_op):
✓ Branch 17 → 18 taken 322 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 17 → 18 taken 18 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 17 → 18 taken 27 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::add_twice_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_twice_op):
✓ Branch 17 → 18 taken 322 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 17 → 18 taken 18 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 17 → 18 taken 264 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::add_twice_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_twice_op):
✓ Branch 17 → 18 taken 322 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 17 → 18 taken 18 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 17 → 18 taken 29 times.
3109 E::extend_to(ta, n, a);
126
12/12
void ecnerwala::fft::multiply<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::add_twice_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_twice_op):
✓ Branch 19 → 20 taken 322 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 19 → 20 taken 18 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 19 → 20 taken 29 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::add_twice_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_twice_op):
✓ Branch 19 → 20 taken 322 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 19 → 20 taken 18 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 19 → 20 taken 27 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::add_twice_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_twice_op):
✓ Branch 19 → 20 taken 322 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 19 → 20 taken 18 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 19 → 20 taken 264 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::add_twice_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_twice_op):
✓ Branch 19 → 20 taken 322 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 19 → 20 taken 18 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 19 → 20 taken 29 times.
3109 E::extend_to(tb, n, b);
127
42/55
void ecnerwala::fft::multiply<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::add_twice_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::add_twice_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::add_twice_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 8 → 9 taken 1297 times.
✗ Branch 20 → 21 not taken.
✓ Branch 20 → 22 taken 264 times.
✓ Branch 25 → 26 taken 264 times.
✓ Branch 27 → 28 taken 264 times.
void ecnerwala::fft::multiply<ecnerwala::fft::engines::real<double>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::real<double>::transformed&, std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::real<double>::transformed&, std::span<ecnerwala::fft::engines::real<double>::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::add_twice_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::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.
5480 detail::finish_linear<E>(E::mul(ta, tb, n), n, s, cut, c0, out, op);
128 }
129
130 template <engine E, typename Op = assign_op>
131 1862 void multiply_add2(std::span<const typename E::value_type> a1, transformed<E>& ta1,
132 std::span<const typename E::value_type> b1, transformed<E>& tb1,
133 std::span<const typename E::value_type> a2, transformed<E>& ta2,
134 std::span<const typename E::value_type> b2, transformed<E>& tb2,
135 std::span<typename E::value_type> out, Op op = {}) {
136 using T = typename E::value_type;
137 1862 assert(sz(a1) > 0 && sz(b1) > 0 && sz(a2) > 0 && sz(b2) > 0);
138 1862 int s = sz(a1) + sz(b1) - 1;
139 1862 assert(sz(a2) + sz(b2) - 1 == s);
140 1862 auto [n, cut] = detail::conv_size_for(s);
141 2074 T c0 = a1[0] * b1[0] + a2[0] * b2[0];
142
26/26
void ecnerwala::fft::multiply_add2<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 34 → 35 taken 53 times.
✓ Branch 36 → 37 taken 53 times.
void ecnerwala::fft::multiply_add2<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 34 → 35 taken 53 times.
✓ Branch 36 → 37 taken 53 times.
void ecnerwala::fft::multiply_add2<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 34 → 35 taken 53 times.
✓ Branch 36 → 37 taken 53 times.
void ecnerwala::fft::multiply_add2<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 37 → 38 taken 322 times.
✓ Branch 39 → 40 taken 322 times.
void ecnerwala::fft::multiply_add2<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 37 → 38 taken 8 times.
✓ Branch 39 → 40 taken 8 times.
void ecnerwala::fft::multiply_add2<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 37 → 38 taken 322 times.
✓ Branch 39 → 40 taken 322 times.
void ecnerwala::fft::multiply_add2<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 37 → 38 taken 8 times.
✓ Branch 39 → 40 taken 8 times.
void ecnerwala::fft::multiply_add2<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 37 → 38 taken 322 times.
✓ Branch 39 → 40 taken 322 times.
void ecnerwala::fft::multiply_add2<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 37 → 38 taken 8 times.
✓ Branch 39 → 40 taken 8 times.
void ecnerwala::fft::multiply_add2<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 37 → 38 taken 322 times.
✓ Branch 39 → 40 taken 322 times.
void ecnerwala::fft::multiply_add2<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 37 → 38 taken 8 times.
✓ Branch 39 → 40 taken 8 times.
void ecnerwala::fft::multiply_add2<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 34 → 35 taken 53 times.
✓ Branch 36 → 37 taken 53 times.
void ecnerwala::fft::multiply_add2<ecnerwala::fft::nc_engine, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::nc_engine::value_type const, 18446744073709551615ul>, ecnerwala::fft::nc_engine::transformed&, std::span<ecnerwala::fft::nc_engine::value_type const, 18446744073709551615ul>, ecnerwala::fft::nc_engine::transformed&, std::span<ecnerwala::fft::nc_engine::value_type const, 18446744073709551615ul>, ecnerwala::fft::nc_engine::transformed&, std::span<ecnerwala::fft::nc_engine::value_type const, 18446744073709551615ul>, ecnerwala::fft::nc_engine::transformed&, std::span<ecnerwala::fft::nc_engine::value_type, 18446744073709551615ul>, ecnerwala::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);
143
26/26
void ecnerwala::fft::multiply_add2<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 38 → 39 taken 53 times.
✓ Branch 40 → 41 taken 53 times.
void ecnerwala::fft::multiply_add2<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 38 → 39 taken 53 times.
✓ Branch 40 → 41 taken 53 times.
void ecnerwala::fft::multiply_add2<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 38 → 39 taken 53 times.
✓ Branch 40 → 41 taken 53 times.
void ecnerwala::fft::multiply_add2<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 41 → 42 taken 322 times.
✓ Branch 43 → 44 taken 322 times.
void ecnerwala::fft::multiply_add2<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 41 → 42 taken 8 times.
✓ Branch 43 → 44 taken 8 times.
void ecnerwala::fft::multiply_add2<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 41 → 42 taken 322 times.
✓ Branch 43 → 44 taken 322 times.
void ecnerwala::fft::multiply_add2<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 41 → 42 taken 8 times.
✓ Branch 43 → 44 taken 8 times.
void ecnerwala::fft::multiply_add2<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 41 → 42 taken 322 times.
✓ Branch 43 → 44 taken 322 times.
void ecnerwala::fft::multiply_add2<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 41 → 42 taken 8 times.
✓ Branch 43 → 44 taken 8 times.
void ecnerwala::fft::multiply_add2<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 41 → 42 taken 322 times.
✓ Branch 43 → 44 taken 322 times.
void ecnerwala::fft::multiply_add2<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 41 → 42 taken 8 times.
✓ Branch 43 → 44 taken 8 times.
void ecnerwala::fft::multiply_add2<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 38 → 39 taken 53 times.
✓ Branch 40 → 41 taken 53 times.
void ecnerwala::fft::multiply_add2<ecnerwala::fft::nc_engine, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::nc_engine::value_type const, 18446744073709551615ul>, ecnerwala::fft::nc_engine::transformed&, std::span<ecnerwala::fft::nc_engine::value_type const, 18446744073709551615ul>, ecnerwala::fft::nc_engine::transformed&, std::span<ecnerwala::fft::nc_engine::value_type const, 18446744073709551615ul>, ecnerwala::fft::nc_engine::transformed&, std::span<ecnerwala::fft::nc_engine::value_type const, 18446744073709551615ul>, ecnerwala::fft::nc_engine::transformed&, std::span<ecnerwala::fft::nc_engine::value_type, 18446744073709551615ul>, ecnerwala::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);
144
42/56
void ecnerwala::fft::multiply_add2<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply_add2<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply_add2<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply_add2<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply_add2<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply_add2<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply_add2<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply_add2<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply_add2<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply_add2<ecnerwala::fft::engines::real<double>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::real<double>::transformed&, std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::real<double>::transformed&, std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::real<double>::transformed&, std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::real<double>::transformed&, std::span<ecnerwala::fft::engines::real<double>::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply_add2<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply_add2<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply_add2<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::multiply_add2<ecnerwala::fft::nc_engine, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::nc_engine::value_type const, 18446744073709551615ul>, ecnerwala::fft::nc_engine::transformed&, std::span<ecnerwala::fft::nc_engine::value_type const, 18446744073709551615ul>, ecnerwala::fft::nc_engine::transformed&, std::span<ecnerwala::fft::nc_engine::value_type const, 18446744073709551615ul>, ecnerwala::fft::nc_engine::transformed&, std::span<ecnerwala::fft::nc_engine::value_type const, 18446744073709551615ul>, ecnerwala::fft::nc_engine::transformed&, std::span<ecnerwala::fft::nc_engine::value_type, 18446744073709551615ul>, ecnerwala::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);
145 1862 }
146
147 // As multiply_add2, but also outputs the summed pointwise product as a reusable
148 // transform of the (full-length) result, like multiply_cached.
149 template <engine E>
150 644116 void multiply_add2_cached(
151 std::span<const typename E::value_type> a1, transformed<E>& ta1,
152 std::span<const typename E::value_type> b1, transformed<E>& tb1,
153 std::span<const typename E::value_type> a2, transformed<E>& ta2,
154 std::span<const typename E::value_type> b2, transformed<E>& tb2,
155 std::vector<typename E::value_type>& coeffs, transformed<E>& t) {
156 using T = typename E::value_type;
157 644116 assert(sz(a1) > 0 && sz(b1) > 0 && sz(a2) > 0 && sz(b2) > 0);
158 644116 int s = sz(a1) + sz(b1) - 1;
159 644116 assert(sz(a2) + sz(b2) - 1 == s);
160
1/1
✓ Branch 23 → 24 taken 65 times.
644181 coeffs.assign(size_t(s), T{});
161 644246 t = transformed<E>{};
162 if constexpr (std::same_as<typename E::product, transformed<E>>) {
163
2/2
✓ Branch 12 → 13 taken 321979 times.
✓ Branch 12 → 14 taken 322072 times.
644116 auto [n, cut] = detail::conv_size_for(s);
164
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];
165
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);
166
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);
167
1/1
✓ Branch 84 → 85 taken 65 times.
644116 auto p = E::mul2(ta1, tb1, ta2, tb2, n);
168
1/2
✗ Branch 21 → 22 not taken.
✓ Branch 21 → 23 taken 644051 times.
644116 auto tp = p;
169
3/4
void ecnerwala::fft::multiply_add2_cached<ecnerwala::fft::engines::ntt<modnum<998244353> > >(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::__debug::vector<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::allocator<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type> >&, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&):
✗ Branch 93 → 94 not taken.
✓ Branch 93 → 95 taken 65 times.
✓ Branch 95 → 96 taken 65 times.
void ecnerwala::fft::multiply_add2_cached<ecnerwala::fft::engines::ntt<modnum<998244353> > >(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::vector<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::allocator<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type> >&, ecnerwala::fft::engines::ntt<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));
170 644181 t = std::move(tp);
171 644181 } else {
172 multiply_add2<E>(a1, ta1, b1, tb1, a2, ta2, b2, tb2, std::span<T>(coeffs));
173 }
174 644116 }
175
176 // This helper also accepts an output transform which will be populated if it is cheap to do so
177 template <engine E>
178 1326268 void multiply_cached(std::span<const typename E::value_type> a, transformed<E>& ta,
179 std::span<const typename E::value_type> b, transformed<E>& tb,
180 std::vector<typename E::value_type>& coeffs, transformed<E>& t) {
181 using T = typename E::value_type;
182
21/37
void ecnerwala::fft::multiply_cached<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> > >(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::__debug::vector<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::allocator<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type> >&, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, 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 ecnerwala::fft::multiply_cached<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> > >(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::vector<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::allocator<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type> >&, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, 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 ecnerwala::fft::multiply_cached<ecnerwala::fft::engines::ntt<mod_goldilocks> >(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::__debug::vector<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, std::allocator<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type> >&, ecnerwala::fft::engines::ntt<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 ecnerwala::fft::multiply_cached<ecnerwala::fft::engines::ntt<modnum<998244353> > >(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::__debug::vector<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::allocator<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type> >&, ecnerwala::fft::engines::ntt<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 ecnerwala::fft::multiply_cached<ecnerwala::fft::engines::ntt<modnum<998244353> > >(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::vector<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::allocator<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type> >&, ecnerwala::fft::engines::ntt<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 ecnerwala::fft::multiply_cached<ecnerwala::fft::engines::real<double> >(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::real<double>::transformed&, std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::real<double>::transformed&, std::__debug::vector<ecnerwala::fft::engines::real<double>::value_type, std::allocator<ecnerwala::fft::engines::real<double>::value_type> >&, ecnerwala::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 ecnerwala::fft::multiply_cached<ecnerwala::fft::engines::split<modnum<1000000007> > >(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::__debug::vector<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::allocator<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type> >&, ecnerwala::fft::engines::split<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 ecnerwala::fft::multiply_cached<ecnerwala::fft::engines::split<modnum<1000000007> > >(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::vector<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::allocator<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type> >&, ecnerwala::fft::engines::split<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{});
183
3/6
void ecnerwala::fft::multiply_cached<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> > >(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::vector<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::allocator<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type> >&, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&):
✓ Branch 9 → 10 taken 48 times.
✗ Branch 9 → 14 not taken.
void ecnerwala::fft::multiply_cached<ecnerwala::fft::engines::ntt<modnum<998244353> > >(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::vector<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::allocator<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type> >&, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&):
✓ Branch 8 → 9 taken 1325993 times.
✗ Branch 8 → 20 not taken.
void ecnerwala::fft::multiply_cached<ecnerwala::fft::engines::split<modnum<1000000007> > >(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::vector<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::allocator<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type> >&, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&):
✓ Branch 8 → 9 taken 48 times.
✗ Branch 8 → 13 not taken.
1326670 t = transformed<E>{};
184
8/16
void ecnerwala::fft::multiply_cached<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> > >(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::__debug::vector<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::allocator<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type> >&, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&):
✓ Branch 27 → 28 taken 2 times.
✗ Branch 27 → 33 not taken.
void ecnerwala::fft::multiply_cached<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> > >(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::vector<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::allocator<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type> >&, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&):
✓ Branch 9 → 10 taken 48 times.
✗ Branch 9 → 14 not taken.
void ecnerwala::fft::multiply_cached<ecnerwala::fft::engines::ntt<mod_goldilocks> >(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::__debug::vector<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, std::allocator<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type> >&, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&):
✓ Branch 48 → 49 taken 2 times.
✗ Branch 48 → 121 not taken.
void ecnerwala::fft::multiply_cached<ecnerwala::fft::engines::ntt<modnum<998244353> > >(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::__debug::vector<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::allocator<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type> >&, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&):
✓ Branch 48 → 49 taken 171 times.
✗ Branch 48 → 121 not taken.
void ecnerwala::fft::multiply_cached<ecnerwala::fft::engines::ntt<modnum<998244353> > >(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::vector<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::allocator<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type> >&, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&):
✓ Branch 8 → 9 taken 1325993 times.
✗ Branch 8 → 20 not taken.
void ecnerwala::fft::multiply_cached<ecnerwala::fft::engines::real<double> >(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::real<double>::transformed&, std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::real<double>::transformed&, std::__debug::vector<ecnerwala::fft::engines::real<double>::value_type, std::allocator<ecnerwala::fft::engines::real<double>::value_type> >&, ecnerwala::fft::engines::real<double>::transformed&):
✓ Branch 45 → 46 taken 2 times.
✗ Branch 45 → 117 not taken.
void ecnerwala::fft::multiply_cached<ecnerwala::fft::engines::split<modnum<1000000007> > >(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::__debug::vector<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::allocator<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type> >&, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&):
✓ Branch 48 → 49 taken 2 times.
✗ Branch 48 → 54 not taken.
void ecnerwala::fft::multiply_cached<ecnerwala::fft::engines::split<modnum<1000000007> > >(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::vector<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::allocator<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type> >&, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&):
✓ Branch 8 → 9 taken 48 times.
✗ Branch 8 → 13 not taken.
1326268 if (coeffs.empty()) return;
185
2/4
void ecnerwala::fft::multiply_cached<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> > >(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::vector<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::allocator<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type> >&, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&):
✗ Branch 10 → 11 not taken.
✓ Branch 10 → 12 taken 48 times.
void ecnerwala::fft::multiply_cached<ecnerwala::fft::engines::split<modnum<1000000007> > >(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::vector<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::allocator<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type> >&, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&):
✗ Branch 9 → 10 not taken.
✓ Branch 9 → 11 taken 48 times.
1326268 int s = sz(coeffs);
186 if constexpr (std::same_as<typename E::product, transformed<E>>) {
187 1326168 auto [n, cut] = detail::conv_size_for(s);
188 1326168 T c0 = a[0] * b[0];
189
3/3
void ecnerwala::fft::multiply_cached<ecnerwala::fft::engines::ntt<mod_goldilocks> >(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::__debug::vector<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, std::allocator<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type> >&, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&):
✓ Branch 58 → 59 taken 2 times.
void ecnerwala::fft::multiply_cached<ecnerwala::fft::engines::ntt<modnum<998244353> > >(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::__debug::vector<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::allocator<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type> >&, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&):
✓ Branch 58 → 59 taken 171 times.
void ecnerwala::fft::multiply_cached<ecnerwala::fft::engines::real<double> >(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::real<double>::transformed&, std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::real<double>::transformed&, std::__debug::vector<ecnerwala::fft::engines::real<double>::value_type, std::allocator<ecnerwala::fft::engines::real<double>::value_type> >&, ecnerwala::fft::engines::real<double>::transformed&):
✓ Branch 55 → 56 taken 2 times.
1326168 E::extend_to(ta, n, a);
190
3/3
void ecnerwala::fft::multiply_cached<ecnerwala::fft::engines::ntt<mod_goldilocks> >(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::__debug::vector<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, std::allocator<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type> >&, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&):
✓ Branch 60 → 61 taken 2 times.
void ecnerwala::fft::multiply_cached<ecnerwala::fft::engines::ntt<modnum<998244353> > >(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::__debug::vector<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::allocator<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type> >&, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&):
✓ Branch 60 → 61 taken 171 times.
void ecnerwala::fft::multiply_cached<ecnerwala::fft::engines::real<double> >(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::real<double>::transformed&, std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::real<double>::transformed&, std::__debug::vector<ecnerwala::fft::engines::real<double>::value_type, std::allocator<ecnerwala::fft::engines::real<double>::value_type> >&, ecnerwala::fft::engines::real<double>::transformed&):
✓ Branch 57 → 58 taken 2 times.
1326168 E::extend_to(tb, n, b);
191
3/3
void ecnerwala::fft::multiply_cached<ecnerwala::fft::engines::ntt<mod_goldilocks> >(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::__debug::vector<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, std::allocator<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type> >&, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&):
✓ Branch 64 → 65 taken 2 times.
void ecnerwala::fft::multiply_cached<ecnerwala::fft::engines::ntt<modnum<998244353> > >(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::__debug::vector<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::allocator<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type> >&, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&):
✓ Branch 64 → 65 taken 171 times.
void ecnerwala::fft::multiply_cached<ecnerwala::fft::engines::real<double> >(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::real<double>::transformed&, std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::real<double>::transformed&, std::__debug::vector<ecnerwala::fft::engines::real<double>::value_type, std::allocator<ecnerwala::fft::engines::real<double>::value_type> >&, ecnerwala::fft::engines::real<double>::transformed&):
✓ Branch 61 → 62 taken 2 times.
1326168 auto p = E::mul(ta, tb, n);
192
1/2
✗ Branch 13 → 14 not taken.
✓ Branch 13 → 15 taken 1325993 times.
1326168 auto tp = p;
193
7/10
void ecnerwala::fft::multiply_cached<ecnerwala::fft::engines::ntt<mod_goldilocks> >(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::__debug::vector<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, std::allocator<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type> >&, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&):
✗ Branch 73 → 74 not taken.
✓ Branch 73 → 75 taken 2 times.
✓ Branch 75 → 76 taken 2 times.
void ecnerwala::fft::multiply_cached<ecnerwala::fft::engines::ntt<modnum<998244353> > >(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::__debug::vector<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::allocator<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type> >&, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&):
✗ Branch 73 → 74 not taken.
✓ Branch 73 → 75 taken 171 times.
✓ Branch 75 → 76 taken 171 times.
void ecnerwala::fft::multiply_cached<ecnerwala::fft::engines::ntt<modnum<998244353> > >(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::vector<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::allocator<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type> >&, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&):
✓ Branch 15 → 16 taken 1325993 times.
void ecnerwala::fft::multiply_cached<ecnerwala::fft::engines::real<double> >(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::real<double>::transformed&, std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::real<double>::transformed&, std::__debug::vector<ecnerwala::fft::engines::real<double>::value_type, std::allocator<ecnerwala::fft::engines::real<double>::value_type> >&, ecnerwala::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));
194 1326343 t = std::move(tp);
195 1326343 } else {
196
2/2
void ecnerwala::fft::multiply_cached<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> > >(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::__debug::vector<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::allocator<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type> >&, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&):
✓ Branch 31 → 32 taken 2 times.
void ecnerwala::fft::multiply_cached<ecnerwala::fft::engines::split<modnum<1000000007> > >(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::__debug::vector<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::allocator<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type> >&, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&):
✓ Branch 52 → 53 taken 2 times.
100 multiply<E>(a, ta, b, tb, std::span<T>(coeffs));
197 }
198 }
199
200 template <engine E, typename Op = assign_op>
201 588 void square(std::span<const typename E::value_type> a, std::span<typename E::value_type> out, Op op = {}) {
202 using T = typename E::value_type;
203
12/24
void ecnerwala::fft::square<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 6 taken 1 time.
void ecnerwala::fft::square<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 6 taken 1 time.
void ecnerwala::fft::square<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 6 taken 1 time.
void ecnerwala::fft::square<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 6 taken 4 times.
void ecnerwala::fft::square<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 6 taken 4 times.
void ecnerwala::fft::square<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::square<ecnerwala::fft::engines::real<double>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 4 times.
void ecnerwala::fft::square<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 6 taken 4 times.
void ecnerwala::fft::square<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 6 taken 1 time.
void ecnerwala::fft::square<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 6 taken 1 time.
void ecnerwala::fft::square<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 6 taken 1 time.
588 if (sz(a) == 0) return;
204 588 int s = 2 * sz(a) - 1;
205 588 auto [n, cut] = detail::conv_size_for(s);
206 588 T c0 = a[0] * a[0];
207
11/11
void ecnerwala::fft::square<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 15 → 16 taken 1 time.
void ecnerwala::fft::square<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 15 → 16 taken 1 time.
void ecnerwala::fft::square<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 15 → 16 taken 1 time.
void ecnerwala::fft::square<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 15 → 16 taken 4 times.
void ecnerwala::fft::square<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 15 → 16 taken 4 times.
void ecnerwala::fft::square<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 15 → 16 taken 29 times.
void ecnerwala::fft::square<ecnerwala::fft::engines::real<double>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 14 → 15 taken 4 times.
void ecnerwala::fft::square<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 15 → 16 taken 4 times.
void ecnerwala::fft::square<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 15 → 16 taken 1 time.
void ecnerwala::fft::square<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 15 → 16 taken 1 time.
void ecnerwala::fft::square<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 15 → 16 taken 1 time.
588 auto buf = buffer_pool<T>::get(n);
208
13/14
void ecnerwala::fft::square<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 21 → 22 taken 1 time.
void ecnerwala::fft::square<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 21 → 22 taken 1 time.
void ecnerwala::fft::square<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 21 → 22 taken 1 time.
void ecnerwala::fft::square<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 21 → 22 taken 4 times.
void ecnerwala::fft::square<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 21 → 22 taken 4 times.
void ecnerwala::fft::square<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::square<ecnerwala::fft::engines::real<double>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 20 → 21 taken 4 times.
void ecnerwala::fft::square<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 21 → 22 taken 4 times.
void ecnerwala::fft::square<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 21 → 22 taken 1 time.
void ecnerwala::fft::square<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 21 → 22 taken 1 time.
void ecnerwala::fft::square<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 21 → 22 taken 1 time.
639 square_circular<E>(a, buf.span(), n);
209
11/22
void ecnerwala::fft::square<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 22 → 23 not taken.
✓ Branch 22 → 24 taken 1 time.
void ecnerwala::fft::square<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 22 → 23 not taken.
✓ Branch 22 → 24 taken 1 time.
void ecnerwala::fft::square<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 22 → 23 not taken.
✓ Branch 22 → 24 taken 1 time.
void ecnerwala::fft::square<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 22 → 23 not taken.
✓ Branch 22 → 24 taken 4 times.
void ecnerwala::fft::square<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 22 → 23 not taken.
✓ Branch 22 → 24 taken 4 times.
void ecnerwala::fft::square<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 22 → 23 not taken.
✓ Branch 22 → 24 taken 29 times.
void ecnerwala::fft::square<ecnerwala::fft::engines::real<double>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 21 → 22 not taken.
✓ Branch 21 → 23 taken 4 times.
void ecnerwala::fft::square<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 22 → 23 not taken.
✓ Branch 22 → 24 taken 4 times.
void ecnerwala::fft::square<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 22 → 23 not taken.
✓ Branch 22 → 24 taken 1 time.
void ecnerwala::fft::square<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 22 → 23 not taken.
✓ Branch 22 → 24 taken 1 time.
void ecnerwala::fft::square<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type, 18446744073709551615ul>, ecnerwala::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);
210 588 }
211
212 template <engine E, typename Op = assign_op>
213 140 void square(std::span<const typename E::value_type> a, transformed<E>& ta,
214 std::span<typename E::value_type> out, Op op = {}) {
215 using T = typename E::value_type;
216
14/28
void ecnerwala::fft::square<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 5 times.
void ecnerwala::fft::square<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 5 times.
void ecnerwala::fft::square<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 5 times.
void ecnerwala::fft::square<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 18 times.
void ecnerwala::fft::square<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 1 time.
void ecnerwala::fft::square<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 18 times.
void ecnerwala::fft::square<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 1 time.
void ecnerwala::fft::square<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 18 times.
void ecnerwala::fft::square<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 26 times.
void ecnerwala::fft::square<ecnerwala::fft::engines::real<double>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::real<double>::transformed&, std::span<ecnerwala::fft::engines::real<double>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 3 → 4 taken 1 time.
✗ Branch 3 → 39 not taken.
void ecnerwala::fft::square<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 18 times.
void ecnerwala::fft::square<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 1 time.
void ecnerwala::fft::square<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 5 times.
void ecnerwala::fft::square<ecnerwala::fft::nc_engine, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::nc_engine::value_type const, 18446744073709551615ul>, ecnerwala::fft::nc_engine::transformed&, std::span<ecnerwala::fft::nc_engine::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 18 times.
140 if (sz(a) == 0) return;
217 140 int s = 2 * sz(a) - 1;
218 140 auto [n, cut] = detail::conv_size_for(s);
219 140 T c0 = a[0] * a[0];
220
13/13
void ecnerwala::fft::square<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 14 → 15 taken 5 times.
void ecnerwala::fft::square<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 14 → 15 taken 5 times.
void ecnerwala::fft::square<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 14 → 15 taken 5 times.
void ecnerwala::fft::square<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 14 → 15 taken 18 times.
void ecnerwala::fft::square<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 14 → 15 taken 1 time.
void ecnerwala::fft::square<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 14 → 15 taken 18 times.
void ecnerwala::fft::square<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 14 → 15 taken 1 time.
void ecnerwala::fft::square<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 14 → 15 taken 18 times.
void ecnerwala::fft::square<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 14 → 15 taken 26 times.
void ecnerwala::fft::square<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 14 → 15 taken 18 times.
void ecnerwala::fft::square<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 14 → 15 taken 1 time.
void ecnerwala::fft::square<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 14 → 15 taken 5 times.
void ecnerwala::fft::square<ecnerwala::fft::nc_engine, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::nc_engine::value_type const, 18446744073709551615ul>, ecnerwala::fft::nc_engine::transformed&, std::span<ecnerwala::fft::nc_engine::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 14 → 15 taken 18 times.
140 E::extend_to(ta, n, a);
221
42/56
void ecnerwala::fft::square<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::square<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::square<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::square<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::square<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::transformed&, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::square<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::square<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<mod_goldilocks>::transformed&, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::square<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::square<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::square<ecnerwala::fft::engines::real<double>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::real<double>::transformed&, std::span<ecnerwala::fft::engines::real<double>::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::square<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::square<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::split<modnum<1000000007> >::transformed&, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::square<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::transformed&, std::span<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::square<ecnerwala::fft::nc_engine, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::nc_engine::value_type const, 18446744073709551615ul>, ecnerwala::fft::nc_engine::transformed&, std::span<ecnerwala::fft::nc_engine::value_type, 18446744073709551615ul>, ecnerwala::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);
222 }
223
224 // As square, but also outputs the pointwise product as a reusable transform of
225 // the result (empty when the engine's product isn't a transform).
226 template <engine E>
227 6 void square_cached(std::span<const typename E::value_type> a, transformed<E>& ta,
228 std::vector<typename E::value_type>& coeffs, transformed<E>& t) {
229 using T = typename E::value_type;
230
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{});
231 18 t = transformed<E>{};
232
1/2
✓ Branch 45 → 46 taken 6 times.
✗ Branch 45 → 115 not taken.
6 if (coeffs.empty()) return;
233 6 int s = sz(coeffs);
234 if constexpr (std::same_as<typename E::product, transformed<E>>) {
235 6 auto [n, cut] = detail::conv_size_for(s);
236 6 T c0 = a[0] * a[0];
237
1/1
✓ Branch 55 → 56 taken 6 times.
6 E::extend_to(ta, n, a);
238
1/1
✓ Branch 58 → 59 taken 6 times.
6 auto p = E::sq(ta, n);
239 6 auto tp = p;
240
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));
241 12 t = std::move(tp);
242 12 } else {
243 square<E>(a, ta, std::span<T>(coeffs));
244 }
245 }
246
247 365 template <engine E> vector<typename E::value_type> multiply(
248 const vector<typename E::value_type>& a, const vector<typename E::value_type>& b) {
249 using T = typename E::value_type;
250
34/68
std::__debug::vector<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3> >(std::__debug::vector<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, 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<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3> >(std::__debug::vector<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<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<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3> >(std::__debug::vector<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<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<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3> >(std::__debug::vector<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, 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<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3> >(std::__debug::vector<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<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<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3> >(std::__debug::vector<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<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<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::allocator<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> > >(std::__debug::vector<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::allocator<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::allocator<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, 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<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, std::allocator<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<mod_goldilocks> >(std::__debug::vector<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, std::allocator<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, std::allocator<ecnerwala::fft::engines::ntt<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<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::allocator<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<modnum<998244353> > >(std::__debug::vector<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::allocator<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::allocator<ecnerwala::fft::engines::ntt<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<ecnerwala::fft::engines::real<double>::value_type, std::allocator<ecnerwala::fft::engines::real<double>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::real<double> >(std::__debug::vector<ecnerwala::fft::engines::real<double>::value_type, std::allocator<ecnerwala::fft::engines::real<double>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::real<double>::value_type, std::allocator<ecnerwala::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<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::allocator<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::split<modnum<1000000007> > >(std::__debug::vector<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::allocator<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::allocator<ecnerwala::fft::engines::split<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<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type, std::allocator<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2> >(std::__debug::vector<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type, std::allocator<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type, std::allocator<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, 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<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3> >(std::__debug::vector<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<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<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type, std::allocator<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2> >(std::__debug::vector<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type, std::allocator<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type, std::allocator<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<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<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type, std::allocator<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2> >(std::__debug::vector<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type, std::allocator<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type, std::allocator<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, 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<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3> >(std::__debug::vector<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<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<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type, std::allocator<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2> >(std::__debug::vector<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type, std::allocator<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type, std::allocator<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<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 {};
251
17/17
std::__debug::vector<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3> >(std::__debug::vector<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type> > const&):
✓ Branch 16 → 17 taken 20 times.
std::__debug::vector<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3> >(std::__debug::vector<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type> > const&):
✓ Branch 16 → 17 taken 20 times.
std::__debug::vector<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3> >(std::__debug::vector<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type> > const&):
✓ Branch 16 → 17 taken 20 times.
std::__debug::vector<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3> >(std::__debug::vector<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type> > const&):
✓ Branch 16 → 17 taken 20 times.
std::__debug::vector<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3> >(std::__debug::vector<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type> > const&):
✓ Branch 16 → 17 taken 20 times.
std::__debug::vector<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3> >(std::__debug::vector<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type> > const&):
✓ Branch 16 → 17 taken 20 times.
std::__debug::vector<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::allocator<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> > >(std::__debug::vector<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::allocator<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::allocator<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type> > const&):
✓ Branch 16 → 17 taken 25 times.
std::__debug::vector<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, std::allocator<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<mod_goldilocks> >(std::__debug::vector<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, std::allocator<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, std::allocator<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type> > const&):
✓ Branch 16 → 17 taken 25 times.
std::__debug::vector<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::allocator<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<modnum<998244353> > >(std::__debug::vector<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::allocator<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::allocator<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type> > const&):
✓ Branch 16 → 17 taken 25 times.
std::__debug::vector<ecnerwala::fft::engines::real<double>::value_type, std::allocator<ecnerwala::fft::engines::real<double>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::real<double> >(std::__debug::vector<ecnerwala::fft::engines::real<double>::value_type, std::allocator<ecnerwala::fft::engines::real<double>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::real<double>::value_type, std::allocator<ecnerwala::fft::engines::real<double>::value_type> > const&):
✓ Branch 16 → 17 taken 25 times.
std::__debug::vector<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::allocator<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::split<modnum<1000000007> > >(std::__debug::vector<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::allocator<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::allocator<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type> > const&):
✓ Branch 16 → 17 taken 25 times.
std::__debug::vector<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type, std::allocator<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2> >(std::__debug::vector<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type, std::allocator<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type, std::allocator<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type> > const&):
✓ Branch 16 → 17 taken 20 times.
std::__debug::vector<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3> >(std::__debug::vector<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type> > const&):
✓ Branch 16 → 17 taken 20 times.
std::__debug::vector<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type, std::allocator<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2> >(std::__debug::vector<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type, std::allocator<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type, std::allocator<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type> > const&):
✓ Branch 16 → 17 taken 20 times.
std::__debug::vector<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type, std::allocator<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2> >(std::__debug::vector<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type, std::allocator<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type, std::allocator<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type> > const&):
✓ Branch 16 → 17 taken 20 times.
std::__debug::vector<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3> >(std::__debug::vector<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type> > const&):
✓ Branch 16 → 17 taken 20 times.
std::__debug::vector<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type, std::allocator<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2> >(std::__debug::vector<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type, std::allocator<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type, std::allocator<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type> > const&):
✓ Branch 16 → 17 taken 20 times.
365 vector<T> r(sz(a) + sz(b) - 1);
252
17/17
std::__debug::vector<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3> >(std::__debug::vector<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type> > const&):
✓ Branch 24 → 25 taken 20 times.
std::__debug::vector<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3> >(std::__debug::vector<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type> > const&):
✓ Branch 24 → 25 taken 20 times.
std::__debug::vector<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3> >(std::__debug::vector<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::trunc_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type> > const&):
✓ Branch 24 → 25 taken 20 times.
std::__debug::vector<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3> >(std::__debug::vector<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 3>::value_type> > const&):
✓ Branch 24 → 25 taken 20 times.
std::__debug::vector<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3> >(std::__debug::vector<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type> > const&):
✓ Branch 24 → 25 taken 20 times.
std::__debug::vector<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3> >(std::__debug::vector<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::matrix_stable<ecnerwala::fft::engines::split<modnum<1000000007> >, 3>::value_type> > const&):
✓ Branch 24 → 25 taken 20 times.
std::__debug::vector<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::allocator<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> > >(std::__debug::vector<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::allocator<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::allocator<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type> > const&):
✓ Branch 24 → 25 taken 25 times.
std::__debug::vector<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, std::allocator<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<mod_goldilocks> >(std::__debug::vector<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, std::allocator<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, std::allocator<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type> > const&):
✓ Branch 24 → 25 taken 25 times.
std::__debug::vector<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::allocator<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::ntt<modnum<998244353> > >(std::__debug::vector<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::allocator<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::allocator<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type> > const&):
✓ Branch 24 → 25 taken 25 times.
std::__debug::vector<ecnerwala::fft::engines::real<double>::value_type, std::allocator<ecnerwala::fft::engines::real<double>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::real<double> >(std::__debug::vector<ecnerwala::fft::engines::real<double>::value_type, std::allocator<ecnerwala::fft::engines::real<double>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::real<double>::value_type, std::allocator<ecnerwala::fft::engines::real<double>::value_type> > const&):
✓ Branch 24 → 25 taken 25 times.
std::__debug::vector<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::allocator<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::split<modnum<1000000007> > >(std::__debug::vector<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::allocator<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::allocator<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type> > const&):
✓ Branch 24 → 25 taken 25 times.
std::__debug::vector<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type, std::allocator<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2> >(std::__debug::vector<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type, std::allocator<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type, std::allocator<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type> > const&):
✓ Branch 24 → 25 taken 20 times.
std::__debug::vector<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3> >(std::__debug::vector<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type> > const&):
✓ Branch 24 → 25 taken 20 times.
std::__debug::vector<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type, std::allocator<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2> >(std::__debug::vector<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type, std::allocator<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type, std::allocator<ecnerwala::fft::engines::trunc<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type> > const&):
✓ Branch 24 → 25 taken 20 times.
std::__debug::vector<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type, std::allocator<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2> >(std::__debug::vector<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type, std::allocator<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type, std::allocator<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, 2>::value_type> > const&):
✓ Branch 24 → 25 taken 20 times.
std::__debug::vector<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3> >(std::__debug::vector<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type, std::allocator<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::ntt<modnum<998244353> >, 3>::value_type> > const&):
✓ Branch 24 → 25 taken 20 times.
std::__debug::vector<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type, std::allocator<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type> > ecnerwala::fft::multiply<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2> >(std::__debug::vector<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type, std::allocator<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type> > const&, std::__debug::vector<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<modnum<1000000007> >, 2>::value_type, std::allocator<ecnerwala::fft::engines::matrix<ecnerwala::fft::engines::split<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));
253 365 return r;
254 365 }
255
256 20 template <engine E> vector<typename E::value_type> square(const vector<typename E::value_type>& a) {
257 using T = typename E::value_type;
258
5/10
std::__debug::vector<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::allocator<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type> > ecnerwala::fft::square<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> > >(std::__debug::vector<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::allocator<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type> > const&):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 10 taken 4 times.
std::__debug::vector<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, std::allocator<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type> > ecnerwala::fft::square<ecnerwala::fft::engines::ntt<mod_goldilocks> >(std::__debug::vector<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, std::allocator<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type> > const&):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 10 taken 4 times.
std::__debug::vector<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::allocator<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type> > ecnerwala::fft::square<ecnerwala::fft::engines::ntt<modnum<998244353> > >(std::__debug::vector<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::allocator<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type> > const&):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 10 taken 4 times.
std::__debug::vector<ecnerwala::fft::engines::real<double>::value_type, std::allocator<ecnerwala::fft::engines::real<double>::value_type> > ecnerwala::fft::square<ecnerwala::fft::engines::real<double> >(std::__debug::vector<ecnerwala::fft::engines::real<double>::value_type, std::allocator<ecnerwala::fft::engines::real<double>::value_type> > const&):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 10 taken 4 times.
std::__debug::vector<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::allocator<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type> > ecnerwala::fft::square<ecnerwala::fft::engines::split<modnum<1000000007> > >(std::__debug::vector<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::allocator<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type> > const&):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 10 taken 4 times.
20 if (sz(a) == 0) return {};
259
5/5
std::__debug::vector<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::allocator<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type> > ecnerwala::fft::square<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> > >(std::__debug::vector<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::allocator<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type> > const&):
✓ Branch 13 → 14 taken 4 times.
std::__debug::vector<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, std::allocator<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type> > ecnerwala::fft::square<ecnerwala::fft::engines::ntt<mod_goldilocks> >(std::__debug::vector<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, std::allocator<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type> > const&):
✓ Branch 13 → 14 taken 4 times.
std::__debug::vector<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::allocator<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type> > ecnerwala::fft::square<ecnerwala::fft::engines::ntt<modnum<998244353> > >(std::__debug::vector<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::allocator<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type> > const&):
✓ Branch 13 → 14 taken 4 times.
std::__debug::vector<ecnerwala::fft::engines::real<double>::value_type, std::allocator<ecnerwala::fft::engines::real<double>::value_type> > ecnerwala::fft::square<ecnerwala::fft::engines::real<double> >(std::__debug::vector<ecnerwala::fft::engines::real<double>::value_type, std::allocator<ecnerwala::fft::engines::real<double>::value_type> > const&):
✓ Branch 13 → 14 taken 4 times.
std::__debug::vector<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::allocator<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type> > ecnerwala::fft::square<ecnerwala::fft::engines::split<modnum<1000000007> > >(std::__debug::vector<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::allocator<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type> > const&):
✓ Branch 13 → 14 taken 4 times.
20 vector<T> r(2 * sz(a) - 1);
260
5/5
std::__debug::vector<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::allocator<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type> > ecnerwala::fft::square<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> > >(std::__debug::vector<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::allocator<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type> > const&):
✓ Branch 19 → 20 taken 4 times.
std::__debug::vector<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, std::allocator<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type> > ecnerwala::fft::square<ecnerwala::fft::engines::ntt<mod_goldilocks> >(std::__debug::vector<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, std::allocator<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type> > const&):
✓ Branch 19 → 20 taken 4 times.
std::__debug::vector<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::allocator<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type> > ecnerwala::fft::square<ecnerwala::fft::engines::ntt<modnum<998244353> > >(std::__debug::vector<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::allocator<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type> > const&):
✓ Branch 19 → 20 taken 4 times.
std::__debug::vector<ecnerwala::fft::engines::real<double>::value_type, std::allocator<ecnerwala::fft::engines::real<double>::value_type> > ecnerwala::fft::square<ecnerwala::fft::engines::real<double> >(std::__debug::vector<ecnerwala::fft::engines::real<double>::value_type, std::allocator<ecnerwala::fft::engines::real<double>::value_type> > const&):
✓ Branch 19 → 20 taken 4 times.
std::__debug::vector<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::allocator<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type> > ecnerwala::fft::square<ecnerwala::fft::engines::split<modnum<1000000007> > >(std::__debug::vector<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::allocator<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type> > const&):
✓ Branch 19 → 20 taken 4 times.
20 square<E>(std::span<const T>(a), std::span<T>(r));
261 20 return r;
262 20 }
263
264 namespace detail {
265 // emit_linear but for middle_product
266 template <typename T, typename Op>
267 1326258 void emit_middle(std::span<T> buf, bool cut, int la, int lb, T c0, T ctop, std::span<T> out, Op op) {
268 1326258 int m = la - lb + 1;
269
2/2
✓ Branch 2 → 3 taken 13 times.
✓ Branch 2 → 10 taken 1325939 times.
1326258 T cn{};
270
18/18
void ecnerwala::fft::detail::emit_middle<mod_goldilocks, ecnerwala::fft::add_op>(std::span<mod_goldilocks, 18446744073709551615ul>, bool, int, int, mod_goldilocks, mod_goldilocks, std::span<mod_goldilocks, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 6 → 7 taken 6 times.
✓ Branch 6 → 8 taken 8 times.
void ecnerwala::fft::detail::emit_middle<mod_goldilocks, ecnerwala::fft::assign_op>(std::span<mod_goldilocks, 18446744073709551615ul>, bool, int, int, mod_goldilocks, mod_goldilocks, std::span<mod_goldilocks, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 6 → 7 taken 6 times.
✓ Branch 6 → 8 taken 8 times.
void ecnerwala::fft::detail::emit_middle<modnum<1000000007>, ecnerwala::fft::add_op>(std::span<modnum<1000000007>, 18446744073709551615ul>, bool, int, int, modnum<1000000007>, modnum<1000000007>, std::span<modnum<1000000007>, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 6 → 7 taken 12 times.
✓ Branch 6 → 8 taken 16 times.
void ecnerwala::fft::detail::emit_middle<modnum<1000000007>, ecnerwala::fft::assign_op>(std::span<modnum<1000000007>, 18446744073709551615ul>, bool, int, int, modnum<1000000007>, modnum<1000000007>, std::span<modnum<1000000007>, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 6 → 7 taken 12 times.
✓ Branch 6 → 8 taken 16 times.
void ecnerwala::fft::detail::emit_middle<modnum<998244353>, ecnerwala::fft::add_op>(std::span<modnum<998244353>, 18446744073709551615ul>, bool, int, int, modnum<998244353>, modnum<998244353>, std::span<modnum<998244353>, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 6 → 7 taken 6 times.
✓ Branch 6 → 8 taken 8 times.
void ecnerwala::fft::detail::emit_middle<modnum<998244353>, ecnerwala::fft::assign_op>(std::span<modnum<998244353>, 18446744073709551615ul>, bool, int, int, modnum<998244353>, modnum<998244353>, std::span<modnum<998244353>, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::detail::emit_middle<double, ecnerwala::fft::add_op>(std::span<double, 18446744073709551615ul>, bool, int, int, double, double, std::span<double, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 2 → 3 taken 6 times.
✓ Branch 2 → 4 taken 8 times.
void ecnerwala::fft::detail::emit_middle<double, ecnerwala::fft::assign_op>(std::span<double, 18446744073709551615ul>, bool, int, int, double, double, std::span<double, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 2 → 3 taken 6 times.
✓ Branch 2 → 4 taken 8 times.
1326258 if (cut) {
271
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
272
2/2
✓ Branch 6 → 7 taken 2 times.
✓ Branch 6 → 8 taken 11 times.
134 buf[lb - 1] -= ctop;
273 }
274 1326258 int lim = min(sz(out), cut ? m - 1 : m);
275
18/18
void ecnerwala::fft::detail::emit_middle<mod_goldilocks, ecnerwala::fft::add_op>(std::span<mod_goldilocks, 18446744073709551615ul>, bool, int, int, mod_goldilocks, mod_goldilocks, std::span<mod_goldilocks, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 41 → 31 taken 474 times.
✓ Branch 41 → 42 taken 14 times.
void ecnerwala::fft::detail::emit_middle<mod_goldilocks, ecnerwala::fft::assign_op>(std::span<mod_goldilocks, 18446744073709551615ul>, bool, int, int, mod_goldilocks, mod_goldilocks, std::span<mod_goldilocks, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 40 → 31 taken 474 times.
✓ Branch 40 → 41 taken 14 times.
void ecnerwala::fft::detail::emit_middle<modnum<1000000007>, ecnerwala::fft::add_op>(std::span<modnum<1000000007>, 18446744073709551615ul>, bool, int, int, modnum<1000000007>, modnum<1000000007>, std::span<modnum<1000000007>, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 41 → 31 taken 948 times.
✓ Branch 41 → 42 taken 28 times.
void ecnerwala::fft::detail::emit_middle<modnum<1000000007>, ecnerwala::fft::assign_op>(std::span<modnum<1000000007>, 18446744073709551615ul>, bool, int, int, modnum<1000000007>, modnum<1000000007>, std::span<modnum<1000000007>, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 40 → 31 taken 948 times.
✓ Branch 40 → 41 taken 28 times.
void ecnerwala::fft::detail::emit_middle<modnum<998244353>, ecnerwala::fft::add_op>(std::span<modnum<998244353>, 18446744073709551615ul>, bool, int, int, modnum<998244353>, modnum<998244353>, std::span<modnum<998244353>, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 41 → 31 taken 474 times.
✓ Branch 41 → 42 taken 14 times.
void ecnerwala::fft::detail::emit_middle<modnum<998244353>, ecnerwala::fft::assign_op>(std::span<modnum<998244353>, 18446744073709551615ul>, bool, int, int, modnum<998244353>, modnum<998244353>, std::span<modnum<998244353>, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::detail::emit_middle<double, ecnerwala::fft::add_op>(std::span<double, 18446744073709551615ul>, bool, int, int, double, double, std::span<double, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 31 → 24 taken 474 times.
✓ Branch 31 → 32 taken 14 times.
void ecnerwala::fft::detail::emit_middle<double, ecnerwala::fft::assign_op>(std::span<double, 18446744073709551615ul>, bool, int, int, double, double, std::span<double, 18446744073709551615ul>, ecnerwala::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]);
276
27/36
void ecnerwala::fft::detail::emit_middle<mod_goldilocks, ecnerwala::fft::add_op>(std::span<mod_goldilocks, 18446744073709551615ul>, bool, int, int, mod_goldilocks, mod_goldilocks, std::span<mod_goldilocks, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::detail::emit_middle<mod_goldilocks, ecnerwala::fft::assign_op>(std::span<mod_goldilocks, 18446744073709551615ul>, bool, int, int, mod_goldilocks, mod_goldilocks, std::span<mod_goldilocks, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::detail::emit_middle<modnum<1000000007>, ecnerwala::fft::add_op>(std::span<modnum<1000000007>, 18446744073709551615ul>, bool, int, int, modnum<1000000007>, modnum<1000000007>, std::span<modnum<1000000007>, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::detail::emit_middle<modnum<1000000007>, ecnerwala::fft::assign_op>(std::span<modnum<1000000007>, 18446744073709551615ul>, bool, int, int, modnum<1000000007>, modnum<1000000007>, std::span<modnum<1000000007>, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::detail::emit_middle<modnum<998244353>, ecnerwala::fft::add_op>(std::span<modnum<998244353>, 18446744073709551615ul>, bool, int, int, modnum<998244353>, modnum<998244353>, std::span<modnum<998244353>, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::detail::emit_middle<modnum<998244353>, ecnerwala::fft::assign_op>(std::span<modnum<998244353>, 18446744073709551615ul>, bool, int, int, modnum<998244353>, modnum<998244353>, std::span<modnum<998244353>, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::detail::emit_middle<double, ecnerwala::fft::add_op>(std::span<double, 18446744073709551615ul>, bool, int, int, double, double, std::span<double, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::detail::emit_middle<double, ecnerwala::fft::assign_op>(std::span<double, 18446744073709551615ul>, bool, int, int, double, double, std::span<double, 18446744073709551615ul>, ecnerwala::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);
277 1326258 }
278 }
279
280 // Middle product (the transposed multiplication): takes only coefficients of a * b which include terms from all of b.
281 // Must have len(a) >= len(b)
282 template <engine E, typename Op = assign_op>
283 234 void middle_product(std::span<const typename E::value_type> a, std::span<const typename E::value_type> b,
284 std::span<typename E::value_type> out, Op op = {}) {
285 using T = typename E::value_type;
286
21/43
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::middle_product<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::middle_product<ecnerwala::fft::engines::real<double>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::middle_product<ecnerwala::fft::engines::real<double>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::middle_product<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::middle_product<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::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;
287 234 assert(sz(a) >= sz(b));
288
21/22
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 13 → 14 taken 1 time.
✓ Branch 13 → 40 taken 14 times.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 13 → 14 taken 2 times.
✓ Branch 13 → 40 taken 14 times.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 13 → 14 taken 1 time.
✓ Branch 13 → 40 taken 14 times.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 13 → 14 taken 2 times.
✓ Branch 13 → 40 taken 14 times.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 13 → 14 taken 1 time.
✓ Branch 13 → 40 taken 14 times.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::middle_product<ecnerwala::fft::engines::real<double>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 13 → 22 taken 1 time.
✓ Branch 13 → 30 taken 14 times.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::real<double>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 13 → 22 taken 2 times.
✓ Branch 13 → 32 taken 14 times.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 13 → 14 taken 1 time.
✓ Branch 13 → 40 taken 14 times.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 13 → 14 taken 2 times.
✓ Branch 13 → 40 taken 14 times.
234 if (sz(a) == sz(b)) {
289 19 T r{};
290
20/22
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 31 → 19 taken 5 times.
✓ Branch 31 → 32 taken 1 time.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 31 → 19 taken 14 times.
✓ Branch 31 → 32 taken 2 times.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 31 → 19 taken 5 times.
✓ Branch 31 → 32 taken 1 time.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 31 → 19 taken 14 times.
✓ Branch 31 → 32 taken 2 times.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 31 → 19 taken 5 times.
✓ Branch 31 → 32 taken 1 time.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::middle_product<ecnerwala::fft::engines::real<double>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 23 → 14 taken 5 times.
✓ Branch 23 → 24 taken 1 time.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::real<double>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 23 → 14 taken 14 times.
✓ Branch 23 → 24 taken 2 times.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 31 → 19 taken 5 times.
✓ Branch 31 → 32 taken 1 time.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 31 → 19 taken 14 times.
✓ Branch 31 → 32 taken 2 times.
170 for (int i = 0; i < sz(a); i++) {
291 148 r += a[i] * b[sz(b) - 1 - i];
292 }
293
10/22
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 33 → 34 taken 1 time.
✗ Branch 33 → 39 not taken.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 33 → 34 taken 2 times.
✗ Branch 33 → 39 not taken.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 33 → 34 taken 1 time.
✗ Branch 33 → 39 not taken.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 33 → 34 taken 2 times.
✗ Branch 33 → 39 not taken.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 33 → 34 taken 1 time.
✗ Branch 33 → 39 not taken.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::middle_product<ecnerwala::fft::engines::real<double>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 25 → 26 taken 1 time.
✗ Branch 25 → 29 not taken.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::real<double>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 25 → 26 taken 2 times.
✗ Branch 25 → 31 not taken.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 33 → 34 taken 1 time.
✗ Branch 33 → 39 not taken.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 33 → 34 taken 2 times.
✗ Branch 33 → 39 not taken.
43 if (sz(out) > 0) op(out[0], r);
294 3 return;
295 }
296 212 auto [n, cut] = detail::conv_size_for(sz(a));
297
10/10
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 43 → 44 taken 14 times.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 43 → 44 taken 14 times.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 43 → 44 taken 14 times.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 43 → 44 taken 14 times.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 43 → 44 taken 14 times.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 43 → 44 taken 57 times.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::real<double>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 33 → 34 taken 14 times.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::real<double>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 35 → 36 taken 14 times.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 43 → 44 taken 14 times.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 43 → 44 taken 14 times.
212 auto buf = buffer_pool<T>::get(n);
298
12/13
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 49 → 50 taken 14 times.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 49 → 50 taken 14 times.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 49 → 50 taken 14 times.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 49 → 50 taken 14 times.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 49 → 50 taken 14 times.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::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 ecnerwala::fft::middle_product<ecnerwala::fft::engines::real<double>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 39 → 40 taken 14 times.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::real<double>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 41 → 42 taken 14 times.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✓ Branch 49 → 50 taken 14 times.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✓ Branch 49 → 50 taken 14 times.
395 multiply_circular<E>(a, b, buf.span(), n);
299
10/20
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✗ Branch 64 → 65 not taken.
✓ Branch 64 → 66 taken 14 times.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 64 → 65 not taken.
✓ Branch 64 → 66 taken 14 times.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✗ Branch 64 → 65 not taken.
✓ Branch 64 → 66 taken 14 times.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<mod_goldilocks>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 64 → 65 not taken.
✓ Branch 64 → 66 taken 14 times.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✗ Branch 64 → 65 not taken.
✓ Branch 64 → 66 taken 14 times.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<modnum<998244353> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 64 → 65 not taken.
✓ Branch 64 → 66 taken 57 times.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::real<double>, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✗ Branch 56 → 57 not taken.
✓ Branch 56 → 58 taken 14 times.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::real<double>, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type, 18446744073709551615ul>, ecnerwala::fft::assign_op):
✗ Branch 58 → 59 not taken.
✓ Branch 58 → 60 taken 14 times.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::add_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::fft::add_op):
✗ Branch 64 → 65 not taken.
✓ Branch 64 → 66 taken 14 times.
void ecnerwala::fft::middle_product<ecnerwala::fft::engines::split<modnum<1000000007> >, ecnerwala::fft::assign_op>(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, 18446744073709551615ul>, ecnerwala::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),
300 761 a[0] * b[0], a[sz(a) - 1] * b[sz(b) - 1], out, op);
301 212 }
302
303 // TODO: Let's decide whether to keep vector<> returning forms or not; this
304 // largely depends on whether we think these functions are a public interface or
305 // merely convenience for value type implementors.
306 159 template <engine E> vector<typename E::value_type> middle_product(
307 std::span<const typename E::value_type> a, std::span<const typename E::value_type> b) {
308 using T = typename E::value_type;
309
12/24
std::__debug::vector<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::allocator<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type> > ecnerwala::fft::middle_product<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> > >(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, 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<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, std::allocator<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type> > ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<mod_goldilocks> >(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<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<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::allocator<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type> > ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<modnum<998244353> > >(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<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<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::allocator<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type> > ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<modnum<998244353> > >(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<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<ecnerwala::fft::engines::real<double>::value_type, std::allocator<ecnerwala::fft::engines::real<double>::value_type> > ecnerwala::fft::middle_product<ecnerwala::fft::engines::real<double> >(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::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<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::allocator<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type> > ecnerwala::fft::middle_product<ecnerwala::fft::engines::split<modnum<1000000007> > >(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<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 {};
310 159 assert(sz(a) >= sz(b));
311
6/7
std::__debug::vector<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::allocator<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type> > ecnerwala::fft::middle_product<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> > >(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>):
✓ Branch 20 → 21 taken 16 times.
std::__debug::vector<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, std::allocator<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type> > ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<mod_goldilocks> >(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>):
✓ Branch 20 → 21 taken 16 times.
std::__debug::vector<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::allocator<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type> > ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<modnum<998244353> > >(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>):
✓ Branch 20 → 21 taken 66 times.
std::vector<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::allocator<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type> > ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<modnum<998244353> > >(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>):
✗ Branch 8 → 9 not taken.
✓ Branch 8 → 10 taken 29 times.
std::__debug::vector<ecnerwala::fft::engines::real<double>::value_type, std::allocator<ecnerwala::fft::engines::real<double>::value_type> > ecnerwala::fft::middle_product<ecnerwala::fft::engines::real<double> >(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>):
✓ Branch 20 → 21 taken 16 times.
std::__debug::vector<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::allocator<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type> > ecnerwala::fft::middle_product<ecnerwala::fft::engines::split<modnum<1000000007> > >(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>):
✓ Branch 20 → 21 taken 16 times.
159 vector<T> r(size_t(sz(a) - sz(b) + 1));
312
6/6
std::__debug::vector<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type, std::allocator<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type> > ecnerwala::fft::middle_product<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> > >(std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::crt<modnum<1000000007>, mod_goldilocks, modnum<2013265921> >::value_type const, 18446744073709551615ul>):
✓ Branch 24 → 25 taken 16 times.
std::__debug::vector<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type, std::allocator<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type> > ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<mod_goldilocks> >(std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<mod_goldilocks>::value_type const, 18446744073709551615ul>):
✓ Branch 24 → 25 taken 16 times.
std::__debug::vector<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::allocator<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type> > ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<modnum<998244353> > >(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>):
✓ Branch 24 → 25 taken 66 times.
std::vector<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::allocator<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type> > ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<modnum<998244353> > >(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>):
✓ Branch 10 → 11 taken 29 times.
std::__debug::vector<ecnerwala::fft::engines::real<double>::value_type, std::allocator<ecnerwala::fft::engines::real<double>::value_type> > ecnerwala::fft::middle_product<ecnerwala::fft::engines::real<double> >(std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::real<double>::value_type const, 18446744073709551615ul>):
✓ Branch 24 → 25 taken 16 times.
std::__debug::vector<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type, std::allocator<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type> > ecnerwala::fft::middle_product<ecnerwala::fft::engines::split<modnum<1000000007> > >(std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>, std::span<ecnerwala::fft::engines::split<modnum<1000000007> >::value_type const, 18446744073709551615ul>):
✓ Branch 24 → 25 taken 16 times.
159 middle_product<E>(a, b, std::span<T>(r));
313 159 return r;
314 159 }
315
316 template <engine E, typename Op = assign_op>
317 2652143 void middle_product(std::span<const typename E::value_type> a, transformed<E>& ta,
318 std::span<const typename E::value_type> b, transformed<E>& tb,
319 std::span<typename E::value_type> out, Op op = {}) {
320 using T = typename E::value_type;
321
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;
322 2652143 assert(sz(a) >= sz(b));
323
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)) {
324 1326097 T r{};
325
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++) {
326 2652205 r += a[i] * b[sz(b) - 1 - i];
327 }
328
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);
329 return;
330 }
331 1326046 auto [n, cut] = detail::conv_size_for(sz(a));
332
1/1
✓ Branch 43 → 44 taken 123 times.
1326046 E::extend_to(ta, n, a);
333
1/1
✓ Branch 45 → 46 taken 123 times.
1326046 E::extend_to(tb, n, b);
334
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);
335
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());
336
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),
337 1326415 a[0] * b[0], a[sz(a) - 1] * b[sz(b) - 1], out, op);
338 1326046 }
339
340 template <engine E>
341 2652143 vector<typename E::value_type> middle_product(std::span<const typename E::value_type> a, transformed<E>& ta,
342 std::span<const typename E::value_type> b, transformed<E>& tb) {
343 using T = typename E::value_type;
344
4/8
std::__debug::vector<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::allocator<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type> > ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<modnum<998244353> > >(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<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<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::allocator<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type> > ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<modnum<998244353> > >(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<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 {};
345 2652143 assert(sz(a) >= sz(b));
346
2/3
std::__debug::vector<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::allocator<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type> > ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<modnum<998244353> > >(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&):
✓ Branch 20 → 21 taken 263 times.
std::vector<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::allocator<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type> > ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<modnum<998244353> > >(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<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));
347
2/2
std::__debug::vector<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::allocator<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type> > ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<modnum<998244353> > >(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&):
✓ Branch 24 → 25 taken 263 times.
std::vector<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type, std::allocator<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type> > ecnerwala::fft::middle_product<ecnerwala::fft::engines::ntt<modnum<998244353> > >(std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&, std::span<ecnerwala::fft::engines::ntt<modnum<998244353> >::value_type const, 18446744073709551615ul>, ecnerwala::fft::engines::ntt<modnum<998244353> >::transformed&):
✓ Branch 10 → 11 taken 2651880 times.
2652143 middle_product<E>(a, ta, b, tb, std::span<T>(r));
348 2652143 return r;
349 2652143 }
350
351 /* namespace ecnerwala::fft */ }
352