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/17void 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/18void 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/36void 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/11void 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/23void 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/14void 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/30void 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/30void 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/60void 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/32ecnerwala::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/54void 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/6void 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/54void 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/6void 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/18void 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/30void 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/54void 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/91void 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/22void 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/25void 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/44void 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/61void 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/12void 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/12void 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/55void 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/26void 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/26void 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/56void 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/4void 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/37void 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/6void 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/16void 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/4void 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/3void 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/3void 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/3void 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/10void 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/2void 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/24void 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/11void 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/14void 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/22void 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/28void 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/13void 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/56void 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/68std::__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/17std::__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/17std::__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/10std::__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/5std::__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/5std::__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/18void 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/18void 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/36void 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/43void 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/22void 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/22void 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/22void 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/10void 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/13void 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/20void 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/24std::__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/7std::__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/6std::__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/8std::__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/3std::__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/2std::__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 |