ts-scikit
Version:
A scientific toolkit written in Typescript
1,422 lines • 158 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.FftPfa = void 0;
const utils_1 = require("../utils");
/**
* A prime-factor (PFA) complex-to-complex FFT.
* <p>
* The FFT length nfft must be composed of mutually prime factors from the
* set { 2, 3, 4, 5, 7, 8, 9, 11, 13, 16 }. This restriction implies n
* cannot exceed 720720 = 5 * 7 * 9 * 11 * 13 * 16.
* <p>
* References:
* <ul><li>
* Temperton, C., 1985, Implementation of a self-sorting in-place prime
* factor fft algorithm: Journal of Computational Physics, v. 58,
* p. 283-299.
* </li><li>
* Temperton, C., 1988, A new set of minimum-add rotated rotated dft
* modules: Journal of Computational Physics, v. 75, p. 190-198.
* </li></ul>
*/
class FftPfa {
/**
* Determines whether the specified FFT length is valid.
* @param nfft the FFT length.
* @returns true, if FFT length is value; false, otherwise.
*/
static IsValidNFFT(nfft) {
return utils_1.binarySearch(this._ntable, nfft) >= 0;
}
/**
* Returns an FFT length optimized for memory.
* <p>
* The FFT length will be the smallest valid length that is not less than
* the specified length n.
* @param n the lower bound on FFT length.
* @returns the FFT length.
*/
static SmallNFFT(n) {
utils_1.Check.argument(n <= 720720, 'n does not exceed 720720');
let i = utils_1.binarySearch(this._ntable, n);
if (i < 0) {
i = -(i + 1);
}
return this._ntable[i];
}
/**
* Returns an FFT length optimized for speed.
* <p>
* The FFT length will be the fastest valid length that is not less than
* the specified length n.
* @param n the lower bound on FFT length.
* @returns the FFT length.
*/
static FastNFFT(n) {
utils_1.Check.argument(n <= 720720, 'n does not exceed 720720');
let ifast = utils_1.binarySearch(this._ntable, n);
if (ifast < 0) {
ifast = -(ifast + 1);
}
let nfast = this._ntable[ifast];
const nstop = 2 * nfast;
let cfast = this._ctable[ifast];
for (let i = ifast + 1; i < this._NTABLE && this._ntable[i] < nstop; i++) {
if (this._ctable[i] < cfast) {
cfast = this._ctable[i];
nfast = this._ntable[i];
}
}
return nfast;
}
/**
* Prime-factor complex-to-complex FFT for 1D arrays.
* @param sign the sign of the exponent in the Fourier transform.
* @param nfft the FFT length.
* @param z array[2*nfft] of nfft packed complex numbers.
*/
static Transform(sign, nfft, z) {
// What is left of n after dividing by factors.
let nleft = nfft;
// Loop over all possible factors, from largest to smallest.
for (let jfac = 0; jfac < this._NFAC; jfac++) {
// Skip the current factor if not a mutually prime factor of n.
const ifac = Math.floor(this._kfac[jfac]);
const ndiv = Math.floor(nleft / ifac);
if (ndiv * ifac !== nleft) {
continue;
}
// What is left of n (nleft), and n divided by the current factor (m).
nleft = ndiv;
const m = Math.floor(nfft / ifac);
// Rotation factor mu and stride mm.
let mu = 0;
let mm = 0;
for (let kfac = 1; kfac <= ifac && mm % ifac !== 1; ++kfac) {
mu = kfac;
mm = kfac * m;
}
if (sign < 0) {
mu = ifac - mu;
}
// Array stride, bound, and indices.
const jinc = 2 * mm;
const jmax = 2 * nfft;
const j0 = 0;
const j1 = j0 + jinc;
// Factor 2.
if (ifac === 2) {
this._pfa2(z, m, j0, j1);
continue;
}
const j2 = (j1 + jinc) % jmax;
// Factor 3.
if (ifac === 3) {
this._pfa3(z, mu, m, j0, j1, j2);
continue;
}
const j3 = (j2 + jinc) % jmax;
// Factor 4.
if (ifac === 4) {
this._pfa4(z, mu, m, j0, j1, j2, j3);
continue;
}
const j4 = (j3 + jinc) % jmax;
// Factor 5.
if (ifac === 5) {
this._pfa5(z, mu, m, j0, j1, j2, j3, j4);
continue;
}
const j5 = (j4 + jinc) % jmax;
const j6 = (j5 + jinc) % jmax;
// Factor 7.
if (ifac === 7) {
this._pfa7(z, mu, m, j0, j1, j2, j3, j4, j5, j6);
continue;
}
const j7 = (j6 + jinc) % jmax;
// Factor 8.
if (ifac === 8) {
this._pfa8(z, mu, m, j0, j1, j2, j3, j4, j5, j6, j7);
continue;
}
const j8 = (j7 + jinc) % jmax;
// Factor 9.
if (ifac === 9) {
this._pfa9(z, mu, m, j0, j1, j2, j3, j4, j5, j6, j7, j8);
continue;
}
const j9 = (j8 + jinc) % jmax;
const j10 = (j9 + jinc) % jmax;
// Factor 11.
if (ifac === 11) {
this._pfa11(z, mu, m, j0, j1, j2, j3, j4, j5, j6, j7, j8, j9, j10);
continue;
}
const j11 = (j10 + jinc) % jmax;
const j12 = (j11 + jinc) % jmax;
// Factor 13.
if (ifac === 13) {
this._pfa13(z, mu, m, j0, j1, j2, j3, j4, j5, j6, j7, j8, j9, j10, j11, j12);
continue;
}
const j13 = (j12 + jinc) % jmax;
const j14 = (j13 + jinc) % jmax;
const j15 = (j14 + jinc) % jmax;
// Factor 16.
if (ifac === 16) {
this._pfa16(z, mu, m, j0, j1, j2, j3, j4, j5, j6, j7, j8, j9, j10, j11, j12, j13, j14, j15);
}
}
}
/**
* Prime-factor complex-to-complex multiple FFT.
* <p>
* Performs multiple transforms across the 2nd (slowest) dimension of a 2-D
* array. In this version, z[0:nfft-1][0,2,4,...] contains the real parts,
* and z[0:nfft-1][1,3,5,...] contains the imaginary parts.
* @param sign the sign of the exponent in the Fourier transform.
* @param n1 the number of transforms (fast dimension).
* @param nfft the FFT length (slow dimension).
* @param z array[nfft][2*n1] of n1*nfft packed complex numbers
*/
static Transform2a(sign, n1, nfft, z) {
// What is left of n after dividing by factors.
let nleft = nfft;
// Loop over all possible factors, from largest to smallest.
for (let jfac = 0; jfac < this._NFAC; ++jfac) {
// Skip the current factor, if not a mutually prime factor of n
const ifac = this._kfac[jfac];
const ndiv = nleft / ifac;
if (ndiv * ifac !== nleft)
continue;
// What is left of n (nleft), and n divided by the current factor (m).
nleft = ndiv;
const m = nfft / ifac;
// Rotation factor mu and stride mm.
let mu = 0;
let mm = 0;
for (let kfac = 1; kfac <= ifac && mm % ifac !== 1; ++kfac) {
mu = kfac;
mm = kfac * m;
}
if (sign < 0)
mu = ifac - mu;
// Array stride, bound, and indices.
const jinc = mm;
const jmax = nfft;
const j0 = 0;
const j1 = j0 + jinc;
// Factor 2.
if (ifac === 2) {
this._pfa2a(n1, z, m, j0, j1);
continue;
}
const j2 = (j1 + jinc) % jmax;
// Factor 3.
if (ifac === 3) {
this._pfa3a(n1, z, mu, m, j0, j1, j2);
continue;
}
const j3 = (j2 + jinc) % jmax;
// Factor 4.
if (ifac === 4) {
this._pfa4a(n1, z, mu, m, j0, j1, j2, j3);
continue;
}
const j4 = (j3 + jinc) % jmax;
// Factor 5.
if (ifac === 5) {
this._pfa5a(n1, z, mu, m, j0, j1, j2, j3, j4);
continue;
}
const j5 = (j4 + jinc) % jmax;
const j6 = (j5 + jinc) % jmax;
// Factor 7.
if (ifac === 7) {
this._pfa7a(n1, z, mu, m, j0, j1, j2, j3, j4, j5, j6);
continue;
}
const j7 = (j6 + jinc) % jmax;
// Factor 8.
if (ifac === 8) {
this._pfa8a(n1, z, mu, m, j0, j1, j2, j3, j4, j5, j6, j7);
continue;
}
const j8 = (j7 + jinc) % jmax;
// Factor 9.
if (ifac === 9) {
this._pfa9a(n1, z, mu, m, j0, j1, j2, j3, j4, j5, j6, j7, j8);
continue;
}
const j9 = (j8 + jinc) % jmax;
const j10 = (j9 + jinc) % jmax;
// Factor 11.
if (ifac === 11) {
this._pfa11a(n1, z, mu, m, j0, j1, j2, j3, j4, j5, j6, j7, j8, j9, j10);
continue;
}
const j11 = (j10 + jinc) % jmax;
const j12 = (j11 + jinc) % jmax;
// Factor 13.
if (ifac === 13) {
this._pfa13a(n1, z, mu, m, j0, j1, j2, j3, j4, j5, j6, j7, j8, j9, j10, j11, j12);
continue;
}
const j13 = (j12 + jinc) % jmax;
const j14 = (j13 + jinc) % jmax;
const j15 = (j14 + jinc) % jmax;
// Factor 16.
if (ifac === 16) {
this._pfa16a(n1, z, mu, m, j0, j1, j2, j3, j4, j5, j6, j7, j8, j9, j10, j11, j12, j13, j14, j15);
}
}
}
/**
* Prime-factor complex-to-complex multiple FFT.
* <p>
* Performs multiple transforms across the 2nd (slowest) dimension of a 2-D
* array. In this version, z[0,2,4,...][0:n1-1] contains the real parts,
* and z[1,3,5,...][0:n1-1] contains the imaginary parts.
* @param sign the sign of the exponent in the Fourier transform.
* @param n1 the number of transforms (fast dimension).
* @param nfft the FFT length (slow dimension).
* @param z array[nfft*2[n1] of nfft*n1 complex numbers.
*/
static Transform2b(sign, n1, nfft, z) {
// What is left of n after dividing by factors.
let nleft = nfft;
// Loop over all possible factors, from largest to smallest.
for (let jfac = 0; jfac < this._NFAC; ++jfac) {
// Skip the current factor, if not a mutually prime factor of n
const ifac = this._kfac[jfac];
const ndiv = nleft / ifac;
if (ndiv * ifac !== nleft)
continue;
// What is left of n (nleft), and n divided by the current factor (m).
nleft = ndiv;
const m = nfft / ifac;
// Rotation factor mu and stride mm.
let mu = 0;
let mm = 0;
for (let kfac = 1; kfac <= ifac && mm % ifac !== 1; ++kfac) {
mu = kfac;
mm = kfac * m;
}
if (sign < 0)
mu = ifac - mu;
// Array stride, bound, and indices.
const jinc = 2 * mm;
const jmax = 2 * nfft;
const j0 = 0;
const j1 = j0 + jinc;
// Factor 2.
if (ifac === 2) {
this._pfa2b(n1, z, m, j0, j1);
continue;
}
const j2 = (j1 + jinc) % jmax;
// Factor 3.
if (ifac === 3) {
this._pfa3b(n1, z, mu, m, j0, j1, j2);
continue;
}
const j3 = (j2 + jinc) % jmax;
// Factor 4.
if (ifac === 4) {
this._pfa4b(n1, z, mu, m, j0, j1, j2, j3);
continue;
}
const j4 = (j3 + jinc) % jmax;
// Factor 5.
if (ifac === 5) {
this._pfa5b(n1, z, mu, m, j0, j1, j2, j3, j4);
continue;
}
const j5 = (j4 + jinc) % jmax;
const j6 = (j5 + jinc) % jmax;
// Factor 7.
if (ifac === 7) {
this._pfa7b(n1, z, mu, m, j0, j1, j2, j3, j4, j5, j6);
continue;
}
const j7 = (j6 + jinc) % jmax;
// Factor 8.
if (ifac === 8) {
this._pfa8b(n1, z, mu, m, j0, j1, j2, j3, j4, j5, j6, j7);
continue;
}
const j8 = (j7 + jinc) % jmax;
// Factor 9.
if (ifac === 9) {
this._pfa9b(n1, z, mu, m, j0, j1, j2, j3, j4, j5, j6, j7, j8);
continue;
}
const j9 = (j8 + jinc) % jmax;
const j10 = (j9 + jinc) % jmax;
// Factor 11.
if (ifac === 11) {
this._pfa11b(n1, z, mu, m, j0, j1, j2, j3, j4, j5, j6, j7, j8, j9, j10);
continue;
}
const j11 = (j10 + jinc) % jmax;
const j12 = (j11 + jinc) % jmax;
// Factor 13.
if (ifac === 13) {
this._pfa13b(n1, z, mu, m, j0, j1, j2, j3, j4, j5, j6, j7, j8, j9, j10, j11, j12);
continue;
}
const j13 = (j12 + jinc) % jmax;
const j14 = (j13 + jinc) % jmax;
const j15 = (j14 + jinc) % jmax;
// Factor 16.
if (ifac === 16) {
this._pfa16b(n1, z, mu, m, j0, j1, j2, j3, j4, j5, j6, j7, j8, j9, j10, j11, j12, j13, j14, j15);
}
}
}
static _pfa2(z, m, j0, j1) {
for (let i = 0; i < m; i++) {
const t1r = z[j0] - z[j1];
const t1i = z[j0 + 1] - z[j1 + 1];
z[j0] = z[j0] + z[j1];
z[j0 + 1] = z[j0 + 1] + z[j1 + 1];
z[j1] = t1r;
z[j1 + 1] = t1i;
const jt = j1 + 2;
j1 = j0 + 2;
j0 = jt;
}
}
static _pfa3(z, mu, m, j0, j1, j2) {
let c1;
if (mu === 1) {
c1 = this._P866;
}
else {
c1 = -this._P866;
}
for (let i = 0; i < m; i++) {
const t1r = z[j1] + z[j2];
const t1i = z[j1 + 1] + z[j2 + 1];
const y1r = z[j0] - 0.5 * t1r;
const y1i = z[j0 + 1] - 0.5 * t1i;
const y2r = c1 * (z[j1] - z[j2]);
const y2i = c1 * (z[j1 + 1] - z[j2 + 1]);
z[j0] = z[j0] + t1r;
z[j0 + 1] = z[j0 + 1] + t1i;
z[j1] = y1r - y2i;
z[j1 + 1] = y1i + y2r;
z[j2] = y1r + y2i;
z[j2 + 1] = y1i - y2r;
const jt = j2 + 2;
j2 = j1 + 2;
j1 = j0 + 2;
j0 = jt;
}
}
static _pfa4(z, mu, m, j0, j1, j2, j3) {
let c1;
if (mu === 1) {
c1 = this._PONE;
}
else {
c1 = -this._PONE;
}
for (let i = 0; i < m; i++) {
const t1r = z[j0] + z[j2];
const t1i = z[j0 + 1] + z[j2 + 1];
const t2r = z[j1] + z[j3];
const t2i = z[j1 + 1] + z[j3 + 1];
const y1r = z[j0] - z[j2];
const y1i = z[j0 + 1] - z[j2 + 1];
const y3r = c1 * (z[j1] - z[j3]);
const y3i = c1 * (z[j1 + 1] - z[j3 + 1]);
z[j0] = t1r + t2r;
z[j0 + 1] = t1i + t2i;
z[j1] = y1r - y3i;
z[j1 + 1] = y1i + y3r;
z[j2] = t1r - t2r;
z[j2 + 1] = t1i - t2i;
z[j3] = y1r + y3i;
z[j3 + 1] = y1i - y3r;
const jt = j3 + 2;
j3 = j2 + 2;
j2 = j1 + 2;
j1 = j0 + 2;
j0 = jt;
}
}
static _pfa5(z, mu, m, j0, j1, j2, j3, j4) {
let c1, c2, c3;
if (mu === 1) {
c1 = this._P559;
c2 = this._P951;
c3 = this._P587;
}
else if (mu === 2) {
c1 = -this._P559;
c2 = this._P587;
c3 = -this._P951;
}
else if (mu === 3) {
c1 = -this._P559;
c2 = -this._P587;
c3 = this._P951;
}
else {
c1 = this._P559;
c2 = -this._P951;
c3 = -this._P587;
}
for (let i = 0; i < m; i++) {
const t1r = z[j1] + z[j4];
const t1i = z[j1 + 1] + z[j4 + 1];
const t2r = z[j2] + z[j3];
const t2i = z[j2 + 1] + z[j3 + 1];
const t3r = z[j1] - z[j4];
const t3i = z[j1 + 1] - z[j4 + 1];
const t4r = z[j2] - z[j3];
const t4i = z[j2 + 1] - z[j3 + 1];
const t5r = t1r + t2r;
const t5i = t1i + t2i;
const t6r = c1 * (t1r - t2r);
const t6i = c1 * (t1i - t2i);
const t7r = z[j0] - 0.25 * t5r;
const t7i = z[j0 + 1] - 0.25 * t5i;
const y1r = t7r + t6r;
const y1i = t7i + t6i;
const y2r = t7r - t6r;
const y2i = t7i - t6i;
const y3r = c3 * t3r - c2 * t4r;
const y3i = c3 * t3i - c2 * t4i;
const y4r = c2 * t3r + c3 * t4r;
const y4i = c2 * t3i + c3 * t4i;
z[j0] = z[j0] + t5r;
z[j0 + 1] = z[j0 + 1] + t5i;
z[j1] = y1r - y4i;
z[j1 + 1] = y1i + y4r;
z[j2] = y2r - y3i;
z[j2 + 1] = y2i + y3r;
z[j3] = y2r + y3i;
z[j3 + 1] = y2i - y3r;
z[j4] = y1r + y4i;
z[j4 + 1] = y1i - y4r;
const jt = j4 + 2;
j4 = j3 + 2;
j3 = j2 + 2;
j2 = j1 + 2;
j1 = j0 + 2;
j0 = jt;
}
}
static _pfa7(z, mu, m, j0, j1, j2, j3, j4, j5, j6) {
let c1, c2, c3, c4, c5, c6;
if (mu === 1) {
c1 = this._P623;
c2 = -this._P222;
c3 = -this._P900;
c4 = this._P781;
c5 = this._P974;
c6 = this._P433;
}
else if (mu === 2) {
c1 = -this._P222;
c2 = -this._P900;
c3 = this._P623;
c4 = this._P974;
c5 = -this._P433;
c6 = -this._P781;
}
else if (mu === 3) {
c1 = -this._P900;
c2 = this._P623;
c3 = -this._P222;
c4 = this._P433;
c5 = -this._P781;
c6 = this._P974;
}
else if (mu === 4) {
c1 = -this._P900;
c2 = this._P623;
c3 = -this._P222;
c4 = -this._P433;
c5 = this._P781;
c6 = -this._P974;
}
else if (mu === 5) {
c1 = -this._P222;
c2 = -this._P900;
c3 = this._P623;
c4 = -this._P974;
c5 = this._P433;
c6 = this._P781;
}
else {
c1 = this._P623;
c2 = -this._P222;
c3 = -this._P900;
c4 = -this._P781;
c5 = -this._P974;
c6 = -this._P433;
}
for (let i = 0; i < m; i++) {
const t1r = z[j1] + z[j6];
const t1i = z[j1 + 1] + z[j6 + 1];
const t2r = z[j2] + z[j5];
const t2i = z[j2 + 1] + z[j5 + 1];
const t3r = z[j3] + z[j4];
const t3i = z[j3 + 1] + z[j4 + 1];
const t4r = z[j1] - z[j6];
const t4i = z[j1 + 1] - z[j6 + 1];
const t5r = z[j2] - z[j5];
const t5i = z[j2 + 1] - z[j5 + 1];
const t6r = z[j3] - z[j4];
const t6i = z[j3 + 1] - z[j4 + 1];
const t7r = z[j0] - 0.5 * t3r;
const t7i = z[j0 + 1] - 0.5 * t3i;
const t8r = t1r - t3r;
const t8i = t1i - t3i;
const t9r = t2r - t3r;
const t9i = t2i - t3i;
const y1r = t7r + c1 * t8r + c2 * t9r;
const y1i = t7i + c1 * t8i + c2 * t9i;
const y2r = t7r + c2 * t8r + c3 * t9r;
const y2i = t7i + c2 * t8i + c3 * t9i;
const y3r = t7r + c3 * t8r + c1 * t9r;
const y3i = t7i + c3 * t8i + c1 * t9i;
const y4r = c6 * t4r - c4 * t5r + c5 * t6r;
const y4i = c6 * t4i - c4 * t5i + c5 * t6i;
const y5r = c5 * t4r - c6 * t5r - c4 * t6r;
const y5i = c5 * t4i - c6 * t5i - c4 * t6i;
const y6r = c4 * t4r + c5 * t5r + c6 * t6r;
const y6i = c4 * t4i + c5 * t5i + c6 * t6i;
z[j0] = z[j0] + t1r + t2r + t3r;
z[j0 + 1] = z[j0 + 1] + t1i + t2i + t3i;
z[j1] = y1r - y6i;
z[j1 + 1] = y1i + y6r;
z[j2] = y2r - y5i;
z[j2 + 1] = y2i + y5r;
z[j3] = y3r - y4i;
z[j3 + 1] = y3i + y4r;
z[j4] = y3r + y4i;
z[j4 + 1] = y3i - y4r;
z[j5] = y2r + y5i;
z[j5 + 1] = y2i - y5r;
z[j6] = y1r + y6i;
z[j6 + 1] = y1i - y6r;
const jt = j6 + 2;
j6 = j5 + 2;
j5 = j4 + 2;
j4 = j3 + 2;
j3 = j2 + 2;
j2 = j1 + 2;
j1 = j0 + 2;
j0 = jt;
}
}
static _pfa8(z, mu, m, j0, j1, j2, j3, j4, j5, j6, j7) {
let c1, c2, c3;
if (mu === 1) {
c1 = this._PONE;
c2 = this._P707;
}
else if (mu === 3) {
c1 = -this._PONE;
c2 = -this._P707;
}
else if (mu === 5) {
c1 = this._PONE;
c2 = -this._P707;
}
else {
c1 = -this._PONE;
c2 = this._P707;
}
c3 = c1 * c2;
for (let i = 0; i < m; i++) {
const t1r = z[j0] + z[j4];
const t1i = z[j0 + 1] + z[j4 + 1];
const t2r = z[j0] - z[j4];
const t2i = z[j0 + 1] - z[j4 + 1];
const t3r = z[j1] + z[j5];
const t3i = z[j1 + 1] + z[j5 + 1];
const t4r = z[j1] - z[j5];
const t4i = z[j1 + 1] - z[j5 + 1];
const t5r = z[j2] + z[j6];
const t5i = z[j2 + 1] + z[j6 + 1];
const t6r = c1 * (z[j2] - z[j6]);
const t6i = c1 * (z[j2 + 1] - z[j6 + 1]);
const t7r = z[j3] + z[j7];
const t7i = z[j3 + 1] + z[j7 + 1];
const t8r = z[j3] - z[j7];
const t8i = z[j3 + 1] - z[j7 + 1];
const t9r = t1r + t5r;
const t9i = t1i + t5i;
const t10r = t3r + t7r;
const t10i = t3i + t7i;
const t11r = c2 * (t4r - t8r);
const t11i = c2 * (t4i - t8i);
const t12r = c3 * (t4r + t8r);
const t12i = c3 * (t4i + t8i);
const y1r = t2r + t11r;
const y1i = t2i + t11i;
const y2r = t1r - t5r;
const y2i = t1i - t5i;
const y3r = t2r - t11r;
const y3i = t2i - t11i;
const y5r = t12r - t6r;
const y5i = t12i - t6i;
const y6r = c1 * (t3r - t7r);
const y6i = c1 * (t3i - t7i);
const y7r = t12r + t6r;
const y7i = t12i + t6i;
z[j0] = t9r + t10r;
z[j0 + 1] = t9i + t10i;
z[j1] = y1r - y7i;
z[j1 + 1] = y1i + y7r;
z[j2] = y2r - y6i;
z[j2 + 1] = y2i + y6r;
z[j3] = y3r - y5i;
z[j3 + 1] = y3i + y5r;
z[j4] = t9r - t10r;
z[j4 + 1] = t9i - t10i;
z[j5] = y3r + y5i;
z[j5 + 1] = y3i - y5r;
z[j6] = y2r + y6i;
z[j6 + 1] = y2i - y6r;
z[j7] = y1r + y7i;
z[j7 + 1] = y1i - y7r;
const jt = j7 + 2;
j7 = j6 + 2;
j6 = j5 + 2;
j5 = j4 + 2;
j4 = j3 + 2;
j3 = j2 + 2;
j2 = j1 + 2;
j1 = j0 + 2;
j0 = jt;
}
}
static _pfa9(z, mu, m, j0, j1, j2, j3, j4, j5, j6, j7, j8) {
let c1, c2, c3, c4, c5, c6, c7, c8, c9;
if (mu === 1) {
c1 = this._P866;
c2 = this._P766;
c3 = this._P642;
c4 = this._P173;
c5 = this._P984;
}
else if (mu === 2) {
c1 = -this._P866;
c2 = this._P173;
c3 = this._P984;
c4 = -this._P939;
c5 = this._P342;
}
else if (mu === 4) {
c1 = this._P866;
c2 = -this._P939;
c3 = this._P342;
c4 = this._P766;
c5 = -this._P642;
}
else if (mu === 5) {
c1 = -this._P866;
c2 = -this._P939;
c3 = -this._P342;
c4 = this._P766;
c5 = this._P642;
}
else if (mu === 7) {
c1 = this._P866;
c2 = this._P173;
c3 = -this._P984;
c4 = -this._P939;
c5 = -this._P342;
}
else {
c1 = -this._P866;
c2 = this._P766;
c3 = -this._P642;
c4 = this._P173;
c5 = -this._P984;
}
c6 = c1 * c2;
c7 = c1 * c3;
c8 = c1 * c4;
c9 = c1 * c5;
for (let i = 0; i < m; i++) {
const t1r = z[j3] + z[j6];
const t1i = z[j3 + 1] + z[j6 + 1];
const t2r = z[j0] - 0.5 * t1r;
const t2i = z[j0 + 1] - 0.5 * t1i;
const t3r = c1 * (z[j3] - z[j6]);
const t3i = c1 * (z[j3 + 1] - z[j6 + 1]);
const t4r = z[j0] + t1r;
const t4i = z[j0 + 1] + t1i;
const t5r = z[j4] + z[j7];
const t5i = z[j4 + 1] + z[j7 + 1];
const t6r = z[j1] - 0.5 * t5r;
const t6i = z[j1 + 1] - 0.5 * t5i;
const t7r = z[j4] - z[j7];
const t7i = z[j4 + 1] - z[j7 + 1];
const t8r = z[j1] + t5r;
const t8i = z[j1 + 1] + t5i;
const t9r = z[j2] + z[j5];
const t9i = z[j2 + 1] + z[j5 + 1];
const t10r = z[j8] - 0.5 * t9r;
const t10i = z[j8 + 1] - 0.5 * t9i;
const t11r = z[j2] - z[j5];
const t11i = z[j2 + 1] - z[j5 + 1];
const t12r = z[j8] + t9r;
const t12i = z[j8 + 1] + t9i;
const t13r = t8r + t12r;
const t13i = t8i + t12i;
const t14r = t6r + t10r;
const t14i = t6i + t10i;
const t15r = t6r - t10r;
const t15i = t6i - t10i;
const t16r = t7r + t11r;
const t16i = t7i + t11i;
const t17r = t7r - t11r;
const t17i = t7i - t11i;
const t18r = c2 * t14r - c7 * t17r;
const t18i = c2 * t14i - c7 * t17i;
const t19r = c4 * t14r + c9 * t17r;
const t19i = c4 * t14i + c9 * t17i;
const t20r = c3 * t15r + c6 * t16r;
const t20i = c3 * t15i + c6 * t16i;
const t21r = c5 * t15r - c8 * t16r;
const t21i = c5 * t15i - c8 * t16i;
const t22r = t18r + t19r;
const t22i = t18i + t19i;
const t23r = t20r - t21r;
const t23i = t20i - t21i;
const y1r = t2r + t18r;
const y1i = t2i + t18i;
const y2r = t2r + t19r;
const y2i = t2i + t19i;
const y3r = t4r - 0.5 * t13r;
const y3i = t4i - 0.5 * t13i;
const y4r = t2r - t22r;
const y4i = t2i - t22i;
const y5r = t3r - t23r;
const y5i = t3i - t23i;
const y6r = c1 * (t8r - t12r);
const y6i = c1 * (t8i - t12i);
const y7r = t21r - t3r;
const y7i = t21i - t3i;
const y8r = t3r + t20r;
const y8i = t3i + t20i;
z[j0] = t4r + t13r;
z[j0 + 1] = t4i + t13i;
z[j1] = y1r - y8i;
z[j1 + 1] = y1i + y8r;
z[j2] = y2r - y7i;
z[j2 + 1] = y2i + y7r;
z[j3] = y3r - y6i;
z[j3 + 1] = y3i + y6r;
z[j4] = y4r - y5i;
z[j4 + 1] = y4i + y5r;
z[j5] = y4r + y5i;
z[j5 + 1] = y4i - y5r;
z[j6] = y3r + y6i;
z[j6 + 1] = y3i - y6r;
z[j7] = y2r + y7i;
z[j7 + 1] = y2i - y7r;
z[j8] = y1r + y8i;
z[j8 + 1] = y1i - y8r;
const jt = j8 + 2;
j8 = j7 + 2;
j7 = j6 + 2;
j6 = j5 + 2;
j5 = j4 + 2;
j4 = j3 + 2;
j3 = j2 + 2;
j2 = j1 + 2;
j1 = j0 + 2;
j0 = jt;
}
}
static _pfa11(z, mu, m, j0, j1, j2, j3, j4, j5, j6, j7, j8, j9, j10) {
let c1, c2, c3, c4, c5, c6, c7, c8, c9, c10;
if (mu === 1) {
c1 = this._P841;
c2 = this._P415;
c3 = -this._P142;
c4 = -this._P654;
c5 = -this._P959;
c6 = this._P540;
c7 = this._P909;
c8 = this._P989;
c9 = this._P755;
c10 = this._P281;
}
else if (mu === 2) {
c1 = this._P415;
c2 = -this._P654;
c3 = -this._P959;
c4 = -this._P142;
c5 = this._P841;
c6 = this._P909;
c7 = this._P755;
c8 = -this._P281;
c9 = -this._P989;
c10 = -this._P540;
}
else if (mu === 3) {
c1 = -this._P142;
c2 = -this._P959;
c3 = this._P415;
c4 = this._P841;
c5 = -this._P654;
c6 = this._P989;
c7 = -this._P281;
c8 = -this._P909;
c9 = this._P540;
c10 = this._P755;
}
else if (mu === 4) {
c1 = -this._P654;
c2 = -this._P142;
c3 = this._P841;
c4 = -this._P959;
c5 = this._P415;
c6 = this._P755;
c7 = -this._P989;
c8 = this._P540;
c9 = this._P281;
c10 = -this._P909;
}
else if (mu === 5) {
c1 = -this._P959;
c2 = this._P841;
c3 = -this._P654;
c4 = this._P415;
c5 = -this._P142;
c6 = this._P281;
c7 = -this._P540;
c8 = this._P755;
c9 = -this._P909;
c10 = this._P989;
}
else if (mu === 6) {
c1 = -this._P959;
c2 = this._P841;
c3 = -this._P654;
c4 = this._P415;
c5 = -this._P142;
c6 = -this._P281;
c7 = this._P540;
c8 = -this._P755;
c9 = this._P909;
c10 = -this._P989;
}
else if (mu === 7) {
c1 = -this._P654;
c2 = -this._P142;
c3 = this._P841;
c4 = -this._P959;
c5 = this._P415;
c6 = -this._P755;
c7 = this._P989;
c8 = -this._P540;
c9 = -this._P281;
c10 = this._P909;
}
else if (mu === 8) {
c1 = -this._P142;
c2 = -this._P959;
c3 = this._P415;
c4 = this._P841;
c5 = -this._P654;
c6 = -this._P989;
c7 = this._P281;
c8 = this._P909;
c9 = -this._P540;
c10 = -this._P755;
}
else if (mu === 9) {
c1 = this._P415;
c2 = -this._P654;
c3 = -this._P959;
c4 = -this._P142;
c5 = this._P841;
c6 = -this._P909;
c7 = -this._P755;
c8 = this._P281;
c9 = this._P989;
c10 = this._P540;
}
else {
c1 = this._P841;
c2 = this._P415;
c3 = -this._P142;
c4 = -this._P654;
c5 = -this._P959;
c6 = -this._P540;
c7 = -this._P909;
c8 = -this._P989;
c9 = -this._P755;
c10 = -this._P281;
}
for (let i = 0; i < m; i++) {
const t1r = z[j1] + z[j10];
const t1i = z[j1 + 1] + z[j10 + 1];
const t2r = z[j2] + z[j9];
const t2i = z[j2 + 1] + z[j9 + 1];
const t3r = z[j3] + z[j8];
const t3i = z[j3 + 1] + z[j8 + 1];
const t4r = z[j4] + z[j7];
const t4i = z[j4 + 1] + z[j7 + 1];
const t5r = z[j5] + z[j6];
const t5i = z[j5 + 1] + z[j6 + 1];
const t6r = z[j1] - z[j10];
const t6i = z[j1 + 1] - z[j10 + 1];
const t7r = z[j2] - z[j9];
const t7i = z[j2 + 1] - z[j9 + 1];
const t8r = z[j3] - z[j8];
const t8i = z[j3 + 1] - z[j8 + 1];
const t9r = z[j4] - z[j7];
const t9i = z[j4 + 1] - z[j7 + 1];
const t10r = z[j5] - z[j6];
const t10i = z[j5 + 1] - z[j6 + 1];
const t11r = z[j0] - 0.5 * t5r;
const t11i = z[j0 + 1] - 0.5 * t5i;
const t12r = t1r - t5r;
const t12i = t1i - t5i;
const t13r = t2r - t5r;
const t13i = t2i - t5i;
const t14r = t3r - t5r;
const t14i = t3i - t5i;
const t15r = t4r - t5r;
const t15i = t4i - t5i;
const y1r = t11r + c1 * t12r + c2 * t13r + c3 * t14r + c4 * t15r;
const y1i = t11i + c1 * t12i + c2 * t13i + c3 * t14i + c4 * t15i;
const y2r = t11r + c2 * t12r + c4 * t13r + c5 * t14r + c3 * t15r;
const y2i = t11i + c2 * t12i + c4 * t13i + c5 * t14i + c3 * t15i;
const y3r = t11r + c3 * t12r + c5 * t13r + c2 * t14r + c1 * t15r;
const y3i = t11i + c3 * t12i + c5 * t13i + c2 * t14i + c1 * t15i;
const y4r = t11r + c4 * t12r + c3 * t13r + c1 * t14r + c5 * t15r;
const y4i = t11i + c4 * t12i + c3 * t13i + c1 * t14i + c5 * t15i;
const y5r = t11r + c5 * t12r + c1 * t13r + c4 * t14r + c2 * t15r;
const y5i = t11i + c5 * t12i + c1 * t13i + c4 * t14i + c2 * t15i;
const y6r = c10 * t6r - c6 * t7r + c9 * t8r - c7 * t9r + c8 * t10r;
const y6i = c10 * t6i - c6 * t7i + c9 * t8i - c7 * t9i + c8 * t10i;
const y7r = c9 * t6r - c8 * t7r + c6 * t8r + c10 * t9r - c7 * t10r;
const y7i = c9 * t6i - c8 * t7i + c6 * t8i + c10 * t9i - c7 * t10i;
const y8r = c8 * t6r - c10 * t7r - c7 * t8r + c6 * t9r + c9 * t10r;
const y8i = c8 * t6i - c10 * t7i - c7 * t8i + c6 * t9i + c9 * t10i;
const y9r = c7 * t6r + c9 * t7r - c10 * t8r - c8 * t9r - c6 * t10r;
const y9i = c7 * t6i + c9 * t7i - c10 * t8i - c8 * t9i - c6 * t10i;
const y10r = c6 * t6r + c7 * t7r + c8 * t8r + c9 * t9r + c10 * t10r;
const y10i = c6 * t6i + c7 * t7i + c8 * t8i + c9 * t9i + c10 * t10i;
z[j0] = z[j0] + t1r + t2r + t3r + t4r + t5r;
z[j0 + 1] = z[j0 + 1] + t1i + t2i + t3i + t4i + t5i;
z[j1] = y1r - y10i;
z[j1 + 1] = y1i + y10r;
z[j2] = y2r - y9i;
z[j2 + 1] = y2i + y9r;
z[j3] = y3r - y8i;
z[j3 + 1] = y3i + y8r;
z[j4] = y4r - y7i;
z[j4 + 1] = y4i + y7r;
z[j5] = y5r - y6i;
z[j5 + 1] = y5i + y6r;
z[j6] = y5r + y6i;
z[j6 + 1] = y5i - y6r;
z[j7] = y4r + y7i;
z[j7 + 1] = y4i - y7r;
z[j8] = y3r + y8i;
z[j8 + 1] = y3i - y8r;
z[j9] = y2r + y9i;
z[j9 + 1] = y2i - y9r;
z[j10] = y1r + y10i;
z[j10 + 1] = y1i - y10r;
const jt = j10 + 2;
j10 = j9 + 2;
j9 = j8 + 2;
j8 = j7 + 2;
j7 = j6 + 2;
j6 = j5 + 2;
j5 = j4 + 2;
j4 = j3 + 2;
j3 = j2 + 2;
j2 = j1 + 2;
j1 = j0 + 2;
j0 = jt;
}
}
static _pfa13(z, mu, m, j0, j1, j2, j3, j4, j5, j6, j7, j8, j9, j10, j11, j12) {
let c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12;
if (mu === 1) {
c1 = this._P885;
c2 = this._P568;
c3 = this._P120;
c4 = -this._P354;
c5 = -this._P748;
c6 = -this._P970;
c7 = this._P464;
c8 = this._P822;
c9 = this._P992;
c10 = this._P935;
c11 = this._P663;
c12 = this._P239;
}
else if (mu === 2) {
c1 = this._P568;
c2 = -this._P354;
c3 = -this._P970;
c4 = -this._P748;
c5 = this._P120;
c6 = this._P885;
c7 = this._P822;
c8 = this._P935;
c9 = this._P239;
c10 = -this._P663;
c11 = -this._P992;
c12 = -this._P464;
}
else if (mu === 3) {
c1 = this._P120;
c2 = -this._P970;
c3 = -this._P354;
c4 = this._P885;
c5 = this._P568;
c6 = -this._P748;
c7 = this._P992;
c8 = this._P239;
c9 = -this._P935;
c10 = -this._P464;
c11 = this._P822;
c12 = this._P663;
}
else if (mu === 4) {
c1 = -this._P354;
c2 = -this._P748;
c3 = this._P885;
c4 = this._P120;
c5 = -this._P970;
c6 = this._P568;
c7 = this._P935;
c8 = -this._P663;
c9 = -this._P464;
c10 = this._P992;
c11 = -this._P239;
c12 = -this._P822;
}
else if (mu === 5) {
c1 = -this._P748;
c2 = this._P120;
c3 = this._P568;
c4 = -this._P970;
c5 = this._P885;
c6 = -this._P354;
c7 = this._P663;
c8 = -this._P992;
c9 = this._P822;
c10 = -this._P239;
c11 = -this._P464;
c12 = this._P935;
}
else if (mu === 6) {
c1 = -this._P970;
c2 = this._P885;
c3 = -this._P748;
c4 = this._P568;
c5 = -this._P354;
c6 = this._P120;
c7 = this._P239;
c8 = -this._P464;
c9 = this._P663;
c10 = -this._P822;
c11 = this._P935;
c12 = -this._P992;
}
else if (mu === 7) {
c1 = -this._P970;
c2 = this._P885;
c3 = -this._P748;
c4 = this._P568;
c5 = -this._P354;
c6 = this._P120;
c7 = -this._P239;
c8 = this._P464;
c9 = -this._P663;
c10 = this._P822;
c11 = -this._P935;
c12 = this._P992;
}
else if (mu === 8) {
c1 = -this._P748;
c2 = this._P120;
c3 = this._P568;
c4 = -this._P970;
c5 = this._P885;
c6 = -this._P354;
c7 = -this._P663;
c8 = this._P992;
c9 = -this._P822;
c10 = this._P239;
c11 = this._P464;
c12 = -this._P935;
}
else if (mu === 9) {
c1 = -this._P354;
c2 = -this._P748;
c3 = this._P885;
c4 = this._P120;
c5 = -this._P970;
c6 = this._P568;
c7 = -this._P935;
c8 = this._P663;
c9 = this._P464;
c10 = -this._P992;
c11 = this._P239;
c12 = this._P822;
}
else if (mu === 10) {
c1 = this._P120;
c2 = -this._P970;
c3 = -this._P354;
c4 = this._P885;
c5 = this._P568;
c6 = -this._P748;
c7 = -this._P992;
c8 = -this._P239;
c9 = this._P935;
c10 = this._P464;
c11 = -this._P822;
c12 = -this._P663;
}
else if (mu === 11) {
c1 = this._P568;
c2 = -this._P354;
c3 = -this._P970;
c4 = -this._P748;
c5 = this._P120;
c6 = this._P885;
c7 = -this._P822;
c8 = -this._P935;
c9 = -this._P239;
c10 = this._P663;
c11 = this._P992;
c12 = this._P464;
}
else {
c1 = this._P885;
c2 = this._P568;
c3 = this._P120;
c4 = -this._P354;
c5 = -this._P748;
c6 = -this._P970;
c7 = -this._P464;
c8 = -this._P822;
c9 = -this._P992;
c10 = -this._P935;
c11 = -this._P663;
c12 = -this._P239;
}
for (let i = 0; i < m; i++) {
const t1r = z[j1] + z[j12];
const t1i = z[j1 + 1] + z[j12 + 1];
const t2r = z[j2] + z[j11];
const t2i = z[j2 + 1] + z[j11 + 1];
const t3r = z[j3] + z[j10];
const t3i = z[j3 + 1] + z[j10 + 1];
const t4r = z[j4] + z[j9];
const t4i = z[j4 + 1] + z[j9 + 1];
const t5r = z[j5] + z[j8];
const t5i = z[j5 + 1] + z[j8 + 1];
const t6r = z[j6] + z[j7];
const t6i = z[j6 + 1] + z[j7 + 1];
const t7r = z[j1] - z[j12];
const t7i = z[j1 + 1] - z[j12 + 1];
const t8r = z[j2] - z[j11];
const t8i = z[j2 + 1] - z[j11 + 1];
const t9r = z[j3] - z[j10];
const t9i = z[j3 + 1] - z[j10 + 1];
const t10r = z[j4] - z[j9];
const t10i = z[j4 + 1] - z[j9 + 1];
const t11r = z[j5] - z[j8];
const t11i = z[j5 + 1] - z[j8 + 1];
const t12r = z[j6] - z[j7];
const t12i = z[j6 + 1] - z[j7 + 1];
const t13r = z[j0] - 0.5 * t6r;
const t13i = z[j0 + 1] - 0.5 * t6i;
const t14r = t1r - t6r;
const t14i = t1i - t6i;
const t15r = t2r - t6r;
const t15i = t2i - t6i;
const t16r = t3r - t6r;
const t16i = t3i - t6i;
const t17r = t4r - t6r;
const t17i = t4i - t6i;
const t18r = t5r - t6r;
const t18i = t5i - t6i;
const y1r = t13r + c1 * t14r + c2 * t15r + c3 * t16r + c4 * t17r + c5 * t18r;
const y1i = t13i + c1 * t14i + c2 * t15i + c3 * t16i + c4 * t17i + c5 * t18i;
const y2r = t13r + c2 * t14r + c4 * t15r + c6 * t16r + c5 * t17r + c3 * t18r;
const y2i = t13i + c2 * t14i + c4 * t15i + c6 * t16i + c5 * t17i + c3 * t18i;
const y3r = t13r + c3 * t14r + c6 * t15r + c4 * t16r + c1 * t17r + c2 * t18r;
const y3i = t13i + c3 * t14i + c6 * t15i + c4 * t16i + c1 * t17i + c2 * t18i;
const y4r = t13r + c4 * t14r + c5 * t15r + c1 * t16r + c3 * t17r + c6 * t18r;
const y4i = t13i + c4 * t14i + c5 * t15i + c1 * t16i + c3 * t17i + c6 * t18i;
const y5r = t13r + c5 * t14r + c3 * t15r + c2 * t16r + c6 * t17r + c1 * t18r;
const y5i = t13i + c5 * t14i + c3 * t15i + c2 * t16i + c6 * t17i + c1 * t18i;
const y6r = t13r + c6 * t14r + c1 * t15r + c5 * t16r + c2 * t17r + c4 * t18r;
const y6i = t13i + c6 * t14i + c1 * t15i + c5 * t16i + c2 * t17i + c4 * t18i;
const y7r = c12 * t7r - c7 * t8r + c11 * t9r - c8 * t10r + c10 * t11r - c9 * t12r;
const y7i = c12 * t7i - c7 * t8i + c11 * t9i - c8 * t10i + c10 * t11i - c9 * t12i;
const y8r = c11 * t7r - c9 * t8r + c8 * t9r - c12 * t10r - c7 * t11r + c10 * t12r;
const y8i = c11 * t7i - c9 * t8i + c8 * t9i - c12 * t10i - c7 * t11i + c10 * t12i;
const y9r = c10 * t7r - c11 * t8r - c7 * t9r + c9 * t10r - c12 * t11r - c8 * t12r;
const y9i = c10 * t7i - c11 * t8i - c7 * t9i + c9 * t10i - c12 * t11i - c8 * t12i;
const y10r = c9 * t7r + c12 * t8r - c10 * t9r - c7 * t10r + c8 * t11r + c11 * t12r;
const y10i = c9 * t7i + c12 * t8i - c10 * t9i - c7 * t10i + c8 * t11i + c11 * t12i;
const y11r = c8 * t7r + c10 * t8r + c12 * t9r - c11 * t10r - c9 * t11r - c7 * t12r;
const y11i = c8 * t7i + c10 * t8i + c12 * t9i - c11 * t10i - c9 * t11i - c7 * t12i;
const y12r = c7 * t7r + c8 * t8r + c9 * t9r + c10 * t10r + c11 * t11r + c12 * t12r;
const y12i = c7 * t7i + c8 * t8i + c9 * t9i + c10 * t10i + c11 * t11i + c12 * t12i;
z[j0] = z[j0] + t1r + t2r + t3r + t4r + t5r + t6r;
z[j0 + 1] = z[j0 + 1] + t1i + t2i + t3i + t4i + t5i + t6i;
z[j1] = y1r - y12i;
z[j1 + 1] = y1i + y12r;
z[j2] = y2r - y11i;
z[j2 + 1] = y2i + y11r;
z[j3] = y3r - y10i;
z[j3 + 1] = y3i + y10r;
z[j4] = y4r - y9i;
z[j4 + 1] = y4i + y9r;
z[j5] = y5r - y8i;
z[j5 + 1] = y5i + y8r;
z[j6] = y6r - y7i;
z[j6 + 1] = y6i + y7r;
z[j7] = y6r + y7i;
z[j7 + 1] = y6i - y7r;
z[j8] = y5r + y8i;
z[j8 + 1] = y5i - y8r;
z[j9] = y4r + y9i;
z[j9 + 1] = y4i - y9r;
z[j10] = y3r + y10i;
z[j10 + 1] = y3i - y10r;
z[j11] = y2r + y11i;
z[j11 + 1] = y2i - y11r;
z[j12] = y1r + y12i;
z[j12 + 1] = y1i - y12r;
const jt = j12 + 2;
j12 = j11 + 2;
j11 = j10 + 2;
j10 = j9 + 2;
j9 = j8 + 2;
j8 = j7 + 2;
j7 = j6 + 2;
j6 = j5 + 2;
j5 = j4 + 2;
j4 = j3 + 2;
j3 = j2 + 2;
j2 = j1 + 2;
j1 = j0 + 2;
j0 = jt;
}
}
static _pfa16(z, mu, m, j0, j1, j2, j3, j4, j5, j6, j7, j8, j9, j10, j11, j12, j13, j14, j15) {
let c1, c2, c3, c4, c5, c6, c7;
if (mu === 1) {
c1 = this._PONE;
c2 = this._P923;
c3 = this._P382;
c4 = this._P707;
}
else if (mu === 3) {
c1 = -this._PONE;
c2 = this._P382;
c3 = this._P923;
c4 = -this._P707;
}
else if (mu === 5) {
c1 = this._PONE;
c2 = -this._P382;
c3 = this._P923;
c4 = -this._P707;
}
else if (mu === 7) {
c1 = -this._PONE;
c2 = -this._P923;
c3 = this._P382;
c4 = this._P707;
}
else if (mu === 9) {
c1 = this._PONE;
c2 = -this._P923;
c3 = -this._P382;
c4 = this._P707;
}
else if (mu === 11) {
c1 = -this._PONE;
c2 = -this._P382;
c3 = -this._P923;
c4 = -this._P707;
}
else if (mu === 13) {
c1 = this._PONE;
c2 = this._P382;
c3 = -this._P923;
c4 = -this._P707;
}
else {
c1 = -this._PONE;
c2 = this._P923;
c3 = -this._P382;
c4 = this._P707;
}
c5 = c1 * c4;
c6 = c1 * c3;
c7 = c1 * c2;
for (let i = 0; i < m; i++) {
const t1r = z[j0] + z[j8];
const t1i = z[j0 + 1] + z[j8 + 1];
const t2r = z[j4] + z[j12];
const t2i = z[j4 + 1] + z[j12 + 1];
const t3r = z[j0] - z[j8];
const t3i = z[j0 + 1] - z[j8 + 1];
const t4r = c1 * (z[j4] - z[j12]);
const t4i = c1 * (z[j4 + 1] - z[j12 + 1]);
const t5r = t1r + t2r;
const t5i = t1i + t2i;
const t6r = t1r - t2r;
const t6i = t1i - t2i;
const t7r = z[j1] + z[j9];
const t7i = z[j1 + 1] + z[j9 + 1];
const t8r = z[j5] + z[j13];
const t8i = z[j5 + 1] + z[j13 + 1];
const t9r = z[j1] - z[j9];
const t9i = z[j1 + 1] - z[j9 + 1];
const t10r = z[j5] - z[j13];
const t10i = z[j5 + 1] - z[j13 + 1];
const t11r = t7r + t8r;
const t11i = t7i + t8i;
const t12r = t7r - t8r;
const t12i = t7i - t8i;
const t13r = z[j2] + z[j10];
const t13i = z[j2 + 1] + z[j10 + 1];
const t14r = z[j6] + z[j14];
const t14i = z[j6 + 1] + z[j14 + 1];
const t15r = z[j2] - z[j10];
const t15i = z[j2 + 1] - z[j10 + 1];
const t16r = z[j6] - z[j14];
const t16i = z[j6 + 1] - z[j14 + 1];
const t17r = t13r + t14r;
const t17i = t13i + t14i;
const t18r = c4 * (t15r - t16r);
const t18i = c4 * (t15i - t16i);
const t19r = c5 * (t15r + t16r);
const t19i = c5 * (t15i + t16i);
const t20r = c1 * (t13r - t14r);
const t20i = c1 * (t13i - t14i);
const t21r = z[j3] + z[j11];
const t21i = z[j3 + 1] + z[j11 + 1];
const t22r = z[j7] + z[j15];
const t22i = z[j7 + 1] + z[j15 + 1];
const t23r = z[j3] -