diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/lib/c1_ref.js b/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/lib/c1_ref.js
new file mode 100644
index 000000000000..942378815633
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/lib/c1_ref.js
@@ -0,0 +1,81 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+'use strict';
+
+// MAIN //
+
+/**
+* Computes an index into the intermediate array `c1`.
+*
+* @private
+* @param {NonNegativeInteger} a1 - index of first dimension
+* @param {NonNegativeInteger} a2 - index of second dimension
+* @param {NonNegativeInteger} a3 - index of third dimension
+* @param {NonNegativeInteger} l1 - length parameter related to the FFT stage
+* @param {NonNegativeInteger} ido - dimension order
+* @returns {NonNegativeInteger} computed index
+*/
+function c1Ref( a1, a2, a3, l1, ido ) {
+ return ( ( (a3*l1)+a2 ) * ido ) + a1;
+}
+
+
+// EXPORTS //
+
+module.exports = c1Ref;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/lib/c2_ref.js b/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/lib/c2_ref.js
new file mode 100644
index 000000000000..3b4910a3f245
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/lib/c2_ref.js
@@ -0,0 +1,79 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+'use strict';
+
+// MAIN //
+
+/**
+* Computes an index into the intermediate array `c2`.
+*
+* @private
+* @param {NonNegativeInteger} a1 - index of first dimension
+* @param {NonNegativeInteger} a2 - index of second dimension
+* @param {integer} idl1 - stride related to the `l1` parameter
+* @returns {NonNegativeInteger} computed index
+*/
+function c2Ref( a1, a2, idl1 ) {
+ return ( a2*idl1 ) + a1;
+}
+
+
+// EXPORTS //
+
+module.exports = c2Ref;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/lib/cc_ref.js b/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/lib/cc_ref.js
new file mode 100644
index 000000000000..c9491438a35c
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/lib/cc_ref.js
@@ -0,0 +1,85 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+'use strict';
+
+// MAIN //
+
+/**
+* Computes an index into an input array `cc` containing complex-valued data.
+*
+* @private
+* @param {NonNegativeInteger} a1 - index of first dimension
+* @param {NonNegativeInteger} a2 - index of second dimension
+* @param {NonNegativeInteger} a3 - index of third dimension
+* @param {NonNegativeInteger} ip - number of sub-steps or prime factors in the FFT
+* @param {NonNegativeInteger} ido - dimension order
+* @returns {NonNegativeInteger} computed index
+*
+* @example
+* var out = ccRef( 3, 2, 1, 2, 2 );
+* // returns 11
+*/
+function ccRef( a1, a2, a3, ip, ido ) {
+ return ( ( (a3*ip)+a2 ) * ido ) + a1;
+}
+
+
+// EXPORTS //
+
+module.exports = ccRef;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/lib/cfftb1.js b/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/lib/cfftb1.js
new file mode 100644
index 000000000000..a7ce90d39890
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/lib/cfftb1.js
@@ -0,0 +1,166 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+/* eslint-disable max-len */
+
+'use strict';
+
+// MODULES //
+
+var floor = require( '@stdlib/math/base/special/floor' );
+var passb4 = require( './passb4.js' );
+var passb2 = require( './passb2.js' );
+var passb3 = require( './passb3.js' );
+var passfb5 = require( './passfb5.js' );
+var passfb = require( './passfb.js' );
+
+
+// MAIN //
+
+/**
+* Performs the backward complex Fourier transform (i.e., the Fourier synthesis).
+*
+* @private
+* @param {number} N - length of the sequence to transform
+* @param {Float64Array} c - real-valued input array containing interleaved real and imaginary components corresponding to the sequence to be transformed
+* @param {NonNegativeInteger} cOffset - starting index for `c`
+* @param {Float64Array} ch - workspace array for storing intermediate results
+* @param {NonNegativeInteger} chOffset - starting index for `ch`
+* @param {Float64Array} wa - workspace array for storing twiddle factors
+* @param {NonNegativeInteger} waOffset - starting index for `wa`
+* @param {Int32Array} ifac - workspace array for storing factorization results
+* @param {NonNegativeInteger} ifacOffset - starting index for `ifac`
+* @returns {void}
+*/
+function cfftb1( N, c, cOffset, ch, chOffset, wa, waOffset, ifac, ifacOffset ) {
+ var idl1;
+ var idot;
+ var ix2;
+ var ix3;
+ var ix4;
+ var nac;
+ var ido;
+ var k1;
+ var l1;
+ var l2;
+ var na;
+ var nf;
+ var ip;
+ var iw;
+ var i;
+
+ nf = ifac[ ifacOffset+1 ];
+ na = 0;
+ l1 = 1;
+ iw = 0;
+ for ( k1 = 1; k1 <= nf; k1++ ) {
+ ip = ifac[ ifacOffset+k1+1 ];
+ l2 = ip * l1;
+ ido = floor( N / l2 );
+ idot = ido + ido;
+ idl1 = idot * l1;
+ switch ( ip ) {
+ case 4:
+ ix2 = iw + idot;
+ ix3 = ix2 + idot;
+ passb4( idot, l1, ( na ) ? ch : c, ( na ) ? chOffset : cOffset, ( na ) ? c : ch, ( na ) ? cOffset : chOffset, wa, iw+waOffset, wa, ix2+waOffset, wa, ix3+waOffset );
+ na = 1 - na;
+ break;
+ case 2:
+ passb2( idot, l1, ( na ) ? ch : c, ( na ) ? chOffset : cOffset, ( na ) ? c : ch, ( na ) ? cOffset : chOffset, wa, iw+waOffset );
+ na = 1 - na;
+ break;
+ case 3:
+ ix2 = iw + idot;
+ passb3( idot, l1, ( na ) ? ch : c, ( na ) ? chOffset : cOffset, ( na ) ? c : ch, ( na ) ? cOffset : chOffset, wa, iw+waOffset, wa, ix2+waOffset );
+ na = 1 - na;
+ break;
+ case 5:
+ ix2 = iw + idot;
+ ix3 = ix2 + idot;
+ ix4 = ix3 + idot;
+ passfb5( idot, l1, ( na ) ? ch : c, ( na ) ? chOffset : cOffset, ( na ) ? c : ch, ( na ) ? cOffset : chOffset, wa, iw+waOffset, wa, ix2+waOffset, wa, ix3+waOffset, wa, ix4+waOffset, 1 );
+ na = 1 - na;
+ break;
+ default:
+ if ( na === 0 ) {
+ passfb( nac, idot, ip, l1, idl1, c, cOffset, c, cOffset, c, cOffset, ch, chOffset, ch, chOffset, wa, iw+waOffset, 1 );
+ } else {
+ passfb( nac, idot, ip, l1, idl1, ch, chOffset, ch, chOffset, ch, chOffset, c, cOffset, c, cOffset, wa, iw+waOffset, 1 );
+ }
+ if ( nac !== 0 ) {
+ na = 1 - na;
+ }
+ break;
+ }
+ l1 = l2;
+ iw += ( ip-1 ) * idot;
+ }
+ if ( na === 0 ) {
+ return;
+ }
+ // Now that we've finished computing the transforms, copy over the final results to the input array...
+ for ( i = 0; i < N*2; i++ ) {
+ c[ i+cOffset ] = ch[ i+chOffset ]; // FIXME: use `blas/base/dcopy`
+ }
+}
+
+
+// EXPORTS //
+
+module.exports = cfftb1;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/lib/ch2_ref.js b/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/lib/ch2_ref.js
new file mode 100644
index 000000000000..b53f3d8579d4
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/lib/ch2_ref.js
@@ -0,0 +1,79 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+'use strict';
+
+// MAIN //
+
+/**
+* Computes an index into an output array `ch2` for storing processed FFT data.
+*
+* @private
+* @param {NonNegativeInteger} a1 - index of first dimension
+* @param {NonNegativeInteger} a2 - index of second dimension
+* @param {integer} idl1 - stride related to the `l1` parameter
+* @returns {NonNegativeInteger} computed index
+*/
+function ch2Ref( a1, a2, idl1 ) {
+ return ( a2*idl1 ) + a1;
+}
+
+
+// EXPORTS //
+
+module.exports = ch2Ref;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/lib/ch_ref.js b/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/lib/ch_ref.js
new file mode 100644
index 000000000000..1e4de83a80f1
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/lib/ch_ref.js
@@ -0,0 +1,81 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+'use strict';
+
+// MAIN //
+
+/**
+* Computes an index into an output array `ch` for storing processed FFT data.
+*
+* @private
+* @param {NonNegativeInteger} a1 - index of first dimension
+* @param {NonNegativeInteger} a2 - index of second dimension
+* @param {NonNegativeInteger} a3 - index of third dimension
+* @param {NonNegativeInteger} radix - length parameter related to the FFT stage
+* @param {NonNegativeInteger} ido - dimension order
+* @returns {NonNegativeInteger} - calculated index
+*/
+function chRef( a1, a2, a3, radix, ido ) {
+ return ( ( (a3*radix)+a2 ) * ido ) + a1;
+}
+
+
+// EXPORTS //
+
+module.exports = chRef;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/lib/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/lib/index.js
new file mode 100644
index 000000000000..3699b745e746
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/lib/index.js
@@ -0,0 +1,39 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+'use strict';
+
+/**
+* TODO: description.
+*
+* @module @stdlib/fft/base/fftpack/cfftb
+*
+* @example
+* var cfftb = require( '@stdlib/fft/base/fftpack/cfftb' );
+*
+* // TODO
+*/
+
+// MODULES //
+
+var main = require( './main.js' );
+
+
+// EXPORTS //
+
+module.exports = main;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/lib/main.js b/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/lib/main.js
new file mode 100644
index 000000000000..ec2d606855a5
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/lib/main.js
@@ -0,0 +1,127 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+'use strict';
+
+// MODULES //
+
+var cfftb1 = require( './cfftb1.js' );
+
+
+// MAIN //
+
+/**
+* Performs the backward complex Fourier transform (i.e., the Fourier synthesis).
+*
+* ## Notes
+*
+* - This function computes a complex periodic sequence from its Fourier coefficients.
+*
+* - Invoking `cfftf` prior to invoking this function will multiply an input sequence by `N`.
+*
+* - Prior to invoking this function, `workspace` must be initialized by calling `cffti(N, workspace)`.
+*
+* - This function is more efficient when `N` is the product of small prime numbers.
+*
+* - A provided workspace array must have at least `4N+15` elements.
+*
+* - Different workspace arrays must be used for each different value of `N`.
+*
+* - The workspace array does **not** require re-initialization between subsequent transforms as long as `N` remains the same. Hence, subsequent transforms can be performed faster than the first by avoiding repeated initialization.
+*
+* - The same workspace array can be used by both `cfftf` and `cfftb`.
+*
+* - The initialization calculations stored in a workspace must **not** be destroyed between calls of `cfftf` and `cfftb`.
+*
+* - This function mutates the input array `c`. For `j = 0, ..., N-1`,
+*
+* ```tex
+* c_j = \sum_{k=0}^{N-1} c_k \cdot e^{\frac{2\pi}{N} \cdot ijk}
+* ```
+*
+* where `i = sqrt(-1)`.
+*
+* @param {NonNegativeInteger} N - length of the sequence to transform
+* @param {Float64Array} c - real-valued input array containing interleaved real and imaginary components corresponding to the sequence to be transformed
+* @param {NonNegativeInteger} offsetC - starting index for `c`
+* @param {Float64Array} workspace - real-valued workspace array containing pre-computed values
+* @param {NonNegativeInteger} offsetW - starting index for `workspace`
+* @returns {void}
+*
+* @example
+* // TODO
+*/
+function cfftb( N, c, offsetC, workspace, offsetW ) {
+ var offsetT;
+ var offsetF;
+
+ // When a sub-sequence is a single data point, the FFT is the identity, so no transformation necessary...
+ if ( N <= 1 ) {
+ return;
+ }
+ // Resolve the starting indices for storing twiddle factors and factorization results:
+ offsetT = offsetW + ( 2*N ); // index offset for twiddle factors
+ offsetF = offsetT + ( 2*N ); // index offset for factors describing the sub-transforms
+
+ cfftb1( N, c, offsetC, workspace, offsetW, workspace, offsetT, workspace, offsetF ); // eslint-disable-line max-len
+}
+
+
+// EXPORTS //
+
+module.exports = cfftb;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/lib/passb2.js b/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/lib/passb2.js
new file mode 100644
index 000000000000..753412c594f7
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/lib/passb2.js
@@ -0,0 +1,121 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+/* eslint-disable max-len */
+
+'use strict';
+
+// MODULES //
+
+var chRef = require( './ch_ref.js' );
+var ccRef = require( './cc_ref.js' );
+
+
+// MAIN //
+
+/**
+* Performs a pass of length 2 of the FFT algorithm.
+*
+* @private
+* @param {number} ido - number of real values for each transform
+* @param {number} l1 - length of the input sequences
+* @param {Float64Array} cc - input array containing sequences to be transformed
+* @param {number} ccOffset - index of first element in `cc`
+* @param {Float64Array} ch - output array containing transformed sequences
+* @param {number} chOffset - index of first element in `ch`
+* @param {Float64Array} wa1 - array of twiddle factors
+* @param {number} wa1Offset - index of first element in `wa1`
+* @returns {void}
+*/
+function passb2( ido, l1, cc, ccOffset, ch, chOffset, wa1, wa1Offset ) {
+ var ti2;
+ var tr2;
+ var i;
+ var k;
+
+ // Parameter adjustments...
+ chOffset -= 1 + ( ido * ( 1 + l1 ) );
+ ccOffset -= 1 + ( ido * 3 );
+ wa1Offset -= 1;
+
+ // Function body:
+ if ( ido <= 2 ) {
+ for ( k = 1; k <= l1; k++ ) {
+ ch[ chRef( 1, k, 1, l1, ido ) + chOffset ] = cc[ ccRef( 1, 1, k, 2, ido ) + ccOffset ] + cc[ ccRef( 1, 2, k, 2, ido ) + ccOffset ];
+ ch[ chRef( 1, k, 2, l1, ido ) + chOffset ] = cc[ ccRef( 1, 1, k, 2, ido ) + ccOffset ] - cc[ ccRef( 1, 2, k, 2, ido ) + ccOffset ];
+ ch[ chRef( 2, k, 1, l1, ido ) + chOffset ] = cc[ ccRef( 2, 1, k, 2, ido ) + ccOffset ] + cc[ ccRef( 2, 2, k, 2, ido ) + ccOffset ];
+ ch[ chRef( 2, k, 2, l1, ido ) + chOffset ] = cc[ ccRef( 2, 1, k, 2, ido ) + ccOffset ] - cc[ ccRef( 2, 2, k, 2, ido ) + ccOffset ];
+ }
+ return;
+ }
+ for ( k = 1; k <= l1; k++ ) {
+ for ( i = 2; i <= ido; i += 2 ) {
+ ch[ chRef( i - 1, k, 1, l1, ido ) + chOffset ] = cc[ ccRef( i - 1, 1, k, 2, ido ) + ccOffset ] + cc[ ccRef( i - 1, 2, k, 2, ido ) + ccOffset ];
+ tr2 = cc[ ccRef( i - 1, 1, k, 2, ido ) + ccOffset ] - cc[ ccRef( i - 1, 2, k, 2, ido ) + ccOffset ];
+ ch[ chRef( i, k, 1, l1, ido ) + chOffset ] = cc[ ccRef( i, 1, k, 2, ido ) + ccOffset ] + cc[ ccRef( i, 2, k, 2, ido ) + ccOffset ];
+ ti2 = cc[ ccRef( i, 1, k, 2, ido ) + ccOffset ] - cc[ ccRef( i, 2, k, 2, ido ) + ccOffset ];
+ ch[ chRef( i, k, 2, l1, ido ) + chOffset ] = ( wa1[ wa1Offset + i - 1 ] * ti2 ) - ( wa1[ wa1Offset + i ] * tr2 );
+ ch[ chRef( i - 1, k, 2, l1, ido ) + chOffset ] = ( wa1[ wa1Offset + i - 1 ] * tr2 ) + ( wa1[ wa1Offset + i ] * ti2 );
+ }
+ }
+}
+
+
+// EXPORTS //
+
+module.exports = passb2;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/lib/passb3.js b/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/lib/passb3.js
new file mode 100644
index 000000000000..2f5ac687b363
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/lib/passb3.js
@@ -0,0 +1,159 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+/* eslint-disable max-len */
+
+'use strict';
+
+// MODULES //
+
+var sincos = require( '@stdlib/math/base/special/sincos' );
+var TWO_PI = require( '@stdlib/constants/float64/two-pi' );
+var chRef = require( './ch_ref.js' );
+var ccRef = require( './cc_ref.js' );
+
+
+// VARIABLES //
+
+var sc = sincos( ( 2 * TWO_PI ) / 3 );
+var taur = sc[ 1 ]; // -0.5
+var taui = -sc[ 0 ]; // -0.866025403784439
+
+
+// MAIN //
+
+/**
+* Performs a pass of length 3 of the FFT algorithm.
+*
+* @private
+* @param {number} ido - number of real values for each transform
+* @param {number} l1 - length of the input sequences
+* @param {Float64Array} cc - input array containing sequences to be transformed
+* @param {number} ccOffset - offset for the input array
+* @param {Float64Array} ch - output array containing transformed sequences
+* @param {number} chOffset - offset for the output array
+* @param {Float64Array} wa1 - first array of twiddle factors
+* @param {number} wa1Offset - offset for the first twiddle factors array
+* @param {Float64Array} wa2 - second array of twiddle factors
+* @param {number} wa2Offset - offset for the second twiddle factors array
+* @returns {void}
+*/
+function passb3( ido, l1, cc, ccOffset, ch, chOffset, wa1, wa1Offset, wa2, wa2Offset ) {
+ var ci2;
+ var ci3;
+ var di2;
+ var di3;
+ var cr2;
+ var cr3;
+ var dr2;
+ var dr3;
+ var ti2;
+ var tr2;
+ var i;
+ var k;
+
+ // Parameter adjustments...
+ chOffset -= 1 + ( ido * ( 1 + l1 ) );
+ ccOffset -= 1 + ( ido << 2 );
+ wa1Offset -= 1;
+ wa2Offset -= 1;
+
+ // Function body:
+ if ( ido === 2 ) {
+ for ( k = 1; k <= l1; k++ ) {
+ tr2 = cc[ ccRef( 1, 2, k, 3, ido ) + ccOffset ] + cc[ ccRef( 1, 3, k, 3, ido ) + ccOffset ];
+ cr2 = cc[ ccRef( 1, 1, k, 3, ido ) + ccOffset ] + ( taur * tr2 );
+ ch[ chRef( 1, k, 1, l1, ido ) + chOffset ] = cc[ ccRef( 1, 1, k, 3, ido ) + ccOffset ] + tr2;
+ ti2 = cc[ ccRef( 2, 2, k, 3, ido ) + ccOffset ] + cc[ ccRef( 2, 3, k, 3, ido ) + ccOffset ];
+ ci2 = cc[ ccRef( 2, 1, k, 3, ido ) + ccOffset ] + ( taur * ti2 );
+ ch[ chRef( 2, k, 1, l1, ido ) + chOffset ] = cc[ ccRef( 2, 1, k, 3, ido ) + ccOffset ] + ti2;
+ cr3 = taui * ( cc[ ccRef( 1, 2, k, 3, ido ) + ccOffset ] - cc[ ccRef( 1, 3, k, 3, ido ) + ccOffset ] );
+ ci3 = taui * ( cc[ ccRef( 2, 2, k, 3, ido ) + ccOffset ] - cc[ ccRef( 2, 3, k, 3, ido ) + ccOffset ] );
+ ch[ chRef( 1, k, 2, l1, ido ) + chOffset ] = cr2 - ci3;
+ ch[ chRef( 1, k, 3, l1, ido ) + chOffset ] = cr2 + ci3;
+ ch[ chRef( 2, k, 2, l1, ido ) + chOffset ] = ci2 + ci3;
+ ch[ chRef( 2, k, 3, l1, ido ) + chOffset ] = ci2 - cr3;
+ }
+ return;
+ }
+ for ( k = 1; k <= l1; k++ ) {
+ for ( i = 2; i <= ido; i += 2 ) {
+ tr2 = cc[ ccRef( i - 1, 2, k, 3, ido ) + ccOffset ] + cc[ ccRef( i - 1, 3, k, 3, ido ) + ccOffset ];
+ cr2 = cc[ ccRef( i - 1, 1, k, 3, ido ) + ccOffset ] + ( taur * tr2 );
+ ch[ chRef( i - 1, k, 1, l1, ido ) + chOffset ] = cc[ ccRef( i - 1, 1, k, 3, ido ) + ccOffset ] + tr2;
+ ti2 = cc[ ccRef( i, 2, k, 3, ido ) + ccOffset ] + cc[ ccRef( i, 3, k, 3, ido ) + ccOffset ];
+ ci2 = cc[ ccRef( i, 1, k, 3, ido ) + ccOffset ] + ( taur * ti2 );
+ ch[ chRef( i, k, 1, l1, ido ) + chOffset ] = cc[ ccRef( i, 1, k, 3, ido ) + ccOffset ] + ti2;
+ cr3 = taui * ( cc[ ccRef( i - 1, 2, k, 3, ido ) + ccOffset ] - cc[ ccRef( i - 1, 3, k, 3, ido ) + ccOffset ] );
+ ci3 = taui * ( cc[ ccRef( i, 2, k, 3, ido ) + ccOffset ] - cc[ ccRef( i, 3, k, 3, ido ) + ccOffset ] );
+ dr2 = cr2 - ci3;
+ dr3 = cr2 + ci3;
+ di2 = ci2 + ci3;
+ di3 = ci2 - cr3;
+ ch[ chRef( i, k, 2, l1, ido) + chOffset ] = ( wa1[ i - 1 + wa1Offset ] * di2 ) + ( wa1[ i + wa1Offset ] * dr2 );
+ ch[ chRef( i - 1, k, 2, l1, ido) + chOffset ] = ( wa1[ i - 1 + wa1Offset ] * dr2 ) - ( wa1[ i + wa1Offset ] * di2 );
+ ch[ chRef( i, k, 3, l1, ido) + chOffset ] = ( wa2[ i - 1 + wa2Offset ] * dr3 ) - ( wa2[ i + wa2Offset ] * di3 );
+ ch[ chRef( i - 1, k, 3, l1, ido) + chOffset ] = ( wa2[ i - 1 + wa2Offset ] * dr3 ) - ( wa2[ i + wa2Offset ] * di3 );
+ }
+ }
+}
+
+
+// EXPORTS //
+
+module.exports = passb3;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/lib/passb4.js b/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/lib/passb4.js
new file mode 100644
index 000000000000..9f6c1ef5fa41
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/lib/passb4.js
@@ -0,0 +1,167 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+/* eslint-disable max-len */
+
+'use strict';
+
+// MODULES //
+
+var chRef = require( './ch_ref.js' );
+var ccRef = require( './cc_ref.js' );
+
+
+// MAIN //
+
+/**
+* Performs a pass of length 4 of the FFT algorithm.
+*
+* @private
+* @param {integer} ido - number of real values for each transform
+* @param {integer} l1 - length of the input sequences
+* @param {Float64Array} cc - input array containing sequences to be transformed
+* @param {integer} ccOffset - `cc` stride length
+* @param {Float64Array} ch - output array containing transformed sequences
+* @param {integer} chOffset - `ch` stride length
+* @param {Float64Array} wa1 - first array of twiddle factors
+* @param {integer} wa1Offset - `wa1` stride length
+* @param {Float64Array} wa2 - second array of twiddle factors
+* @param {integer} wa2Offset - `wa2` stride length
+* @param {Float64Array} wa3 - third array of twiddle factors
+* @param {integer} wa3Offset - `wa3` stride length
+* @returns {void}
+*/
+function passb4( ido, l1, cc, ccOffset, ch, chOffset, wa1, wa1Offset, wa2, wa2Offset, wa3, wa3Offset ) { // eslint-disable-line max-params
+ var ci2;
+ var ci3;
+ var ci4;
+ var cr2;
+ var cr3;
+ var cr4;
+ var ti1;
+ var ti2;
+ var ti3;
+ var ti4;
+ var tr1;
+ var tr2;
+ var tr3;
+ var tr4;
+ var i;
+ var k;
+
+ // Parameter adjustments...
+ chOffset -= 1 + ( ido * ( 1 + l1 ) );
+ ccOffset -= 1 + ( ido * 5 );
+ wa1Offset -= 1;
+ wa2Offset -= 1;
+ wa3Offset -= 1;
+
+ // Function body:
+ if ( ido === 2 ) {
+ for ( k = 1; k <= l1; k++ ) {
+ ti1 = cc[ ccRef( 2, 1, k, 4, ido ) + ccOffset ] - cc[ ccRef( 2, 3, k, 4, ido ) + ccOffset ];
+ ti2 = cc[ ccRef( 2, 1, k, 4, ido ) + ccOffset ] + cc[ ccRef( 2, 3, k, 4, ido ) + ccOffset ];
+ tr4 = cc[ ccRef( 2, 4, k, 4, ido ) + ccOffset ] - cc[ ccRef( 2, 2, k, 4, ido ) + ccOffset ];
+ ti3 = cc[ ccRef( 2, 2, k, 4, ido ) + ccOffset ] + cc[ ccRef( 2, 4, k, 4, ido ) + ccOffset ];
+ tr1 = cc[ ccRef( 1, 1, k, 4, ido ) + ccOffset ] - cc[ ccRef( 1, 3, k, 4, ido ) + ccOffset ];
+ tr2 = cc[ ccRef( 1, 1, k, 4, ido ) + ccOffset ] + cc[ ccRef( 1, 3, k, 4, ido ) + ccOffset ];
+ ti4 = cc[ ccRef( 1, 2, k, 4, ido ) + ccOffset ] - cc[ ccRef( 1, 4, k, 4, ido ) + ccOffset ];
+ tr3 = cc[ ccRef( 1, 2, k, 4, ido ) + ccOffset ] + cc[ ccRef( 1, 4, k, 4, ido ) + ccOffset ];
+ ch[ chRef( 1, k, 1, l1, ido ) + chOffset ] = tr2 + tr3;
+ ch[ chRef( 1, k, 3, l1, ido ) + chOffset ] = tr2 - tr3;
+ ch[ chRef( 2, k, 1, l1, ido ) + chOffset ] = ti2 + ti3;
+ ch[ chRef( 2, k, 3, l1, ido ) + chOffset ] = ti2 - ti3;
+ ch[ chRef( 1, k, 2, l1, ido ) + chOffset ] = tr1 + tr4;
+ ch[ chRef( 1, k, 4, l1, ido ) + chOffset ] = tr1 - tr4;
+ ch[ chRef( 2, k, 2, l1, ido ) + chOffset ] = ti1 + ti4;
+ ch[ chRef( 2, k, 4, l1, ido ) + chOffset ] = ti1 - ti4;
+ }
+ return;
+ }
+ for ( k = 1; k <= l1; k++ ) {
+ for ( i = 2; i <= ido; i += 2 ) {
+ ti1 = cc[ ccRef( i, 1, k, 4, ido ) + ccOffset ] - cc[ ccRef( i, 3, k, 4, ido ) + ccOffset ];
+ ti2 = cc[ ccRef( i, 1, k, 4, ido ) + ccOffset ] + cc[ ccRef( i, 3, k, 4, ido ) + ccOffset ];
+ ti3 = cc[ ccRef( i, 2, k, 4, ido ) + ccOffset ] + cc[ ccRef( i, 4, k, 4, ido ) + ccOffset ];
+ tr4 = cc[ ccRef( i, 4, k, 4, ido ) + ccOffset ] - cc[ ccRef( i, 2, k, 4, ido ) + ccOffset ];
+ tr1 = cc[ ccRef( i - 1, 1, k, 4, ido ) + ccOffset ] - cc[ ccRef( i - 1, 3, k, 4, ido ) + ccOffset ];
+ tr2 = cc[ ccRef( i - 1, 1, k, 4, ido ) + ccOffset ] + cc[ ccRef( i - 1, 3, k, 4, ido ) + ccOffset ];
+ ti4 = cc[ ccRef( i - 1, 2, k, 4, ido ) + ccOffset ] - cc[ ccRef( i - 1, 4, k, 4, ido ) + ccOffset ];
+ tr3 = cc[ ccRef( i - 1, 2, k, 4, ido ) + ccOffset ] + cc[ ccRef( i - 1, 4, k, 4, ido ) + ccOffset ];
+ ch[ chRef( i - 1, k, 1, l1, ido ) + chOffset ] = tr2 + tr3;
+ cr3 = tr2 - tr3;
+ ch[ chRef( i, k, 1, l1, ido ) + chOffset ] = ti2 + ti3;
+ ci3 = ti2 - ti3;
+ cr2 = tr1 + tr4;
+ cr4 = tr1 - tr4;
+ ci2 = ti1 + ti4;
+ ci4 = ti1 - ti4;
+ ch[ chRef( i - 1, k, 2, l1, ido ) + chOffset ] = ( wa1[ i - 1 + wa1Offset ] * cr2 ) - ( wa1[ i + wa1Offset ] * ci2 );
+ ch[ chRef( i, k, 2, l1, ido ) + chOffset ] = ( wa1[ i - 1 + wa1Offset ] * ci2 ) + ( wa1[ i + wa1Offset ] * cr2 );
+ ch[ chRef( i - 1, k, 3, l1, ido ) + chOffset ] = ( wa2[ i - 1 + wa2Offset ] * cr3 ) - ( wa2[ i + wa2Offset ] * ci3 );
+ ch[ chRef( i, k, 3, l1, ido ) + chOffset ] = ( wa2[ i - 1 + wa2Offset ] * ci3 ) + ( wa2[ i + wa2Offset ] * cr3 );
+ ch[ chRef( i - 1, k, 4, l1, ido ) + chOffset ] = ( wa3[ i - 1 + wa3Offset ] * cr4 ) - ( wa3[ i + wa3Offset ] * ci4 );
+ ch[ chRef( i, k, 4, l1, ido ) + chOffset ] = ( wa3[ i - 1 + wa3Offset ] * ci4 ) + ( wa3[ i + wa3Offset ] * cr4 );
+ }
+ }
+}
+
+
+// EXPORTS //
+
+module.exports = passb4;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/lib/passfb.js b/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/lib/passfb.js
new file mode 100644
index 000000000000..8ccb832f674a
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/lib/passfb.js
@@ -0,0 +1,246 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+/* eslint-disable max-len */
+
+'use strict';
+
+// MODULES //
+
+var c1Ref = require( './c1_ref.js' );
+var c2Ref = require( './c2_ref.js' );
+var chRef = require( './ch_ref.js' );
+var ch2Ref = require( './ch2_ref.js' );
+var ccRef = require( './cc_ref.js' );
+
+
+// MAIN //
+
+/**
+* Performs a pass of the FFT algorithm.
+*
+* @private
+* @param {Float64Array} nac - number of FFT passes
+* @param {number} ido - dimension order for input/output arrays
+* @param {number} ip - number of sub-steps or prime factors in the FFT
+* @param {number} l1 - length parameter related to the FFT stage
+* @param {number} idl1 - stride related to the `l1` parameter
+* @param {Float64Array} cc - input array containing complex data for FFT computation
+* @param {number} ccOffset - index of first element in `cc`
+* @param {Float64Array} c1 - intermediate array for FFT computations
+* @param {number} c1Offset - index of first element in `c1`
+* @param {Float64Array} c2 - secondary intermediate array for FFT computations
+* @param {number} c2Offset - index of first element in `c2`
+* @param {Float64Array} ch - output array for storing processed FFT data
+* @param {number} chOffset - index of first element in `ch`
+* @param {Float64Array} ch2 - secondary output array for storing processed FFT data
+* @param {number} ch2Offset - index of first element in `ch2`
+* @param {Float64Array} wa - twiddle factor array used in FFT calculations
+* @param {number} waOffset - index of first element in `wa`
+* @param {number} fsign - sign factor indicating the direction of the FFT (e.g., +1 for forward, -1 for inverse)
+* @returns {void}
+*/
+function passfb( nac, ido, ip, l1, idl1, cc, ccOffset, c1, c1Offset, c2, c2Offset, ch, chOffset, ch2, ch2Offset, wa, waOffset, fsign ) { // eslint-disable-line max-params, max-statements
+ var ipp2;
+ var idij;
+ var idlj;
+ var idot;
+ var ipph;
+ var idj;
+ var idl;
+ var inc;
+ var idp;
+ var wai;
+ var war;
+ var jc;
+ var lc;
+ var ik;
+ var i;
+ var j;
+ var k;
+ var l;
+
+ // Parameter adjustments...
+ chOffset -= 1 + ( ido * ( 1 + l1 ) );
+ c1Offset -= 1 + ( ido * ( 1 + l1 ) );
+ ccOffset -= 1 + ( ido * ( 1 + ip ) );
+ ch2Offset -= 1 + idl1;
+ c2Offset -= 1 + idl1;
+ waOffset -= 1;
+
+ // Function body:
+ idot = ido / 2;
+ ipp2 = ip + 2;
+ ipph = ( ip + 1 ) / 2;
+ idp = ip * ido;
+ if ( ido >= l1 ) {
+ for ( j = 2; j <= ipph; j++ ) {
+ jc = ipp2 - j;
+ for ( k = 1; k <= l1; k++ ) {
+ for ( i = 1; i <= ido; i++ ) {
+ ch[ chRef( i, k, j, l1, ido ) + chOffset ] = cc[ ccRef( i, j, k, ip, ido ) + ccOffset ] + cc[ ccRef( i, jc, k, ip, ido ) + ccOffset ];
+ ch[ chRef( i, k, jc, l1, ido ) + chOffset ] = cc[ ccRef( i, j, k, ip, ido ) + ccOffset ] - cc[ ccRef( i, jc, k, ip, ido ) + ccOffset ];
+ }
+ }
+ }
+ for ( k = 1; k <= l1; k++ ) {
+ for ( i = 1; i <= ido; i++ ) {
+ ch[ chRef( i, k, 1, l1, ido ) + chOffset ] = cc[ ccRef( i, 1, k, ip, ido ) + ccOffset ];
+ }
+ }
+ } else {
+ for ( j = 2; j <= ipph; j++ ) {
+ jc = ipp2 - j;
+ for ( i = 1; i <= ido; i++ ) {
+ for ( k = 1; k <= l1; k++ ) {
+ ch[ chRef( i, k, j, l1, ido ) + chOffset ] = cc[ ccRef( i, j, k, ip, ido ) + ccOffset ] + cc[ ccRef( i, jc, k, ip, ido ) + ccOffset ];
+ ch[ chRef( i, k, jc, l1, ido ) + chOffset ] = cc[ ccRef( i, j, k, ip, ido ) + ccOffset ] - cc[ ccRef( i, jc, k, ip, ido ) + ccOffset ];
+ }
+ }
+ }
+ for ( i = 1; i <= ido; i++ ) {
+ for ( k = 1; k <= l1; k++ ) {
+ ch[ chRef( i, k, 1, l1, ido ) + chOffset ] = cc[ ccRef( i, 1, k, ip, ido ) + ccOffset ];
+ }
+ }
+ }
+ idl = 2 - ido;
+ inc = 0;
+ for ( l = 2; l <= ipph; l++ ) {
+ lc = ipp2 - l;
+ idl += ido;
+ for ( ik = 1; ik <= idl1; ik++ ) {
+ c2[ c2Ref( ik, l, idl1 ) + c2Offset ] = ch2[ ch2Ref( ik, 1, idl1 ) + ch2Offset ] + ( wa[ idl - 1 + waOffset ] * ch2[ ch2Ref( ik, 2, idl1 ) + ch2Offset ] );
+ c2[ c2Ref( ik, lc, idl1 ) + c2Offset ] = fsign * wa[ idl + waOffset ] * ch2[ ch2Ref( ik, ip, idl1 ) + ch2Offset ];
+ }
+ idlj = idl;
+ inc += ido;
+ for ( j = 3; j <= ipph; j++ ) {
+ jc = ipp2 - j;
+ idlj += inc;
+ if ( idlj > idp ) {
+ idlj -= idp;
+ }
+ war = wa[ idlj - 1 + waOffset ];
+ wai = wa[ idlj + waOffset ];
+ for ( ik = 1; ik <= idl1; ik++ ) {
+ c2[ c2Ref( ik, l, idl1 ) + c2Offset ] += war * ch2[ ch2Ref( ik, j, idl1 ) + ch2Offset ];
+ c2[ c2Ref( ik, lc, idl1 ) + c2Offset ] += fsign * wai * ch2[ ch2Ref( ik, jc, idl1 ) + ch2Offset ];
+ }
+ }
+ }
+ for ( j = 2; j <= ipph; j++ ) {
+ for ( ik = 1; ik <= idl1; ik++ ) {
+ ch2[ ch2Ref( ik, 1, idl1 ) + ch2Offset ] += ch2[ ch2Ref( ik, j, idl1 ) + ch2Offset ];
+ }
+ }
+ for ( j = 2; j <= ipph; j++ ) {
+ jc = ipp2 - j;
+ for ( ik = 2; ik <= idl1; ik += 2 ) {
+ ch2[ ch2Ref( ik - 1, j, idl1 ) + ch2Offset ] = c2[ c2Ref( ik - 1, j, idl1 ) + c2Offset ] - c2[ c2Ref( ik, jc, idl1 ) + c2Offset ];
+ ch2[ ch2Ref( ik - 1, jc, idl1 ) + ch2Offset ] = c2[ c2Ref( ik - 1, j, idl1 ) + c2Offset ] + c2[ c2Ref( ik, jc, idl1 ) + c2Offset ];
+ ch2[ ch2Ref( ik, j, idl1 ) + ch2Offset ] = c2[ c2Ref( ik, j, idl1 ) + c2Offset ] + c2[ c2Ref( ik - 1, jc, idl1 ) + c2Offset ];
+ ch2[ ch2Ref( ik, jc, idl1 ) + ch2Offset ] = c2[ c2Ref( ik, j, idl1 ) + c2Offset ] - c2[ c2Ref( ik - 1, jc, idl1 ) + c2Offset ];
+ }
+ }
+ nac[ 0 ] = 1;
+ if ( ido === 2 ) {
+ return;
+ }
+ nac[ 0 ] = 0;
+ for ( ik = 1; ik <= idl1; ik++ ) {
+ c2[ c2Ref( ik, 1, idl1 ) + c2Offset ] = ch2[ ch2Ref( ik, 1, idl1 ) + ch2Offset ];
+ }
+ for ( j = 2; j <= ip; j++ ) {
+ for ( k = 1; k <= l1; k++ ) {
+ c1[ c1Ref( 1, k, j, l1, ido ) + c1Offset ] = ch[ chRef( 1, k, j, l1, ido ) + chOffset ];
+ c1[ c1Ref( 2, k, j, l1, ido ) + c1Offset ] = ch[ chRef( 2, k, j, l1, ido ) + chOffset ];
+ }
+ }
+ if ( idot <= l1 ) {
+ idij = 0;
+ for ( j = 2; j <= ip; j++ ) {
+ idij += 2;
+ for ( i = 4; i <= ido; i += 2 ) {
+ idij += 2;
+ for ( k = 1; k <= l1; k++ ) {
+ c1[ c1Ref( i - 1, k, j, l1, ido ) + c1Offset ] = ( wa[ idij - 1 + waOffset ] * ch[ chRef( i - 1, k, j, l1, ido ) + chOffset ] ) - ( fsign * wa[ idij + waOffset ] * ch[ chRef( i, k, j, l1, ido ) + chOffset ] );
+ c1[ c1Ref( i, k, j, l1, ido ) + c1Offset ] = ( wa[ idij + waOffset ] * ch[ chRef( i, k, j, l1, ido ) + chOffset ] ) + ( fsign * wa[ idij + waOffset ] * ch[ chRef( i - 1, k, j, l1, ido ) + chOffset ] );
+ }
+ }
+ }
+ return;
+ }
+ idj = 2 - ido;
+ for ( j = 2; j <= ip; j++ ) {
+ idj += ido;
+ for ( k = 1; k <= l1; k++ ) {
+ idij = idj;
+ for ( i = 4; i <= ido; i += 2 ) {
+ idij += 2;
+ c1[ c1Ref( i - 1, k, j, l1, ido ) + c1Offset ] = ( wa[ idij - 1 + waOffset ] * ch[ chRef( i - 1, k, j, l1, ido ) + chOffset ] ) - ( fsign * wa[ idij + waOffset ] * ch[ chRef( i, k, j, l1, ido ) + chOffset ] );
+ c1[ c1Ref( i, k, j, l1, ido ) + c1Offset ] = ( wa[ idij - 1 + waOffset ] * ch[ chRef( i, k, j, l1, ido ) + chOffset ] ) + ( fsign * wa[ idij + waOffset ] * ch[ chRef( i - 1, k, j, l1, ido ) + chOffset ] );
+ }
+ }
+ }
+}
+
+
+// EXPORTS //
+
+module.exports = passfb;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/lib/passfb5.js b/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/lib/passfb5.js
new file mode 100644
index 000000000000..af2f8689ce72
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/lib/passfb5.js
@@ -0,0 +1,218 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+/* eslint-disable max-len */
+
+'use strict';
+
+// MODULES //
+
+var sincos = require( '@stdlib/math/base/special/sincos' );
+var TWO_PI = require( '@stdlib/constants/float64/two-pi' );
+var chRef = require( './ch_ref.js' );
+var ccRef = require( './cc_ref.js' );
+
+
+// VARIABLES //
+
+var sc1 = sincos( TWO_PI / 5 );
+var sc2 = sincos( ( 2 * TWO_PI ) / 5 );
+var TR11 = sc1[ 1 ]; // 0.309016994374947
+var TI11 = sc1[ 0 ]; // 0.951056516295154
+var TR12 = sc2[ 1 ]; // -0.809016994374947
+var TI12 = sc2[ 0 ]; // 0.587785252292473
+
+
+// MAIN //
+
+/**
+* Performs a pass of length 5 of the FFT algorithm with a sign factor.
+*
+* @private
+* @param {integer} ido - number of real values for each transform
+* @param {integer} l1 - length of the input sequences
+* @param {Float64Array} cc - input array containing sequences to be transformed
+* @param {number} ccOffset - offset for the input array
+* @param {Float64Array} ch - output array containing transformed sequences
+* @param {number} chOffset - offset for the output array
+* @param {Float64Array} wa1 - first array of twiddle factors
+* @param {number} wa1Offset - offset for the first twiddle factors array
+* @param {Float64Array} wa2 - second array of twiddle factors
+* @param {number} wa2Offset - offset for the second twiddle factors array
+* @param {Float64Array} wa3 - third array of twiddle factors
+* @param {number} wa3Offset - offset for the third twiddle factors array
+* @param {Float64Array} wa4 - fourth array of twiddle factors
+* @param {number} wa4Offset - offset for the fourth twiddle factors array
+* @param {number} fsign - sign factor for the FFT computation
+* @returns {void}
+*/
+function passfb5( ido, l1, cc, ccOffset, ch, chOffset, wa1, wa1Offset, wa2, wa2Offset, wa3, wa3Offset, wa4, wa4Offset, fsign ) { // eslint-disable-line max-params
+ var ci2;
+ var ci3;
+ var ci4;
+ var ci5;
+ var di2;
+ var di3;
+ var di4;
+ var di5;
+ var cr2;
+ var cr3;
+ var cr4;
+ var cr5;
+ var ti2;
+ var ti3;
+ var ti4;
+ var ti5;
+ var dr2;
+ var dr3;
+ var dr4;
+ var dr5;
+ var tr2;
+ var tr3;
+ var tr4;
+ var tr5;
+ var i;
+ var k;
+
+ TI11 *= fsign;
+ TI12 *= fsign;
+
+ // Parameter adjustments...
+ chOffset -= 1 + ( ido * ( 1 + l1 ) );
+ ccOffset -= 1 + ( ido * 6 );
+ wa1Offset -= 1;
+ wa2Offset -= 1;
+ wa3Offset -= 1;
+ wa4Offset -= 1;
+
+ // Function body:
+ if ( ido === 2 ) {
+ for ( k = 1; k <= l1; k++ ) {
+ ti5 = cc[ ccRef( 2, 2, k, 5, ido ) + ccOffset ] - cc[ ccRef( 2, 5, k, 5, ido ) + ccOffset ];
+ ti2 = cc[ ccRef( 2, 2, k, 5, ido ) + ccOffset ] + cc[ ccRef( 2, 5, k, 5, ido ) + ccOffset ];
+ ti4 = cc[ ccRef( 2, 3, k, 5, ido ) + ccOffset ] - cc[ ccRef( 2, 4, k, 5, ido ) + ccOffset ];
+ ti3 = cc[ ccRef( 2, 3, k, 5, ido ) + ccOffset ] + cc[ ccRef( 2, 4, k, 5, ido ) + ccOffset ];
+ tr5 = cc[ ccRef( 1, 2, k, 5, ido ) + ccOffset ] - cc[ ccRef( 1, 5, k, 5, ido ) + ccOffset ];
+ tr2 = cc[ ccRef( 1, 2, k, 5, ido ) + ccOffset ] + cc[ ccRef( 1, 5, k, 5, ido ) + ccOffset ];
+ tr4 = cc[ ccRef( 1, 3, k, 5, ido ) + ccOffset ] - cc[ ccRef( 1, 4, k, 5, ido ) + ccOffset ];
+ tr3 = cc[ ccRef( 1, 3, k, 5, ido ) + ccOffset ] + cc[ ccRef( 1, 4, k, 5, ido ) + ccOffset ];
+ ch[ chRef( 1, k, 1, l1, ido ) + chOffset ] = cc[ ccRef( 1, 1, k, 5, ido ) + ccOffset ] + tr2 + tr3;
+ ch[ chRef( 2, k, 1, l1, ido ) + chOffset ] = cc[ ccRef( 2, 1, k, 5, ido ) + ccOffset ] + ti2 + ti3;
+ cr2 = cc[ ccRef( 1, 1, k, 5, ido ) + ccOffset ] + ( TR11 * tr2 ) + ( TR12 * tr3 );
+ ci2 = cc[ ccRef( 2, 1, k, 5, ido ) + ccOffset ] + ( TR11 * ti2 ) + ( TR12 * ti3 );
+ cr3 = cc[ ccRef( 1, 1, k, 5, ido ) + ccOffset ] + ( TR12 * tr2 ) + ( TR11 * tr3 );
+ ci3 = cc[ ccRef( 2, 1, k, 5, ido ) + ccOffset ] + ( TR12 * ti2 ) + ( TR11 * ti3 );
+ cr5 = ( TI11 * tr5 ) + ( TI12 * tr4 );
+ ci5 = ( TI11 * ti5 ) + ( TI12 * ti4 );
+ cr4 = ( TI12 * tr5 ) - ( TI11 * tr4 );
+ ci4 = ( TI12 * ti5 ) - ( TI11 * ti4 );
+ ch[ chRef( 1, k, 2, l1, ido ) + chOffset ] = cr2 - ci5;
+ ch[ chRef( 1, k, 5, l1, ido ) + chOffset ] = cr2 + ci5;
+ ch[ chRef( 2, k, 2, l1, ido ) + chOffset ] = ci2 + cr5;
+ ch[ chRef( 2, k, 3, l1, ido ) + chOffset ] = ci3 + cr4;
+ ch[ chRef( 1, k, 3, l1, ido ) + chOffset ] = cr3 - ci4;
+ ch[ chRef( 1, k, 4, l1, ido ) + chOffset ] = cr3 + ci4;
+ ch[ chRef( 2, k, 4, l1, ido ) + chOffset ] = ci3 - cr4;
+ ch[ chRef( 2, k, 5, l1, ido ) + chOffset ] = ci2 - cr5;
+ }
+ } else {
+ for ( k = 1; k <= l1; k++ ) {
+ for ( i = 2; i <= ido; i += 2 ) {
+ ti5 = cc[ ccRef( i, 2, k, 5, ido ) + ccOffset ] - cc[ ccRef( i, 5, k, 5, ido ) + ccOffset ];
+ ti2 = cc[ ccRef( i, 2, k, 5, ido ) + ccOffset ] + cc[ ccRef( i, 5, k, 5, ido ) + ccOffset ];
+ ti4 = cc[ ccRef( i, 3, k, 5, ido ) + ccOffset ] - cc[ ccRef( i, 4, k, 5, ido ) + ccOffset ];
+ ti3 = cc[ ccRef( i, 3, k, 5, ido ) + ccOffset ] + cc[ ccRef( i, 4, k, 5, ido ) + ccOffset ];
+ tr5 = cc[ ccRef( i - 1, 2, k, 5, ido ) + ccOffset ] - cc[ ccRef( i - 1, 5, k, 5, ido ) + ccOffset ];
+ tr2 = cc[ ccRef( i - 1, 2, k, 5, ido ) + ccOffset ] + cc[ ccRef( i - 1, 5, k, 5, ido ) + ccOffset ];
+ tr4 = cc[ ccRef( i - 1, 3, k, 5, ido ) + ccOffset ] - cc[ ccRef( i - 1, 4, k, 5, ido ) + ccOffset ];
+ tr3 = cc[ ccRef( i - 1, 3, k, 5, ido ) + ccOffset ] + cc[ ccRef( i - 1, 4, k, 5, ido ) + ccOffset ];
+ ch[ chRef( i - 1, k, 1, l1, ido ) + chOffset ] = cc[ ccRef( i - 1, 1, k, 5, ido ) + ccOffset ] + tr2 + tr3;
+ ch[ chRef( i, k, 1, l1, ido ) + chOffset ] = cc[ ccRef( i, 1, k, 5, ido ) + ccOffset ] + ti2 + ti3;
+ cr2 = cc[ ccRef( i - 1, 1, k, 5, ido ) + ccOffset ] + ( TR11 * tr2 ) + ( TR12 * tr3 );
+ ci2 = cc[ ccRef( i, 1, k, 5, ido ) + ccOffset ] + ( TR11 * ti2 ) + ( TR12 * ti3 );
+ cr3 = cc[ ccRef( i - 1, 1, k, 5, ido ) + ccOffset ] + ( TR12 * tr2 ) + ( TR11 * tr3 );
+ ci3 = cc[ ccRef( i, 1, k, 5, ido ) + ccOffset ] + ( TR12 * ti2 ) + ( TR11 * ti3 );
+ cr5 = ( TI11 * tr5 ) + ( TI12 * tr4 );
+ ci5 = ( TI11 * ti5 ) + ( TI12 * ti4 );
+ cr4 = ( TI12 * tr5 ) - ( TI11 * tr4 );
+ ci4 = ( TI12 * ti5 ) - ( TI11 * ti4 );
+ dr3 = cr3 - ci4;
+ dr4 = cr3 + ci4;
+ di3 = ci3 + cr4;
+ di4 = ci3 - cr4;
+ dr5 = cr2 + ci5;
+ dr2 = cr2 - ci5;
+ di5 = ci2 - cr5;
+ di2 = ci2 + cr5;
+ ch[ chRef( i - 1, k, 2, l1, ido ) + chOffset ] = ( wa1[ i - 1 + wa1Offset ] * dr2 ) - ( fsign * wa1[ i + wa1Offset ] * di2 );
+ ch[ chRef( i, k, 2, l1, ido ) + chOffset ] = ( wa1[ i - 1 + wa1Offset ] * di2 ) + ( fsign * wa1[ i + wa1Offset ] * dr2 );
+ ch[ chRef( i - 1, k, 3, l1, ido ) + chOffset ] = ( wa2[ i - 1 + wa2Offset ] * dr3 ) - ( fsign * wa2[ i + wa2Offset ] * di3 );
+ ch[ chRef( i, k, 3, l1, ido ) + chOffset ] = ( wa2[ i - 1 + wa2Offset ] * di3 ) + ( fsign * wa2[ i + wa2Offset ] * dr3 );
+ ch[ chRef( i - 1, k, 4, l1, ido ) + chOffset ] = ( wa3[ i - 1 + wa3Offset ] * dr4 ) - ( fsign * wa3[ i + wa3Offset ] * di4 );
+ ch[ chRef( i, k, 4, l1, ido ) + chOffset ] = ( wa3[ i - 1 + wa3Offset ] * di4 ) + ( fsign * wa3[ i + wa3Offset ] * dr4 );
+ ch[ chRef( i - 1, k, 5, l1, ido ) + chOffset ] = ( wa4[ i - 1 + wa4Offset ] * dr5 ) - ( fsign * wa4[ i + wa4Offset ] * di5 );
+ ch[ chRef( i, k, 5, l1, ido ) + chOffset ] = ( wa4[ i - 1 + wa4Offset ] * di5 ) + ( fsign * wa4[ i + wa4Offset ] * dr5 );
+ }
+ }
+ }
+}
+
+
+// EXPORTS //
+
+module.exports = passfb5;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/package.json b/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/package.json
new file mode 100644
index 000000000000..33d23184678d
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cfftb/package.json
@@ -0,0 +1,56 @@
+{
+ "name": "@stdlib/fft/base/fftpack/cfftb",
+ "version": "0.0.0",
+ "description": "{{TODO:description}}",
+ "license": "Apache-2.0",
+ "author": {
+ "name": "The Stdlib Authors",
+ "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
+ },
+ "contributors": [
+ {
+ "name": "The Stdlib Authors",
+ "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
+ }
+ ],
+ "main": "./lib",
+ "directories": {
+ "benchmark": "./benchmark",
+ "doc": "./docs",
+ "example": "./examples",
+ "lib": "./lib",
+ "test": "./test"
+ },
+ "types": "./docs/types",
+ "scripts": {},
+ "homepage": "https://github.com/stdlib-js/stdlib",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/stdlib-js/stdlib.git"
+ },
+ "bugs": {
+ "url": "https://github.com/stdlib-js/stdlib/issues"
+ },
+ "dependencies": {},
+ "devDependencies": {},
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "keywords": [
+ "stdlib",
+ "{{TODO:keywords}}"
+ ],
+ "__stdlib__": {}
+}
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/lib/c1_ref.js b/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/lib/c1_ref.js
new file mode 100644
index 000000000000..942378815633
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/lib/c1_ref.js
@@ -0,0 +1,81 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+'use strict';
+
+// MAIN //
+
+/**
+* Computes an index into the intermediate array `c1`.
+*
+* @private
+* @param {NonNegativeInteger} a1 - index of first dimension
+* @param {NonNegativeInteger} a2 - index of second dimension
+* @param {NonNegativeInteger} a3 - index of third dimension
+* @param {NonNegativeInteger} l1 - length parameter related to the FFT stage
+* @param {NonNegativeInteger} ido - dimension order
+* @returns {NonNegativeInteger} computed index
+*/
+function c1Ref( a1, a2, a3, l1, ido ) {
+ return ( ( (a3*l1)+a2 ) * ido ) + a1;
+}
+
+
+// EXPORTS //
+
+module.exports = c1Ref;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/lib/c2_ref.js b/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/lib/c2_ref.js
new file mode 100644
index 000000000000..3b4910a3f245
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/lib/c2_ref.js
@@ -0,0 +1,79 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+'use strict';
+
+// MAIN //
+
+/**
+* Computes an index into the intermediate array `c2`.
+*
+* @private
+* @param {NonNegativeInteger} a1 - index of first dimension
+* @param {NonNegativeInteger} a2 - index of second dimension
+* @param {integer} idl1 - stride related to the `l1` parameter
+* @returns {NonNegativeInteger} computed index
+*/
+function c2Ref( a1, a2, idl1 ) {
+ return ( a2*idl1 ) + a1;
+}
+
+
+// EXPORTS //
+
+module.exports = c2Ref;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/lib/cc_ref.js b/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/lib/cc_ref.js
new file mode 100644
index 000000000000..c9491438a35c
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/lib/cc_ref.js
@@ -0,0 +1,85 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+'use strict';
+
+// MAIN //
+
+/**
+* Computes an index into an input array `cc` containing complex-valued data.
+*
+* @private
+* @param {NonNegativeInteger} a1 - index of first dimension
+* @param {NonNegativeInteger} a2 - index of second dimension
+* @param {NonNegativeInteger} a3 - index of third dimension
+* @param {NonNegativeInteger} ip - number of sub-steps or prime factors in the FFT
+* @param {NonNegativeInteger} ido - dimension order
+* @returns {NonNegativeInteger} computed index
+*
+* @example
+* var out = ccRef( 3, 2, 1, 2, 2 );
+* // returns 11
+*/
+function ccRef( a1, a2, a3, ip, ido ) {
+ return ( ( (a3*ip)+a2 ) * ido ) + a1;
+}
+
+
+// EXPORTS //
+
+module.exports = ccRef;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/lib/cfftf1.js b/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/lib/cfftf1.js
new file mode 100644
index 000000000000..e62ed008d290
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/lib/cfftf1.js
@@ -0,0 +1,165 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+/* eslint-disable max-len */
+
+'use strict';
+
+// MODULES //
+
+var passfb5 = require( './passfb5.js' );
+var passfb = require( './passfb.js' );
+var passf4 = require( './passf4.js' );
+var passf2 = require( './passf2.js' );
+var passf3 = require( './passf3.js' );
+
+
+// MAIN //
+
+/**
+* Performs the complex forward Fast Fourier Transform.
+*
+* @private
+* @param {number} n - length of the sequence to transform
+* @param {Float64Array} c - input array containing sequence to be transformed
+* @param {number} cOffset - index of first element in `c`
+* @param {Float64Array} ch - working array for intermediate results
+* @param {number} chOffset - index of first element in `ch`
+* @param {Float64Array} wa - array of twiddle factors
+* @param {number} waOffset - index of first element in `wa`
+* @param {Int32Array} ifac - array containing factorization information
+* @param {number} ifacOffset - index of first element in `ifac`
+* @returns {void}
+*/
+function cfftf1( n, c, cOffset, ch, chOffset, wa, waOffset, ifac, ifacOffset ) {
+ var idl1;
+ var idot;
+ var nac;
+ var ido;
+ var ix4;
+ var ix3;
+ var ix2;
+ var nf;
+ var na;
+ var l2;
+ var l1;
+ var iw;
+ var ip;
+ var k1;
+ var i;
+
+ // Function Body:
+ nf = ifac[ ifacOffset + 1 ];
+ na = 0;
+ l1 = 1;
+ iw = 0;
+ for ( k1 = 1; k1 <= nf; k1++ ) {
+ ip = ifac[ ifacOffset + k1 + 1 ];
+ l2 = ip * l1;
+ ido = n / l2;
+ idot = ido + ido;
+ idl1 = idot * l1;
+ switch ( ip ) {
+ case 4:
+ ix2 = iw + idot;
+ ix3 = ix2 + idot;
+ passf4( idot, l1, ( na ) ? ch : c, ( na ) ? chOffset : cOffset, ( na ) ? c : ch, ( na ) ? cOffset : chOffset, wa, iw + waOffset, wa, ix2 + waOffset, wa, ix3 + waOffset );
+ na = 1 - na;
+ break;
+ case 2:
+ passf2( idot, l1, ( na ) ? ch : c, ( na ) ? chOffset : cOffset, ( na ) ? c : ch, ( na ) ? cOffset : chOffset, wa, iw + waOffset );
+ na = 1 - na;
+ break;
+ case 3:
+ ix2 = iw + idot;
+ passf3( idot, l1, ( na ) ? ch : c, ( na ) ? chOffset : cOffset, ( na ) ? c : ch, ( na ) ? cOffset : chOffset, wa, iw + waOffset, wa, ix2 + waOffset );
+ na = 1 - na;
+ break;
+ case 5:
+ ix2 = iw + idot;
+ ix3 = ix2 + idot;
+ ix4 = ix3 + idot;
+ passfb5( idot, l1, ( na ) ? ch : c, ( na ) ? chOffset : cOffset, ( na ) ? c : ch, ( na ) ? cOffset : chOffset, wa, iw + waOffset, wa, ix2 + waOffset, wa, ix3 + waOffset, wa, ix4 + waOffset, -1 );
+ na = 1 - na;
+ break;
+ default:
+ if ( na === 0 ) {
+ passfb( nac, idot, ip, l1, idl1, c, cOffset, c, cOffset, c, cOffset, ch, chOffset, ch, chOffset, wa, iw + waOffset, -1 );
+ } else {
+ passfb( nac, idot, ip, l1, idl1, ch, chOffset, ch, chOffset, ch, chOffset, c, cOffset, c, cOffset, wa, iw + waOffset, -1 );
+ }
+ if ( nac !== 0 ) {
+ na = 1 - na;
+ }
+ break;
+ }
+ l1 = l2;
+ iw += ( ip - 1 ) * idot;
+ }
+ if ( na === 0 ) {
+ return;
+ }
+ for ( i = 0; i < ( 2 * n ); i++ ) {
+ c[ i + cOffset ] = ch[ i + chOffset ];
+ }
+}
+
+
+// EXPORTS //
+
+module.exports = cfftf1;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/lib/ch2_ref.js b/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/lib/ch2_ref.js
new file mode 100644
index 000000000000..b53f3d8579d4
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/lib/ch2_ref.js
@@ -0,0 +1,79 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+'use strict';
+
+// MAIN //
+
+/**
+* Computes an index into an output array `ch2` for storing processed FFT data.
+*
+* @private
+* @param {NonNegativeInteger} a1 - index of first dimension
+* @param {NonNegativeInteger} a2 - index of second dimension
+* @param {integer} idl1 - stride related to the `l1` parameter
+* @returns {NonNegativeInteger} computed index
+*/
+function ch2Ref( a1, a2, idl1 ) {
+ return ( a2*idl1 ) + a1;
+}
+
+
+// EXPORTS //
+
+module.exports = ch2Ref;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/lib/ch_ref.js b/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/lib/ch_ref.js
new file mode 100644
index 000000000000..1e4de83a80f1
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/lib/ch_ref.js
@@ -0,0 +1,81 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+'use strict';
+
+// MAIN //
+
+/**
+* Computes an index into an output array `ch` for storing processed FFT data.
+*
+* @private
+* @param {NonNegativeInteger} a1 - index of first dimension
+* @param {NonNegativeInteger} a2 - index of second dimension
+* @param {NonNegativeInteger} a3 - index of third dimension
+* @param {NonNegativeInteger} radix - length parameter related to the FFT stage
+* @param {NonNegativeInteger} ido - dimension order
+* @returns {NonNegativeInteger} - calculated index
+*/
+function chRef( a1, a2, a3, radix, ido ) {
+ return ( ( (a3*radix)+a2 ) * ido ) + a1;
+}
+
+
+// EXPORTS //
+
+module.exports = chRef;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/lib/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/lib/index.js
new file mode 100644
index 000000000000..a64055bae4ee
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/lib/index.js
@@ -0,0 +1,39 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+'use strict';
+
+/**
+* TODO: description.
+*
+* @module @stdlib/fft/base/fftpack/cfftf
+*
+* @example
+* var cfftf = require( '@stdlib/fft/base/fftpack/cfftf' );
+*
+* // TODO
+*/
+
+// MODULES //
+
+var main = require( './main.js' );
+
+
+// EXPORTS //
+
+module.exports = main;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/lib/main.js b/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/lib/main.js
new file mode 100644
index 000000000000..728f1823acc3
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/lib/main.js
@@ -0,0 +1,97 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+'use strict';
+
+// MODULES //
+
+var cfftf1 = require( './cfftf1.js' );
+
+
+// MAIN //
+
+/**
+* Performs the complex forward Fast Fourier Transform.
+*
+* @param {number} n - length of the sequence to transform
+* @param {Float64Array} c - input array containing sequence to be transformed
+* @param {number} cptr - starting index for c
+* @param {Float64Array} wsave - working array containing precomputed values
+* @param {number} wptr - starting index for wsave
+* @returns {void}
+*/
+function cfftf( n, c, cptr, wsave, wptr ) {
+ var iw1;
+ var iw2;
+
+ wptr -= 1;
+ cptr -= 1;
+
+ // Function Body:
+ if ( n === 1 ) {
+ return;
+ }
+ iw1 = ( 2 * n ) + 1;
+ iw2 = iw1 + ( 2 * n );
+ cfftf1( n, c, 1 + cptr, wsave, 1 + wptr, wsave, iw1 + wptr, wsave, iw2 + wptr ); // eslint-disable-line max-len
+}
+
+
+// EXPORTS //
+
+module.exports = cfftf;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/lib/passf2.js b/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/lib/passf2.js
new file mode 100644
index 000000000000..d0002c188606
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/lib/passf2.js
@@ -0,0 +1,121 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+/* eslint-disable max-len */
+
+'use strict';
+
+// MODULES //
+
+var chRef = require( './ch_ref.js' );
+var ccRef = require( './cc_ref.js' );
+
+
+// MAIN //
+
+/**
+* Performs a pass of length 2 of the FFT algorithm.
+*
+* @private
+* @param {integer} ido - number of real values for each transform
+* @param {integer} l1 - length of the input sequences
+* @param {Float64Array} cc - input array containing sequences to be transformed
+* @param {integer} ccOffset - `cc` stride length
+* @param {Float64Array} ch - output array containing transformed sequences
+* @param {integer} chOffset - `ch` stride length
+* @param {Float64Array} wa1 - array of twiddle factors
+* @param {integer} wa1Offset - `wa1` stride length
+* @returns {void}
+*/
+function passf2( ido, l1, cc, ccOffset, ch, chOffset, wa1, wa1Offset ) {
+ var ti2;
+ var tr2;
+ var i;
+ var k;
+
+ // Parameter adjustments...
+ chOffset -= 1 + ( ido * ( 1 + l1 ) );
+ ccOffset -= 1 + ( ido * 3 );
+ wa1Offset -= 1;
+
+ // Function body:
+ if ( ido === 2 ) {
+ for ( k = 1; k <= l1; k++ ) {
+ ch[ chRef( 1, k, 1, l1, ido ) + chOffset ] = cc[ ccRef( 1, 1, k, 2, ido ) + ccOffset ] + cc[ ccRef( 1, 2, k, 2, ido ) + ccOffset ];
+ ch[ chRef( 1, k, 2, l1, ido ) + chOffset ] = cc[ ccRef( 1, 1, k, 2, ido ) + ccOffset ] - cc[ ccRef( 1, 2, k, 2, ido ) + ccOffset ];
+ ch[ chRef( 2, k, 1, l1, ido ) + chOffset ] = cc[ ccRef( 2, 1, k, 2, ido ) + ccOffset ] + cc[ ccRef( 2, 2, k, 2, ido ) + ccOffset ];
+ ch[ chRef( 2, k, 2, l1, ido ) + chOffset ] = cc[ ccRef( 2, 1, k, 2, ido ) + ccOffset ] - cc[ ccRef( 2, 2, k, 2, ido ) + ccOffset ];
+ }
+ return;
+ }
+ for ( k = 1; k <= l1; k++ ) {
+ for ( i = 2; i <= ido; i += 2 ) {
+ ch[ chRef( i - 1, k, 1, l1, ido ) + chOffset ] = cc[ ccRef( i - 1, 1, k, 2, ido ) + ccOffset ] + cc[ ccRef( i - 1, 2, k, 2, ido ) + ccOffset ];
+ tr2 = cc[ ccRef( i - 1, 1, k, 2, ido ) + ccOffset ] - cc[ ccRef( i - 1, 2, k, 2, ido ) + ccOffset ];
+ ch[ chRef( i, k, 1, l1, ido ) + chOffset ] = cc[ ccRef( i, 1, k, 2, ido ) + ccOffset ] + cc[ ccRef( i, 2, k, 2, ido ) + ccOffset ];
+ ti2 = cc[ ccRef( i, 1, k, 2, ido ) + ccOffset ] - cc[ ccRef( i, 2, k, 2, ido ) + ccOffset ];
+ ch[ chRef( i, k, 2, l1, ido ) + chOffset ] = ( wa1[ i - 1 + wa1Offset ] * ti2 ) - ( wa1[ i + wa1Offset ] * tr2 );
+ ch[ chRef( i - 1, k, 2, l1, ido ) + chOffset ] = ( wa1[ i - 1 + wa1Offset ] * tr2 ) - ( wa1[ i + wa1Offset ] * ti2 );
+ }
+ }
+}
+
+
+// EXPORTS //
+
+module.exports = passf2;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/lib/passf3.js b/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/lib/passf3.js
new file mode 100644
index 000000000000..503431a6359b
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/lib/passf3.js
@@ -0,0 +1,159 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+/* eslint-disable max-len */
+
+'use strict';
+
+// MODULES //
+
+var sincos = require( '@stdlib/math/base/special/sincos' );
+var TWO_PI = require( '@stdlib/constants/float64/two-pi' );
+var chRef = require( './ch_ref.js' );
+var ccRef = require( './cc_ref.js' );
+
+
+// VARIABLES //
+
+var sc = sincos( ( 2 * TWO_PI ) / 3 );
+var taur = sc[ 1 ]; // -0.5
+var taui = -sc[ 0 ]; // -0.866025403784439
+
+
+// MAIN //
+
+/**
+* Performs a pass of length 3 of the FFT algorithm.
+*
+* @private
+* @param {integer} ido - number of real values for each transform
+* @param {integer} l1 - length of the input sequences
+* @param {Float64Array} cc - input array containing sequences to be transformed
+* @param {integer} ccOffset - `cc` stride length
+* @param {Float64Array} ch - output array containing transformed sequences
+* @param {integer} chOffset - `ch` stride length
+* @param {Float64Array} wa1 - first array of twiddle factors
+* @param {integer} wa1Offset - `wa1` stride length
+* @param {Float64Array} wa2 - second array of twiddle factors
+* @param {integer} wa2Offset - `wa2` stride length
+* @returns {void}
+*/
+function passf3( ido, l1, cc, ccOffset, ch, chOffset, wa1, wa1Offset, wa2, wa2Offset ) {
+ var ci2;
+ var ci3;
+ var di2;
+ var di3;
+ var cr2;
+ var cr3;
+ var dr2;
+ var dr3;
+ var ti2;
+ var tr2;
+ var i;
+ var k;
+
+ // Parameter adjustments...
+ chOffset -= 1 + ( ido * ( 1 + l1 ) );
+ ccOffset -= 1 + ( ido << 2 );
+ wa1Offset -= 1;
+ wa2Offset -= 1;
+
+ // Function body:
+ if ( ido === 2 ) {
+ for ( k = 1; k <= l1; k++ ) {
+ tr2 = cc[ ccRef( 1, 2, k, 3, ido ) + ccOffset ] + cc[ ccRef( 1, 3, k, 3, ido ) + ccOffset ];
+ cr2 = cc[ ccRef( 1, 1, k, 3, ido ) + ccOffset ] + ( taur * tr2 );
+ ch[ chRef( 1, k, 1, l1, ido ) + chOffset ] = cc[ ccRef( 1, 1, k, 3, ido ) + ccOffset ] + tr2;
+ ti2 = cc[ ccRef( 2, 2, k, 3, ido ) + ccOffset ] + cc[ ccRef( 2, 3, k, 3, ido ) + ccOffset ];
+ ci2 = cc[ ccRef( 2, 1, k, 3, ido ) + ccOffset ] + ( taur * ti2 );
+ ch[ chRef( 2, k, 1, l1, ido ) + chOffset ] = cc[ ccRef( 2, 1, k, 3, ido ) + ccOffset ] + ti2;
+ cr3 = taui * ( cc[ ccRef( 1, 2, k, 3, ido ) + ccOffset ] - cc[ ccRef( 1, 3, k, 3, ido ) + ccOffset ] );
+ ci3 = taui * ( cc[ ccRef( 2, 2, k, 3, ido ) + ccOffset ] - cc[ ccRef( 2, 3, k, 3, ido ) + ccOffset ] );
+ ch[ chRef( 1, k, 2, l1, ido ) + chOffset ] = cr2 - ci3;
+ ch[ chRef( 1, k, 3, l1, ido ) + chOffset ] = cr2 + ci3;
+ ch[ chRef( 2, k, 2, l1, ido ) + chOffset ] = ci2 + cr3;
+ ch[ chRef( 2, k, 3, l1, ido ) + chOffset ] = ci2 - cr3;
+ }
+ return;
+ }
+ for ( k = 1; k <= l1; k++ ) {
+ for ( i = 2; i <= ido; i += 2 ) {
+ tr2 = cc[ ccRef( i - 1, 2, k, 3, ido ) + ccOffset ] + cc[ ccRef( i - 1, 3, k, 3, ido ) + ccOffset ];
+ cr2 = cc[ ccRef( i - 1, 1, k, 3, ido ) + ccOffset ] + ( taur * tr2 );
+ ch[ chRef( i - 1, k, 1, l1, ido ) + chOffset ] = cc[ ccRef( i - 1, 1, k, 3, ido ) + ccOffset ] + tr2;
+ ti2 = cc[ ccRef( i, 2, k, 3, ido ) + ccOffset ] + cc[ ccRef( i, 3, k, 3, ido ) + ccOffset ];
+ ci2 = cc[ ccRef( i, 1, k, 3, ido ) + ccOffset ] + ( taur * ti2 );
+ ch[ chRef( i, k, 1, l1, ido ) + chOffset ] = cc[ ccRef( i, 1, k, 3, ido ) + ccOffset ] + ti2;
+ cr3 = taui * ( cc[ ccRef( i - 1, 2, k, 3, ido ) + ccOffset ] - cc[ ccRef( i - 1, 3, k, 3, ido ) + ccOffset ] );
+ ci3 = taui * ( cc[ ccRef( i, 2, k, 3, ido ) + ccOffset ] - cc[ ccRef( i, 3, k, 3, ido ) + ccOffset ] );
+ dr2 = cr2 - ci3;
+ dr3 = cr2 + ci3;
+ di2 = ci2 + cr3;
+ di3 = ci2 - cr3;
+ ch[ chRef( i, k, 2, l1, ido) + chOffset ] = ( wa1[ i - 1 + wa1Offset ] * di2 ) - ( wa1[ i + wa1Offset ] * dr2 );
+ ch[ chRef( i - 1, k, 2, l1, ido) + chOffset ] = ( wa1[ i - 1 + wa1Offset ] * dr2 ) + ( wa1[ i + wa1Offset ] * di2 );
+ ch[ chRef( i, k, 3, l1, ido) + chOffset ] = ( wa2[ i - 1 + wa2Offset ] * di3 ) - ( wa2[ i + wa2Offset ] * dr3 );
+ ch[ chRef( i - 1, k, 3, l1, ido) + chOffset ] = ( wa2[ i - 1 + wa2Offset ] * di3 ) + ( wa2[ i + wa2Offset ] * dr3 );
+ }
+ }
+}
+
+
+// EXPORTS //
+
+module.exports = passf3;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/lib/passf4.js b/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/lib/passf4.js
new file mode 100644
index 000000000000..44b86c725673
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/lib/passf4.js
@@ -0,0 +1,167 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+/* eslint-disable max-len */
+
+'use strict';
+
+// MODULES //
+
+var chRef = require( './ch_ref.js' );
+var ccRef = require( './cc_ref.js' );
+
+
+// MAIN //
+
+/**
+* Performs a pass of length 4 of the FFT algorithm.
+*
+* @private
+* @param {integer} ido - number of real values for each transform
+* @param {integer} l1 - length of the input sequences
+* @param {Float64Array} cc - input array containing sequences to be transformed
+* @param {integer} ccOffset - `cc` stride length
+* @param {Float64Array} ch - output array containing transformed sequences
+* @param {integer} chOffset - `ch` stride length
+* @param {Float64Array} wa1 - first array of twiddle factors
+* @param {integer} wa1Offset - `wa1` stride length
+* @param {Float64Array} wa2 - second array of twiddle factors
+* @param {integer} wa2Offset - `wa2` stride length
+* @param {Float64Array} wa3 - third array of twiddle factors
+* @param {integer} wa3Offset - `wa3` stride length
+* @returns {void}
+*/
+function passf4( ido, l1, cc, ccOffset, ch, chOffset, wa1, wa1Offset, wa2, wa2Offset, wa3, wa3Offset ) { // eslint-disable-line max-params
+ var ci2;
+ var ci3;
+ var ci4;
+ var cr2;
+ var cr3;
+ var cr4;
+ var ti1;
+ var ti2;
+ var ti3;
+ var ti4;
+ var tr1;
+ var tr2;
+ var tr3;
+ var tr4;
+ var i;
+ var k;
+
+ // Parameter adjustments...
+ chOffset -= 1 + ( ido * ( 1 + l1 ) );
+ ccOffset -= 1 + ( ido * 5 );
+ wa1Offset -= 1;
+ wa2Offset -= 1;
+ wa3Offset -= 1;
+
+ // Function body:
+ if ( ido === 2 ) {
+ for ( k = 1; k <= l1; k++ ) {
+ ti1 = cc[ ccRef( 2, 1, k, 4, ido ) + ccOffset ] - cc[ ccRef( 2, 3, k, 4, ido ) + ccOffset ];
+ ti2 = cc[ ccRef( 2, 1, k, 4, ido ) + ccOffset ] + cc[ ccRef( 2, 3, k, 4, ido ) + ccOffset ];
+ tr4 = cc[ ccRef( 2, 2, k, 4, ido ) + ccOffset ] - cc[ ccRef( 2, 4, k, 4, ido ) + ccOffset ];
+ ti3 = cc[ ccRef( 2, 2, k, 4, ido ) + ccOffset ] + cc[ ccRef( 2, 4, k, 4, ido ) + ccOffset ];
+ tr1 = cc[ ccRef( 1, 1, k, 4, ido ) + ccOffset ] - cc[ ccRef( 1, 3, k, 4, ido ) + ccOffset ];
+ tr2 = cc[ ccRef( 1, 1, k, 4, ido ) + ccOffset ] + cc[ ccRef( 1, 3, k, 4, ido ) + ccOffset ];
+ ti4 = cc[ ccRef( 1, 4, k, 4, ido ) + ccOffset ] - cc[ ccRef( 1, 2, k, 4, ido ) + ccOffset ];
+ tr3 = cc[ ccRef( 1, 2, k, 4, ido ) + ccOffset ] + cc[ ccRef( 1, 4, k, 4, ido ) + ccOffset ];
+ ch[ chRef( 1, k, 1, l1, ido ) + chOffset ] = tr2 + tr3;
+ ch[ chRef( 1, k, 3, l1, ido ) + chOffset ] = tr2 - tr3;
+ ch[ chRef( 2, k, 1, l1, ido ) + chOffset ] = ti2 + ti3;
+ ch[ chRef( 2, k, 3, l1, ido ) + chOffset ] = ti2 - ti3;
+ ch[ chRef( 1, k, 2, l1, ido ) + chOffset ] = tr1 + tr4;
+ ch[ chRef( 1, k, 4, l1, ido ) + chOffset ] = tr1 - tr4;
+ ch[ chRef( 2, k, 2, l1, ido ) + chOffset ] = ti1 + ti4;
+ ch[ chRef( 2, k, 4, l1, ido ) + chOffset ] = ti1 - ti4;
+ }
+ } else {
+ for ( k = 1; k <= l1; k++ ) {
+ for ( i = 2; i <= ido; i += 2 ) {
+ ti1 = cc[ ccRef( i, 1, k, 4, ido ) + ccOffset ] - cc[ ccRef( i, 3, k, 4, ido ) + ccOffset ];
+ ti2 = cc[ ccRef( i, 1, k, 4, ido ) + ccOffset ] + cc[ ccRef( i, 3, k, 4, ido ) + ccOffset ];
+ ti3 = cc[ ccRef( i, 2, k, 4, ido ) + ccOffset ] + cc[ ccRef( i, 4, k, 4, ido ) + ccOffset ];
+ tr4 = cc[ ccRef( i, 2, k, 4, ido ) + ccOffset ] - cc[ ccRef( i, 4, k, 4, ido ) + ccOffset ];
+ tr1 = cc[ ccRef( i - 1, 1, k, 4, ido ) + ccOffset ] - cc[ ccRef( i - 1, 3, k, 4, ido ) + ccOffset ];
+ tr2 = cc[ ccRef( i - 1, 1, k, 4, ido ) + ccOffset ] + cc[ ccRef( i - 1, 3, k, 4, ido ) + ccOffset ];
+ ti4 = cc[ ccRef( i - 1, 4, k, 4, ido ) + ccOffset ] - cc[ ccRef( i - 1, 2, k, 4, ido ) + ccOffset ];
+ tr3 = cc[ ccRef( i - 1, 2, k, 4, ido ) + ccOffset ] + cc[ ccRef( i - 1, 4, k, 4, ido ) + ccOffset ];
+ ch[ chRef( i - 1, k, 1, l1, ido ) + chOffset ] = tr2 + tr3;
+ cr3 = tr2 - tr3;
+ ch[ chRef( i, k, 1, l1, ido ) + chOffset ] = ti2 + ti3;
+ ci3 = ti2 - ti3;
+ cr2 = tr1 + tr4;
+ cr4 = tr1 - tr4;
+ ci2 = ti1 + ti4;
+ ci4 = ti1 - ti4;
+ ch[ chRef( i - 1, k, 2, l1, ido ) + chOffset ] = ( wa1[ i - 1 + wa1Offset ] * cr2 ) + ( wa1[ i + wa1Offset ] * ci2 );
+ ch[ chRef( i, k, 2, l1, ido ) + chOffset ] = ( wa1[ i - 1 + wa1Offset ] * ci2 ) - ( wa1[ i + wa1Offset ] * cr2 );
+ ch[ chRef( i - 1, k, 3, l1, ido ) + chOffset ] = ( wa2[ i - 1 + wa2Offset ] * cr3 ) + ( wa2[ i + wa2Offset ] * ci3 );
+ ch[ chRef( i, k, 3, l1, ido ) + chOffset ] = ( wa2[ i - 1 + wa2Offset ] * ci3 ) - ( wa2[ i + wa2Offset ] * cr3 );
+ ch[ chRef( i - 1, k, 4, l1, ido ) + chOffset ] = ( wa3[ i - 1 + wa3Offset ] * cr4 ) + ( wa3[ i + wa3Offset ] * ci4 );
+ ch[ chRef( i, k, 4, l1, ido ) + chOffset ] = ( wa3[ i - 1 + wa3Offset ] * ci4 ) - ( wa3[ i + wa3Offset ] * cr4 );
+ }
+ }
+ }
+}
+
+
+// EXPORTS //
+
+module.exports = passf4;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/lib/passfb.js b/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/lib/passfb.js
new file mode 100644
index 000000000000..8ccb832f674a
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/lib/passfb.js
@@ -0,0 +1,246 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+/* eslint-disable max-len */
+
+'use strict';
+
+// MODULES //
+
+var c1Ref = require( './c1_ref.js' );
+var c2Ref = require( './c2_ref.js' );
+var chRef = require( './ch_ref.js' );
+var ch2Ref = require( './ch2_ref.js' );
+var ccRef = require( './cc_ref.js' );
+
+
+// MAIN //
+
+/**
+* Performs a pass of the FFT algorithm.
+*
+* @private
+* @param {Float64Array} nac - number of FFT passes
+* @param {number} ido - dimension order for input/output arrays
+* @param {number} ip - number of sub-steps or prime factors in the FFT
+* @param {number} l1 - length parameter related to the FFT stage
+* @param {number} idl1 - stride related to the `l1` parameter
+* @param {Float64Array} cc - input array containing complex data for FFT computation
+* @param {number} ccOffset - index of first element in `cc`
+* @param {Float64Array} c1 - intermediate array for FFT computations
+* @param {number} c1Offset - index of first element in `c1`
+* @param {Float64Array} c2 - secondary intermediate array for FFT computations
+* @param {number} c2Offset - index of first element in `c2`
+* @param {Float64Array} ch - output array for storing processed FFT data
+* @param {number} chOffset - index of first element in `ch`
+* @param {Float64Array} ch2 - secondary output array for storing processed FFT data
+* @param {number} ch2Offset - index of first element in `ch2`
+* @param {Float64Array} wa - twiddle factor array used in FFT calculations
+* @param {number} waOffset - index of first element in `wa`
+* @param {number} fsign - sign factor indicating the direction of the FFT (e.g., +1 for forward, -1 for inverse)
+* @returns {void}
+*/
+function passfb( nac, ido, ip, l1, idl1, cc, ccOffset, c1, c1Offset, c2, c2Offset, ch, chOffset, ch2, ch2Offset, wa, waOffset, fsign ) { // eslint-disable-line max-params, max-statements
+ var ipp2;
+ var idij;
+ var idlj;
+ var idot;
+ var ipph;
+ var idj;
+ var idl;
+ var inc;
+ var idp;
+ var wai;
+ var war;
+ var jc;
+ var lc;
+ var ik;
+ var i;
+ var j;
+ var k;
+ var l;
+
+ // Parameter adjustments...
+ chOffset -= 1 + ( ido * ( 1 + l1 ) );
+ c1Offset -= 1 + ( ido * ( 1 + l1 ) );
+ ccOffset -= 1 + ( ido * ( 1 + ip ) );
+ ch2Offset -= 1 + idl1;
+ c2Offset -= 1 + idl1;
+ waOffset -= 1;
+
+ // Function body:
+ idot = ido / 2;
+ ipp2 = ip + 2;
+ ipph = ( ip + 1 ) / 2;
+ idp = ip * ido;
+ if ( ido >= l1 ) {
+ for ( j = 2; j <= ipph; j++ ) {
+ jc = ipp2 - j;
+ for ( k = 1; k <= l1; k++ ) {
+ for ( i = 1; i <= ido; i++ ) {
+ ch[ chRef( i, k, j, l1, ido ) + chOffset ] = cc[ ccRef( i, j, k, ip, ido ) + ccOffset ] + cc[ ccRef( i, jc, k, ip, ido ) + ccOffset ];
+ ch[ chRef( i, k, jc, l1, ido ) + chOffset ] = cc[ ccRef( i, j, k, ip, ido ) + ccOffset ] - cc[ ccRef( i, jc, k, ip, ido ) + ccOffset ];
+ }
+ }
+ }
+ for ( k = 1; k <= l1; k++ ) {
+ for ( i = 1; i <= ido; i++ ) {
+ ch[ chRef( i, k, 1, l1, ido ) + chOffset ] = cc[ ccRef( i, 1, k, ip, ido ) + ccOffset ];
+ }
+ }
+ } else {
+ for ( j = 2; j <= ipph; j++ ) {
+ jc = ipp2 - j;
+ for ( i = 1; i <= ido; i++ ) {
+ for ( k = 1; k <= l1; k++ ) {
+ ch[ chRef( i, k, j, l1, ido ) + chOffset ] = cc[ ccRef( i, j, k, ip, ido ) + ccOffset ] + cc[ ccRef( i, jc, k, ip, ido ) + ccOffset ];
+ ch[ chRef( i, k, jc, l1, ido ) + chOffset ] = cc[ ccRef( i, j, k, ip, ido ) + ccOffset ] - cc[ ccRef( i, jc, k, ip, ido ) + ccOffset ];
+ }
+ }
+ }
+ for ( i = 1; i <= ido; i++ ) {
+ for ( k = 1; k <= l1; k++ ) {
+ ch[ chRef( i, k, 1, l1, ido ) + chOffset ] = cc[ ccRef( i, 1, k, ip, ido ) + ccOffset ];
+ }
+ }
+ }
+ idl = 2 - ido;
+ inc = 0;
+ for ( l = 2; l <= ipph; l++ ) {
+ lc = ipp2 - l;
+ idl += ido;
+ for ( ik = 1; ik <= idl1; ik++ ) {
+ c2[ c2Ref( ik, l, idl1 ) + c2Offset ] = ch2[ ch2Ref( ik, 1, idl1 ) + ch2Offset ] + ( wa[ idl - 1 + waOffset ] * ch2[ ch2Ref( ik, 2, idl1 ) + ch2Offset ] );
+ c2[ c2Ref( ik, lc, idl1 ) + c2Offset ] = fsign * wa[ idl + waOffset ] * ch2[ ch2Ref( ik, ip, idl1 ) + ch2Offset ];
+ }
+ idlj = idl;
+ inc += ido;
+ for ( j = 3; j <= ipph; j++ ) {
+ jc = ipp2 - j;
+ idlj += inc;
+ if ( idlj > idp ) {
+ idlj -= idp;
+ }
+ war = wa[ idlj - 1 + waOffset ];
+ wai = wa[ idlj + waOffset ];
+ for ( ik = 1; ik <= idl1; ik++ ) {
+ c2[ c2Ref( ik, l, idl1 ) + c2Offset ] += war * ch2[ ch2Ref( ik, j, idl1 ) + ch2Offset ];
+ c2[ c2Ref( ik, lc, idl1 ) + c2Offset ] += fsign * wai * ch2[ ch2Ref( ik, jc, idl1 ) + ch2Offset ];
+ }
+ }
+ }
+ for ( j = 2; j <= ipph; j++ ) {
+ for ( ik = 1; ik <= idl1; ik++ ) {
+ ch2[ ch2Ref( ik, 1, idl1 ) + ch2Offset ] += ch2[ ch2Ref( ik, j, idl1 ) + ch2Offset ];
+ }
+ }
+ for ( j = 2; j <= ipph; j++ ) {
+ jc = ipp2 - j;
+ for ( ik = 2; ik <= idl1; ik += 2 ) {
+ ch2[ ch2Ref( ik - 1, j, idl1 ) + ch2Offset ] = c2[ c2Ref( ik - 1, j, idl1 ) + c2Offset ] - c2[ c2Ref( ik, jc, idl1 ) + c2Offset ];
+ ch2[ ch2Ref( ik - 1, jc, idl1 ) + ch2Offset ] = c2[ c2Ref( ik - 1, j, idl1 ) + c2Offset ] + c2[ c2Ref( ik, jc, idl1 ) + c2Offset ];
+ ch2[ ch2Ref( ik, j, idl1 ) + ch2Offset ] = c2[ c2Ref( ik, j, idl1 ) + c2Offset ] + c2[ c2Ref( ik - 1, jc, idl1 ) + c2Offset ];
+ ch2[ ch2Ref( ik, jc, idl1 ) + ch2Offset ] = c2[ c2Ref( ik, j, idl1 ) + c2Offset ] - c2[ c2Ref( ik - 1, jc, idl1 ) + c2Offset ];
+ }
+ }
+ nac[ 0 ] = 1;
+ if ( ido === 2 ) {
+ return;
+ }
+ nac[ 0 ] = 0;
+ for ( ik = 1; ik <= idl1; ik++ ) {
+ c2[ c2Ref( ik, 1, idl1 ) + c2Offset ] = ch2[ ch2Ref( ik, 1, idl1 ) + ch2Offset ];
+ }
+ for ( j = 2; j <= ip; j++ ) {
+ for ( k = 1; k <= l1; k++ ) {
+ c1[ c1Ref( 1, k, j, l1, ido ) + c1Offset ] = ch[ chRef( 1, k, j, l1, ido ) + chOffset ];
+ c1[ c1Ref( 2, k, j, l1, ido ) + c1Offset ] = ch[ chRef( 2, k, j, l1, ido ) + chOffset ];
+ }
+ }
+ if ( idot <= l1 ) {
+ idij = 0;
+ for ( j = 2; j <= ip; j++ ) {
+ idij += 2;
+ for ( i = 4; i <= ido; i += 2 ) {
+ idij += 2;
+ for ( k = 1; k <= l1; k++ ) {
+ c1[ c1Ref( i - 1, k, j, l1, ido ) + c1Offset ] = ( wa[ idij - 1 + waOffset ] * ch[ chRef( i - 1, k, j, l1, ido ) + chOffset ] ) - ( fsign * wa[ idij + waOffset ] * ch[ chRef( i, k, j, l1, ido ) + chOffset ] );
+ c1[ c1Ref( i, k, j, l1, ido ) + c1Offset ] = ( wa[ idij + waOffset ] * ch[ chRef( i, k, j, l1, ido ) + chOffset ] ) + ( fsign * wa[ idij + waOffset ] * ch[ chRef( i - 1, k, j, l1, ido ) + chOffset ] );
+ }
+ }
+ }
+ return;
+ }
+ idj = 2 - ido;
+ for ( j = 2; j <= ip; j++ ) {
+ idj += ido;
+ for ( k = 1; k <= l1; k++ ) {
+ idij = idj;
+ for ( i = 4; i <= ido; i += 2 ) {
+ idij += 2;
+ c1[ c1Ref( i - 1, k, j, l1, ido ) + c1Offset ] = ( wa[ idij - 1 + waOffset ] * ch[ chRef( i - 1, k, j, l1, ido ) + chOffset ] ) - ( fsign * wa[ idij + waOffset ] * ch[ chRef( i, k, j, l1, ido ) + chOffset ] );
+ c1[ c1Ref( i, k, j, l1, ido ) + c1Offset ] = ( wa[ idij - 1 + waOffset ] * ch[ chRef( i, k, j, l1, ido ) + chOffset ] ) + ( fsign * wa[ idij + waOffset ] * ch[ chRef( i - 1, k, j, l1, ido ) + chOffset ] );
+ }
+ }
+ }
+}
+
+
+// EXPORTS //
+
+module.exports = passfb;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/lib/passfb5.js b/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/lib/passfb5.js
new file mode 100644
index 000000000000..af2f8689ce72
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/lib/passfb5.js
@@ -0,0 +1,218 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+/* eslint-disable max-len */
+
+'use strict';
+
+// MODULES //
+
+var sincos = require( '@stdlib/math/base/special/sincos' );
+var TWO_PI = require( '@stdlib/constants/float64/two-pi' );
+var chRef = require( './ch_ref.js' );
+var ccRef = require( './cc_ref.js' );
+
+
+// VARIABLES //
+
+var sc1 = sincos( TWO_PI / 5 );
+var sc2 = sincos( ( 2 * TWO_PI ) / 5 );
+var TR11 = sc1[ 1 ]; // 0.309016994374947
+var TI11 = sc1[ 0 ]; // 0.951056516295154
+var TR12 = sc2[ 1 ]; // -0.809016994374947
+var TI12 = sc2[ 0 ]; // 0.587785252292473
+
+
+// MAIN //
+
+/**
+* Performs a pass of length 5 of the FFT algorithm with a sign factor.
+*
+* @private
+* @param {integer} ido - number of real values for each transform
+* @param {integer} l1 - length of the input sequences
+* @param {Float64Array} cc - input array containing sequences to be transformed
+* @param {number} ccOffset - offset for the input array
+* @param {Float64Array} ch - output array containing transformed sequences
+* @param {number} chOffset - offset for the output array
+* @param {Float64Array} wa1 - first array of twiddle factors
+* @param {number} wa1Offset - offset for the first twiddle factors array
+* @param {Float64Array} wa2 - second array of twiddle factors
+* @param {number} wa2Offset - offset for the second twiddle factors array
+* @param {Float64Array} wa3 - third array of twiddle factors
+* @param {number} wa3Offset - offset for the third twiddle factors array
+* @param {Float64Array} wa4 - fourth array of twiddle factors
+* @param {number} wa4Offset - offset for the fourth twiddle factors array
+* @param {number} fsign - sign factor for the FFT computation
+* @returns {void}
+*/
+function passfb5( ido, l1, cc, ccOffset, ch, chOffset, wa1, wa1Offset, wa2, wa2Offset, wa3, wa3Offset, wa4, wa4Offset, fsign ) { // eslint-disable-line max-params
+ var ci2;
+ var ci3;
+ var ci4;
+ var ci5;
+ var di2;
+ var di3;
+ var di4;
+ var di5;
+ var cr2;
+ var cr3;
+ var cr4;
+ var cr5;
+ var ti2;
+ var ti3;
+ var ti4;
+ var ti5;
+ var dr2;
+ var dr3;
+ var dr4;
+ var dr5;
+ var tr2;
+ var tr3;
+ var tr4;
+ var tr5;
+ var i;
+ var k;
+
+ TI11 *= fsign;
+ TI12 *= fsign;
+
+ // Parameter adjustments...
+ chOffset -= 1 + ( ido * ( 1 + l1 ) );
+ ccOffset -= 1 + ( ido * 6 );
+ wa1Offset -= 1;
+ wa2Offset -= 1;
+ wa3Offset -= 1;
+ wa4Offset -= 1;
+
+ // Function body:
+ if ( ido === 2 ) {
+ for ( k = 1; k <= l1; k++ ) {
+ ti5 = cc[ ccRef( 2, 2, k, 5, ido ) + ccOffset ] - cc[ ccRef( 2, 5, k, 5, ido ) + ccOffset ];
+ ti2 = cc[ ccRef( 2, 2, k, 5, ido ) + ccOffset ] + cc[ ccRef( 2, 5, k, 5, ido ) + ccOffset ];
+ ti4 = cc[ ccRef( 2, 3, k, 5, ido ) + ccOffset ] - cc[ ccRef( 2, 4, k, 5, ido ) + ccOffset ];
+ ti3 = cc[ ccRef( 2, 3, k, 5, ido ) + ccOffset ] + cc[ ccRef( 2, 4, k, 5, ido ) + ccOffset ];
+ tr5 = cc[ ccRef( 1, 2, k, 5, ido ) + ccOffset ] - cc[ ccRef( 1, 5, k, 5, ido ) + ccOffset ];
+ tr2 = cc[ ccRef( 1, 2, k, 5, ido ) + ccOffset ] + cc[ ccRef( 1, 5, k, 5, ido ) + ccOffset ];
+ tr4 = cc[ ccRef( 1, 3, k, 5, ido ) + ccOffset ] - cc[ ccRef( 1, 4, k, 5, ido ) + ccOffset ];
+ tr3 = cc[ ccRef( 1, 3, k, 5, ido ) + ccOffset ] + cc[ ccRef( 1, 4, k, 5, ido ) + ccOffset ];
+ ch[ chRef( 1, k, 1, l1, ido ) + chOffset ] = cc[ ccRef( 1, 1, k, 5, ido ) + ccOffset ] + tr2 + tr3;
+ ch[ chRef( 2, k, 1, l1, ido ) + chOffset ] = cc[ ccRef( 2, 1, k, 5, ido ) + ccOffset ] + ti2 + ti3;
+ cr2 = cc[ ccRef( 1, 1, k, 5, ido ) + ccOffset ] + ( TR11 * tr2 ) + ( TR12 * tr3 );
+ ci2 = cc[ ccRef( 2, 1, k, 5, ido ) + ccOffset ] + ( TR11 * ti2 ) + ( TR12 * ti3 );
+ cr3 = cc[ ccRef( 1, 1, k, 5, ido ) + ccOffset ] + ( TR12 * tr2 ) + ( TR11 * tr3 );
+ ci3 = cc[ ccRef( 2, 1, k, 5, ido ) + ccOffset ] + ( TR12 * ti2 ) + ( TR11 * ti3 );
+ cr5 = ( TI11 * tr5 ) + ( TI12 * tr4 );
+ ci5 = ( TI11 * ti5 ) + ( TI12 * ti4 );
+ cr4 = ( TI12 * tr5 ) - ( TI11 * tr4 );
+ ci4 = ( TI12 * ti5 ) - ( TI11 * ti4 );
+ ch[ chRef( 1, k, 2, l1, ido ) + chOffset ] = cr2 - ci5;
+ ch[ chRef( 1, k, 5, l1, ido ) + chOffset ] = cr2 + ci5;
+ ch[ chRef( 2, k, 2, l1, ido ) + chOffset ] = ci2 + cr5;
+ ch[ chRef( 2, k, 3, l1, ido ) + chOffset ] = ci3 + cr4;
+ ch[ chRef( 1, k, 3, l1, ido ) + chOffset ] = cr3 - ci4;
+ ch[ chRef( 1, k, 4, l1, ido ) + chOffset ] = cr3 + ci4;
+ ch[ chRef( 2, k, 4, l1, ido ) + chOffset ] = ci3 - cr4;
+ ch[ chRef( 2, k, 5, l1, ido ) + chOffset ] = ci2 - cr5;
+ }
+ } else {
+ for ( k = 1; k <= l1; k++ ) {
+ for ( i = 2; i <= ido; i += 2 ) {
+ ti5 = cc[ ccRef( i, 2, k, 5, ido ) + ccOffset ] - cc[ ccRef( i, 5, k, 5, ido ) + ccOffset ];
+ ti2 = cc[ ccRef( i, 2, k, 5, ido ) + ccOffset ] + cc[ ccRef( i, 5, k, 5, ido ) + ccOffset ];
+ ti4 = cc[ ccRef( i, 3, k, 5, ido ) + ccOffset ] - cc[ ccRef( i, 4, k, 5, ido ) + ccOffset ];
+ ti3 = cc[ ccRef( i, 3, k, 5, ido ) + ccOffset ] + cc[ ccRef( i, 4, k, 5, ido ) + ccOffset ];
+ tr5 = cc[ ccRef( i - 1, 2, k, 5, ido ) + ccOffset ] - cc[ ccRef( i - 1, 5, k, 5, ido ) + ccOffset ];
+ tr2 = cc[ ccRef( i - 1, 2, k, 5, ido ) + ccOffset ] + cc[ ccRef( i - 1, 5, k, 5, ido ) + ccOffset ];
+ tr4 = cc[ ccRef( i - 1, 3, k, 5, ido ) + ccOffset ] - cc[ ccRef( i - 1, 4, k, 5, ido ) + ccOffset ];
+ tr3 = cc[ ccRef( i - 1, 3, k, 5, ido ) + ccOffset ] + cc[ ccRef( i - 1, 4, k, 5, ido ) + ccOffset ];
+ ch[ chRef( i - 1, k, 1, l1, ido ) + chOffset ] = cc[ ccRef( i - 1, 1, k, 5, ido ) + ccOffset ] + tr2 + tr3;
+ ch[ chRef( i, k, 1, l1, ido ) + chOffset ] = cc[ ccRef( i, 1, k, 5, ido ) + ccOffset ] + ti2 + ti3;
+ cr2 = cc[ ccRef( i - 1, 1, k, 5, ido ) + ccOffset ] + ( TR11 * tr2 ) + ( TR12 * tr3 );
+ ci2 = cc[ ccRef( i, 1, k, 5, ido ) + ccOffset ] + ( TR11 * ti2 ) + ( TR12 * ti3 );
+ cr3 = cc[ ccRef( i - 1, 1, k, 5, ido ) + ccOffset ] + ( TR12 * tr2 ) + ( TR11 * tr3 );
+ ci3 = cc[ ccRef( i, 1, k, 5, ido ) + ccOffset ] + ( TR12 * ti2 ) + ( TR11 * ti3 );
+ cr5 = ( TI11 * tr5 ) + ( TI12 * tr4 );
+ ci5 = ( TI11 * ti5 ) + ( TI12 * ti4 );
+ cr4 = ( TI12 * tr5 ) - ( TI11 * tr4 );
+ ci4 = ( TI12 * ti5 ) - ( TI11 * ti4 );
+ dr3 = cr3 - ci4;
+ dr4 = cr3 + ci4;
+ di3 = ci3 + cr4;
+ di4 = ci3 - cr4;
+ dr5 = cr2 + ci5;
+ dr2 = cr2 - ci5;
+ di5 = ci2 - cr5;
+ di2 = ci2 + cr5;
+ ch[ chRef( i - 1, k, 2, l1, ido ) + chOffset ] = ( wa1[ i - 1 + wa1Offset ] * dr2 ) - ( fsign * wa1[ i + wa1Offset ] * di2 );
+ ch[ chRef( i, k, 2, l1, ido ) + chOffset ] = ( wa1[ i - 1 + wa1Offset ] * di2 ) + ( fsign * wa1[ i + wa1Offset ] * dr2 );
+ ch[ chRef( i - 1, k, 3, l1, ido ) + chOffset ] = ( wa2[ i - 1 + wa2Offset ] * dr3 ) - ( fsign * wa2[ i + wa2Offset ] * di3 );
+ ch[ chRef( i, k, 3, l1, ido ) + chOffset ] = ( wa2[ i - 1 + wa2Offset ] * di3 ) + ( fsign * wa2[ i + wa2Offset ] * dr3 );
+ ch[ chRef( i - 1, k, 4, l1, ido ) + chOffset ] = ( wa3[ i - 1 + wa3Offset ] * dr4 ) - ( fsign * wa3[ i + wa3Offset ] * di4 );
+ ch[ chRef( i, k, 4, l1, ido ) + chOffset ] = ( wa3[ i - 1 + wa3Offset ] * di4 ) + ( fsign * wa3[ i + wa3Offset ] * dr4 );
+ ch[ chRef( i - 1, k, 5, l1, ido ) + chOffset ] = ( wa4[ i - 1 + wa4Offset ] * dr5 ) - ( fsign * wa4[ i + wa4Offset ] * di5 );
+ ch[ chRef( i, k, 5, l1, ido ) + chOffset ] = ( wa4[ i - 1 + wa4Offset ] * di5 ) + ( fsign * wa4[ i + wa4Offset ] * dr5 );
+ }
+ }
+ }
+}
+
+
+// EXPORTS //
+
+module.exports = passfb5;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/package.json b/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/package.json
new file mode 100644
index 000000000000..8dee05fb9399
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cfftf/package.json
@@ -0,0 +1,56 @@
+{
+ "name": "@stdlib/fft/base/fftpack/cfftf",
+ "version": "0.0.0",
+ "description": "{{TODO:description}}",
+ "license": "Apache-2.0",
+ "author": {
+ "name": "The Stdlib Authors",
+ "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
+ },
+ "contributors": [
+ {
+ "name": "The Stdlib Authors",
+ "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
+ }
+ ],
+ "main": "./lib",
+ "directories": {
+ "benchmark": "./benchmark",
+ "doc": "./docs",
+ "example": "./examples",
+ "lib": "./lib",
+ "test": "./test"
+ },
+ "types": "./docs/types",
+ "scripts": {},
+ "homepage": "https://github.com/stdlib-js/stdlib",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/stdlib-js/stdlib.git"
+ },
+ "bugs": {
+ "url": "https://github.com/stdlib-js/stdlib/issues"
+ },
+ "dependencies": {},
+ "devDependencies": {},
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "keywords": [
+ "stdlib",
+ "{{TODO:keywords}}"
+ ],
+ "__stdlib__": {}
+}
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cffti/lib/cffti1.js b/lib/node_modules/@stdlib/fft/base/fftpack/cffti/lib/cffti1.js
new file mode 100644
index 000000000000..ae6aadf84cc4
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cffti/lib/cffti1.js
@@ -0,0 +1,147 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+'use strict';
+
+// MODULES //
+
+var sincos = require( '@stdlib/math/base/special/sincos' );
+var TWO_PI = require( '@stdlib/constants/float64/two-pi' );
+var decompose = require( '@stdlib/fft/base/fftpack/decompose' );
+
+
+// VARIABLES //
+
+var NTRYH = [ 3, 4, 2, 5 ]; // Initial trial factors for FFT factorization
+
+
+// MAIN //
+
+/**
+* Initializes the working arrays for the FFT algorithm.
+*
+* @private
+* @param {number} n - length of the sequence
+* @param {Float64Array} wa - array of twiddle factors
+* @param {number} wptr - starting index for wa
+* @param {Int32Array} ifac - array containing factorization information
+* @param {number} ifptr - starting index for ifac
+* @returns {void}
+*/
+function cffti1( n, wa, wptr, ifac, ifptr ) {
+ var argld;
+ var argh;
+ var idot;
+ var ipm;
+ var ido;
+ var arg;
+ var nf;
+ var ip;
+ var ii;
+ var ld;
+ var fi;
+ var l2;
+ var l1;
+ var k1;
+ var i1;
+ var sc;
+ var j;
+ var i;
+
+ ifptr -= 1;
+ wptr -= 1;
+
+ nf = decompose( n, NTRYH, ifac, 1, ifptr );
+ argh = TWO_PI / n;
+ i = 2;
+ l1 = 1;
+ for ( k1 = 1; k1 <= nf; k1++ ) {
+ ip = ifac[ ifptr + k1 + 2 ];
+ ld = 0;
+ l2 = ip * l1;
+ ido = n / l2;
+ idot = ido + ido + 2;
+ ipm = ip - 1;
+ for ( j = 1; j <= ipm; j++ ) {
+ i1 = i;
+ wa[ wptr + i - 1 ] = 1.0;
+ wa[ wptr + i ] = 0.0;
+ ld += l1;
+ fi = 0.0;
+ argld = ld * argh;
+ for ( ii = 4; ii <= idot; ii += 2 ) {
+ i += 2;
+ fi += 1.0;
+ arg = fi * argld;
+ sc = sincos( arg );
+ wa[ wptr + i - 1 ] = sc[ 1 ];
+ wa[ wptr + i ] = sc[ 0 ];
+ }
+ if ( ip > 5 ) {
+ wa[ wptr + i1 - 1 ] = wa[ wptr + i - 1 ];
+ wa[ wptr + i1 ] = wa[ wptr + i ];
+ }
+ }
+ l1 = l2;
+ }
+}
+
+
+// EXPORTS //
+
+module.exports = cffti1;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cffti/lib/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/cffti/lib/index.js
new file mode 100644
index 000000000000..9b77cb2302e2
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cffti/lib/index.js
@@ -0,0 +1,39 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+'use strict';
+
+/**
+* TODO: description.
+*
+* @module @stdlib/fft/base/fftpack/cffti
+*
+* @example
+* var cffti = require( '@stdlib/fft/base/fftpack/cffti' );
+*
+* // TODO
+*/
+
+// MODULES //
+
+var main = require( './main.js' );
+
+
+// EXPORTS //
+
+module.exports = main;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cffti/lib/main.js b/lib/node_modules/@stdlib/fft/base/fftpack/cffti/lib/main.js
new file mode 100644
index 000000000000..1d13edc62b87
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cffti/lib/main.js
@@ -0,0 +1,95 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+'use strict';
+
+// MODULES //
+
+var cffti1 = require( './cffti1.js' );
+
+
+// MAIN //
+
+/**
+* Initializes the working array for the complex FFT.
+*
+* @private
+* @param {number} n - length of the sequence to transform
+* @param {Float64Array} wsave - working array containing precomputed values
+* @param {number} wptr - starting index for wsave
+* @returns {void}
+*/
+function cffti( n, wsave, wptr ) {
+ var iw1;
+ var iw2;
+
+ wptr -= 1;
+
+ if ( n <= 1 ) {
+ // FFT of one data point is the identity...
+ return;
+ }
+ iw1 = ( 2 * n ) + 1;
+ iw2 = iw1 + ( 2 * n );
+ cffti1( n, wsave, wptr + iw1, wsave, wptr + iw2 );
+}
+
+
+// EXPORTS //
+
+module.exports = cffti;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cffti/package.json b/lib/node_modules/@stdlib/fft/base/fftpack/cffti/package.json
new file mode 100644
index 000000000000..0bec62f998f8
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cffti/package.json
@@ -0,0 +1,56 @@
+{
+ "name": "@stdlib/fft/base/fftpack/cffti",
+ "version": "0.0.0",
+ "description": "{{TODO:description}}",
+ "license": "Apache-2.0",
+ "author": {
+ "name": "The Stdlib Authors",
+ "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
+ },
+ "contributors": [
+ {
+ "name": "The Stdlib Authors",
+ "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
+ }
+ ],
+ "main": "./lib",
+ "directories": {
+ "benchmark": "./benchmark",
+ "doc": "./docs",
+ "example": "./examples",
+ "lib": "./lib",
+ "test": "./test"
+ },
+ "types": "./docs/types",
+ "scripts": {},
+ "homepage": "https://github.com/stdlib-js/stdlib",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/stdlib-js/stdlib.git"
+ },
+ "bugs": {
+ "url": "https://github.com/stdlib-js/stdlib/issues"
+ },
+ "dependencies": {},
+ "devDependencies": {},
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "keywords": [
+ "stdlib",
+ "{{TODO:keywords}}"
+ ],
+ "__stdlib__": {}
+}
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cosqb/lib/cosqb1.js b/lib/node_modules/@stdlib/fft/base/fftpack/cosqb/lib/cosqb1.js
new file mode 100644
index 000000000000..e8601ef86570
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cosqb/lib/cosqb1.js
@@ -0,0 +1,130 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+/* eslint-disable max-len */
+
+'use strict';
+
+// MODULES //
+
+var floor = require( '@stdlib/math/base/special/floor' );
+var rfftb = require( '@stdlib/fft/base/fftpack/rfftb' );
+
+
+// MAIN //
+
+/**
+* Performs the quarter-wave cosine backward transform.
+*
+* @private
+* @param {number} n - length of the sequence to transform
+* @param {Float64Array} x - input array containing sequence to be transformed
+* @param {number} xptr - starting index for `x`
+* @param {Float64Array} w - working array containing precomputed cosine values
+* @param {number} wptr - starting index for `w`
+* @param {Float64Array} xh - auxiliary working array
+* @param {number} xhptr - starting index for `xh`
+* @returns {void}
+*/
+function cosqb1( n, x, xptr, w, wptr, xh, xhptr ) {
+ var xim1;
+ var modn;
+ var np2;
+ var ns2;
+ var kc;
+ var k;
+ var i;
+
+ xhptr -= 1;
+ xptr -= 1;
+ wptr -= 1;
+
+ // Function Body:
+ ns2 = floor( ( n + 1 ) / 2 );
+ np2 = n + 2;
+ for ( i = 3; i <= n; i += 2 ) {
+ xim1 = x[ xptr + i - 1 ] + x[ xptr + i ];
+ x[ xptr + i ] -= x[ xptr + i - 1 ];
+ x[ xptr + i - 1 ] = xim1;
+ }
+ x[ xptr + 1 ] += x[ xptr + 1 ];
+ modn = n % 2;
+ if ( modn === 0 ) {
+ x[ xptr + n ] += x[ xptr + n ];
+ }
+ rfftb( n, x, xptr + 1, xh, xhptr + 1 );
+ for ( k = 2; k <= ns2; k++ ) {
+ kc = np2 - k;
+ xh[ xhptr + k ] = ( w[ wptr + k - 1 ] * x[ xptr + kc ] ) + ( w[ wptr + kc - 1 ] * x[ xptr + k ] );
+ xh[ xhptr + kc ] = ( w[ wptr + k - 1 ] * x[ xptr + k ] ) - ( w[ wptr + kc - 1 ] * x[ xptr + kc ] );
+ }
+ if ( modn === 0 ) {
+ x[ xptr + ns2 + 1 ] = w[ wptr + ns2 ] * ( x[ xptr + ns2 + 1 ] + x[ xptr + ns2 + 1 ] );
+ }
+ for ( k = 2; k <= ns2; k++ ) {
+ kc = np2 - k;
+ x[ xptr + k ] = xh[ xhptr + k ] + xh[ xhptr + kc ];
+ x[ xptr + kc ] = xh[ xhptr + k ] - xh[ xhptr + kc ];
+ }
+ x[ xptr + 1 ] += x[ xptr + 1 ];
+}
+
+
+// EXPORTS //
+
+module.exports = cosqb1;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cosqb/lib/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/cosqb/lib/index.js
new file mode 100644
index 000000000000..d3424d7471a8
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cosqb/lib/index.js
@@ -0,0 +1,39 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+'use strict';
+
+/**
+* TODO: description.
+*
+* @module @stdlib/fft/base/fftpack/cosqb
+*
+* @example
+* var cosqb = require( '@stdlib/fft/base/fftpack/cosqb' );
+*
+* // TODO
+*/
+
+// MODULES //
+
+var main = require( './main.js' );
+
+
+// EXPORTS //
+
+module.exports = main;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cosqb/lib/main.js b/lib/node_modules/@stdlib/fft/base/fftpack/cosqb/lib/main.js
new file mode 100644
index 000000000000..1ded0d7ecac4
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cosqb/lib/main.js
@@ -0,0 +1,105 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+'use strict';
+
+// MODULES //
+
+var SQRT_TWO = require( '@stdlib/constants/float64/sqrt-two' );
+var cosqb1 = require( './cosqb1.js' );
+
+
+// VARIABLES //
+
+// Two times the square root of 2:
+var TSQRT2 = 2.0 * SQRT_TWO;
+
+
+// MAIN //
+
+/**
+* Performs the quarter-wave cosine backward transform.
+*
+* @param {number} n - length of the sequence to transform
+* @param {Float64Array} x - input array containing sequence to be transformed
+* @param {number} xptr - starting index for `x`
+* @param {Float64Array} wsave - working array containing precomputed values
+* @param {number} wptr - starting index for `wsave`
+* @returns {void}
+*/
+function cosqb( n, x, xptr, wsave, wptr ) { // FIXME: refactor
+ var x1;
+
+ wptr -= 1;
+ xptr -= 1;
+
+ if ( n < 2 ) {
+ x[ xptr + 1 ] *= 4.0;
+ } else if ( n === 2 ) {
+ x1 = ( x[ xptr + 1 ] + x[ xptr + 2 ] ) * 4.0;
+ x[ xptr + 2 ] = TSQRT2 * ( x[ xptr + 1 ] - x[ xptr + 2 ] );
+ x[ xptr + 1 ] = x1;
+ } else {
+ cosqb1( n, x, xptr + 1, wsave, wptr + 1, wsave, wptr + n + 1 );
+ }
+}
+
+
+// EXPORTS //
+
+module.exports = cosqb;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cosqb/package.json b/lib/node_modules/@stdlib/fft/base/fftpack/cosqb/package.json
new file mode 100644
index 000000000000..9372412a4c3a
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cosqb/package.json
@@ -0,0 +1,56 @@
+{
+ "name": "@stdlib/fft/base/fftpack/cosqb",
+ "version": "0.0.0",
+ "description": "{{TODO:description}}",
+ "license": "Apache-2.0",
+ "author": {
+ "name": "The Stdlib Authors",
+ "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
+ },
+ "contributors": [
+ {
+ "name": "The Stdlib Authors",
+ "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
+ }
+ ],
+ "main": "./lib",
+ "directories": {
+ "benchmark": "./benchmark",
+ "doc": "./docs",
+ "example": "./examples",
+ "lib": "./lib",
+ "test": "./test"
+ },
+ "types": "./docs/types",
+ "scripts": {},
+ "homepage": "https://github.com/stdlib-js/stdlib",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/stdlib-js/stdlib.git"
+ },
+ "bugs": {
+ "url": "https://github.com/stdlib-js/stdlib/issues"
+ },
+ "dependencies": {},
+ "devDependencies": {},
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "keywords": [
+ "stdlib",
+ "{{TODO:keywords}}"
+ ],
+ "__stdlib__": {}
+}
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cosqf/lib/cosqf1.js b/lib/node_modules/@stdlib/fft/base/fftpack/cosqf/lib/cosqf1.js
new file mode 100644
index 000000000000..2970e1ebf8c4
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cosqf/lib/cosqf1.js
@@ -0,0 +1,127 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+/* eslint-disable max-len */
+
+'use strict';
+
+// MODULES //
+
+var rfftf = require( '@stdlib/fft/base/fftpack/rfftf' );
+
+
+// MAIN //
+
+/**
+* Performs the quarter-wave cosine forward transform.
+*
+* @private
+* @param {number} n - length of the sequence to transform
+* @param {Float64Array} x - input array containing sequence to be transformed
+* @param {number} xptr - starting index for `x`
+* @param {Float64Array} w - working array containing precomputed cosine values
+* @param {number} wptr - starting index for `w`
+* @param {Float64Array} xh - auxiliary working array
+* @param {number} xhptr - starting index for `xh`
+* @returns {void}
+*/
+function cosqf1( n, x, xptr, w, wptr, xh, xhptr ) {
+ var xim1;
+ var modn;
+ var np2;
+ var ns2;
+ var kc;
+ var k;
+ var i;
+
+ xhptr -= 1;
+ xptr -= 1;
+ wptr -= 1;
+
+ // Function Body:
+ ns2 = ( n + 1 ) / 2;
+ np2 = n + 2;
+ for ( k = 2; k <= ns2; k++ ) {
+ kc = np2 - k;
+ xh[ xhptr + k ] = x[ xptr + k ] + x[ xptr + kc ];
+ xh[ xhptr + kc ] = x[ xptr + k ] - x[ xptr + kc ];
+ }
+ modn = n % 2;
+ if ( modn === 0 ) {
+ xh[ xhptr + ns2 + 1 ] = x[ xptr + ns2 + 1 ] + x[ xptr + ns2 + 1 ];
+ }
+ for ( k = 2; k <= ns2; k++ ) {
+ kc = np2 - k;
+ x[ xptr + k ] = ( w[ wptr + k - 1 ] * xh[ xhptr + kc ] ) + ( w[ wptr + kc - 1 ] * xh[ xhptr + k ] );
+ x[ xptr + kc ] = ( w[ wptr + k - 1 ] * xh[ xhptr + k ] ) - ( w[ wptr + kc - 1 ] * xh[ xhptr + kc ] );
+ }
+ if ( modn === 0 ) {
+ x[ xptr + ns2 ] = w[ wptr + ns2 ] * xh[ xhptr + ns2 + 1 ];
+ }
+ rfftf( n, x, xptr + 1, xh, xhptr + 1 );
+ for ( i = 3; i <= n; i += 2 ) {
+ xim1 = x[ xptr + i - 1 ] - x[ xptr + i ];
+ x[ xptr + i ] = x[ xptr + i - 1 ] + x[ xptr + i ];
+ x[ xptr + i - 1 ] = xim1;
+ }
+}
+
+
+// EXPORTS //
+
+module.exports = cosqf1;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cosqf/lib/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/cosqf/lib/index.js
new file mode 100644
index 000000000000..94292b3659cd
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cosqf/lib/index.js
@@ -0,0 +1,39 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+'use strict';
+
+/**
+* TODO: description.
+*
+* @module @stdlib/fft/base/fftpack/cosqf
+*
+* @example
+* var cosqf = require( '@stdlib/fft/base/fftpack/cosqf' );
+*
+* // TODO
+*/
+
+// MODULES //
+
+var main = require( './main.js' );
+
+
+// EXPORTS //
+
+module.exports = main;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cosqf/lib/main.js b/lib/node_modules/@stdlib/fft/base/fftpack/cosqf/lib/main.js
new file mode 100644
index 000000000000..e1f6371dc06b
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cosqf/lib/main.js
@@ -0,0 +1,98 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+'use strict';
+
+// MODULES //
+
+var SQRT2 = require( '@stdlib/constants/float64/sqrt-two' );
+var cosqf1 = require( './cosqf1.js' );
+
+
+// MAIN //
+
+/**
+* Performs the quarter-wave cosine forward transform.
+*
+* @param {number} n - length of the sequence to transform
+* @param {Float64Array} x - input array containing sequence to be transformed
+* @param {number} xptr - starting index for `x`
+* @param {Float64Array} wsave - working array containing precomputed values
+* @param {number} wptr - starting index for `wsave`
+* @returns {void}
+*/
+function cosqf( n, x, xptr, wsave, wptr ) { // FIXME: refactor
+ var tsqx;
+
+ wptr -= 1;
+ xptr -= 1;
+
+ // Function Body:
+ if ( n === 2 ) {
+ tsqx = SQRT2 * x[ xptr + 2 ];
+ x[ xptr + 2 ] = x[ xptr + 1 ] - tsqx;
+ x[ xptr + 1 ] += tsqx;
+ } else if ( n > 2 ) {
+ cosqf1( n, x, xptr + 1, wsave, wptr + 1, wsave, wptr + n + 1 );
+ }
+}
+
+
+// EXPORTS //
+
+module.exports = cosqf;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cosqf/package.json b/lib/node_modules/@stdlib/fft/base/fftpack/cosqf/package.json
new file mode 100644
index 000000000000..49d1f86d3e74
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cosqf/package.json
@@ -0,0 +1,56 @@
+{
+ "name": "@stdlib/fft/base/fftpack/cosqf",
+ "version": "0.0.0",
+ "description": "{{TODO:description}}",
+ "license": "Apache-2.0",
+ "author": {
+ "name": "The Stdlib Authors",
+ "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
+ },
+ "contributors": [
+ {
+ "name": "The Stdlib Authors",
+ "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
+ }
+ ],
+ "main": "./lib",
+ "directories": {
+ "benchmark": "./benchmark",
+ "doc": "./docs",
+ "example": "./examples",
+ "lib": "./lib",
+ "test": "./test"
+ },
+ "types": "./docs/types",
+ "scripts": {},
+ "homepage": "https://github.com/stdlib-js/stdlib",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/stdlib-js/stdlib.git"
+ },
+ "bugs": {
+ "url": "https://github.com/stdlib-js/stdlib/issues"
+ },
+ "dependencies": {},
+ "devDependencies": {},
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "keywords": [
+ "stdlib",
+ "{{TODO:keywords}}"
+ ],
+ "__stdlib__": {}
+}
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cosqi/lib/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/cosqi/lib/index.js
new file mode 100644
index 000000000000..58b23230d462
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cosqi/lib/index.js
@@ -0,0 +1,39 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+'use strict';
+
+/**
+* TODO: description.
+*
+* @module @stdlib/fft/base/fftpack/cosqi
+*
+* @example
+* var cosqi = require( '@stdlib/fft/base/fftpack/cosqi' );
+*
+* // TODO
+*/
+
+// MODULES //
+
+var main = require( './main.js' );
+
+
+// EXPORTS //
+
+module.exports = main;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cosqi/lib/main.js b/lib/node_modules/@stdlib/fft/base/fftpack/cosqi/lib/main.js
new file mode 100644
index 000000000000..422170d0c73b
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cosqi/lib/main.js
@@ -0,0 +1,96 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+'use strict';
+
+// MODULES //
+
+var HALF_PI = require( '@stdlib/constants/float64/half-pi' );
+var cos = require( '@stdlib/math/base/special/cos' );
+var rffti = require( '@stdlib/fft/base/fftpack/rffti' );
+
+
+// MAIN //
+
+/**
+* Initializes the working array for quarter-wave cosine transforms.
+*
+* @param {number} n - sequence length
+* @param {Float64Array} wsave - working array
+* @param {number} wptr - starting index for `wsave`
+* @returns {void}
+*/
+function cosqi( n, wsave, wptr ) { // TODO: consider moving to a separate package `fft/base/fftpack/cosqi` after this package has been refactored
+ var fk;
+ var dt;
+ var k;
+
+ wptr -= 1;
+ dt = HALF_PI / n;
+ fk = 0.0;
+ for ( k = 1; k <= n; k++ ) {
+ fk += 1.0;
+ wsave[ wptr + k ] = cos( fk * dt );
+ }
+ rffti( n, wsave, wptr + n + 1 );
+}
+
+
+// EXPORTS //
+
+module.exports = cosqi;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cosqi/package.json b/lib/node_modules/@stdlib/fft/base/fftpack/cosqi/package.json
new file mode 100644
index 000000000000..6195e1c070e9
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cosqi/package.json
@@ -0,0 +1,56 @@
+{
+ "name": "@stdlib/fft/base/fftpack/cosqi",
+ "version": "0.0.0",
+ "description": "TODO: description.",
+ "license": "Apache-2.0",
+ "author": {
+ "name": "The Stdlib Authors",
+ "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
+ },
+ "contributors": [
+ {
+ "name": "The Stdlib Authors",
+ "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
+ }
+ ],
+ "main": "./lib",
+ "directories": {
+ "benchmark": "./benchmark",
+ "doc": "./docs",
+ "example": "./examples",
+ "lib": "./lib",
+ "test": "./test"
+ },
+ "types": "./docs/types",
+ "scripts": {},
+ "homepage": "https://github.com/stdlib-js/stdlib",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/stdlib-js/stdlib.git"
+ },
+ "bugs": {
+ "url": "https://github.com/stdlib-js/stdlib/issues"
+ },
+ "dependencies": {},
+ "devDependencies": {},
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "keywords": [
+ "stdlib",
+ "{{TODO:keywords}}"
+ ],
+ "__stdlib__": {}
+}
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cost/lib/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/cost/lib/index.js
new file mode 100644
index 000000000000..2f99c7c0153d
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cost/lib/index.js
@@ -0,0 +1,39 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+'use strict';
+
+/**
+* TODO: description.
+*
+* @module @stdlib/fft/base/fftpack/cost
+*
+* @example
+* var cost = require( '@stdlib/fft/base/fftpack/cost' );
+*
+* // TODO
+*/
+
+// MODULES //
+
+var main = require( './main.js' );
+
+
+// EXPORTS //
+
+module.exports = main;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cost/lib/main.js b/lib/node_modules/@stdlib/fft/base/fftpack/cost/lib/main.js
new file mode 100644
index 000000000000..ba78d05ad705
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cost/lib/main.js
@@ -0,0 +1,146 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+'use strict';
+
+// MODULES //
+
+var rfftf = require( '@stdlib/fft/base/fftpack/rfftf' );
+
+
+// MAIN //
+
+/**
+* Computes the discrete Fourier cosine transform of a sequence.
+*
+* @param {number} n - sequence length
+* @param {Float64Array} x - input array
+* @param {number} xptr - starting index for x
+* @param {Float64Array} wsave - working array
+* @param {number} wptr - starting index for wsave
+* @returns {void}
+*/
+function cost( n, x, xptr, wsave, wptr ) { // FIXME: refactor
+ var x1p3;
+ var xim2;
+ var modn;
+ var nm1;
+ var np1;
+ var x1h;
+ var ns2;
+ var tx2;
+ var c1;
+ var t1;
+ var t2;
+ var kc;
+ var xi;
+ var i;
+ var k;
+
+ xptr -= 1;
+ wptr -= 1;
+
+ // Function Body
+ nm1 = n - 1;
+ np1 = n + 1;
+ ns2 = n / 2;
+ if ( n === 2 ) {
+ x1h = x[ xptr + 1 ] + x[ xptr + 2 ];
+ x[ xptr + 2 ] = x[ xptr + 1 ] - x[ xptr + 2 ];
+ x[ xptr + 1 ] = x1h;
+ } else if ( n === 3 ) {
+ x1p3 = x[ xptr + 1 ] + x[ xptr + 3 ];
+ tx2 = x[ xptr + 2 ] + x[ xptr + 2 ];
+ x[ xptr + 2 ] = x[ xptr + 1 ] - x[ xptr + 3 ];
+ x[ xptr + 1 ] = x1p3 + tx2;
+ x[ xptr + 3 ] = x1p3 - tx2;
+ } else if ( n > 3 ) {
+ c1 = x[ xptr + 1 ] - x[ xptr + n ];
+ x[ xptr + 1 ] += x[ xptr + n ];
+ for ( k = 2; k <= ns2; k++ ) {
+ kc = np1 - k;
+ t1 = x[ xptr + k ] + x[ xptr + kc ];
+ t2 = x[ xptr + k ] - x[ xptr + kc ];
+ c1 += wsave[ wptr + kc ] * t2;
+ t2 *= wsave[ wptr + k ];
+ x[ xptr + k ] = t1 - t2;
+ x[ xptr + kc ] = t1 + t2;
+ }
+ modn = n % 2;
+ if ( modn !== 0 ) {
+ x[ xptr + ns2 + 1 ] += x[ xptr + ns2 + 1 ];
+ }
+ rfftf( nm1, x, xptr + 1, wsave, wptr + n + 1 );
+ xim2 = x[ xptr + 2 ];
+ x[ xptr + 2 ] = c1;
+ for ( i = 4; i <= n; i += 2 ) {
+ xi = x[ xptr + i ];
+ x[ xptr + i ] = x[ xptr + i - 2 ] - x[ xptr + i - 1 ];
+ x[ xptr + i - 1 ] = xim2;
+ xim2 = xi;
+ }
+ if ( modn !== 0 ) {
+ x[ xptr + n ] = xim2;
+ }
+ }
+}
+
+
+// EXPORTS //
+
+module.exports = cost;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cost/package.json b/lib/node_modules/@stdlib/fft/base/fftpack/cost/package.json
new file mode 100644
index 000000000000..7b08af457368
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/cost/package.json
@@ -0,0 +1,56 @@
+{
+ "name": "@stdlib/fft/base/fftpack/cost",
+ "version": "0.0.0",
+ "description": "{{TODO:description}}",
+ "license": "Apache-2.0",
+ "author": {
+ "name": "The Stdlib Authors",
+ "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
+ },
+ "contributors": [
+ {
+ "name": "The Stdlib Authors",
+ "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
+ }
+ ],
+ "main": "./lib",
+ "directories": {
+ "benchmark": "./benchmark",
+ "doc": "./docs",
+ "example": "./examples",
+ "lib": "./lib",
+ "test": "./test"
+ },
+ "types": "./docs/types",
+ "scripts": {},
+ "homepage": "https://github.com/stdlib-js/stdlib",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/stdlib-js/stdlib.git"
+ },
+ "bugs": {
+ "url": "https://github.com/stdlib-js/stdlib/issues"
+ },
+ "dependencies": {},
+ "devDependencies": {},
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "keywords": [
+ "stdlib",
+ "{{TODO:keywords}}"
+ ],
+ "__stdlib__": {}
+}
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/costi/lib/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/costi/lib/index.js
new file mode 100644
index 000000000000..8d694f672f4d
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/costi/lib/index.js
@@ -0,0 +1,39 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+'use strict';
+
+/**
+* TODO: description.
+*
+* @module @stdlib/fft/base/fftpack/costi
+*
+* @example
+* var costi = require( '@stdlib/fft/base/fftpack/costi' );
+*
+* // TODO
+*/
+
+// MODULES //
+
+var main = require( './main.js' );
+
+
+// EXPORTS //
+
+module.exports = main;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/costi/lib/main.js b/lib/node_modules/@stdlib/fft/base/fftpack/costi/lib/main.js
new file mode 100644
index 000000000000..521c9c37a36a
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/costi/lib/main.js
@@ -0,0 +1,112 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+'use strict';
+
+// MODULES //
+
+var sincos = require( '@stdlib/math/base/special/sincos' );
+var PI = require( '@stdlib/constants/float64/pi' );
+var rffti = require( '@stdlib/fft/base/fftpack/rffti' );
+
+
+// MAIN //
+
+/**
+* Initializes the working array for the discrete Fourier cosine transform.
+*
+* @param {number} n - sequence length
+* @param {Float64Array} wsave - working array
+* @param {number} wptr - starting index for `wsave`
+* @returns {void}
+*/
+function costi( n, wsave, wptr ) { // FIXME: refactor
+ var nm1;
+ var np1;
+ var ns2;
+ var dt;
+ var sc;
+ var fk;
+ var kc;
+ var k;
+
+ wptr -= 1;
+
+ if ( n <= 3 ) {
+ return;
+ }
+ nm1 = n - 1;
+ np1 = n + 1;
+ ns2 = n / 2;
+ dt = PI / nm1;
+ fk = 0.0;
+
+ for ( k = 2; k <= ns2; k++ ) {
+ kc = np1 - k;
+ fk += 1.0;
+ sc = sincos( fk * dt );
+ wsave[ wptr + k ] = sc[ 0 ] * 2.0;
+ wsave[ wptr + kc ] = sc[ 1 ] * 2.0;
+ }
+ rffti( nm1, wsave, wptr + n + 1 );
+}
+
+
+// EXPORTS //
+
+module.exports = costi;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/costi/package.json b/lib/node_modules/@stdlib/fft/base/fftpack/costi/package.json
new file mode 100644
index 000000000000..e838a76c3c1b
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/costi/package.json
@@ -0,0 +1,56 @@
+{
+ "name": "@stdlib/fft/base/fftpack/costi",
+ "version": "0.0.0",
+ "description": "{{TODO:description}}",
+ "license": "Apache-2.0",
+ "author": {
+ "name": "The Stdlib Authors",
+ "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
+ },
+ "contributors": [
+ {
+ "name": "The Stdlib Authors",
+ "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
+ }
+ ],
+ "main": "./lib",
+ "directories": {
+ "benchmark": "./benchmark",
+ "doc": "./docs",
+ "example": "./examples",
+ "lib": "./lib",
+ "test": "./test"
+ },
+ "types": "./docs/types",
+ "scripts": {},
+ "homepage": "https://github.com/stdlib-js/stdlib",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/stdlib-js/stdlib.git"
+ },
+ "bugs": {
+ "url": "https://github.com/stdlib-js/stdlib/issues"
+ },
+ "dependencies": {},
+ "devDependencies": {},
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "keywords": [
+ "stdlib",
+ "{{TODO:keywords}}"
+ ],
+ "__stdlib__": {}
+}
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/decompose/README.md b/lib/node_modules/@stdlib/fft/base/fftpack/decompose/README.md
new file mode 100644
index 000000000000..8d419dac01a2
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/decompose/README.md
@@ -0,0 +1,145 @@
+
+
+# decompose
+
+> Factorize a sequence length into a product of integers.
+
+
+
+
+
+
+
+
+
+
+
+## Usage
+
+```javascript
+var decompose = require( '@stdlib/fft/base/fftpack/decompose' );
+```
+
+#### decompose( N, initial, out, stride, offset )
+
+Factorizes a sequence length into a product of integers.
+
+```javascript
+var initial = [ 3, 4, 2, 5 ]; // as found in FFTPACK
+var N = 630;
+var factors = [ 0, 0, 0, 0, 0, 0, 0 ];
+
+var numFactors = decompose( N, initial, factors, 1, 0 );
+// returns 5
+
+console.log( factors );
+// => [ 630, 5, 2, 3, 3, 5, 7 ]
+```
+
+The function accepts the following arguments:
+
+- **N**: length of the sequence.
+- **initial**: array of initial trial divisors.
+- **out**: output array for storing factorization results.
+- **stride**: stride length for `out`.
+- **offset**: starting index for `out`.
+
+The function returns the number of factors into which `N` was decomposed.
+
+
+
+
+
+
+
+
+
+## Notes
+
+- Factorization results are stored in the output array as follows:
+
+ ```text
+ [ sequence_length | number_of_factors | integer_factors | unused_storage ]
+ ```
+
+- The function mutates the input array.
+
+
+
+
+
+
+
+## Examples
+
+
+
+```javascript
+var decompose = require( '@stdlib/fft/base/fftpack/decompose' );
+
+var factors = [ 0, 0, 0, 0 ];
+var initial = [ 3, 4, 2, 5 ];
+var nf;
+var j;
+
+for ( j = 0; j < factors.length; j++ ) {
+ factors[ j ] = 0;
+}
+
+nf = decompose( 12, initial, factors, 1, 0 );
+
+console.log( 'Sequence length: %d', 12 );
+console.log( 'Number of factors: %d', nf );
+console.log( 'Factors:' );
+for ( j = 0; j < nf; j++ ) {
+ console.log( ' %d', factors[ j+2 ] );
+}
+```
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/decompose/benchmark/benchmark.js b/lib/node_modules/@stdlib/fft/base/fftpack/decompose/benchmark/benchmark.js
new file mode 100644
index 000000000000..7c98f25cd545
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/decompose/benchmark/benchmark.js
@@ -0,0 +1,103 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+'use strict';
+
+// MODULES //
+
+var bench = require( '@stdlib/bench' );
+var isnan = require( '@stdlib/math/base/assert/is-nan' );
+var zeros = require( '@stdlib/array/zeros' );
+var pkg = require( './../package.json' ).name;
+var decompose = require( './../lib' );
+
+
+// FUNCTIONS //
+
+/**
+* Creates a benchmark function.
+*
+* @private
+* @param {PositiveInteger} N - sequence length to factorize
+* @returns {Function} benchmark function
+*/
+function createBenchmark( N ) {
+ var initial = [ 3, 4, 2, 5 ];
+ return benchmark;
+
+ /**
+ * Benchmark function.
+ *
+ * @private
+ * @param {Benchmark} b - benchmark instance
+ */
+ function benchmark( b ) {
+ var factors;
+ var out;
+ var i;
+
+ factors = zeros( 6 );
+
+ b.tic();
+ for ( i = 0; i < b.iterations; i++ ) {
+ out = decompose( N, initial, factors, 1, 0 );
+ if ( isnan( out ) ) {
+ b.fail( 'should not return NaN' );
+ }
+ }
+ b.toc();
+
+ if ( isnan( out ) ) {
+ b.fail( 'should not return NaN' );
+ }
+ b.pass( 'benchmark finished' );
+ b.end();
+ }
+}
+
+
+// MAIN //
+
+/**
+* Main execution sequence.
+*
+* @private
+*/
+function main() {
+ var lengths;
+ var N;
+ var f;
+ var i;
+
+ lengths = [
+ 12,
+ 24,
+ 36,
+ 48,
+ 60,
+ 120
+ ];
+
+ for ( i = 0; i < lengths.length; i++ ) {
+ N = lengths[i];
+ f = createBenchmark( N );
+ bench( pkg+':N='+N, f );
+ }
+}
+
+main();
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/decompose/docs/repl.txt b/lib/node_modules/@stdlib/fft/base/fftpack/decompose/docs/repl.txt
new file mode 100644
index 000000000000..64489085458b
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/decompose/docs/repl.txt
@@ -0,0 +1,39 @@
+
+{{alias}}( N, initial, out, stride, offset )
+ Factorizes a sequence length into a product of integers.
+
+ Parameters
+ ----------
+ N: number
+ Length of the sequence.
+
+ initial: Array
+ Array of initial trial divisors.
+
+ out: Collection
+ Output array for storing factorization results.
+
+ stride: number
+ Stride length for `out`.
+
+ offset: number
+ Starting index for `out`.
+
+ Returns
+ -------
+ numFactors: number
+ Number of factors into which N was decomposed.
+
+ Examples
+ --------
+ > var initial = [ 3, 4, 2, 5 ];
+ > var N = 630;
+ > var factors = [ 0, 0, 0, 0, 0, 0, 0 ];
+ > var numFactors = {{alias}}( N, initial, factors, 1, 0 )
+ 5
+ > factors.slice()
+ [ 630, 5, 2, 3, 3, 5, 7 ]
+
+ See Also
+ --------
+
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/decompose/docs/types/index.d.ts b/lib/node_modules/@stdlib/fft/base/fftpack/decompose/docs/types/index.d.ts
new file mode 100644
index 000000000000..74b73ad265e0
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/decompose/docs/types/index.d.ts
@@ -0,0 +1,66 @@
+/*
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+// TypeScript Version: 4.1
+
+///
+
+import { Collection } from '@stdlib/types/array';
+
+/**
+* Factorizes a sequence length into a product of integers.
+*
+* ## Notes
+*
+* - If provided a sequence length which is not a nonnegative integer, the function returns `NaN`.
+* - If provided an array of initial trial divisors which is not an array of nonnegative integers, the function returns `NaN`.
+* - If provided an output array which is not an array-like object, the function returns `NaN`.
+* - If provided a stride which is not a nonnegative integer, the function returns `NaN`.
+* - If provided an offset which is not a nonnegative integer, the function returns `NaN`.
+*
+* @param N - length of the sequence
+* @param initial - array of initial trial divisors
+* @param out - output array for storing factorization results
+* @param stride - stride length for `out`
+* @param offset - starting index for `out`
+* @returns number of factors into which `N` was decomposed
+*
+* @example
+* // Specify an initial list of potential divisors:
+* var initial = [ 3, 4, 2, 5 ]; // as found in FFTPACK
+*
+* // Define a sequence length:
+* var N = 630;
+*
+* // Initialize an array for storing factorization results:
+* var factors = [ 0, 0, 0, 0, 0, 0, 0 ];
+*
+* // Factorize the sequence length into a product of integers:
+* var numFactors = decompose( N, initial, factors, 1, 0 );
+* // returns 5
+*
+* var f = factors.slice();
+* // returns [ 630, 5, 2, 3, 3, 5, 7 ]
+*/
+declare function decompose( N: number, initial: Array, out: Collection, stride: number, offset: number ): number;
+
+
+// EXPORTS //
+
+export = decompose;
+
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/decompose/docs/types/test.ts b/lib/node_modules/@stdlib/fft/base/fftpack/decompose/docs/types/test.ts
new file mode 100644
index 000000000000..26a1c0508adc
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/decompose/docs/types/test.ts
@@ -0,0 +1,114 @@
+/*
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+import decompose = require( './index' );
+
+// TESTS //
+
+// The function returns a number...
+{
+ const initial = [ 4, 2, 3, 5 ];
+ const out = [ 0, 0, 0, 0, 0, 0, 0 ];
+
+ decompose( 12, initial, out, 1, 0 ); // $ExpectType number
+}
+
+// The compiler throws an error if the function is provided a sequence length which is not a number...
+{
+ const initial = [ 4, 2, 3, 5 ];
+ const out = [ 0, 0, 0, 0, 0, 0, 0 ];
+
+ decompose( '12', initial, out, 1, 0 ); // $ExpectError
+ decompose( true, initial, out, 1, 0 ); // $ExpectError
+ decompose( false, initial, out, 1, 0 ); // $ExpectError
+ decompose( null, initial, out, 1, 0 ); // $ExpectError
+ decompose( undefined, initial, out, 1, 0 ); // $ExpectError
+ decompose( [], initial, out, 1, 0 ); // $ExpectError
+ decompose( {}, initial, out, 1, 0 ); // $ExpectError
+ decompose( ( x: number ): number => x, initial, out, 1, 0 ); // $ExpectError
+}
+
+// The compiler throws an error if the function is provided initial trial divisors which is not an array of numbers...
+{
+ const out = [ 0, 0, 0, 0, 0, 0, 0 ];
+
+ decompose( 12, '4,2,3,5', out, 1, 0 ); // $ExpectError
+ decompose( 12, 5, out, 1, 0 ); // $ExpectError
+ decompose( 12, true, out, 1, 0 ); // $ExpectError
+ decompose( 12, false, out, 1, 0 ); // $ExpectError
+ decompose( 12, null, out, 1, 0 ); // $ExpectError
+ decompose( 12, undefined, out, 1, 0 ); // $ExpectError
+ decompose( 12, {}, out, 1, 0 ); // $ExpectError
+ decompose( 12, ( x: number ): number => x, out, 1, 0 ); // $ExpectError
+}
+
+// The compiler throws an error if the function is provided an output array which is not an array-like object...
+{
+ const initial = [ 4, 2, 3, 5 ];
+
+ decompose( 12, initial, 123, 1, 0 ); // $ExpectError
+ decompose( 12, initial, true, 1, 0 ); // $ExpectError
+ decompose( 12, initial, false, 1, 0 ); // $ExpectError
+ decompose( 12, initial, null, 1, 0 ); // $ExpectError
+ decompose( 12, initial, undefined, 1, 0 ); // $ExpectError
+ decompose( 12, initial, {}, 1, 0 ); // $ExpectError
+ decompose( 12, initial, ( x: number ): number => x, 1, 0 ); // $ExpectError
+}
+
+// The compiler throws an error if the function is provided a stride which is not a number...
+{
+ const initial = [ 4, 2, 3, 5 ];
+ const out = [ 0, 0, 0, 0, 0, 0, 0 ];
+
+ decompose( 12, initial, out, '1', 0 ); // $ExpectError
+ decompose( 12, initial, out, true, 0 ); // $ExpectError
+ decompose( 12, initial, out, false, 0 ); // $ExpectError
+ decompose( 12, initial, out, null, 0 ); // $ExpectError
+ decompose( 12, initial, out, undefined, 0 ); // $ExpectError
+ decompose( 12, initial, out, [], 0 ); // $ExpectError
+ decompose( 12, initial, out, {}, 0 ); // $ExpectError
+ decompose( 12, initial, out, ( x: number ): number => x, 0 ); // $ExpectError
+}
+
+// The compiler throws an error if the function is provided an offset which is not a number...
+{
+ const initial = [ 4, 2, 3, 5 ];
+ const out = [ 0, 0, 0, 0, 0, 0, 0 ];
+
+ decompose( 12, initial, out, 1, '0' ); // $ExpectError
+ decompose( 12, initial, out, 1, true ); // $ExpectError
+ decompose( 12, initial, out, 1, false ); // $ExpectError
+ decompose( 12, initial, out, 1, null ); // $ExpectError
+ decompose( 12, initial, out, 1, undefined ); // $ExpectError
+ decompose( 12, initial, out, 1, [] ); // $ExpectError
+ decompose( 12, initial, out, 1, {} ); // $ExpectError
+ decompose( 12, initial, out, 1, ( x: number ): number => x ); // $ExpectError
+}
+
+// The compiler throws an error if the function is provided an unsupported number of arguments...
+{
+ const initial = [ 4, 2, 3, 5 ];
+ const out = [ 0, 0, 0, 0, 0, 0, 0 ];
+
+ decompose(); // $ExpectError
+ decompose( 12 ); // $ExpectError
+ decompose( 12, initial ); // $ExpectError
+ decompose( 12, initial, out ); // $ExpectError
+ decompose( 12, initial, out, 1 ); // $ExpectError
+ decompose( 12, initial, out, 1, 0, 123 ); // $ExpectError
+}
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/decompose/examples/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/decompose/examples/index.js
new file mode 100644
index 000000000000..e95883191868
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/decompose/examples/index.js
@@ -0,0 +1,35 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+'use strict';
+
+var decompose = require( './../lib' );
+
+var factors = [ 0, 0, 0, 0 ];
+var initial = [ 3, 4, 2, 5 ];
+var nf;
+var j;
+
+nf = decompose( 12, initial, factors, 1, 0 );
+
+console.log( 'Sequence length: %d', 12 );
+console.log( 'Number of factors: %d', nf );
+console.log( 'Factors:' );
+for ( j = 0; j < nf; j++ ) {
+ console.log( ' %d', factors[ j+2 ] );
+}
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/decompose/lib/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/decompose/lib/index.js
new file mode 100644
index 000000000000..f497a5d7bcff
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/decompose/lib/index.js
@@ -0,0 +1,72 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+'use strict';
+
+/**
+* Factorize a sequence length into a product of integers.
+*
+* @module @stdlib/fft/base/fftpack/decompose
+*
+* @example
+* var decompose = require( '@stdlib/fft/base/fftpack/decompose' );
+*
+* // Specify an initial list of potential divisors:
+* var initial = [ 3, 4, 2, 5 ]; // as found in FFTPACK
+*
+* // Define a sequence length:
+* var N = 630;
+*
+* // Initialize an array for storing factorization results:
+* var factors = [ 0, 0, 0, 0, 0, 0, 0 ];
+*
+* // Factorize the sequence length into a product of integers:
+* var numFactors = decompose( N, initial, factors, 1, 0 );
+* // returns 5
+*
+* var f = factors.slice();
+* // returns [ 630, 5, 2, 3, 3, 5, 7 ]
+*
+* @example
+* var decompose = require( '@stdlib/fft/base/fftpack/decompose' );
+*
+* // Specify an initial list of potential divisors:
+* var initial = [ 3, 4, 2, 5 ]; // as found in FFTPACK
+*
+* // Define a sequence length:
+* var N = 8;
+*
+* // Initialize an array for storing factorization results:
+* var factors = [ 0, 0, 0, 0 ];
+*
+* // Factorize the sequence length into its a product of integers:
+* var numFactors = decompose( N, initial, factors, 1, 0 );
+* // returns 2
+*
+* var f = factors.slice();
+* // returns [ 8, 2, 2, 4 ]
+*/
+
+// MODULES //
+
+var main = require( './main.js' );
+
+
+// EXPORTS //
+
+module.exports = main;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/decompose/lib/main.js b/lib/node_modules/@stdlib/fft/base/fftpack/decompose/lib/main.js
new file mode 100644
index 000000000000..965cf9e7bfc3
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/decompose/lib/main.js
@@ -0,0 +1,211 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+'use strict';
+
+// MODULES //
+
+var floor = require( '@stdlib/math/base/special/floor' );
+var isNonNegativeInteger = require( '@stdlib/math/base/assert/is-nonnegative-integer' );
+var isNonNegativeIntegerArray = require( '@stdlib/assert/is-nonnegative-integer-array' ).primitives;
+var isCollection = require( '@stdlib/assert/is-collection' );
+
+
+// MAIN //
+
+/**
+* Factorizes a sequence length into a product of integers.
+*
+* ## Notes
+*
+* - Factorization results are stored in the input array as follows:
+*
+* ```text
+* [ sequence_length | number_of_factors | integer_factors | unused_storage ]
+* ```
+*
+* - The function mutates the input array.
+*
+* @private
+* @param {NonNegativeInteger} N - length of the sequence
+* @param {NonNegativeIntegerArray} initial - array of initial trial divisors
+* @param {Collection} out - output array for storing factorization results
+* @param {integer} stride - stride length for `out`
+* @param {NonNegativeInteger} offset - starting index for `out`
+* @returns {NonNegativeInteger} number of factors into which `N` was decomposed
+*
+* @example
+* // Specify an initial list of potential divisors:
+* var initial = [ 3, 4, 2, 5 ]; // as found in FFTPACK
+*
+* // Define a sequence length:
+* var N = 630;
+*
+* // Initialize an array for storing factorization results:
+* var factors = [ 0, 0, 0, 0, 0, 0, 0 ];
+*
+* // Factorize the sequence length into a product of integers:
+* var numFactors = decompose( N, initial, factors, 1, 0 );
+* // returns 5
+*
+* var f = factors.slice();
+* // returns [ 630, 5, 2, 3, 3, 5, 7 ]
+*
+* @example
+* // Specify an initial list of potential divisors:
+* var initial = [ 3, 4, 2, 5 ]; // as found in FFTPACK
+*
+* // Define a sequence length:
+* var N = 8;
+*
+* // Initialize an array for storing factorization results:
+* var factors = [ 0, 0, 0, 0 ];
+*
+* // Factorize the sequence length into its a product of integers:
+* var numFactors = decompose( N, initial, factors, 1, 0 );
+* // returns 2
+*
+* var f = factors.slice();
+* // returns [ 8, 2, 2, 4 ]
+*/
+function decompose( N, initial, out, stride, offset ) {
+ var divisor;
+ var ntrials;
+ var nl;
+ var nf;
+ var nq;
+ var nr;
+ var ib;
+ var i;
+ var j;
+
+ if ( !isNonNegativeInteger( N ) || !isNonNegativeIntegerArray( initial ) ||
+ !isCollection( out ) || !isNonNegativeInteger( stride ) ||
+ !isNonNegativeInteger( offset ) ) {
+ return NaN;
+ }
+
+ // Resolve the number of trial divisors:
+ ntrials = initial.length;
+
+ // Initialize a variable for storing a trial divisor:
+ divisor = 0;
+
+ // Initialize a variable for storing a sub-sequence length:
+ nl = N;
+
+ // Initialize a variable for keeping track of the number of factors into which `N` decomposes:
+ nf = 0;
+
+ j = 0;
+ do {
+ if ( j < ntrials ) {
+ divisor = initial[ j ];
+ } else {
+ divisor += 2;
+ }
+ j += 1;
+ while ( true ) {
+ // Compute the integer quotient:
+ nq = floor( nl / divisor );
+
+ // Compute the remainder:
+ nr = nl - ( divisor * nq );
+
+ // If the divisor did not evenly divide the current sub-sequence length, try a new divisor...
+ if ( nr !== 0 ) {
+ break;
+ }
+ // We found a new factor:
+ nf += 1;
+
+ // Update the sub-sequence length:
+ nl = nq;
+
+ // Store the factor in the output array:
+ out[ offset+((nf+1)*stride) ] = divisor;
+
+ // When the divisor is `2` and we've already found other factors, shift the other factors right to make room for the most recent `2` factor...
+ if ( divisor === 2 && nf !== 1 ) {
+ for ( i = 2; i <= nf; i++ ) {
+ ib = nf - i + 2;
+ out[ offset+((ib+1)*stride) ] = out[ offset+(ib*stride) ];
+ }
+ out[ offset+(2*stride) ] = 2;
+ }
+ // If we cannot further divide the sequence length into smaller sub-sequences, we're done...
+ if ( nl === 1 ) {
+ break;
+ }
+ }
+ } while ( nl !== 1 );
+
+ // Store the sequence length:
+ out[ offset ] = N;
+
+ // Store the number of factors:
+ out[ offset+stride ] = nf;
+
+ // Return the number of factors:
+ return nf;
+}
+
+
+// EXPORTS //
+
+module.exports = decompose;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/decompose/package.json b/lib/node_modules/@stdlib/fft/base/fftpack/decompose/package.json
new file mode 100644
index 000000000000..bbbff65c2388
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/decompose/package.json
@@ -0,0 +1,56 @@
+{
+ "name": "@stdlib/fft/base/fftpack/decompose",
+ "version": "0.0.0",
+ "description": "Factorize a sequence length into a product of integers.",
+ "license": "Apache-2.0",
+ "author": {
+ "name": "The Stdlib Authors",
+ "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
+ },
+ "contributors": [
+ {
+ "name": "The Stdlib Authors",
+ "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
+ }
+ ],
+ "main": "./lib",
+ "directories": {
+ "benchmark": "./benchmark",
+ "doc": "./docs",
+ "example": "./examples",
+ "lib": "./lib",
+ "test": "./test"
+ },
+ "types": "./docs/types",
+ "scripts": {},
+ "homepage": "https://github.com/stdlib-js/stdlib",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/stdlib-js/stdlib.git"
+ },
+ "bugs": {
+ "url": "https://github.com/stdlib-js/stdlib/issues"
+ },
+ "dependencies": {},
+ "devDependencies": {},
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "keywords": [
+ "stdlib",
+ "{{TODO:keywords}}"
+ ],
+ "__stdlib__": {}
+}
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/decompose/test/test.js b/lib/node_modules/@stdlib/fft/base/fftpack/decompose/test/test.js
new file mode 100644
index 000000000000..2c6500d458ac
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/decompose/test/test.js
@@ -0,0 +1,260 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+'use strict';
+
+// MODULES //
+
+var tape = require( 'tape' );
+var isnan = require( '@stdlib/math/base/assert/is-nan' );
+var decompose = require( './../lib' );
+
+
+// TESTS //
+
+tape( 'main export is a function', function test( t ) {
+ t.ok( true, __filename );
+ t.strictEqual( typeof decompose, 'function', 'main export is a function' );
+ t.end();
+});
+
+tape( 'if provided a sequence length which is not a nonnegative integer, the function returns NaN', function test( t ) {
+ var factors;
+ var initial;
+ var result;
+ var values;
+ var i;
+
+ values = [
+ '5',
+ -5,
+ 3.14,
+ NaN,
+ true,
+ false,
+ null,
+ void 0,
+ {},
+ [],
+ function foo() {}
+ ];
+
+ initial = [ 3, 4, 2, 5 ];
+ factors = [ 0, 0, 0, 0, 0 ];
+
+ for ( i = 0; i < values.length; i++ ) {
+ result = decompose( values[ i ], initial, factors, 1, 0 );
+ t.strictEqual( isnan( result ), true, 'returns NaN when provided ' + values[ i ] );
+ }
+ t.end();
+});
+
+tape( 'if provided an array of initial trial divisors which is not an array of nonnegative integers, the function returns NaN', function test( t ) {
+ var factors;
+ var result;
+ var values;
+ var i;
+
+ values = [
+ '5',
+ 5,
+ 3.14,
+ NaN,
+ true,
+ false,
+ null,
+ void 0,
+ {},
+ [ '1', '2' ],
+ [ -1, 2, 3 ],
+ [ 1.1, 2, 3 ],
+ function foo() {}
+ ];
+
+ factors = [ 0, 0, 0, 0, 0 ];
+
+ for ( i = 0; i < values.length; i++ ) {
+ result = decompose( 10, values[ i ], factors, 1, 0 );
+ t.strictEqual( isnan( result ), true, 'returns NaN when provided ' + values[ i ] );
+ }
+ t.end();
+});
+
+tape( 'if provided an output array which is not a collection, the function returns NaN', function test( t ) {
+ var initial;
+ var result;
+ var values;
+ var i;
+
+ values = [
+ '5',
+ 5,
+ 3.14,
+ NaN,
+ true,
+ false,
+ null,
+ void 0,
+ {},
+ function foo() {}
+ ];
+
+ initial = [ 3, 4, 2, 5 ];
+
+ for ( i = 0; i < values.length; i++ ) {
+ result = decompose( 10, initial, values[ i ], 1, 0 );
+ t.strictEqual( isnan( result ), true, 'returns NaN when provided ' + values[ i ] );
+ }
+ t.end();
+});
+
+tape( 'if provided a stride which is not an integer, the function returns NaN', function test( t ) {
+ var factors;
+ var initial;
+ var result;
+ var values;
+ var i;
+
+ values = [
+ '5',
+ 3.14,
+ NaN,
+ true,
+ false,
+ null,
+ void 0,
+ {},
+ [],
+ function foo() {}
+ ];
+
+ initial = [ 3, 4, 2, 5 ];
+ factors = [ 0, 0, 0, 0, 0 ];
+
+ for ( i = 0; i < values.length; i++ ) {
+ result = decompose( 10, initial, factors, values[ i ], 0 );
+ t.strictEqual( isnan( result ), true, 'returns NaN when provided ' + values[ i ] );
+ }
+ t.end();
+});
+
+tape( 'if provided an offset which is not a nonnegative integer, the function returns NaN', function test( t ) {
+ var factors;
+ var initial;
+ var result;
+ var values;
+ var i;
+
+ values = [
+ '5',
+ -5,
+ 3.14,
+ NaN,
+ true,
+ false,
+ null,
+ void 0,
+ {},
+ [],
+ function foo() {}
+ ];
+
+ initial = [ 3, 4, 2, 5 ];
+ factors = [ 0, 0, 0, 0, 0 ];
+
+ for ( i = 0; i < values.length; i++ ) {
+ result = decompose( 10, initial, factors, 1, values[ i ] );
+ t.strictEqual( isnan( result ), true, 'returns NaN when provided ' + values[ i ] );
+ }
+ t.end();
+});
+
+tape( 'the function correctly factorizes a sequence length into a product of integers', function test( t ) {
+ var initial;
+ var factors;
+ var nf;
+
+ initial = [ 3, 4, 2, 5 ];
+ factors = [ 0, 0, 0, 0, 0, 0, 0 ];
+ nf = decompose( 630, initial, factors, 1, 0 );
+
+ t.strictEqual( nf, 5, 'returns expected number of factors' );
+ t.strictEqual( factors[ 0 ], 630, 'stores sequence length' );
+ t.strictEqual( factors[ 1 ], 5, 'stores number of factors' );
+ t.strictEqual( factors[ 2 ], 2, 'stores first factor' );
+ t.strictEqual( factors[ 3 ], 3, 'stores second factor' );
+ t.strictEqual( factors[ 4 ], 3, 'stores third factor' );
+ t.strictEqual( factors[ 5 ], 5, 'stores fourth factor' );
+ t.strictEqual( factors[ 6 ], 7, 'stores fifth factor' );
+
+ initial = [ 3, 4, 2, 5 ];
+ factors = [ 0, 0, 0, 0 ];
+ nf = decompose( 8, initial, factors, 1, 0 );
+
+ t.strictEqual( nf, 2, 'returns expected number of factors' );
+ t.strictEqual( factors[ 0 ], 8, 'stores sequence length' );
+ t.strictEqual( factors[ 1 ], 2, 'stores number of factors' );
+ t.strictEqual( factors[ 2 ], 2, 'stores first factor' );
+ t.strictEqual( factors[ 3 ], 4, 'stores second factor' );
+
+ t.end();
+});
+
+tape( 'the function correctly factorizes prime numbers', function test( t ) {
+ var initial;
+ var factors;
+ var primes;
+ var nf;
+ var i;
+
+ initial = [ 3, 4, 2, 5 ];
+ primes = [ 7, 11, 13, 17, 19, 23, 29, 31 ];
+
+ for ( i = 0; i < primes.length; i++ ) {
+ factors = [ 0, 0, 0 ];
+ nf = decompose( primes[ i ], initial, factors, 1, 0 );
+
+ t.strictEqual( nf, 1, 'returns expected number of factors for prime ' + primes[ i ] );
+ t.strictEqual( factors[ 0 ], primes[ i ], 'stores sequence length' );
+ t.strictEqual( factors[ 1 ], 1, 'stores number of factors' );
+ t.strictEqual( factors[ 2 ], primes[ i ], 'stores the prime as its own factor' );
+ }
+
+ t.end();
+});
+
+tape( 'the function correctly handles stride and offset parameters', function test( t ) {
+ var initial;
+ var factors;
+ var stride = 2;
+ var offset = 1;
+ var nf;
+
+ initial = [ 3, 4, 2, 5 ];
+
+ factors = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];
+ nf = decompose( 12, initial, factors, stride, offset );
+
+ t.strictEqual( nf, 2, 'returns expected number of factors' );
+ t.strictEqual( factors[ offset ], 12, 'stores sequence length at offset' );
+ t.strictEqual( factors[ offset+stride ], 2, 'stores number of factors at offset + stride' );
+ t.strictEqual( factors[ offset+(2*stride) ], 3, 'stores first factor at offset + 2*stride' );
+ t.strictEqual( factors[ offset+(3*stride) ], 4, 'stores second factor at offset + 3*stride' );
+
+ t.end();
+});
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/c1_ref.js b/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/c1_ref.js
new file mode 100644
index 000000000000..942378815633
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/c1_ref.js
@@ -0,0 +1,81 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+'use strict';
+
+// MAIN //
+
+/**
+* Computes an index into the intermediate array `c1`.
+*
+* @private
+* @param {NonNegativeInteger} a1 - index of first dimension
+* @param {NonNegativeInteger} a2 - index of second dimension
+* @param {NonNegativeInteger} a3 - index of third dimension
+* @param {NonNegativeInteger} l1 - length parameter related to the FFT stage
+* @param {NonNegativeInteger} ido - dimension order
+* @returns {NonNegativeInteger} computed index
+*/
+function c1Ref( a1, a2, a3, l1, ido ) {
+ return ( ( (a3*l1)+a2 ) * ido ) + a1;
+}
+
+
+// EXPORTS //
+
+module.exports = c1Ref;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/c2_ref.js b/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/c2_ref.js
new file mode 100644
index 000000000000..3b4910a3f245
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/c2_ref.js
@@ -0,0 +1,79 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+'use strict';
+
+// MAIN //
+
+/**
+* Computes an index into the intermediate array `c2`.
+*
+* @private
+* @param {NonNegativeInteger} a1 - index of first dimension
+* @param {NonNegativeInteger} a2 - index of second dimension
+* @param {integer} idl1 - stride related to the `l1` parameter
+* @returns {NonNegativeInteger} computed index
+*/
+function c2Ref( a1, a2, idl1 ) {
+ return ( a2*idl1 ) + a1;
+}
+
+
+// EXPORTS //
+
+module.exports = c2Ref;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/cc_ref.js b/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/cc_ref.js
new file mode 100644
index 000000000000..c9491438a35c
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/cc_ref.js
@@ -0,0 +1,85 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+'use strict';
+
+// MAIN //
+
+/**
+* Computes an index into an input array `cc` containing complex-valued data.
+*
+* @private
+* @param {NonNegativeInteger} a1 - index of first dimension
+* @param {NonNegativeInteger} a2 - index of second dimension
+* @param {NonNegativeInteger} a3 - index of third dimension
+* @param {NonNegativeInteger} ip - number of sub-steps or prime factors in the FFT
+* @param {NonNegativeInteger} ido - dimension order
+* @returns {NonNegativeInteger} computed index
+*
+* @example
+* var out = ccRef( 3, 2, 1, 2, 2 );
+* // returns 11
+*/
+function ccRef( a1, a2, a3, ip, ido ) {
+ return ( ( (a3*ip)+a2 ) * ido ) + a1;
+}
+
+
+// EXPORTS //
+
+module.exports = ccRef;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/ch2_ref.js b/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/ch2_ref.js
new file mode 100644
index 000000000000..b53f3d8579d4
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/ch2_ref.js
@@ -0,0 +1,79 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+'use strict';
+
+// MAIN //
+
+/**
+* Computes an index into an output array `ch2` for storing processed FFT data.
+*
+* @private
+* @param {NonNegativeInteger} a1 - index of first dimension
+* @param {NonNegativeInteger} a2 - index of second dimension
+* @param {integer} idl1 - stride related to the `l1` parameter
+* @returns {NonNegativeInteger} computed index
+*/
+function ch2Ref( a1, a2, idl1 ) {
+ return ( a2*idl1 ) + a1;
+}
+
+
+// EXPORTS //
+
+module.exports = ch2Ref;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/ch_ref.js b/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/ch_ref.js
new file mode 100644
index 000000000000..1e4de83a80f1
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/ch_ref.js
@@ -0,0 +1,81 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+'use strict';
+
+// MAIN //
+
+/**
+* Computes an index into an output array `ch` for storing processed FFT data.
+*
+* @private
+* @param {NonNegativeInteger} a1 - index of first dimension
+* @param {NonNegativeInteger} a2 - index of second dimension
+* @param {NonNegativeInteger} a3 - index of third dimension
+* @param {NonNegativeInteger} radix - length parameter related to the FFT stage
+* @param {NonNegativeInteger} ido - dimension order
+* @returns {NonNegativeInteger} - calculated index
+*/
+function chRef( a1, a2, a3, radix, ido ) {
+ return ( ( (a3*radix)+a2 ) * ido ) + a1;
+}
+
+
+// EXPORTS //
+
+module.exports = chRef;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/index.js
new file mode 100644
index 000000000000..11dfd99dd6d7
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/index.js
@@ -0,0 +1,39 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+'use strict';
+
+/**
+* TODO: description.
+*
+* @module @stdlib/fft/base/fftpack/rfftb
+*
+* @example
+* var rfftb = require( '@stdlib/fft/base/fftpack/rfftb' );
+*
+* // TODO
+*/
+
+// MODULES //
+
+var main = require( './main.js' );
+
+
+// EXPORTS //
+
+module.exports = main;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/main.js b/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/main.js
new file mode 100644
index 000000000000..a435df1cd4c0
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/main.js
@@ -0,0 +1,96 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+'use strict';
+
+// MODULES //
+
+var rfftb1 = require( './rfftb1.js' );
+
+
+// MAIN //
+
+/**
+* Performs the backward real-valued Fourier transform (i.e., Fourier synthesis).
+*
+* @param {NonNegativeInteger} N - length of the sequence to transform
+* @param {Float64Array} r - real-valued array containing the sequence to be transformed
+* @param {NonNegativeInteger} offsetR - starting index for r
+* @param {Float64Array} workspace - working array containing precomputed values
+* @param {NonNegativeInteger} offsetW - starting index for workspace
+* @returns {void}
+*/
+function rfftb( N, r, offsetR, workspace, offsetW ) {
+ var offsetT;
+ var offsetF;
+
+ // When a sub-sequence is a single data point, the FFT is the identity, so no transformation necessary...
+ if ( N === 1 ) {
+ return;
+ }
+ // Resolve the starting indices for storing twiddle factors and factorization results:
+ offsetT = offsetW + N; // index offset for twiddle factors
+ offsetF = offsetT + N; // index offset for factors describing the sub-transforms
+
+ rfftb1( N, r, offsetR, workspace, offsetW, workspace, offsetT, workspace, offsetF ); // eslint-disable-line max-len
+}
+
+
+// EXPORTS //
+
+module.exports = rfftb;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/print_real_workspace.js b/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/print_real_workspace.js
new file mode 100644
index 000000000000..55d984f19792
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/print_real_workspace.js
@@ -0,0 +1,64 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+'use strict';
+
+// MODULES //
+
+var strided2array = require( '@stdlib/array/base/from-strided' );
+
+
+// MAIN //
+
+/**
+* Prints the contents of a workspace array for a real-valued Fourier transform.
+*
+* @private
+* @param {NonNegativeInteger} N - sequence length
+* @param {Float64Array} workspace - workspace array
+* @param {integer} strideW - stride length for `workspace`
+* @param {NonNegativeInteger} offsetW - starting index for `workspace`
+* @returns {void}
+*/
+function printWorkspace( N, workspace, strideW, offsetW ) { // FIXME: remove this file and function once we've clean-up this package
+ var offsetT;
+ var offsetF;
+ var tmp;
+
+ tmp = strided2array( N, workspace, strideW, offsetW );
+ console.log( 'INTERMEDIATE RESULTS:' );
+ console.log( tmp );
+ console.log( ' ' );
+
+ offsetT = offsetW + ( N*strideW );
+ tmp = strided2array( N, workspace, strideW, offsetT );
+ console.log( 'TWIDDLE FACTORS:' );
+ console.log( tmp );
+ console.log( ' ' );
+
+ offsetF = offsetT + ( N*strideW );
+ tmp = strided2array( N, workspace, strideW, offsetF );
+ console.log( 'FACTORIZATION:' );
+ console.log( tmp );
+ console.log( ' ' );
+}
+
+
+// EXPORTS //
+
+module.exports = printWorkspace;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/radb2.js b/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/radb2.js
new file mode 100644
index 000000000000..a97c7d12b33b
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/radb2.js
@@ -0,0 +1,383 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+/* eslint-disable max-len */
+
+'use strict';
+
+// FUNCTIONS //
+
+/**
+* Resolves an index in the input array.
+*
+* ## Notes
+*
+* When transforming an input array stored in linear memory, we can reinterpret the array as a three-dimensional logical view containing `L` independent sub-sequences having two "columns" corresponding to the even and odd half-spectrum of a folded complex vector (with real and imaginary parts of each half-spectrum interleaved along each sub-sequence) and where each "column" has `M` elements.
+*
+* Accordingly, the following is a logical view of an input array (zero-based indexing) which contains `L = 3` transforms and in which each "column" sub-sequence has length `M = 4`:
+*
+* ```text
+* j = 0 ("even" column) j = 1 ("odd" column)
+* k = 0 ─┬────────────────────────────────────┬────────────────────────────────────┐
+* │ cc(0,0,0) cc(1,0,0) ... cc(3,0,0) │ cc(0,1,0) cc(1,1,0) ... cc(3,1,0) │
+* └────────────────────────────────────┴────────────────────────────────────┤
+* k = 1 ─┬────────────────────────────────────┬────────────────────────────────────┤
+* │ cc(0,0,1) cc(1,0,1) ... cc(3,0,1) │ cc(0,1,1) cc(1,1,1) ... cc(3,1,1) │
+* └────────────────────────────────────┴────────────────────────────────────┤
+* k = 2 ─┬────────────────────────────────────┬────────────────────────────────────┤
+* │ cc(0,0,2) cc(1,0,2) ... cc(3,0,2) │ cc(0,1,2) cc(1,1,2) ... cc(3,1,2) │
+* └────────────────────────────────────┴────────────────────────────────────┘
+* ↑ ↑ ↑ ↑ ↑ ↑
+* i = 0 1 M-1 0 1 M-1
+* ```
+*
+* In the above,
+*
+* - `i` is the fastest varying index, which walks within one short "column" sub-sequence.
+* - `j` selects between the even and odd half-spectra.
+* - `k` specifies the index of one of the `L` independent transforms we are processing.
+*
+* In linear memory, the three-dimensional logical view is arranged as follows:
+*
+* ```text
+* | cc(0,0,0) ... cc(3,0,0) | cc(0,1,0) ... cc(3,1,0) | cc(0,0,1) ... cc(3,0,1) | ... | cc(0,1,2) ... cc(3,1,2) |
+* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
+* 0 M-1 M 2M-1 2M 3M-1 (2L-1)M 2LM-1
+* ```
+*
+* @private
+* @param {NonNegativeInteger} i - index of an element within a sub-sequence
+* @param {NonNegativeInteger} j - index specifying which of the two complex halves we are in (either `0` or `1`)
+* @param {NonNegativeInteger} k - index of the sub-sequence being transformed
+* @param {NonNegativeInteger} M - sub-sequence length
+* @param {integer} stride - stride length of the input array
+* @param {NonNegativeInteger} offset - index specifying the first indexed element in the input array
+* @returns {NonNegativeInteger} computed index
+*
+* @example
+* var stride = 1;
+* var offset = 0;
+*
+* var M = 4; // sub-sequence length
+* var L = 3; // number of sub-sequences
+*
+* var idx = iptr( 0, 0, 0, M, stride, offset );
+* // returns 0
+*
+* idx = iptr( 1, 0, 0, M, stride, offset );
+* // returns 1
+*
+* idx = iptr( M-1, 0, 0, M, stride, offset );
+* // returns 3
+*
+* idx = iptr( 0, 1, 0, M, stride, offset );
+* // returns 4
+*
+* // ...
+*
+* idx = iptr( M-1, 1, L-1, M, stride, offset );
+* // returns 23
+*/
+function iptr( i, j, k, M, stride, offset ) {
+ var n = i + ( ( j+(k*2) ) * M );
+ return ( n*stride ) + offset;
+}
+
+/**
+* Resolves an index in the output array.
+*
+* ## Notes
+*
+* When writing to an output array stored in linear memory, we can reinterpret the array as a three-dimensional logical view containing `L` independent sub-sequences having two "rows" corresponding to the two parts of the butterfly (`even + odd` and `even - odd`, respectively) and where each "row" is arranged as `M*L` contiguous elements.
+*
+* Accordingly, the following is a logical view of an output array (zero-based indexing) which contains `L = 3` transforms and in which each sub-sequence has length `M = 4`:
+*
+* ```text
+* │ k = 0 k = 1 k = 2
+* │ ───────────────────────────────────────────────────────────────────────────────→ k
+* j = 0 (even+odd) │ out(0,0,0) ... out(3,0,0) out(0,1,0) ... out(3,1,0) out(0,2,0) ... out(3,2,0)
+* │
+* j = 1 (even-odd) │ out(0,0,1) ... out(3,0,1) out(0,1,1) ... out(3,1,1) out(0,2,1) ... out(3,2,1)
+* └────────────────────────────────────────────────────────────────────────────────→ i
+* ↑ ↑ ↑ ↑ ↑ ↑
+* i = 0 M-1 0 M-1 0 M-1
+* ```
+*
+* In the above,
+*
+* - `i` is the fastest varying index, which walks within one short sub-sequence corresponding to either the `even + odd` or `even - odd` part of the butterfly.
+* - `j` selects between the `even + odd` and `even - odd` part of the butterfly.
+* - `k` specifies the index of one of the `L` independent transforms we are processing.
+*
+* In linear memory, the three-dimensional logical view is arranged as follows:
+*
+* ```text
+* | out(0,0,0)...out(3,0,0) ... out(0,2,0)...out(3,2,0) | out(0,0,1)...out(3,0,1) ... out(0,2,1)...out(3,2,1) |
+* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
+* 0 M-1 LM LM-1 (L+1)M (L+1)M-1 (2L-1)M 2LM-1
+* ```
+*
+* As may be observed, when resolving an index in the output array, the `j` and `k` dimensions are swapped relative index resolution in the input array. This stems from `radb2` being only one stage in a multi-stage driver which alternates between using `cc` and `out` as workspace buffers. After each stage, the next stage reads what the previous stage wrote.
+*
+* Each stage expects a transpose, and, in order to avoid explicit transposition between the stages, we swap the last two logical dimensions while still maintaining cache locality within the inner loop logical dimension, as indexed by `i`.
+*
+* @private
+* @param {NonNegativeInteger} i - index of an element within a sub-sequence
+* @param {NonNegativeInteger} k - index of the sub-sequence being transformed
+* @param {NonNegativeInteger} j - output row
+* @param {NonNegativeInteger} L - number of sub-sequences
+* @param {NonNegativeInteger} M - sub-sequence length
+* @param {integer} stride - stride length of the output array
+* @param {NonNegativeInteger} offset - index specifying the first indexed element in the output array
+* @returns {NonNegativeInteger} computed index
+*
+* @example
+* var stride = 1;
+* var offset = 0;
+*
+* var M = 4; // sub-sequence length
+* var L = 3; // number of sub-sequences
+*
+* var idx = optr( 0, 0, 0, L, M, stride, offset );
+* // returns 0
+*
+* idx = optr( 1, 0, 0, L, M, stride, offset );
+* // returns 1
+*
+* idx = optr( M-1, 0, 0, L, M, stride, offset );
+* // returns 3
+*
+* idx = optr( 0, 1, 0, L, M, stride, offset );
+* // returns 4
+*
+* // ...
+*
+* idx = optr( M-1, L-1, 1, L, M, stride, offset );
+* // returns 23
+*/
+function optr( i, k, j, L, M, stride, offset ) {
+ var n = i + ( ( k+(j*L) ) * M );
+ return ( n*stride ) + offset;
+}
+
+
+// MAIN //
+
+/**
+* Performs one radix-2 stage within a backward Fourier transform for a real-valued sequence.
+*
+* @private
+* @param {NonNegativeInteger} M - number of elements in each sub-sequence to be transformed
+* @param {NonNegativeInteger} L - number of sub-sequences to be transformed
+* @param {Float64Array} cc - input array containing the sub-sequences to be transformed
+* @param {integer} sc - stride length for `cc`
+* @param {NonNegativeInteger} oc - index offset for `cc`
+* @param {Float64Array} out - output array containing transformed sub-sequences
+* @param {integer} so - stride length for `out`
+* @param {NonNegativeInteger} oo - index offset for `out`
+* @param {Float64Array} twiddles - array containing twiddle factors
+* @param {integer} st - stride length for `twiddles`
+* @param {NonNegativeInteger} ot - index offset for `twiddles`
+* @returns {void}
+*/
+function radb2( M, L, cc, sc, oc, out, so, oo, twiddles, st, ot ) { // eslint-disable-line max-params
+ var MP1;
+ var tr2;
+ var ti2;
+ var ip1;
+ var ip2;
+ var it1;
+ var it2;
+ var io;
+ var im;
+ var i;
+ var k;
+
+ /*
+ * First, perform the core butterfly for each sub-sequence being transformed.
+ *
+ * In the following loop, we combine two half-length complex vectors.
+ *
+ * cc(0, 0, k) holds the even half-spectrum: Re(X_even) + j Im(X_even) => [Re0, Im0, Re1, Im1, ...]
+ * cc(M-1, 1, k) holds the odd half-spectrum: Re(X_odd) + j Im(X_odd) => [Re0, Im0, Re1, Im1, ...]
+ *
+ * For a radix-2 backward FFT, the twiddle factor for the first column is +1, so we can compute two real outputs with just
+ *
+ * out(even) = even + odd
+ * out(odd) = even - odd
+ */
+ for ( k = 0; k < L; k++ ) {
+ ip1 = iptr( 0, 0, k, M, sc, oc );
+ ip2 = iptr( M-1, 1, k, M, sc, oc );
+
+ io = optr( 0, k, 0, L, M, so, oo );
+ out[ io ] = cc[ ip1 ] + cc[ ip2 ]; // out(even) = even + odd
+
+ io = optr( 0, k, 1, L, M, so, oo );
+ out[ io ] = cc[ ip1 ] - cc[ ip2 ]; // out(odd) = even - odd
+ }
+ // When the number of elements in a sub-sequence is less than `2`, there is nothing more to do, as the above butterfly produced the full result...
+ if ( M < 2 ) {
+ return;
+ }
+ /*
+ * Next, apply the general case where we need to loop through the non-trivial harmonics of each complex sub-vector.
+ *
+ * While this function performs an FFT on a real-valued sequence, we should note that the Fourier transform of a real sequence is not actually real. Instead, the transform is a complex sequence with a special symmetry:
+ *
+ * X[im] = conj(X[i])
+ *
+ * where `i` is the index of a real component, `im = M-i` is the real component's "mirror" index, and `conj` refers to the complex conjugate.
+ *
+ * A sequence with this symmetry is called **conjugate-complex** or **half-complex**. This symmetry subsequently implies that only half of the complex numbers in the output actually need to be stored, with the remaining half being constructed according to the symmetry condition.
+ *
+ * cc( i,0,k) = Re(E_n) <= real part of even half-spectrum at bin `n`
+ * cc( i+1,0,k) = Im(E_n)
+ * cc(im-1,1,k) = Re(O_n) <= real part of odd half-spectrum at bin `n`
+ * cc( im,1,k) = -Im(O_n) (stored as conjugate)
+ *
+ * where `n = (i/2)-1` and the twiddle factor for the odd part is
+ *
+ * W_n = cos(θ) - j sin(θ), θ = nπ/M
+ *
+ * In the following nested loops, we only load each symmetry pair once, combine them, and then multiply by pre-computed twiddle factors (i.e., sines and cosines) which are stored in `twiddles`.
+ */
+ if ( M >= 3 ) {
+ MP1 = M + 1;
+
+ // Loop over each sub-subsequence to be transformed...
+ for ( k = 0; k < L; k++ ) {
+ // Loop over the elements in each sub-sequence...
+ for ( i = 2; i < M; i += 2 ) {
+ im = MP1 - i; // "mirror" index => Re/Im(O_n)
+
+ // Load the real parts...
+ ip1 = iptr( i, 0, k, M, sc, oc ); // a = Re(E_n)
+ ip2 = iptr( im-1, 1, k, M, sc, oc ); // c = Re(O_n) "mirror" component
+ tr2 = cc[ ip1 ] - cc[ ip2 ]; // a - c (difference of real components)
+
+ /*
+ * `even + odd` part of the butterfly.
+ *
+ * x[2n] = E_n + O_n
+ *
+ * with `x[⋅]` representing the sample of the time-domain signal.
+ */
+ io = optr( i, k, 0, L, M, so, oo ); // Re(x[2n])
+ out[ io ] = cc[ ip1 ] + cc[ ip2 ]; // a + c
+
+ // Load the imaginary parts...
+ ip1 = iptr( i+1, 0, k, M, sc, oc ); // b = Im(E_n)
+ ip2 = iptr( im, 1, k, M, sc, oc ); // -d = -Im(O_n) (stored conjugate)
+ ti2 = cc[ ip1 ] + cc[ ip2 ]; // b + d (sum of imaginary components)
+
+ io = optr( i+1, k, 0, L, M, so, oo ); // Im(x[2n])
+ out[ io ] = cc[ ip1 ] - cc[ ip2 ]; // b - d
+
+ /*
+ * `even - odd` part of the butterfly.
+ *
+ * x[2n+1] = (E_n - O_n) * W_n, W_n = e^{-jπn/M}
+ *
+ * where
+ *
+ * E_n - O_n = (a-c) + j(b+d) = tr2 + j ti2
+ * W_n = cos(θ) - j sin(θ)
+ * ↑ ↑
+ * cos twiddle sine twiddle
+ */
+ it1 = ( (i-1)*st ) + ot; // cos(θ)
+ it2 = ( i*st ) + ot; // sin(θ)
+
+ io = optr( i, k, 1, L, M, so, oo ); // Re(x[2n+1])
+ out[ io ] = ( twiddles[ it1 ] * tr2 ) - ( twiddles[ it2 ] * ti2 ); // real part
+
+ io = optr( i+1, k, 1, L, M, so, oo ); // Im(x[2n+1])
+ out[ io ] = ( twiddles[ it1 ] * ti2 ) + ( twiddles[ it2 ] * tr2 ); // imaginary part
+ }
+ }
+ // When `M` is odd, there is no Nyquist pair to process, and, thus, the central element is purely real and was handled in the very first butterfly, so we do not need to perform any further transformations...
+ if ( M%2 === 1 ) {
+ return;
+ }
+ }
+ /*
+ * Lastly, handle the Nyquist frequency where `i = M-1` (i.e., the last element of each sub-sequence).
+ *
+ * When `M` is even, the Nyquist index is `i = M/2`. In this stage, we've stored that element at the end of each sub-sequence (i.e., `i = M-1` in the packed layout).
+ *
+ * At this point, the cosine term is ±1, and the sine term is 0, so the twiddle multiplication collapses to simple addition/subtraction.
+ *
+ * out(even, i) = 2 * Re(cc(i,0,k))
+ * out(odd, i) = -2 * Im(cc(0,1,k))
+ */
+ for ( k = 0; k < L; k++ ) {
+ ip1 = iptr( M-1, 0, k, M, sc, oc );
+ io = optr( M-1, k, 0, L, M, so, oo );
+ out[ io ] = cc[ ip1 ] + cc[ ip1 ]; // 2 * Re(cc(i,0,k))
+
+ ip1 = iptr( 0, 1, k, M, sc, oc );
+ io = optr( M-1, k, 1, L, M, so, oo );
+ out[ io ] = -( cc[ ip1 ] + cc[ ip1 ] ); // -2 * Im(cc(0,1,k))
+ }
+}
+
+
+// EXPORTS //
+
+module.exports = radb2;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/radb3.js b/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/radb3.js
new file mode 100644
index 000000000000..1c30914e1d52
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/radb3.js
@@ -0,0 +1,157 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+/* eslint-disable max-len */
+
+'use strict';
+
+// MODULES //
+
+var sincos = require( '@stdlib/math/base/special/sincos' );
+var TWO_PI = require( '@stdlib/constants/float64/two-pi' );
+var chRef = require( './ch_ref.js' );
+var ccRef = require( './cc_ref.js' );
+
+
+// VARIABLES //
+
+var sc = sincos( ( 2 * TWO_PI ) / 3 );
+var taur = sc[ 1 ]; // -0.5
+var taui = -sc[ 0 ]; // -0.866025403784439
+
+
+// MAIN //
+
+/**
+* Performs the backward FFT of length 3 for real-valued sequences.
+*
+* @private
+* @param {integer} ido - number of real values for each transform
+* @param {integer} l1 - length of the input sequences
+* @param {Float64Array} cc - input array containing sequences to be transformed
+* @param {number} ccOffset - offset for the input array
+* @param {Float64Array} ch - output array containing transformed sequences
+* @param {number} chOffset - offset for the output array
+* @param {Float64Array} wa1 - first array of twiddle factors
+* @param {number} wa1Offset - offset for the first twiddle factors array
+* @param {Float64Array} wa2 - second array of twiddle factors
+* @param {number} wa2Offset - offset for the second twiddle factors array
+* @returns {void}
+*/
+function radb3( ido, l1, cc, ccOffset, ch, chOffset, wa1, wa1Offset, wa2, wa2Offset ) {
+ var idp2;
+ var ti2;
+ var tr2;
+ var ci2;
+ var ci3;
+ var di2;
+ var di3;
+ var cr2;
+ var cr3;
+ var dr2;
+ var dr3;
+ var ic;
+ var i;
+ var k;
+
+ // Parameter adjustments...
+ chOffset -= 1 + ( ido * ( 1 + l1 ) );
+ ccOffset -= 1 + ( ido << 2 );
+ wa1Offset -= 1;
+ wa2Offset -= 1;
+
+ // Function body:
+ for ( k = 1; k <= l1; k++ ) {
+ tr2 = cc[ ccRef( 1, 2, k, 3, ido ) + ccOffset ] + cc[ ccRef( ido, 2, k, 3, ido ) + ccOffset ];
+ cr2 = cc[ ccRef( 1, 1, k, 3, ido ) + ccOffset ] + ( taur * tr2 );
+ ch[ chRef( 1, k, 1, l1, ido ) + chOffset ] = cc[ ccRef( 1, 1, k, 3, ido ) + ccOffset ] + tr2;
+ ci3 = taui * ( cc[ ccRef( 1, 3, k, 3, ido ) + ccOffset ] + cc[ ccRef( 1, 3, k, 3, ido ) + ccOffset ] );
+ ch[ chRef( 1, k, 2, l1, ido ) + chOffset ] = cr2 - ci3;
+ ch[ chRef( 1, k, 3, l1, ido ) + chOffset ] = cr2 + ci3;
+ }
+ if ( ido === 1 ) {
+ return;
+ }
+ idp2 = ido + 2;
+ for ( k = 1; k <= l1; k++ ) {
+ for ( i = 3; i <= ido; i += 2 ) {
+ ic = idp2 - i;
+ tr2 = cc[ ccRef( i - 1, 3, k, 3, ido ) + ccOffset ] + cc[ ccRef( ic - 1, 2, k, 3, ido ) + ccOffset ];
+ cr2 = cc[ ccRef( i - 1, 1, k, 3, ido ) + ccOffset ] + ( taur * tr2 );
+ ch[ chRef( i - 1, k, 1, l1, ido ) + chOffset ] = cc[ ccRef( i - 1, 1, k, 3, ido ) + ccOffset ] + tr2;
+ ti2 = cc[ ccRef( i, 3, k, 3, ido ) + ccOffset ] - cc[ ccRef( ic, 2, k, 3, ido ) + ccOffset ];
+ ci2 = cc[ ccRef( i, 1, k, 3, ido ) + ccOffset ] + ( taur * ti2 );
+ ch[ chRef( i, k, 1, l1, ido ) + chOffset ] = cc[ ccRef( i, 1, k, 3, ido ) + ccOffset ] + ti2;
+ cr3 = taui * ( cc[ ccRef( i - 1, 3, k, 3, ido ) + ccOffset ] - cc[ ccRef( ic - 1, 2, k, 3, ido ) + ccOffset ] );
+ ci3 = taui * ( cc[ ccRef( i, 3, k, 3, ido ) + ccOffset ] + cc[ ccRef( ic, 2, k, 3, ido ) + ccOffset ] );
+ dr2 = cr2 - ci3;
+ dr3 = cr2 + ci3;
+ di2 = ci2 + cr3;
+ di3 = ci2 - cr3;
+ ch[ chRef( i - 1, k, 2, l1, ido) + chOffset ] = ( wa1[ i - 2 + wa1Offset ] * dr2 ) - ( wa1[ i - 1 + wa1Offset ] * di2 );
+ ch[ chRef( i, k, 2, l1, ido) + chOffset ] = ( wa1[ i - 2 + wa1Offset ] * di2 ) + ( wa1[ i - 1 + wa1Offset ] * dr2 );
+ ch[ chRef( i - 1, k, 3, l1, ido) + chOffset ] = ( wa2[ i - 2 + wa2Offset ] * dr3 ) - ( wa2[ i - 1 + wa2Offset ] * di3 );
+ ch[ chRef( i, k, 3, l1, ido) + chOffset ] = ( wa2[ i - 2 + wa2Offset ] * di3 ) + ( wa2[ i - 1 + wa2Offset ] * dr3 );
+ }
+ }
+}
+
+
+// EXPORTS //
+
+module.exports = radb3;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/radb4.js b/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/radb4.js
new file mode 100644
index 000000000000..7adc501a803a
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/radb4.js
@@ -0,0 +1,179 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+/* eslint-disable max-len */
+
+'use strict';
+
+// MODULES //
+
+var SQRT2 = require( '@stdlib/constants/float64/sqrt-two' );
+var chRef = require( './ch_ref.js' );
+var ccRef = require( './cc_ref.js' );
+
+
+// MAIN //
+
+/**
+* Performs the backward FFT of length 4 for real-valued sequences.
+*
+* @private
+* @param {integer} ido - number of real values for each transform
+* @param {integer} l1 - length of the input sequences
+* @param {Float64Array} cc - input array containing sequences to be transformed
+* @param {number} ccOffset - offset for the input array
+* @param {Float64Array} ch - output array containing transformed sequences
+* @param {number} chOffset - offset for the output array
+* @param {Float64Array} wa1 - first array of twiddle factors
+* @param {number} wa1Offset - offset for the first twiddle factors array
+* @param {Float64Array} wa2 - second array of twiddle factors
+* @param {number} wa2Offset - offset for the second twiddle factors array
+* @param {Float64Array} wa3 - third array of twiddle factors
+* @param {number} wa3Offset - offset for the third twiddle factors array
+* @returns {void}
+*/
+function radb4( ido, l1, cc, ccOffset, ch, chOffset, wa1, wa1Offset, wa2, wa2Offset, wa3, wa3Offset ) { // eslint-disable-line max-params
+ var idp2;
+ var ti1;
+ var ti2;
+ var ti3;
+ var ti4;
+ var tr1;
+ var tr2;
+ var tr3;
+ var tr4;
+ var ci2;
+ var ci3;
+ var ci4;
+ var cr2;
+ var cr3;
+ var cr4;
+ var ic;
+ var i;
+ var k;
+
+ // Parameter adjustments...
+ chOffset -= 1 + ( ido * ( 1 + l1 ) );
+ ccOffset -= 1 + ( ido * 5 );
+ wa1Offset -= 1;
+ wa2Offset -= 1;
+ wa3Offset -= 1;
+
+ // Function body:
+ for ( k = 1; k <= l1; k++ ) {
+ tr1 = cc[ ccRef( 1, 1, k, 4, ido ) + ccOffset ] - cc[ ccRef( ido, 4, k, 4, ido ) + ccOffset ];
+ tr2 = cc[ ccRef( 1, 1, k, 4, ido ) + ccOffset ] + cc[ ccRef( ido, 4, k, 4, ido ) + ccOffset ];
+ tr3 = cc[ ccRef( ido, 2, k, 4, ido ) + ccOffset ] + cc[ ccRef( ido, 2, k, 4, ido ) + ccOffset ];
+ tr4 = cc[ ccRef( 1, 3, k, 4, ido ) + ccOffset ] + cc[ ccRef( 1, 3, k, 4, ido ) + ccOffset ];
+ ch[ chRef( 1, k, 1, l1, ido ) + chOffset ] = tr2 + tr3;
+ ch[ chRef( 1, k, 2, l1, ido ) + chOffset ] = tr1 - tr4;
+ ch[ chRef( 1, k, 3, l1, ido ) + chOffset ] = tr2 - tr3;
+ ch[ chRef( 1, k, 4, l1, ido ) + chOffset ] = tr1 + tr4;
+ }
+ if ( ido < 2 ) {
+ return;
+ }
+ if ( ido !== 2 ) {
+ idp2 = ido + 2;
+ for ( k = 1; k <= l1; k++ ) {
+ for ( i = 3; i <= ido; i += 2 ) {
+ ic = idp2 - i;
+ ti1 = cc[ ccRef( i, 1, k, 4, ido ) + ccOffset ] + cc[ ccRef( ic, 4, k, 4, ido ) + ccOffset ];
+ ti2 = cc[ ccRef( i, 1, k, 4, ido ) + ccOffset ] - cc[ ccRef( ic, 4, k, 4, ido ) + ccOffset ];
+ ti3 = cc[ ccRef( i, 3, k, 4, ido ) + ccOffset ] - cc[ ccRef( ic, 2, k, 4, ido ) + ccOffset ];
+ ti4 = cc[ ccRef( i, 3, k, 4, ido ) + ccOffset ] + cc[ ccRef( ic, 2, k, 4, ido ) + ccOffset ];
+ tr1 = cc[ ccRef( i - 1, 1, k, 4, ido ) + ccOffset ] - cc[ ccRef( ic - 1, 4, k, 4, ido ) + ccOffset ];
+ tr2 = cc[ ccRef( i - 1, 1, k, 4, ido ) + ccOffset ] + cc[ ccRef( ic - 1, 4, k, 4, ido ) + ccOffset ];
+ ti4 = cc[ ccRef( i - 1, 3, k, 4, ido ) + ccOffset ] - cc[ ccRef( ic - 1, 2, k, 4, ido ) + ccOffset ];
+ tr3 = cc[ ccRef( i - 1, 3, k, 4, ido ) + ccOffset ] + cc[ ccRef( ic - 1, 2, k, 4, ido ) + ccOffset ];
+ ch[ chRef( i - 1, k, 1, l1, ido ) + chOffset ] = tr2 + tr3;
+ cr3 = tr2 - tr3;
+ ch[ chRef( i, k, 1, l1, ido ) + chOffset ] = ti2 + ti3;
+ ci3 = ti2 - ti3;
+ cr2 = tr1 - tr4;
+ cr4 = tr1 + tr4;
+ ci2 = ti1 + ti4;
+ ci4 = ti1 - ti4;
+ ch[ chRef( i - 1, k, 2, l1, ido ) + chOffset ] = ( wa1[ i - 2 + wa1Offset ] * cr2 ) - ( wa1[ i - 1 + wa1Offset ] * ci2 );
+ ch[ chRef( i, k, 2, l1, ido ) + chOffset ] = ( wa1[ i - 2 + wa1Offset ] * ci2 ) + ( wa1[ i - 1 + wa1Offset ] * cr2 );
+ ch[ chRef( i - 1, k, 3, l1, ido ) + chOffset ] = ( wa2[ i - 2 + wa2Offset ] * cr3 ) - ( wa2[ i - 1 + wa2Offset ] * ci3 );
+ ch[ chRef( i, k, 3, l1, ido ) + chOffset ] = ( wa2[ i - 2 + wa2Offset ] * ci3 ) + ( wa2[ i - 1 + wa2Offset ] * cr3 );
+ ch[ chRef( i - 1, k, 4, l1, ido ) + chOffset ] = ( wa3[ i - 2 + wa3Offset ] * cr4 ) - ( wa3[ i - 1 + wa3Offset ] * ci4 );
+ ch[ chRef( i, k, 4, l1, ido ) + chOffset ] = ( wa3[ i - 2 + wa3Offset ] * ci4 ) + ( wa3[ i - 1 + wa3Offset ] * cr4 );
+ }
+ }
+ if ( ido % 2 === 1 ) {
+ return;
+ }
+ }
+ for ( k = 1; k <= l1; k++ ) {
+ ti1 = cc[ ccRef( 1, 2, k, 4, ido ) + ccOffset ] + cc[ ccRef( 1, 4, k, 4, ido ) + ccOffset ];
+ ti2 = cc[ ccRef( 1, 4, k, 4, ido ) + ccOffset ] - cc[ ccRef( 1, 2, k, 4, ido ) + ccOffset ];
+ tr1 = cc[ ccRef( ido, 1, k, 4, ido ) + ccOffset ] - cc[ ccRef( ido, 3, k, 4, ido ) + ccOffset ];
+ tr2 = cc[ ccRef( ido, 1, k, 4, ido ) + ccOffset ] + cc[ ccRef( ido, 3, k, 4, ido ) + ccOffset ];
+ ch[ chRef( ido, k, 1, l1, ido ) + chOffset ] = tr2 + tr2;
+ ch[ chRef( ido, k, 2, l1, ido ) + chOffset ] = SQRT2 * ( tr1 - ti1 );
+ ch[ chRef( ido, k, 3, l1, ido ) + chOffset ] = ti2 + ti2;
+ ch[ chRef( ido, k, 4, l1, ido ) + chOffset ] = -SQRT2 * ( tr1 + ti1 );
+ }
+}
+
+
+// EXPORTS //
+
+module.exports = radb4;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/radb5.js b/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/radb5.js
new file mode 100644
index 000000000000..6f90f17fe014
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/radb5.js
@@ -0,0 +1,205 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+/* eslint-disable max-len */
+
+'use strict';
+
+// MODULES //
+
+var sincos = require( '@stdlib/math/base/special/sincos' );
+var TWO_PI = require( '@stdlib/constants/float64/two-pi' );
+var chRef = require( './ch_ref.js' );
+var ccRef = require( './cc_ref.js' );
+
+
+// VARIABLES //
+
+var sc1 = sincos( TWO_PI / 5 );
+var sc2 = sincos( ( 2 * TWO_PI ) / 5 );
+var TR11 = sc1[ 1 ]; // 0.309016994374947
+var TI11 = sc1[ 0 ]; // 0.951056516295154
+var TR12 = sc2[ 1 ]; // -0.809016994374947
+var TI12 = sc2[ 0 ]; // 0.587785252292473
+
+
+// MAIN //
+
+/**
+* Performs the backward FFT of length 5 for real-valued sequences.
+*
+* @private
+* @param {integer} ido - number of real values for each transform
+* @param {integer} l1 - length of the input sequences
+* @param {Float64Array} cc - input array containing sequences to be transformed
+* @param {number} ccOffset - offset for the input array
+* @param {Float64Array} ch - output array containing transformed sequences
+* @param {number} chOffset - offset for the output array
+* @param {Float64Array} wa1 - first array of twiddle factors
+* @param {number} wa1Offset - offset for the first twiddle factors array
+* @param {Float64Array} wa2 - second array of twiddle factors
+* @param {number} wa2Offset - offset for the second twiddle factors array
+* @param {Float64Array} wa3 - third array of twiddle factors
+* @param {number} wa3Offset - offset for the third twiddle factors array
+* @param {Float64Array} wa4 - fourth array of twiddle factors
+* @param {number} wa4Offset - offset for the fourth twiddle factors array
+* @returns {void}
+*/
+function radb5( ido, l1, cc, ccOffset, ch, chOffset, wa1, wa1Offset, wa2, wa2Offset, wa3, wa3Offset, wa4, wa4Offset ) { // eslint-disable-line max-params
+ var idp2;
+ var ti2;
+ var ti3;
+ var ti4;
+ var ti5;
+ var tr2;
+ var tr3;
+ var tr4;
+ var tr5;
+ var ci2;
+ var ci3;
+ var ci4;
+ var ci5;
+ var di2;
+ var di3;
+ var di4;
+ var di5;
+ var dr2;
+ var dr3;
+ var dr4;
+ var dr5;
+ var cr2;
+ var cr3;
+ var cr4;
+ var cr5;
+ var ic;
+ var i;
+ var k;
+
+ // Parameter adjustments...
+ chOffset -= 1 + ( ido * ( 1 + l1 ) );
+ ccOffset -= 1 + ( ido * 6 );
+ wa1Offset -= 1;
+ wa2Offset -= 1;
+ wa3Offset -= 1;
+ wa4Offset -= 1;
+
+ // Function body:
+ for ( k = 1; k <= l1; k++ ) {
+ ti5 = cc[ ccRef( 1, 3, k, 5, ido ) + ccOffset ] + cc[ ccRef( 1, 3, k, 5, ido ) + ccOffset ];
+ ti4 = cc[ ccRef( 1, 5, k, 5, ido ) + ccOffset ] + cc[ ccRef( 1, 5, k, 5, ido ) + ccOffset ];
+ tr2 = cc[ ccRef( ido, 2, k, 5, ido ) + ccOffset ] + cc[ ccRef( ido, 2, k, 5, ido ) + ccOffset ];
+ tr3 = cc[ ccRef( ido, 4, k, 5, ido ) + ccOffset ] + cc[ ccRef( ido, 4, k, 5, ido ) + ccOffset ];
+ ch[ chRef( 1, k, 1, l1, ido ) + chOffset ] = cc[ ccRef( 1, 1, k, 5, ido ) + ccOffset ] + tr2 + tr3;
+ cr2 = cc[ ccRef( 1, 1, k, 5, ido ) + ccOffset ] + ( tr2 * TR11 ) + ( tr3 * TR12 );
+ cr3 = cc[ ccRef( 1, 1, k, 5, ido ) + ccOffset ] + ( tr2 * TR12 ) + ( tr3 * TR11 );
+ ci5 = ( ti5 * TI11 ) + ( ti4 * TI12 );
+ ci4 = ( ti5 * TI12 ) - ( ti4 * TI11 );
+ ch[ chRef( 1, k, 2, l1, ido ) + chOffset ] = cr2 - ci5;
+ ch[ chRef( 1, k, 3, l1, ido ) + chOffset ] = cr3 - ci4;
+ ch[ chRef( 1, k, 4, l1, ido ) + chOffset ] = cr3 + ci4;
+ ch[ chRef( 1, k, 5, l1, ido ) + chOffset ] = cr2 + ci5;
+ }
+ if ( ido === 1 ) {
+ return;
+ }
+ idp2 = ido + 2;
+ for ( k = 1; k <= l1; k++ ) {
+ for ( i = 3; i <= ido; i += 2 ) {
+ ic = idp2 - i;
+ ti5 = cc[ ccRef( i, 3, k, 5, ido ) + ccOffset ] + cc[ ccRef( ic, 2, k, 5, ido ) + ccOffset ];
+ ti2 = cc[ ccRef( i, 3, k, 5, ido ) + ccOffset ] - cc[ ccRef( ic, 2, k, 5, ido ) + ccOffset ];
+ ti4 = cc[ ccRef( i, 5, k, 5, ido ) + ccOffset ] + cc[ ccRef( ic, 4, k, 5, ido ) + ccOffset ];
+ ti3 = cc[ ccRef( i, 5, k, 5, ido ) + ccOffset ] - cc[ ccRef( ic, 4, k, 5, ido ) + ccOffset ];
+ tr5 = cc[ ccRef( i - 1, 3, k, 5, ido ) + ccOffset ] - cc[ ccRef( ic - 1, 2, k, 5, ido ) + ccOffset ];
+ tr2 = cc[ ccRef( i - 1, 3, k, 5, ido ) + ccOffset ] + cc[ ccRef( ic - 1, 2, k, 5, ido ) + ccOffset ];
+ tr4 = cc[ ccRef( i - 1, 5, k, 5, ido ) + ccOffset ] - cc[ ccRef( ic - 1, 4, k, 5, ido ) + ccOffset ];
+ tr3 = cc[ ccRef( i - 1, 5, k, 5, ido ) + ccOffset ] + cc[ ccRef( ic - 1, 4, k, 5, ido ) + ccOffset ];
+ ch[ chRef( i - 1, k, 1, l1, ido ) + chOffset ] = cc[ ccRef( i - 1, 1, k, 5, ido ) + ccOffset ] + tr2 + tr3;
+ ch[ chRef( i, k, 1, l1, ido ) + chOffset ] = cc[ ccRef( i, 1, k, 5, ido ) + ccOffset ] + ti2 + ti3;
+ cr2 = cc[ ccRef( i - 1, 1, k, 5, ido ) + ccOffset ] + ( tr2 * TR11 ) + ( tr3 * TR12 );
+ ci2 = cc[ ccRef( i, 1, k, 5, ido ) + ccOffset ] + ( ti2 * TR11 ) + ( ti3 * TR12 );
+ cr3 = cc[ ccRef( i - 1, 1, k, 5, ido ) + ccOffset ] + ( tr2 * TR12 ) + ( tr3 * TR11 );
+ ci3 = cc[ ccRef( i, 1, k, 5, ido ) + ccOffset ] + ( ti2 * TR12 ) + ( ti3 * TR11 );
+ cr5 = ( tr5 * TI11 ) + ( tr4 * TI12 );
+ ci5 = ( ti5 * TI11 ) + ( ti4 * TI12 );
+ cr4 = ( tr5 * TI12 ) - ( tr4 * TI11 );
+ ci4 = ( ti5 * TI12 ) - ( ti4 * TI11 );
+ dr3 = cr3 - ci4;
+ dr4 = cr3 + ci4;
+ di3 = ci3 + cr4;
+ di4 = ci3 - cr4;
+ dr5 = cr2 + ci5;
+ dr2 = cr2 - ci5;
+ di5 = ci2 - cr5;
+ di2 = ci2 + cr5;
+ ch[ chRef( i - 1, k, 2, l1, ido ) + chOffset ] = ( wa1[ i - 2 + wa1Offset ] * dr2 ) - ( wa1[ i - 1 + wa1Offset ] * di2 );
+ ch[ chRef( i, k, 2, l1, ido ) + chOffset ] = ( wa1[ i - 2 + wa1Offset ] * di2 ) + ( wa1[ i - 1 + wa1Offset ] * dr2 );
+ ch[ chRef( i - 1, k, 3, l1, ido ) + chOffset ] = ( wa2[ i - 2 + wa2Offset ] * dr3 ) - ( wa2[ i - 1 + wa2Offset ] * di3 );
+ ch[ chRef( i, k, 3, l1, ido ) + chOffset ] = ( wa2[ i - 2 + wa2Offset ] * di3 ) + ( wa2[ i - 1 + wa2Offset ] * dr3 );
+ ch[ chRef( i - 1, k, 4, l1, ido ) + chOffset ] = ( wa3[ i - 2 + wa3Offset ] * dr4 ) - ( wa3[ i - 1 + wa3Offset ] * di4 );
+ ch[ chRef( i, k, 4, l1, ido ) + chOffset ] = ( wa3[ i - 2 + wa3Offset ] * di4 ) + ( wa3[ i - 1 + wa3Offset ] * dr4 );
+ ch[ chRef( i - 1, k, 5, l1, ido ) + chOffset ] = ( wa4[ i - 2 + wa4Offset ] * dr5 ) - ( wa4[ i - 1 + wa4Offset ] * di5 );
+ ch[ chRef( i, k, 5, l1, ido ) + chOffset ] = ( wa4[ i - 2 + wa4Offset ] * di5 ) + ( wa4[ i - 1 + wa4Offset ] * dr5 );
+ }
+ }
+}
+
+
+// EXPORTS //
+
+module.exports = radb5;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/radbg.js b/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/radbg.js
new file mode 100644
index 000000000000..b025eefe8d81
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/radbg.js
@@ -0,0 +1,302 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+/* eslint-disable max-len, max-statements */
+
+'use strict';
+
+// MODULES //
+
+var sincos = require( '@stdlib/math/base/special/sincos' );
+var TWO_PI = require( '@stdlib/constants/float64/two-pi' );
+var chRef = require( './ch_ref.js' );
+var ccRef = require( './cc_ref.js' );
+var c1Ref = require( './c1_ref.js' );
+var c2Ref = require( './c2_ref.js' );
+var ch2Ref = require( './ch2_ref.js' );
+
+
+// MAIN //
+
+/**
+* Performs the backward FFT for real-valued sequences.
+*
+* @private
+* @param {integer} ido - number of real values for each transform
+* @param {integer} ip - radix of the transform
+* @param {integer} l1 - length of the input sequences
+* @param {integer} idl1 - stride for the transform
+* @param {Float64Array} cc - input array containing sequences to be transformed
+* @param {number} ccOffset - offset for the input array
+* @param {Float64Array} c1 - first work array
+* @param {number} c1Offset - offset for the first work array
+* @param {Float64Array} c2 - second work array
+* @param {number} c2Offset - offset for the second work array
+* @param {Float64Array} ch - output array containing transformed sequences
+* @param {number} chOffset - offset for the output array
+* @param {Float64Array} ch2 - work array for transformed sequences
+* @param {number} ch2Offset - offset for the work array
+* @param {Float64Array} wa - array of twiddle factors
+* @param {number} waOffset - offset for the twiddle factors array
+* @returns {void}
+*/
+function radbg( ido, ip, l1, idl1, cc, ccOffset, c1, c1Offset, c2, c2Offset, ch, chOffset, ch2, ch2Offset, wa, waOffset ) { // eslint-disable-line max-params
+ var ar1h;
+ var ar2h;
+ var idp2;
+ var ipp2;
+ var idij;
+ var ipph;
+ var dc2;
+ var ai1;
+ var ai2;
+ var ar1;
+ var ar2;
+ var ds2;
+ var nbd;
+ var dcp;
+ var arg;
+ var dsp;
+ var j2;
+ var ic;
+ var jc;
+ var lc;
+ var ik;
+ var is;
+ var sc;
+ var i;
+ var j;
+ var k;
+ var l;
+
+ // Parameter adjustments...
+ chOffset -= 1 + ( ido * ( 1 + l1 ) );
+ c1Offset -= 1 + ( ido * ( 1 + l1 ) );
+ ccOffset -= 1 + ( ido * ( 1 + ip ) );
+ ch2Offset -= 1 + idl1;
+ c2Offset -= 1 + idl1;
+ waOffset -= 1;
+
+ // Function body:
+ arg = TWO_PI / ip;
+ sc = sincos( arg );
+ dcp = sc[ 1 ];
+ dsp = sc[ 0 ];
+ idp2 = ido + 2;
+ nbd = ( ido - 1 ) / 2;
+ ipp2 = ip + 2;
+ ipph = ( ip + 1 ) / 2;
+ if ( ido >= l1 ) {
+ for ( k = 1; k <= l1; k++ ) {
+ for ( i = 1; i <= ido; i++ ) {
+ ch[ chRef( i, k, 1, l1, ido ) + chOffset ] = cc[ ccRef( i, 1, k, ip, ido ) + ccOffset ];
+ }
+ }
+ } else {
+ for ( i = 1; i <= ido; i++ ) {
+ for ( k = 1; k <= l1; k++ ) {
+ ch[ chRef( i, k, 1, l1, ido ) + chOffset ] = cc[ ccRef( i, 1, k, ip, ido ) + ccOffset ];
+ }
+ }
+ }
+ for ( j = 2; j <= ipph; j++ ) {
+ jc = ipp2 - j;
+ j2 = j + j;
+ for ( k = 1; k <= l1; k++ ) {
+ ch[ chRef( 1, k, j, l1, ido ) + chOffset ] = cc[ ccRef( ido, j2 - 2, k, ip, ido ) + ccOffset ] + cc[ ccRef( ido, j2 - 2, k, ip, ido ) + ccOffset ];
+ ch[ chRef( 1, k, jc, l1, ido ) + chOffset ] = cc[ ccRef( 1, j2 - 1, k, ip, ido ) + ccOffset ] + cc[ ccRef( 1, j2 - 1, k, ip, ido ) + ccOffset ];
+ }
+ }
+ if ( ido !== 1 ) {
+ if ( nbd >= l1 ) {
+ for ( j = 2; j <= ipph; j++ ) {
+ jc = ipp2 - j;
+ for ( k = 1; k <= l1; k++ ) {
+ for ( i = 3; i <= ido; i += 2 ) {
+ ic = idp2 - i;
+ ch[ chRef( i - 1, k, j, l1, ido ) + chOffset ] = cc[ ccRef( i - 1, ( j << 1 ) - 1, k, ip, ido ) + ccOffset ] + cc[ ccRef( ic - 1, ( j << 1 ) - 2, k, ip, ido ) + ccOffset ];
+ ch[ chRef( i - 1, k, jc, l1, ido ) + chOffset ] = cc[ ccRef( i - 1, ( j << 1 ) - 1, k, ip, ido ) + ccOffset ] - cc[ ccRef( ic - 1, ( j << 1 ) - 2, k, ip, ido ) + ccOffset ];
+ ch[ chRef( i, k, j, l1, ido ) + chOffset ] = cc[ ccRef( i, ( j << 1 ) - 1, k, ip, ido ) + ccOffset ] - cc[ ccRef( ic, ( j << 1 ) - 2, k, ip, ido ) + ccOffset ];
+ ch[ chRef( i, k, jc, l1, ido ) + chOffset ] = cc[ ccRef( i, ( j << 1 ) - 1, k, ip, ido ) + ccOffset ] + cc[ ccRef( ic, ( j << 1 ) - 2, k, ip, ido ) + ccOffset ];
+ }
+ }
+ }
+ } else {
+ for ( j = 2; j <= ipph; j++ ) {
+ jc = ipp2 - j;
+ for ( i = 3; i <= ido; i += 2 ) {
+ ic = idp2 - i;
+ for ( k = 1; k <= l1; k++ ) {
+ ch[ chRef( i - 1, k, j, l1, ido ) + chOffset ] = cc[ ccRef( i - 1, ( j << 1 ) - 1, k, ip, ido ) + ccOffset ] + cc[ ccRef( ic - 1, ( j << 1 ) - 2, k, ip, ido ) + ccOffset ];
+ ch[ chRef( i - 1, k, jc, l1, ido ) + chOffset ] = cc[ ccRef( i - 1, ( j << 1 ) - 1, k, ip, ido ) + ccOffset ] - cc[ ccRef( ic - 1, ( j << 1 ) - 2, k, ip, ido ) + ccOffset ];
+ ch[ chRef( i, k, j, l1, ido ) + chOffset ] = cc[ ccRef( i, ( j << 1 ) - 1, k, ip, ido ) + ccOffset ] - cc[ ccRef( ic, ( j << 1 ) - 2, k, ip, ido ) + ccOffset ];
+ ch[ chRef( i, k, jc, l1, ido ) + chOffset ] = cc[ ccRef( i, ( j << 1 ) - 1, k, ip, ido ) + ccOffset ] + cc[ ccRef( ic, ( j << 1 ) - 2, k, ip, ido ) + ccOffset ];
+ }
+ }
+ }
+ }
+ }
+ ar1 = 1.0;
+ ai1 = 0.0;
+ for ( l = 2; l <= ipph; l++ ) {
+ lc = ipp2 - l;
+ ar1h = ( dcp * ar1 ) - ( dsp * ai1 );
+ ai1 = ( dcp * ai1 ) + ( dsp * ar1 );
+ ar1 = ar1h;
+ for ( ik = 1; ik <= idl1; ik++ ) {
+ c2[ c2Ref( ik, l, idl1 ) + c2Offset ] = ch2[ ch2Ref( ik, 1, idl1 ) + ch2Offset ] + ( ar1 * ch2[ ch2Ref( ik, 2, idl1 ) + ch2Offset ] );
+ c2[ c2Ref( ik, lc, idl1 ) + c2Offset ] = ai1 * ch2[ ch2Ref( ik, ip, idl1 ) + ch2Offset ];
+ }
+ dc2 = ar1;
+ ds2 = ai1;
+ ar2 = ar1;
+ ai2 = ai1;
+ for ( j = 3; j <= ipph; j++ ) {
+ jc = ipp2 - j;
+ ar2h = ( dc2 * ar2 ) - ( ds2 * ai2 );
+ ai2 = ( dc2 * ai2 ) + ( ds2 * ar2 );
+ ar2 = ar2h;
+ for ( ik = 1; ik <= idl1; ik++ ) {
+ c2[ c2Ref( ik, l, idl1 ) + c2Offset ] += ( ar2 * ch2[ ch2Ref( ik, j, idl1 ) + ch2Offset ] );
+ c2[ c2Ref( ik, lc, idl1 ) + c2Offset ] += ( ai2 * ch2[ ch2Ref( ik, jc, idl1 ) + ch2Offset ] );
+ }
+ }
+ }
+ for ( j = 2; j <= ipph; j++ ) {
+ for ( ik = 1; ik <= idl1; ik++ ) {
+ ch2[ ch2Ref( ik, 1, idl1 ) + ch2Offset ] += ch2[ ch2Ref( ik, j, idl1 ) + ch2Offset ];
+ }
+ }
+ for ( j = 2; j <= ipph; j++ ) {
+ jc = ipp2 - j;
+ for ( k = 1; k <= l1; k++ ) {
+ ch[ chRef( 1, k, j, l1, ido ) + chOffset ] = c1[ c1Ref( 1, k, j, l1, ido ) + c1Offset ] - c1[ c1Ref( 1, k, jc, l1, ido ) + c1Offset ];
+ ch[ chRef( 1, k, jc, l1, ido ) + chOffset ] = c1[ c1Ref( 1, k, j, l1, ido ) + c1Offset ] + c1[ c1Ref( 1, k, jc, l1, ido ) + c1Offset ];
+ }
+ }
+ if ( ido !== 1 ) {
+ if ( nbd >= l1 ) {
+ for ( j = 2; j <= ipph; j++ ) {
+ jc = ipp2 - j;
+ for ( k = 1; k <= l1; k++ ) {
+ for ( i = 3; i <= ido; i += 2 ) {
+ ch[ chRef( i - 1, k, j, l1, ido ) + chOffset ] = c1[ c1Ref( i - 1, k, j, l1, ido ) + c1Offset ] - c1[ c1Ref( i, k, jc, l1, ido ) + c1Offset ];
+ ch[ chRef( i - 1, k, jc, l1, ido ) + chOffset ] = c1[ c1Ref( i - 1, k, j, l1, ido ) + c1Offset ] + c1[ c1Ref( i, k, jc, l1, ido ) + c1Offset ];
+ ch[ chRef( i, k, j, l1, ido ) + chOffset ] = c1[ c1Ref( i, k, j, l1, ido ) + c1Offset ] + c1[ c1Ref( i - 1, k, jc, l1, ido ) + c1Offset ];
+ ch[ chRef( i, k, jc, l1, ido ) + chOffset ] = c1[ c1Ref( i, k, j, l1, ido ) + c1Offset ] - c1[ c1Ref( i - 1, k, jc, l1, ido ) + c1Offset ];
+ }
+ }
+ }
+ } else {
+ for ( j = 2; j <= ipph; j++ ) {
+ jc = ipp2 - j;
+ for ( i = 3; i <= ido; i += 2 ) {
+ for ( k = 1; k <= l1; k++ ) {
+ ch[ chRef( i - 1, k, j, l1, ido ) + chOffset ] = c1[ c1Ref( i - 1, k, j, l1, ido ) + c1Offset ] - c1[ c1Ref( i, k, jc, l1, ido ) + c1Offset ];
+ ch[ chRef( i - 1, k, jc, l1, ido ) + chOffset ] = c1[ c1Ref( i - 1, k, j, l1, ido ) + c1Offset ] + c1[ c1Ref( i, k, jc, l1, ido ) + c1Offset ];
+ ch[ chRef( i, k, j, l1, ido ) + chOffset ] = c1[ c1Ref( i, k, j, l1, ido ) + c1Offset ] + c1[ c1Ref( i - 1, k, jc, l1, ido ) + c1Offset ];
+ ch[ chRef( i, k, jc, l1, ido ) + chOffset ] = c1[ c1Ref( i, k, j, l1, ido ) + c1Offset ] - c1[ c1Ref( i - 1, k, jc, l1, ido ) + c1Offset ];
+ }
+ }
+ }
+ }
+ }
+ if ( ido === 1 ) {
+ return;
+ }
+ for ( ik = 1; ik <= idl1; ik++ ) {
+ c2[ c2Ref( ik, 1, idl1 ) + c2Offset ] = ch2[ ch2Ref( ik, 1, idl1 ) + ch2Offset ];
+ }
+ for ( j = 2; j <= ip; j++ ) {
+ for ( k = 1; k <= l1; k++ ) {
+ c1[ c1Ref( 1, k, j, l1, ido ) + c1Offset ] = ch[ chRef( 1, k, j, l1, ido ) + chOffset ];
+ }
+ }
+ if ( nbd <= l1 ) {
+ is = -ido;
+ for ( j = 2; j <= ip; j++ ) {
+ is += ido;
+ idij = is;
+ for ( i = 3; i <= ido; i += 2 ) {
+ idij += 2;
+ for ( k = 1; k <= l1; k++ ) {
+ c1[ c1Ref( i - 1, k, j, l1, ido ) + c1Offset ] = ( wa[ idij - 1 + waOffset ] * ch[ chRef( i - 1, k, j, l1, ido ) + chOffset ] ) - ( wa[ idij + waOffset ] * ch[ chRef( i, k, j, l1, ido ) + chOffset ] );
+ c1[ c1Ref( i, k, j, l1, ido ) + c1Offset ] = ( wa[ idij - 1 + waOffset ] * ch[ chRef( i, k, j, l1, ido ) + chOffset ] ) + ( wa[ idij + waOffset ] * ch[ chRef( i - 1, k, j, l1, ido ) + chOffset ] );
+ }
+ }
+ }
+ } else {
+ is = -ido;
+ for ( j = 2; j <= ip; j++ ) {
+ is += ido;
+ for ( k = 1; k <= l1; k++ ) {
+ idij = is;
+ for ( i = 3; i <= ido; i += 2 ) {
+ idij += 2;
+ c1[ c1Ref( i - 1, k, j, l1, ido ) + c1Offset ] = ( wa[ idij - 1 + waOffset ] * ch[ chRef( i - 1, k, j, l1, ido ) + chOffset ] ) - ( wa[ idij + waOffset ] * ch[ chRef( i, k, j, l1, ido ) + chOffset ] );
+ c1[ c1Ref( i, k, j, l1, ido ) + c1Offset ] = ( wa[ idij - 1 + waOffset ] * ch[ chRef( i, k, j, l1, ido ) + chOffset ] ) + ( wa[ idij + waOffset ] * ch[ chRef( i - 1, k, j, l1, ido ) + chOffset ] );
+ }
+ }
+ }
+ }
+}
+
+
+// EXPORTS //
+
+module.exports = radbg;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/rfftb1.js b/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/rfftb1.js
new file mode 100644
index 000000000000..364b28f6d2e4
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/lib/rfftb1.js
@@ -0,0 +1,173 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+/* eslint-disable max-len */
+
+'use strict';
+
+// MODULES //
+
+var floor = require( '@stdlib/math/base/special/floor' );
+var radb2 = require( './radb2.js' );
+var radb3 = require( './radb3.js' );
+var radb4 = require( './radb4.js' );
+var radb5 = require( './radb5.js' );
+var radbg = require( './radbg.js' );
+
+var printWorkspace = require( './print_real_workspace.js' ); // FIXME
+
+
+// MAIN //
+
+/**
+* Performs the backward real-valued Fast Fourier Transform.
+*
+* @private
+* @param {number} N - length of the sequence to transform
+* @param {Float64Array} c - input array containing sequence to be transformed
+* @param {number} cOffset - starting index for input array
+* @param {Float64Array} ch - working array for intermediate results
+* @param {number} chOffset - starting index for working array
+* @param {Float64Array} wa - array of twiddle factors
+* @param {number} waOffset - starting index for twiddle factors array
+* @param {Int32Array} ifac - array containing factorization information
+* @param {number} ifacOffset - starting index for factorization array
+* @returns {void}
+*/
+function rfftb1( N, c, cOffset, ch, chOffset, wa, waOffset, ifac, ifacOffset ) {
+ var idl1;
+ var ido;
+ var ix4;
+ var ix3;
+ var ix2;
+ var FLG;
+ var nf;
+ var l2;
+ var l1;
+ var iw;
+ var ip;
+ var k1;
+ var i;
+
+ // Resolve the number of factors:
+ nf = ifac[ ifacOffset+1 ];
+
+ FLG = 0; // FIXME: describe the point of this flag
+ l1 = 1;
+
+ // FIXME
+ printWorkspace( N, ch, 1, chOffset );
+
+ iw = 0;
+ for ( k1 = 1; k1 <= nf; k1++ ) {
+ // Resolve the next factor:
+ ip = ifac[ ifacOffset+k1+1 ];
+
+ l2 = ip * l1;
+ ido = floor( N / l2 );
+ idl1 = ido * l1;
+ switch ( ip ) {
+ case 4:
+ ix2 = iw + ido;
+ ix3 = ix2 + ido;
+ radb4( ido, l1, ( FLG ) ? ch : c, ( FLG ) ? chOffset : cOffset, ( FLG ) ? c : ch, ( FLG ) ? cOffset : chOffset, wa, iw+waOffset, wa, ix2+waOffset, wa, ix3+waOffset );
+ FLG = 1 - FLG;
+ break;
+ case 2:
+ radb2( ido, l1, ( FLG ) ? ch : c, 1, ( FLG ) ? chOffset : cOffset, ( FLG ) ? c : ch, 1, ( FLG ) ? cOffset : chOffset, wa, 1, iw+waOffset );
+ FLG = 1 - FLG;
+ break;
+ case 3:
+ ix2 = iw + ido;
+ radb3( ido, l1, ( FLG ) ? ch : c, ( FLG ) ? chOffset : cOffset, ( FLG ) ? c : ch, ( FLG ) ? cOffset : chOffset, wa, iw+waOffset, wa, ix2+waOffset );
+ FLG = 1 - FLG;
+ break;
+ case 5:
+ ix2 = iw + ido;
+ ix3 = ix2 + ido;
+ ix4 = ix3 + ido;
+ radb5( ido, l1, ( FLG ) ? ch : c, ( FLG ) ? chOffset : cOffset, ( FLG ) ? c : ch, ( FLG ) ? cOffset : chOffset, wa, iw+waOffset, wa, ix2+waOffset, wa, ix3+waOffset, wa, ix4+waOffset );
+ FLG = 1 - FLG;
+ break;
+ default:
+ if ( FLG === 0 ) {
+ radbg( ido, ip, l1, idl1, c, cOffset, c, cOffset, c, cOffset, ch, chOffset, ch, chOffset, wa, iw+waOffset );
+ } else {
+ radbg( ido, ip, l1, idl1, ch, chOffset, ch, chOffset, ch, chOffset, c, cOffset, c, cOffset, wa, iw+waOffset );
+ }
+ if ( ido === 1 ) {
+ FLG = 1 - FLG;
+ }
+ break;
+ }
+ l1 = l2;
+ iw += ( ip - 1 ) * ido;
+ }
+ if ( FLG === 0 ) {
+ return;
+ }
+ // Now that we've finished computing the transforms, copy over the final results to the input array...
+ for ( i = 0; i < N; i++ ) {
+ c[ i+cOffset ] = ch[ i+chOffset ]; // FIXME: use `blas/base/dcopy`
+ }
+}
+
+
+// EXPORTS //
+
+module.exports = rfftb1;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/package.json b/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/package.json
new file mode 100644
index 000000000000..05938eb2999a
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/rfftb/package.json
@@ -0,0 +1,56 @@
+{
+ "name": "@stdlib/fft/base/fftpack/rfftb",
+ "version": "0.0.0",
+ "description": "TODO: description.",
+ "license": "Apache-2.0",
+ "author": {
+ "name": "The Stdlib Authors",
+ "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
+ },
+ "contributors": [
+ {
+ "name": "The Stdlib Authors",
+ "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
+ }
+ ],
+ "main": "./lib",
+ "directories": {
+ "benchmark": "./benchmark",
+ "doc": "./docs",
+ "example": "./examples",
+ "lib": "./lib",
+ "test": "./test"
+ },
+ "types": "./docs/types",
+ "scripts": {},
+ "homepage": "https://github.com/stdlib-js/stdlib",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/stdlib-js/stdlib.git"
+ },
+ "bugs": {
+ "url": "https://github.com/stdlib-js/stdlib/issues"
+ },
+ "dependencies": {},
+ "devDependencies": {},
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "keywords": [
+ "stdlib",
+ "{{TODO:keywords}}"
+ ],
+ "__stdlib__": {}
+}
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/c1_ref.js b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/c1_ref.js
new file mode 100644
index 000000000000..942378815633
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/c1_ref.js
@@ -0,0 +1,81 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+'use strict';
+
+// MAIN //
+
+/**
+* Computes an index into the intermediate array `c1`.
+*
+* @private
+* @param {NonNegativeInteger} a1 - index of first dimension
+* @param {NonNegativeInteger} a2 - index of second dimension
+* @param {NonNegativeInteger} a3 - index of third dimension
+* @param {NonNegativeInteger} l1 - length parameter related to the FFT stage
+* @param {NonNegativeInteger} ido - dimension order
+* @returns {NonNegativeInteger} computed index
+*/
+function c1Ref( a1, a2, a3, l1, ido ) {
+ return ( ( (a3*l1)+a2 ) * ido ) + a1;
+}
+
+
+// EXPORTS //
+
+module.exports = c1Ref;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/c2_ref.js b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/c2_ref.js
new file mode 100644
index 000000000000..3b4910a3f245
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/c2_ref.js
@@ -0,0 +1,79 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+'use strict';
+
+// MAIN //
+
+/**
+* Computes an index into the intermediate array `c2`.
+*
+* @private
+* @param {NonNegativeInteger} a1 - index of first dimension
+* @param {NonNegativeInteger} a2 - index of second dimension
+* @param {integer} idl1 - stride related to the `l1` parameter
+* @returns {NonNegativeInteger} computed index
+*/
+function c2Ref( a1, a2, idl1 ) {
+ return ( a2*idl1 ) + a1;
+}
+
+
+// EXPORTS //
+
+module.exports = c2Ref;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/cc_ref.js b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/cc_ref.js
new file mode 100644
index 000000000000..c9491438a35c
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/cc_ref.js
@@ -0,0 +1,85 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+'use strict';
+
+// MAIN //
+
+/**
+* Computes an index into an input array `cc` containing complex-valued data.
+*
+* @private
+* @param {NonNegativeInteger} a1 - index of first dimension
+* @param {NonNegativeInteger} a2 - index of second dimension
+* @param {NonNegativeInteger} a3 - index of third dimension
+* @param {NonNegativeInteger} ip - number of sub-steps or prime factors in the FFT
+* @param {NonNegativeInteger} ido - dimension order
+* @returns {NonNegativeInteger} computed index
+*
+* @example
+* var out = ccRef( 3, 2, 1, 2, 2 );
+* // returns 11
+*/
+function ccRef( a1, a2, a3, ip, ido ) {
+ return ( ( (a3*ip)+a2 ) * ido ) + a1;
+}
+
+
+// EXPORTS //
+
+module.exports = ccRef;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/ch2_ref.js b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/ch2_ref.js
new file mode 100644
index 000000000000..b53f3d8579d4
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/ch2_ref.js
@@ -0,0 +1,79 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+'use strict';
+
+// MAIN //
+
+/**
+* Computes an index into an output array `ch2` for storing processed FFT data.
+*
+* @private
+* @param {NonNegativeInteger} a1 - index of first dimension
+* @param {NonNegativeInteger} a2 - index of second dimension
+* @param {integer} idl1 - stride related to the `l1` parameter
+* @returns {NonNegativeInteger} computed index
+*/
+function ch2Ref( a1, a2, idl1 ) {
+ return ( a2*idl1 ) + a1;
+}
+
+
+// EXPORTS //
+
+module.exports = ch2Ref;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/ch_ref.js b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/ch_ref.js
new file mode 100644
index 000000000000..1e4de83a80f1
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/ch_ref.js
@@ -0,0 +1,81 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+'use strict';
+
+// MAIN //
+
+/**
+* Computes an index into an output array `ch` for storing processed FFT data.
+*
+* @private
+* @param {NonNegativeInteger} a1 - index of first dimension
+* @param {NonNegativeInteger} a2 - index of second dimension
+* @param {NonNegativeInteger} a3 - index of third dimension
+* @param {NonNegativeInteger} radix - length parameter related to the FFT stage
+* @param {NonNegativeInteger} ido - dimension order
+* @returns {NonNegativeInteger} - calculated index
+*/
+function chRef( a1, a2, a3, radix, ido ) {
+ return ( ( (a3*radix)+a2 ) * ido ) + a1;
+}
+
+
+// EXPORTS //
+
+module.exports = chRef;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/index.js
new file mode 100644
index 000000000000..6d5acd2c208a
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/index.js
@@ -0,0 +1,39 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+'use strict';
+
+/**
+* TODO: description.
+*
+* @module @stdlib/fft/base/fftpack/rfftf
+*
+* @example
+* var rfftf = require( '@stdlib/fft/base/fftpack/rfftf' );
+*
+* // TODO
+*/
+
+// MODULES //
+
+var main = require( './main.js' );
+
+
+// EXPORTS //
+
+module.exports = main;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/main.js b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/main.js
new file mode 100644
index 000000000000..b1a85e7c6673
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/main.js
@@ -0,0 +1,96 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+'use strict';
+
+// MODULES //
+
+var rfftf1 = require( './rfftf1.js' );
+
+
+// MAIN //
+
+/**
+* Performs the forward Fourier transform for a real-valued sequence.
+*
+* @param {NonNegativeInteger} N - length of the sequence to transform
+* @param {Float64Array} r - real-valued input array containing the sequence to be transformed
+* @param {NonNegativeInteger} offsetR - starting index for `r`
+* @param {Float64Array} workspace - workspace array containing pre-computed values
+* @param {NonNegativeInteger} offsetW - starting index for `workspace`
+* @returns {void}
+*/
+function rfftf( N, r, offsetR, workspace, offsetW ) { // FIXME: add stride support
+ var offsetT;
+ var offsetF;
+
+ // When a sub-sequence is a single data point, the FFT is the identity, so no transformation necessary...
+ if ( N === 1 ) {
+ return;
+ }
+ // Resolve the starting indices for storing twiddle factors and factorization results:
+ offsetT = offsetW + N; // index offset for twiddle factors
+ offsetF = offsetT + N; // index offset for factors describing the sub-transforms
+
+ rfftf1( N, r, offsetR, workspace, offsetW, workspace, offsetT, workspace, offsetF ); // eslint-disable-line max-len
+}
+
+
+// EXPORTS //
+
+module.exports = rfftf;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/print_real_workspace.js b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/print_real_workspace.js
new file mode 100644
index 000000000000..55d984f19792
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/print_real_workspace.js
@@ -0,0 +1,64 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+'use strict';
+
+// MODULES //
+
+var strided2array = require( '@stdlib/array/base/from-strided' );
+
+
+// MAIN //
+
+/**
+* Prints the contents of a workspace array for a real-valued Fourier transform.
+*
+* @private
+* @param {NonNegativeInteger} N - sequence length
+* @param {Float64Array} workspace - workspace array
+* @param {integer} strideW - stride length for `workspace`
+* @param {NonNegativeInteger} offsetW - starting index for `workspace`
+* @returns {void}
+*/
+function printWorkspace( N, workspace, strideW, offsetW ) { // FIXME: remove this file and function once we've clean-up this package
+ var offsetT;
+ var offsetF;
+ var tmp;
+
+ tmp = strided2array( N, workspace, strideW, offsetW );
+ console.log( 'INTERMEDIATE RESULTS:' );
+ console.log( tmp );
+ console.log( ' ' );
+
+ offsetT = offsetW + ( N*strideW );
+ tmp = strided2array( N, workspace, strideW, offsetT );
+ console.log( 'TWIDDLE FACTORS:' );
+ console.log( tmp );
+ console.log( ' ' );
+
+ offsetF = offsetT + ( N*strideW );
+ tmp = strided2array( N, workspace, strideW, offsetF );
+ console.log( 'FACTORIZATION:' );
+ console.log( tmp );
+ console.log( ' ' );
+}
+
+
+// EXPORTS //
+
+module.exports = printWorkspace;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/radf2.js b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/radf2.js
new file mode 100644
index 000000000000..17cbb175113c
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/radf2.js
@@ -0,0 +1,368 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+/* eslint-disable max-len */
+
+'use strict';
+
+// FUNCTIONS //
+
+/**
+* Resolves an index into the input array.
+*
+* ## Notes
+*
+* In a forward real FFT, the previous stage writes its results as two "rows" per sub-sequence.
+*
+* Thus, when reading from an input array stored in linear memory, we can reinterpret the array as a three-dimensional logical view containing `L` independent sub-sequences having two "rows" (`even + odd` and `even - odd`, respectively) and where each "row" is arranged as `M*L` contiguous elements corresponding to interleaved real and imaginary components.
+*
+* Accordingly, the following is a logical view of an input array (zero-based indexing) which contains `L = 3` transforms and in which each sub-sequence has length `M = 4`:
+*
+* ```text
+* │ k = 0 k = 1 k = 2
+* │ ──────────────────────────────────────────────────────────────────────────→ k
+* j = 0 (even+odd) │ cc(0,0,0) ... cc(3,0,0) cc(0,1,0) ... cc(3,1,0) cc(0,2,0) ... cc(3,2,0)
+* │
+* j = 1 (even-odd) │ cc(0,0,1) ... cc(3,0,1) cc(0,1,1) ... cc(3,1,1) cc(0,2,1) ... cc(3,2,1)
+* └───────────────────────────────────────────────────────────────────────────→ i
+* ↑ ↑ ↑ ↑ ↑ ↑
+* i = 0 M-1 0 M-1 0 M-1
+* ```
+*
+* In the above,
+*
+* - `i` is the fastest varying index, which walks within one short sub-sequence corresponding to either the `even + odd` or `even - odd` row of the previous stage.
+* - `j` selects between the `even + odd` and `even - odd` row of the previous stage.
+* - `k` specifies the index of one of the `L` independent transforms we are processing.
+*
+* In linear memory, the three-dimensional logical view is arranged as follows:
+*
+* ```text
+* | cc(0,0,0)...cc(3,0,0) ... cc(0,2,0)...cc(3,2,0) | cc(0,0,1)...cc(3,0,1) ... cc(0,2,1)...cc(3,2,1) |
+* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
+* 0 M-1 LM LM-1 (L+1)M (L+1)M-1 (2L-1)M 2LM-1
+* ```
+*
+* @private
+* @param {NonNegativeInteger} i - index of an element within a sub-sequence
+* @param {NonNegativeInteger} k - index of the sub-sequence being transformed
+* @param {NonNegativeInteger} j - input row
+* @param {NonNegativeInteger} L - number of sub-sequences
+* @param {NonNegativeInteger} M - sub-sequence length
+* @param {integer} stride - stride length of the input array
+* @param {NonNegativeInteger} offset - index specifying the first indexed element in the output array
+* @returns {NonNegativeInteger} computed index
+*
+* @example
+* var stride = 1;
+* var offset = 0;
+*
+* var M = 4; // sub-sequence length
+* var L = 3; // number of sub-sequences
+*
+* var idx = iptr( 0, 0, 0, L, M, stride, offset );
+* // returns 0
+*
+* idx = iptr( 1, 0, 0, L, M, stride, offset );
+* // returns 1
+*
+* idx = iptr( M-1, 0, 0, L, M, stride, offset );
+* // returns 3
+*
+* idx = iptr( 0, 1, 0, L, M, stride, offset );
+* // returns 4
+*
+* // ...
+*
+* idx = iptr( M-1, L-1, 1, L, M, stride, offset );
+* // returns 23
+*/
+function iptr( i, k, j, L, M, stride, offset ) {
+ var n = i + ( ( k+(j*L) ) * M );
+ return ( n*stride ) + offset;
+}
+
+/**
+* Resolves an index into the output array.
+*
+* ## Notes
+*
+* When writing to an output array stored in linear memory, we can reinterpret the array as a three-dimensional logical view containing `L` independent sub-sequences having two "columns" corresponding to the even and odd half-spectrum of a folded complex vector (with real and imaginary parts of each half-spectrum interleaved along each sub-sequence) and where each "column" has `M` elements.
+*
+* Accordingly, the following is a logical view of an output array (zero-based indexing) which contains `L = 3` transforms and in which each "column" sub-sequence has length `M = 4`:
+*
+* ```text
+* j = 0 ("even" column) j = 1 ("odd" column)
+* k = 0 ─┬───────────────────────────────────────┬───────────────────────────────────────┐
+* │ out(0,0,0) out(1,0,0) ... out(3,0,0) │ out(0,1,0) out(1,1,0) ... out(3,1,0) │
+* └───────────────────────────────────────┴───────────────────────────────────────┤
+* k = 1 ─┬───────────────────────────────────────┬───────────────────────────────────────┤
+* │ out(0,0,1) out(1,0,1) ... out(3,0,1) │ out(0,1,1) out(1,1,1) ... out(3,1,1) │
+* └───────────────────────────────────────┴───────────────────────────────────────┤
+* k = 2 ─┬───────────────────────────────────────┬───────────────────────────────────────┤
+* │ out(0,0,2) out(1,0,2) ... out(3,0,2) │ out(0,1,2) out(1,1,2) ... out(3,1,2) │
+* └───────────────────────────────────────┴───────────────────────────────────────┘
+* ↑ ↑ ↑ ↑ ↑ ↑
+* i = 0 1 M-1 0 1 M-1
+* ```
+*
+* In the above,
+*
+* - `i` is the fastest varying index, which walks within one short "column" sub-sequence.
+* - `j` selects between the even (0) and odd (1) column.
+* - `k` specifies the index of one of the `L` independent transforms we are processing.
+*
+* In linear memory, the three-dimensional logical view is arranged as follows:
+*
+* ```text
+* | out(0,0,0)...out(3,0,0) | out(0,1,0)...out(3,1,0) | out(0,0,1)...out(3,0,1) | ... | out(0,1,2)...out(3,1,2) |
+* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
+* 0 M-1 M 2M-1 2M 3M-1 (2L-1)M 2LM-1
+* ```
+*
+* As may be observed, when resolving an index in the output array, the `j` and `k` dimensions are swapped relative index resolution in the input array. This stems from `radf2` being only one stage in a multi-stage driver which alternates between using `cc` and `out` as workspace buffers. After each stage, the next stage reads what the previous stage wrote.
+*
+* Each stage expects a transpose, and, in order to avoid explicit transposition between the stages, we swap the last two logical dimensions while still maintaining cache locality within the inner loop logical dimension, as indexed by `i`.
+*
+* @private
+* @param {NonNegativeInteger} i - index of an element within a sub-sequence
+* @param {NonNegativeInteger} j - index specifying which of the two complex halves we are in (either `0` or `1`)
+* @param {NonNegativeInteger} k - index of the sub-sequence being transformed
+* @param {NonNegativeInteger} M - sub-sequence length
+* @param {integer} stride - stride length of the output array
+* @param {NonNegativeInteger} offset - index specifying the first indexed element in the output array
+* @returns {NonNegativeInteger} computed index
+*
+* @example
+* var stride = 1;
+* var offset = 0;
+*
+* var M = 4; // sub-sequence length
+* var L = 3; // number of sub-sequences
+*
+* var idx = optr( 0, 0, 0, M, stride, offset );
+* // returns 0
+*
+* idx = optr( 1, 0, 0, M, stride, offset );
+* // returns 1
+*
+* idx = optr( M-1, 0, 0, M, stride, offset );
+* // returns 3
+*
+* idx = optr( 0, 1, 0, M, stride, offset );
+* // returns 4
+*
+* // ...
+*
+* idx = optr( M-1, 1, L-1, M, stride, offset );
+* // returns 23
+*/
+function optr( i, j, k, M, stride, offset ) {
+ var n = i + ( ( j+(k*2) ) * M );
+ return ( n*stride ) + offset;
+}
+
+
+// MAIN //
+
+/**
+* Performs one radix-2 stage within a forward Fourier transform for a real-valued sequence.
+*
+* @private
+* @param {NonNegativeInteger} M - number of elements in each sub-sequence to be transformed
+* @param {NonNegativeInteger} L - number of sub-sequences to be transformed
+* @param {Float64Array} cc - input array containing the sub-sequences to be transformed
+* @param {integer} sc - stride length for `cc`
+* @param {NonNegativeInteger} oc - index offset for `cc`
+* @param {Float64Array} out - output array containing transformed sub-sequences
+* @param {integer} so - stride length for `out``
+* @param {NonNegativeInteger} oo - index offset for `out`
+* @param {Float64Array} twiddles - array containing twiddle factors
+* @param {integer} st - stride length for `twiddles`
+* @param {NonNegativeInteger} ot - index offset for `twiddles`
+* @returns {void}
+*/
+function radf2( M, L, cc, sc, oc, out, so, oo, twiddles, st, ot ) { // eslint-disable-line max-params
+ var MP1;
+ var tr2;
+ var ti2;
+ var ip1;
+ var ip2;
+ var it1;
+ var it2;
+ var io;
+ var im;
+ var i;
+ var k;
+
+ /*
+ * First, perform the core butterfly for each sub-sequence being transformed.
+ *
+ * In the following loop, we handle harmonic `n = 0` for every transform. As described for `iptr`, the input array is interpreted as a three-dimensional array, containing two "rows" per sub-sequence.
+ *
+ * row0 = even + odd (j = 0)
+ * row1 = even - odd (j = 1)
+ *
+ * For a radix-2 forward FFT of a real-valued signal `x` and `n = 0`,
+ *
+ * x[0] = row0 + row1 = 2⋅even
+ * x[M] = row0 - row1 = 2⋅odd
+ *
+ * Because `W_N^0 = 1`, no twiddle multiplication is necessary.
+ */
+ for ( k = 0; k < L; k++ ) {
+ ip1 = iptr( 0, k, 0, L, M, sc, oc ); // real part row 0
+ ip2 = iptr( 0, k, 1, L, M, sc, oc ); // real part row 1
+
+ io = optr( 0, 0, k, M, so, oo );
+ out[ io ] = cc[ ip1 ] + cc[ ip2 ]; // even + odd
+
+ io = optr( M-1, 1, k, M, so, oo );
+ out[ io ] = cc[ ip1 ] - cc[ ip2 ]; // even - odd
+ }
+ // When the number of elements in a sub-sequence is less than `2`, there is nothing more to do, as the above butterfly produced the full result...
+ if ( M < 2 ) {
+ return;
+ }
+ /*
+ * Next, apply the general case where we need to loop through the non-trivial harmonics.
+ *
+ * For each harmonic `n = 1, ..., M/2-1`, we need to
+ *
+ * - recover even/odd spectra from the two input rows.
+ * - multiply the odd part by the twiddle factor `W_n = cos(θ) - j sin(θ)`.
+ * - form the following
+ *
+ * x[2n] = E_n + W_n⋅O_n => column 0
+ * x[2n+1] = E_n - W_n⋅O_n => column 1
+ *
+ * The mirror index `im = M + 1 - i` selects the conjugate-symmetric partner, thus allowing the routine to read each symmetry pair only once.
+ */
+ if ( M >= 3 ) {
+ MP1 = M + 1;
+
+ // Loop over each sub-subsequence to be transformed...
+ for ( k = 0; k < L; k++ ) {
+ // Loop over the elements in each sub-sequence...
+ for ( i = 2; i < M; i += 2 ) {
+ im = MP1 - i; // "mirror" index
+
+ // Resolve twiddle factor indices:
+ it1 = ( (i-1)*st ) + ot; // cos(θ)
+ it2 = ( i*st ) + ot; // sin(θ)
+
+ // Load the `even-odd` row...
+ ip1 = iptr( i, k, 1, L, M, sc, oc ); // c = Re(row1)
+ ip2 = iptr( i+1, k, 1, L, M, sc, oc ); // d = Im(row1)
+
+ // tmp = W_n ⋅ (c + j⋅d)
+ tr2 = ( twiddles[ it1 ] * cc[ ip1 ] ) + ( twiddles[ it2 ] * cc[ ip2 ] ); // Re(tmp)
+ ti2 = ( twiddles[ it1 ] * cc[ ip2 ] ) - ( twiddles[ it2 ] * cc[ ip1 ] ); // Im(tmp)
+
+ // Load the `even+odd` row...
+ ip1 = iptr( i+1, k, 0, L, M, sc, oc ); // b = Im(row0)
+ io = optr( i+1, 0, k, M, so, oo ); // Im(x[2n])
+ out[ io ] = cc[ ip1 ] + ti2;
+
+ io = optr( im, 1, k, M, so, oo ); // Im(x[2n+1])
+ out[ io ] = ti2 - cc[ ip1 ];
+
+ ip1 = iptr( i, k, 0, L, M, sc, oc ); // a = Re(row0)
+ io = optr( i, 0, k, M, so, oo ); // Re(x[2n])
+ out[ io ] = cc[ ip1 ] + tr2;
+
+ io = optr( im-1, 1, k, M, so, oo ); // Re(x[2n+1])
+ out[ io ] = cc[ ip1 ] - tr2;
+ }
+ }
+ // When `M` is odd, there is no Nyquist pair to process, so we do not need to perform any further transformations...
+ if ( M%2 === 1 ) {
+ return;
+ }
+ }
+ /*
+ * Lastly, handle the Nyquist frequency where `i = M-1` (i.e., the last element of each sub-sequence).
+ *
+ * When `M` is even, the Nyquist index is `i = M/2`. In this stage, we've stored that element at the end of each sub-sequence (i.e., `i = M-1` in the packed layout).
+ *
+ * At this point, the cosine term is -1 and the sine term is 0, so the twiddle multiplication collapses to simple addition/subtraction.
+ *
+ * In this case,
+ *
+ * W_n⋅O_n = ±Re(O_n)
+ *
+ * where
+ *
+ * row0 = Re(E_n)
+ * row1 = -Re(O_n)
+ */
+ for ( k = 0; k < L; k++ ) {
+ ip1 = iptr( M-1, k, 1, L, M, sc, oc ); // -Re(O_n)
+ io = optr( 0, 1, k, M, so, oo );
+ out[ io ] = -cc[ ip1 ]; // -(-Re(O_n)) = Re(O_n)
+
+ ip1 = iptr( M-1, k, 0, L, M, sc, oc ); // Re(E_n)
+ io = optr( M-1, 0, k, M, so, oo );
+ out[ io ] = cc[ ip1 ];
+ }
+}
+
+
+// EXPORTS //
+
+module.exports = radf2;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/radf3.js b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/radf3.js
new file mode 100644
index 000000000000..d7e4771eebf5
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/radf3.js
@@ -0,0 +1,155 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+/* eslint-disable max-len */
+
+'use strict';
+
+// MODULES //
+
+var sincos = require( '@stdlib/math/base/special/sincos' );
+var TWO_PI = require( '@stdlib/constants/float64/two-pi' );
+var chRef = require( './ch_ref.js' );
+var ccRef = require( './cc_ref.js' );
+
+
+// VARIABLES //
+
+var sc = sincos( ( 2 * TWO_PI ) / 3 );
+var taur = sc[ 1 ]; // -0.5
+var taui = -sc[ 0 ]; // 0.866025403784439
+
+
+// MAIN //
+
+/**
+* Performs the forward FFT of length 3 for real-valued sequences.
+*
+* @private
+* @param {number} ido - number of real values for each transform
+* @param {number} l1 - length of the input sequences
+* @param {Float64Array} cc - input array containing sequences to be transformed
+* @param {number} ccOffset - offset for the input array
+* @param {Float64Array} ch - output array containing transformed sequences
+* @param {number} chOffset - offset for the output array
+* @param {Float64Array} wa1 - first array of twiddle factors
+* @param {number} wa1Offset - offset for the first twiddle factors array
+* @param {Float64Array} wa2 - second array of twiddle factors
+* @param {number} wa2Offset - offset for the second twiddle factors array
+* @returns {void}
+*/
+function radf3( ido, l1, cc, ccOffset, ch, chOffset, wa1, wa1Offset, wa2, wa2Offset ) {
+ var idp2;
+ var tr3;
+ var tr2;
+ var ti3;
+ var ti2;
+ var dr3;
+ var dr2;
+ var di3;
+ var di2;
+ var cr2;
+ var ci2;
+ var ic;
+ var i;
+ var k;
+
+ // Parameter adjustments...
+ chOffset -= 1 + ( ido << 2 );
+ ccOffset -= 1 + ( ido * ( 1 + l1 ) );
+ wa1Offset -= 1;
+ wa2Offset -= 1;
+
+ // Function body:
+ for ( k = 1; k <= l1; k++ ) {
+ cr2 = cc[ ccRef( 1, k, 2, l1, ido ) + ccOffset ] + cc[ ccRef( 1, k, 3, l1, ido ) + ccOffset ];
+ ch[ chRef( 1, 1, k, 3, ido ) + chOffset ] = cc[ ccRef( 1, k, 1, l1, ido ) + ccOffset ] + cr2;
+ ch[ chRef( 1, 3, k, 3, ido ) + chOffset ] = taui * ( cc[ ccRef( 1, k, 3, l1, ido ) + ccOffset ] - cc[ ccRef( 1, k, 2, l1, ido ) + ccOffset ] );
+ ch[ chRef( ido, 2, k, 3, ido ) + chOffset ] = cc[ ccRef( 1, k, 1, l1, ido ) + ccOffset ] + ( taur * cr2 );
+ }
+ if ( ido === 1 ) {
+ return;
+ }
+ idp2 = ido + 2;
+ for ( k = 1; k <= l1; k++ ) {
+ for ( i = 3; i <= ido; i += 2 ) {
+ ic = idp2 - i;
+ dr2 = ( wa1[ i - 2 + wa1Offset ] * cc[ ccRef( i - 1, k, 2, l1, ido ) + ccOffset ]) + ( wa1[ i - 1 + wa1Offset ] * cc[ ccRef( i, k, 2, l1, ido ) + ccOffset ] );
+ di2 = ( wa1[ i - 2 + wa1Offset ] * cc[ ccRef( i, k, 2, l1, ido ) + ccOffset ]) - ( wa1[ i - 1 + wa1Offset ] * cc[ ccRef( i - 1, k, 2, l1, ido ) + ccOffset ] );
+ dr3 = ( wa2[ i - 2 + wa2Offset ] * cc[ ccRef( i - 1, k, 3, l1, ido ) + ccOffset ]) + ( wa2[ i - 1 + wa2Offset ] * cc[ ccRef( i, k, 3, l1, ido ) + ccOffset ] );
+ di3 = ( wa2[ i - 2 + wa2Offset ] * cc[ ccRef( i, k, 3, l1, ido ) + ccOffset ]) - ( wa2[ i - 1 + wa2Offset ] * cc[ ccRef( i - 1, k, 3, l1, ido ) + ccOffset ] );
+ cr2 = dr2 + dr3;
+ ci2 = di2 + di3;
+ ch[ chRef( i - 1, 1, k, 3, ido ) + chOffset ] = cc[ ccRef( i - 1, k, 1, l1, ido ) + ccOffset ] + cr2;
+ ch[ chRef( i, 1, k, 3, ido ) + chOffset ] = cc[ ccRef( i, k, 1, l1, ido ) + ccOffset ] + ci2;
+ tr2 = cc[ ccRef( i - 1, k, 1, l1, ido ) + ccOffset ] + ( taur * cr2 );
+ ti2 = cc[ ccRef( i, k, 1, l1, ido ) + ccOffset ] + ( taur * ci2 );
+ tr3 = taui * ( di2 - di3 );
+ ti3 = taui * ( dr3 - dr2 );
+ ch[ chRef( i - 1, 3, k, 3, ido ) + chOffset ] = tr2 + tr3;
+ ch[ chRef( ic - 1, 2, k, 3, ido ) + chOffset ] = tr2 - tr3;
+ ch[ chRef( i, 3, k, 3, ido ) + chOffset ] = ti2 + ti3;
+ ch[ chRef( ic, 2, k, 3, ido ) + chOffset ] = ti3 - ti2;
+ }
+ }
+}
+
+
+// EXPORTS //
+
+module.exports = radf3;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/radf4.js b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/radf4.js
new file mode 100644
index 000000000000..bed422791feb
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/radf4.js
@@ -0,0 +1,175 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+/* eslint-disable max-len */
+
+'use strict';
+
+// MODULES //
+
+var SQRT_HALF = require( '@stdlib/constants/float64/sqrt-half' );
+var chRef = require( './ch_ref.js' );
+var ccRef = require( './cc_ref.js' );
+
+
+// MAIN //
+
+/**
+* Performs the forward FFT of length 4 for real-valued sequences.
+*
+* @private
+* @param {number} ido - number of real values for each transform
+* @param {number} l1 - length of the input sequences
+* @param {Float64Array} cc - input array containing sequences to be transformed
+* @param {number} ccOffset - offset for the input array
+* @param {Float64Array} ch - output array containing transformed sequences
+* @param {number} chOffset - offset for the output array
+* @param {Float64Array} wa1 - first array of twiddle factors
+* @param {number} wa1Offset - offset for the first twiddle factors array
+* @param {Float64Array} wa2 - second array of twiddle factors
+* @param {number} wa2Offset - offset for the second twiddle factors array
+* @param {Float64Array} wa3 - third array of twiddle factors
+* @param {number} wa3Offset - offset for the third twiddle factors array
+* @returns {void}
+*/
+function radf4( ido, l1, cc, ccOffset, ch, chOffset, wa1, wa1Offset, wa2, wa2Offset, wa3, wa3Offset ) { // eslint-disable-line max-params
+ var idp2;
+ var tr4;
+ var tr3;
+ var tr2;
+ var tr1;
+ var ti4;
+ var ti3;
+ var ti2;
+ var ti1;
+ var cr2;
+ var cr3;
+ var cr4;
+ var ci2;
+ var ci3;
+ var ci4;
+ var ic;
+ var i;
+ var k;
+
+ // Parameter adjustments...
+ chOffset -= 1 + ( ido * 5 );
+ ccOffset -= 1 + ( ido * ( 1 + l1 ) );
+ wa1Offset -= 1;
+ wa2Offset -= 1;
+ wa3Offset -= 1;
+
+ // Function body:
+ for ( k = 1; k <= l1; k++ ) {
+ tr1 = cc[ ccRef( 1, k, 2, l1, ido ) + ccOffset ] + cc[ ccRef( 1, k, 4, l1, ido ) + ccOffset ];
+ tr2 = cc[ ccRef( 1, k, 1, l1, ido ) + ccOffset ] + cc[ ccRef( 1, k, 3, l1, ido ) + ccOffset ];
+ ch[ chRef( 1, 1, k, 4, ido ) + chOffset ] = tr1 + tr2;
+ ch[ chRef( ido, 4, k, 4, ido ) + chOffset ] = tr2 - tr1;
+ ch[ chRef( ido, 2, k, 4, ido ) + chOffset ] = cc[ ccRef( 1, k, 1, l1, ido ) + ccOffset ] - cc[ ccRef( 1, k, 3, l1, ido ) + ccOffset ];
+ ch[ chRef( 1, 3, k, 4, ido ) + chOffset ] = cc[ ccRef( 1, k, 4, l1, ido ) + ccOffset ] - cc[ ccRef( 1, k, 2, l1, ido ) + ccOffset ];
+ }
+ if ( ido < 2 ) {
+ return;
+ }
+ if ( ido !== 2 ) {
+ idp2 = ido + 2;
+ for ( k = 1; k <= l1; k++ ) {
+ for ( i = 3; i <= ido; i += 2 ) {
+ ic = idp2 - i;
+ cr2 = ( wa1[ i - 2 + wa1Offset ] * cc[ ccRef( i - 1, k, 2, l1, ido ) + ccOffset ] ) + ( wa1[ i - 1 + wa1Offset ] * cc[ ccRef( i, k, 2, l1, ido ) + ccOffset ] );
+ ci2 = ( wa1[ i - 2 + wa1Offset ] * cc[ ccRef( i, k, 2, l1, ido ) + ccOffset ] ) - ( wa1[ i - 1 + wa1Offset ] * cc[ ccRef( i - 1, k, 2, l1, ido ) + ccOffset ] );
+ cr3 = ( wa2[ i - 2 + wa2Offset ] * cc[ ccRef( i - 1, k, 3, l1, ido ) + ccOffset ] ) + ( wa2[ i - 1 + wa2Offset ] * cc[ ccRef( i, k, 3, l1, ido ) + ccOffset ] );
+ ci3 = ( wa2[ i - 2 + wa2Offset ] * cc[ ccRef( i, k, 3, l1, ido ) + ccOffset ] ) - ( wa2[ i - 1 + wa2Offset ] * cc[ ccRef( i - 1, k, 3, l1, ido ) + ccOffset ] );
+ cr4 = ( wa3[ i - 2 + wa3Offset ] * cc[ ccRef( i - 1, k, 4, l1, ido ) + ccOffset ] ) + ( wa3[ i - 1 + wa3Offset ] * cc[ ccRef( i, k, 4, l1, ido ) + ccOffset ] );
+ ci4 = ( wa3[ i - 2 + wa3Offset ] * cc[ ccRef( i, k, 4, l1, ido ) + ccOffset ] ) - ( wa3[ i - 1 + wa3Offset ] * cc[ ccRef( i - 1, k, 4, l1, ido ) + ccOffset ] );
+ tr1 = cr2 + cr4;
+ tr4 = cr4 - cr2;
+ ti1 = ci2 + ci4;
+ ti4 = ci2 - ci4;
+ ti2 = cc[ ccRef( i, k, 1, l1, ido ) + ccOffset ] + ci3;
+ ti3 = cc[ ccRef( i, k, 1, l1, ido ) + ccOffset ] - ci3;
+ tr2 = cc[ ccRef( i - 1, k, 1, l1, ido ) + ccOffset ] + cr3;
+ tr3 = cc[ ccRef( i - 1, k, 1, l1, ido ) + ccOffset ] - cr3;
+ ch[ chRef( i - 1, 1, k, 4, ido ) + chOffset ] = tr1 + tr2;
+ ch[ chRef( ic - 1, 4, k, 4, ido ) + chOffset ] = tr2 - tr1;
+ ch[ chRef( i, 1, k, 4, ido ) + chOffset ] = ti1 + ti2;
+ ch[ chRef( ic, 4, k, 4, ido ) + chOffset ] = ti1 - ti2;
+ ch[ chRef( i - 1, 3, k, 4, ido ) + chOffset ] = ti4 + tr3;
+ ch[ chRef( ic - 1, 2, k, 4, ido ) + chOffset ] = tr3 - ti4;
+ ch[ chRef( i, 3, k, 4, ido ) + chOffset ] = tr4 + ti3;
+ ch[ chRef( ic, 2, k, 4, ido ) + chOffset ] = tr4 - ti3;
+ }
+ }
+ if ( ido % 2 === 1 ) {
+ return;
+ }
+ }
+ for ( k = 1; k <= l1; k++ ) {
+ ti1 = -SQRT_HALF * ( cc[ ccRef( ido, k, 2, l1, ido ) + ccOffset ] + cc[ ccRef( ido, k, 4, l1, ido ) + ccOffset ] );
+ tr1 = SQRT_HALF * ( cc[ ccRef( ido, k, 2, l1, ido ) + ccOffset ] - cc[ ccRef( ido, k, 4, l1, ido ) + ccOffset ] );
+ ch[ chRef( ido, 1, k, 4, ido ) + chOffset ] = cc[ ccRef( ido, k, 1, l1, ido ) + ccOffset ] + tr1;
+ ch[ chRef( ido, 3, k, 4, ido ) + chOffset ] = cc[ ccRef( ido, k, 1, l1, ido ) + ccOffset ] - tr1;
+ ch[ chRef( 1, 2, k, 4, ido ) + chOffset ] = ti1 - cc[ ccRef( ido, k, 3, l1, ido ) + ccOffset ];
+ ch[ chRef( 1, 4, k, 4, ido ) + chOffset ] = cc[ ccRef( ido, k, 3, l1, ido ) + ccOffset ] + ti1;
+ }
+}
+
+
+// EXPORTS //
+
+module.exports = radf4;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/radf5.js b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/radf5.js
new file mode 100644
index 000000000000..159bd7158742
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/radf5.js
@@ -0,0 +1,201 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+/* eslint-disable max-len */
+
+'use strict';
+
+// MODULES //
+
+var sincos = require( '@stdlib/math/base/special/sincos' );
+var TWO_PI = require( '@stdlib/constants/float64/two-pi' );
+var chRef = require( './ch_ref.js' );
+var ccRef = require( './cc_ref.js' );
+
+
+// VARIABLES //
+
+var sc1 = sincos( TWO_PI / 5 );
+var sc2 = sincos( ( 2 * TWO_PI ) / 5 );
+var TR11 = sc1[ 1 ]; // 0.309016994374947
+var TI11 = sc1[ 0 ]; // 0.951056516295154
+var TR12 = sc2[ 1 ]; // -0.809016994374947
+var TI12 = sc2[ 0 ]; // 0.587785252292473
+
+
+// MAIN //
+
+/**
+* Performs the forward FFT of length 5 for real-valued sequences.
+*
+* @private
+* @param {number} ido - number of real values for each transform
+* @param {number} l1 - length of the input sequences
+* @param {Float64Array} cc - input array containing sequences to be transformed
+* @param {number} ccOffset - offset for the input array
+* @param {Float64Array} ch - output array containing transformed sequences
+* @param {number} chOffset - offset for the output array
+* @param {Float64Array} wa1 - first array of twiddle factors
+* @param {number} wa1Offset - offset for the first twiddle factors array
+* @param {Float64Array} wa2 - second array of twiddle factors
+* @param {number} wa2Offset - offset for the second twiddle factors array
+* @param {Float64Array} wa3 - third array of twiddle factors
+* @param {number} wa3Offset - offset for the third twiddle factors array
+* @param {Float64Array} wa4 - fourth array of twiddle factors
+* @param {number} wa4Offset - offset for the fourth twiddle factors array
+* @returns {void}
+*/
+function radf5( ido, l1, cc, ccOffset, ch, chOffset, wa1, wa1Offset, wa2, wa2Offset, wa3, wa3Offset, wa4, wa4Offset ) { // eslint-disable-line max-params
+ var idp2;
+ var ci2;
+ var di2;
+ var ci4;
+ var ci5;
+ var di3;
+ var di4;
+ var di5;
+ var ci3;
+ var cr2;
+ var cr3;
+ var dr2;
+ var dr3;
+ var dr4;
+ var dr5;
+ var cr5;
+ var cr4;
+ var ti2;
+ var ti3;
+ var ti5;
+ var ti4;
+ var tr2;
+ var tr3;
+ var tr4;
+ var tr5;
+ var ic;
+ var i;
+ var k;
+
+ // Parameter adjustments...
+ chOffset = 1 + ( ido * 6 );
+ ccOffset = 1 + ( ido * ( 1 + l1 ) );
+ wa1Offset -= 1;
+ wa2Offset -= 1;
+ wa3Offset -= 1;
+ wa4Offset -= 1;
+
+ // Function body:
+ for ( k = 1; k <= l1; k++ ) {
+ cr2 = cc[ ccRef( 1, k, 5, l1, ido ) + ccOffset ] + cc[ ccRef( 1, k, 2, l1, ido ) + ccOffset ];
+ ci5 = cc[ ccRef( 1, k, 5, l1, ido ) + ccOffset ] - cc[ ccRef( 1, k, 2, l1, ido ) + ccOffset ];
+ cr3 = cc[ ccRef( 1, k, 4, l1, ido ) + ccOffset ] + cc[ ccRef( 1, k, 3, l1, ido ) + ccOffset ];
+ ci4 = cc[ ccRef( 1, k, 4, l1, ido ) + ccOffset ] - cc[ ccRef( 1, k, 3, l1, ido ) + ccOffset ];
+ ch[ chRef( 1, 1, k, 5, ido ) + chOffset ] = cc[ ccRef( 1, k, 1, l1, ido ) + ccOffset ] + cr2 + cr3;
+ ch[ chRef( ido, 2, k, 5, ido ) + chOffset ] = cc[ ccRef( 1, k, 1, l1, ido ) + ccOffset ] + ( TR11 * cr2 ) + ( TR12 * cr3 );
+ ch[ chRef( 1, 3, k, 5, ido ) + chOffset ] = ( TI11 * ci5 ) + ( TI12 * ci4 );
+ ch[ chRef( ido, 4, k, 5, ido ) + chOffset ] = cc[ ccRef( 1, k, 1, l1, ido ) + ccOffset ] + ( TR12 * cr2 ) + ( TR11 * cr3 );
+ ch[ chRef( 1, 5, k, 5, ido ) + chOffset ] = ( TI12 * ci5 ) - ( TI11 * ci4 );
+ }
+ if ( ido === 1 ) {
+ return;
+ }
+ idp2 = ido + 2;
+ for ( k = 1; k <= l1; k++ ) {
+ for ( i = 3; i <= ido; i += 2 ) {
+ ic = idp2 - i;
+ dr2 = ( wa1[ i - 2 + wa1Offset ] * cc[ ccRef( i - 1, k, 2, l1, ido ) + ccOffset ] ) + ( wa1[ i - 1 + wa1Offset ] * cc[ ccRef( i, k, 2, l1, ido ) + ccOffset ] );
+ di2 = ( wa1[ i - 2 + wa1Offset ] * cc[ ccRef( i, k, 2, l1, ido ) + ccOffset ] ) - ( wa1[ i - 1 + wa1Offset ] * cc[ ccRef( i - 1, k, 2, l1, ido ) + ccOffset ] );
+ dr3 = ( wa2[ i - 2 + wa2Offset ] * cc[ ccRef( i - 1, k, 3, l1, ido ) + ccOffset ] ) + ( wa2[ i - 1 + wa2Offset ] * cc[ ccRef( i, k, 3, l1, ido ) + ccOffset ] );
+ di3 = ( wa2[ i - 2 + wa2Offset ] * cc[ ccRef( i, k, 3, l1, ido ) + ccOffset ] ) - ( wa2[ i - 1 + wa2Offset ] * cc[ ccRef( i - 1, k, 3, l1, ido ) + ccOffset ] );
+ dr4 = ( wa3[ i - 2 + wa3Offset ] * cc[ ccRef( i - 1, k, 4, l1, ido ) + ccOffset ] ) + ( wa3[ i - 1 + wa3Offset ] * cc[ ccRef( i, k, 4, l1, ido ) + ccOffset ] );
+ di4 = ( wa3[ i - 2 + wa3Offset ] * cc[ ccRef( i, k, 4, l1, ido ) + ccOffset ] ) - ( wa3[ i - 1 + wa3Offset ] * cc[ ccRef( i - 1, k, 4, l1, ido ) + ccOffset ] );
+ dr5 = ( wa4[ i - 2 + wa4Offset ] * cc[ ccRef( i - 1, k, 5, l1, ido ) + ccOffset ] ) + ( wa4[ i - 1 + wa4Offset ] * cc[ ccRef( i, k, 5, l1, ido ) + ccOffset ] );
+ di5 = ( wa4[ i - 2 + wa4Offset ] * cc[ ccRef( i, k, 5, l1, ido ) + ccOffset ] ) - ( wa4[ i - 1 + wa4Offset ] * cc[ ccRef( i - 1, k, 5, l1, ido ) + ccOffset ] );
+ cr2 = dr2 + dr5;
+ ci5 = dr5 - dr2;
+ cr5 = di2 - di5;
+ ci2 = di5 + di2;
+ cr3 = dr3 + dr4;
+ ci4 = dr4 - dr3;
+ cr4 = di3 - di4;
+ ci3 = di3 + di4;
+ ch[ chRef( i - 1, 1, k, 5, ido ) + chOffset ] = cc[ ccRef( i - 1, k, 1, l1, ido ) + ccOffset ] + cr2 + cr3;
+ ch[ chRef( i, 1, k, 5, ido ) + chOffset ] = cc[ ccRef( i, k, 1, l1, ido ) + ccOffset ] + ci2 + ci3;
+ tr2 = cc[ ccRef( i - 1, k, 1, l1, ido ) + ccOffset ] + ( TR11 * cr2 ) + ( TR12 * cr3 );
+ ti2 = cc[ ccRef( i, k, 1, l1, ido ) + ccOffset ] + ( TR11 * ci2 ) + ( TR12 * ci3 );
+ tr3 = cc[ ccRef( i - 1, k, 1, l1, ido ) + ccOffset ] + ( TR12 * cr2 ) + ( TR11 * cr3 );
+ ti3 = cc[ ccRef( i, k, 1, l1, ido ) + ccOffset ] + ( TR12 * ci2 ) + ( TR11 * ci3 );
+ tr5 = ( TI11 * cr5 ) + ( TI12 * cr4 );
+ ti5 = ( TI11 * ci5 ) + ( TI12 * ci4 );
+ tr4 = ( TI12 * cr5 ) - ( TI11 * cr4 );
+ ti4 = ( TI12 * ci5 ) - ( TI11 * ci4 );
+ ch[ chRef( i - 1, 3, k, 5, ido ) + chOffset ] = tr2 + tr5;
+ ch[ chRef( ic - 1, 2, k, 5, ido ) + chOffset ] = tr2 - tr5;
+ ch[ chRef( i, 3, k, 5, ido ) + chOffset ] = ti2 + ti5;
+ ch[ chRef( ic, 2, k, 5, ido ) + chOffset ] = ti5 - ti2;
+ ch[ chRef( i - 1, 5, k, 5, ido ) + chOffset ] = tr3 + tr4;
+ ch[ chRef( ic - 1, 4, k, 5, ido ) + chOffset ] = tr3 - tr4;
+ ch[ chRef( i, 5, k, 5, ido ) + chOffset ] = ti3 + ti4;
+ ch[ chRef( ic, 4, k, 5, ido ) + chOffset ] = ti4 - ti3;
+ }
+ }
+}
+
+
+// EXPORTS //
+
+module.exports = radf5;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/radfg.js b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/radfg.js
new file mode 100644
index 000000000000..52918a172596
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/radfg.js
@@ -0,0 +1,307 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+/* eslint-disable max-len, max-statements */
+
+'use strict';
+
+// MODULES //
+
+var sincos = require( '@stdlib/math/base/special/sincos' );
+var TWO_PI = require( '@stdlib/constants/float64/two-pi' );
+var floor = require( '@stdlib/math/base/special/floor' );
+var chRef = require( './ch_ref.js' );
+var ccRef = require( './cc_ref.js' );
+var c1Ref = require( './c1_ref.js' );
+var c2Ref = require( './c2_ref.js' );
+var ch2Ref = require( './ch2_ref.js' );
+
+
+// MAIN //
+
+/**
+* Performs the forward FFT for real-valued sequences.
+*
+* @private
+* @param {integer} ido - number of real values for each transform
+* @param {integer} ip - radix of the transform
+* @param {integer} l1 - length of the input sequences
+* @param {integer} idl1 - stride for the transform
+* @param {Float64Array} cc - input array containing sequences to be transformed
+* @param {integer} ccOffset - offset for the `cc` array
+* @param {Float64Array} c1 - first work array
+* @param {integer} c1Offset - offset for the `c1` array
+* @param {Float64Array} c2 - second work array
+* @param {integer} c2Offset - offset for the `c2` array
+* @param {Float64Array} ch - output array containing transformed sequences
+* @param {integer} chOffset - offset for the `ch` array
+* @param {Float64Array} ch2 - work array for transformed sequences
+* @param {integer} ch2Offset - offset for the `ch2` array
+* @param {Float64Array} wa - array of twiddle factors
+* @param {integer} waOffset - offset for the `wa` array
+* @returns {void}
+*/
+function radfg( ido, ip, l1, idl1, cc, ccOffset, c1, c1Offset, c2, c2Offset, ch, chOffset, ch2, ch2Offset, wa, waOffset ) { // eslint-disable-line max-params
+ var ar1h;
+ var ar2h;
+ var idp2;
+ var ipp2;
+ var idij;
+ var ipph;
+ var dc2;
+ var ai1;
+ var ai2;
+ var ar1;
+ var ar2;
+ var ds2;
+ var nbd;
+ var dcp;
+ var arg;
+ var dsp;
+ var ic;
+ var ik;
+ var is;
+ var jc;
+ var lc;
+ var j2;
+ var sc;
+ var i;
+ var j;
+ var k;
+ var l;
+
+ // Parameter adjustments...
+ chOffset -= 1 + ( ido * ( 1 + l1 ) );
+ ccOffset -= 1 + ( ido * ( 1 + ip ) );
+ c1Offset -= 1 + ( ido * ( 1 + l1 ) );
+ ch2Offset -= 1 + idl1;
+ c2Offset -= 1 + idl1;
+ waOffset -= 1;
+
+ // Function body:
+ arg = TWO_PI / ip;
+ sc = sincos( arg );
+ dcp = sc[ 1 ];
+ dsp = sc[ 0 ];
+ ipph = floor( ( ip + 1 ) / 2 );
+ ipp2 = ip + 2;
+ idp2 = ido + 2;
+ nbd = floor( ( ido - 1 ) / 2 );
+ if ( ido === 1 ) {
+ for ( ik = 1; ik <= idl1; ik++ ) {
+ c2[ c2Ref( ik, 1, idl1 ) + c2Offset ] = ch2[ ch2Ref( ik, 1, idl1 ) + ch2Offset ];
+ }
+ } else {
+ for ( ik = 1; ik <= idl1; ik++ ) {
+ ch2[ ch2Ref( ik, 1, idl1 ) + ch2Offset ] = c2[ c2Ref( ik, 1, idl1 ) + c2Offset ];
+ }
+ for ( j = 2; j <= ip; j++ ) {
+ for ( k = 1; k <= l1; k++ ) {
+ ch[ chRef( 1, k, j, l1, ido ) + chOffset ] = c1[ c1Ref( 1, k, j, l1, ido ) + c1Offset ];
+ }
+ }
+ if ( nbd <= l1 ) {
+ is = -ido;
+ for ( j = 2; j <= ip; j++ ) {
+ is += ido;
+ idij = is;
+ for ( i = 3; i <= ido; i += 2 ) {
+ idij += 2;
+ for ( k = 1; k <= l1; k++ ) {
+ ch[ chRef( i - 1, k, j, l1, ido ) + chOffset ] = ( wa[ idij - 1 + waOffset ] * c1[ c1Ref( i - 1, k, j, l1, ido ) + c1Offset ] ) + ( wa[ idij + waOffset ] * c1[ c1Ref( i, k, j, l1, ido ) + c1Offset ] );
+ ch[ chRef( i, k, j, l1, ido ) + chOffset ] = ( wa[ idij - 1 + waOffset ] * c1[ c1Ref( i, k, j, l1, ido ) + c1Offset ] ) - ( wa[ idij + waOffset ] * c1[ c1Ref( i - 1, k, j, l1, ido ) + c1Offset ] );
+ }
+ }
+ }
+ } else {
+ is = -ido;
+ for ( j = 2; j <= ip; j++ ) {
+ is += ido;
+ for ( k = 1; k <= l1; k++ ) {
+ idij = is;
+ for ( i = 3; i <= ido; i += 2 ) {
+ idij += 2;
+ ch[ chRef( i - 1, k, j, l1, ido ) + chOffset ] = ( wa[ idij - 1 + waOffset ] * c1[ c1Ref( i - 1, k, j, l1, ido ) + c1Offset ] ) + ( wa[ idij + waOffset ] * c1[ c1Ref( i, k, j, l1, ido ) + c1Offset ] );
+ ch[ chRef( i, k, j, l1, ido ) + chOffset ] = ( wa[ idij - 1 + waOffset ] * c1[ c1Ref( i, k, j, l1, ido ) + c1Offset ] ) - ( wa[ idij + waOffset ] * c1[ c1Ref( i - 1, k, j, l1, ido ) + c1Offset ] );
+ }
+ }
+ }
+ }
+ if ( nbd >= l1 ) {
+ for ( j = 2; j <= ipph; j++ ) {
+ jc = ipp2 - j;
+ for ( k = 1; k <= l1; k++ ) {
+ for ( i = 3; i <= ido; i += 2 ) {
+ c1[ c1Ref( i - 1, k, j, l1, ido ) + c1Offset ] = ch[ chRef( i - 1, k, j, l1, ido ) + chOffset ] + ch[ chRef( i - 1, k, jc, l1, ido ) + chOffset ];
+ c1[ c1Ref( i - 1, k, jc, l1, ido ) + c1Offset ] = ch[ chRef( i, k, j, l1, ido ) + chOffset ] - ch[ chRef( i, k, jc, l1, ido ) + chOffset ];
+ c1[ c1Ref( i, k, j, l1, ido ) + c1Offset ] = ch[ chRef( i, k, j, l1, ido ) + chOffset ] + ch[ chRef( i, k, jc, l1, ido ) + chOffset ];
+ c1[ c1Ref( i, k, jc, l1, ido ) + c1Offset ] = ch[ chRef( i - 1, k, jc, l1, ido ) + chOffset ] - ch[ chRef( i - 1, k, j, l1, ido ) + chOffset ];
+ }
+ }
+ }
+ } else {
+ for ( j = 2; j <= ipph; j++ ) {
+ jc = ipp2 - j;
+ for ( i = 3; i <= ido; i += 2 ) {
+ for ( k = 1; k <= l1; k++ ) {
+ c1[ c1Ref( i - 1, k, j, l1, ido ) + c1Offset ] = ch[ chRef( i - 1, k, j, l1, ido ) + chOffset ] + ch[ chRef( i - 1, k, jc, l1, ido ) + chOffset ];
+ c1[ c1Ref( i - 1, k, jc, l1, ido ) + c1Offset ] = ch[ chRef( i, k, j, l1, ido ) + chOffset ] - ch[ chRef( i, k, jc, l1, ido ) + chOffset ];
+ c1[ c1Ref( i, k, j, l1, ido ) + c1Offset ] = ch[ chRef( i, k, j, l1, ido ) + chOffset ] + ch[ chRef( i, k, jc, l1, ido ) + chOffset ];
+ c1[ c1Ref( i, k, jc, l1, ido ) + c1Offset ] = ch[ chRef( i - 1, k, jc, l1, ido ) + chOffset ] - ch[ chRef( i - 1, k, j, l1, ido ) + chOffset ];
+ }
+ }
+ }
+ }
+ }
+ for ( j = 2; j <= ipph; j++ ) {
+ jc = ipp2 - j;
+ for ( k = 1; k <= l1; k++ ) {
+ c1[ c1Ref( 1, k, j, l1, ido ) + c1Offset ] = ch[ chRef( 1, k, j, l1, ido ) + chOffset ] + ch[ chRef( 1, k, jc, l1, ido ) + chOffset ];
+ c1[ c1Ref( 1, k, jc, l1, ido ) + c1Offset ] = ch[ chRef( 1, k, jc, l1, ido ) + chOffset ] - ch[ chRef( 1, k, j, l1, ido ) + chOffset ];
+ }
+ }
+ ar1 = 1.0;
+ ai1 = 0.0;
+ for ( l = 2; l <= ipph; l++ ) {
+ lc = ipp2 - l;
+ ar1h = ( dcp * ar1 ) - ( dsp * ai1 );
+ ai1 = ( dcp * ai1 ) + ( dsp * ar1 );
+ ar1 = ar1h;
+ for ( ik = 1; ik <= idl1; ik++ ) {
+ ch2[ ch2Ref( ik, l, idl1 ) + ch2Offset ] = c2[ c2Ref( ik, 1, idl1 ) + c2Offset ] + ( ar1 * c2[ c2Ref( ik, 2, idl1 ) + c2Offset ] );
+ ch2[ ch2Ref( ik, lc, idl1 ) + ch2Offset ] = ai1 * c2[ c2Ref( ik, ip, idl1 ) + c2Offset ];
+ }
+ dc2 = ar1;
+ ds2 = ai1;
+ ar2 = ar1;
+ ai2 = ai1;
+ for ( j = 3; j <= ipph; j++ ) {
+ jc = ipp2 - j;
+ ar2h = ( dc2 * ar2 ) - ( ds2 * ai2 );
+ ai2 = ( dc2 * ai2 ) + ( ds2 * ar2 );
+ ar2 = ar2h;
+ for ( ik = 1; ik <= idl1; ik++ ) {
+ ch2[ ch2Ref( ik, l, idl1 ) + ch2Offset ] += ar2 * c2[ c2Ref( ik, j, idl1 ) + c2Offset ];
+ ch2[ ch2Ref( ik, lc, idl1 ) + ch2Offset ] += ai2 * c2[ c2Ref( ik, jc, idl1 ) + c2Offset ];
+ }
+ }
+ }
+ for ( j = 2; j <= ipph; j++ ) {
+ for ( ik = 1; ik <= idl1; ik++ ) {
+ ch2[ ch2Ref( ik, 1, idl1 ) + ch2Offset ] += c2[ c2Ref( ik, j, idl1 ) + c2Offset ];
+ }
+ }
+ if ( ido >= l1 ) {
+ for ( k = 1; k <= l1; k++ ) {
+ for ( i = 1; i <= ido; i++ ) {
+ cc[ ccRef( i, 1, k, ip, ido ) + ccOffset ] = ch[ chRef( i, k, 1, l1, ido ) + chOffset ];
+ }
+ }
+ } else {
+ for ( i = 1; i <= ido; i++ ) {
+ for ( k = 1; k <= l1; k++ ) {
+ cc[ ccRef( i, 1, k, ip, ido ) + ccOffset ] = ch[ chRef( i, k, 1, l1, ido ) + chOffset ];
+ }
+ }
+ }
+ for ( j = 2; j <= ipph; j++ ) {
+ jc = ipp2 - j;
+ j2 = j * 2;
+ for ( k = 1; k <= l1; k++ ) {
+ cc[ ccRef( ido, j2 - 2, k, ip, ido ) + ccOffset ] = ch[ chRef( 1, k, j, l1, ido ) + chOffset ];
+ cc[ ccRef( 1, j2 - 1, k, ip, ido ) + ccOffset ] = ch[ chRef( 1, k, jc, l1, ido ) + chOffset ];
+ }
+ }
+ if ( ido === 1 ) {
+ return;
+ }
+ if ( nbd >= l1 ) {
+ for ( j = 2; j <= ipph; j++ ) {
+ jc = ipp2 - j;
+ j2 = j * 2;
+ for ( k = 1; k <= l1; k++ ) {
+ for ( i = 3; i <= ido; i += 2 ) {
+ ic = idp2 - i;
+ cc[ ccRef( i - 1, j2 - 1, k, ip, ido ) + ccOffset ] = ch[ chRef( i - 1, k, j, l1, ido ) + chOffset ] + ch[ chRef( i - 1, k, jc, l1, ido ) + chOffset ];
+ cc[ ccRef( ic - 1, j2 - 2, k, ip, ido ) + ccOffset ] = ch[ chRef( i - 1, k, j, l1, ido ) + chOffset ] - ch[ chRef( i - 1, k, jc, l1, ido ) + chOffset ];
+ cc[ ccRef( i, j2 - 1, k, ip, ido ) + ccOffset ] = ch[ chRef( i, k, j, l1, ido ) + chOffset ] + ch[ chRef( i, k, jc, l1, ido ) + chOffset ];
+ cc[ ccRef( ic, j2 - 2, k, ip, ido ) + ccOffset ] = ch[ chRef( i, k, jc, l1, ido ) + chOffset ] - ch[ chRef( i, k, j, l1, ido ) + chOffset ];
+ }
+ }
+ }
+ } else {
+ for ( j = 2; j <= ipph; j++ ) {
+ jc = ipp2 - j;
+ j2 = j * 2;
+ for ( i = 3; i <= ido; i += 2 ) {
+ ic = idp2 - i;
+ for ( k = 1; k <= l1; k++ ) {
+ cc[ ccRef( i - 1, j2 - 1, k, ip, ido ) + ccOffset ] = ch[ chRef( i - 1, k, j, l1, ido ) + chOffset ] + ch[ chRef( i - 1, k, jc, l1, ido ) + chOffset ];
+ cc[ ccRef( ic - 1, j2 - 2, k, ip, ido ) + ccOffset ] = ch[ chRef( i - 1, k, j, l1, ido ) + chOffset ] - ch[ chRef( i - 1, k, jc, l1, ido ) + chOffset ];
+ cc[ ccRef( i, j2 - 1, k, ip, ido ) + ccOffset ] = ch[ chRef( i, k, j, l1, ido ) + chOffset ] + ch[ chRef( i, k, jc, l1, ido ) + chOffset ];
+ cc[ ccRef( ic, j2 - 2, k, ip, ido ) + ccOffset ] = ch[ chRef( i, k, jc, l1, ido ) + chOffset ] - ch[ chRef( i, k, j, l1, ido ) + chOffset ];
+ }
+ }
+ }
+ }
+}
+
+
+// EXPORTS //
+
+module.exports = radfg;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/rfftf1.js b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/rfftf1.js
new file mode 100644
index 000000000000..e960afe06abc
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/rfftf1.js
@@ -0,0 +1,184 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+/* eslint-disable max-len */
+
+'use strict';
+
+// MODULES //
+
+var floor = require( '@stdlib/math/base/special/floor' );
+var radf2 = require( './radf2.js' );
+var radf3 = require( './radf3.js' );
+var radf4 = require( './radf4.js' );
+var radf5 = require( './radf5.js' );
+var radfg = require( './radfg.js' );
+
+var printWorkspace = require( './print_real_workspace.js' ); // FIXME
+
+
+// MAIN //
+
+/**
+* Performs the forward real-valued Fourier transform.
+*
+* @private
+* @param {NonNegativeInteger} N - length of the sequence to transform
+* @param {Float64Array} c - input array containing the sequence to be transformed
+* @param {NonNegativeInteger} cOffset - starting index for `c`
+* @param {Float64Array} ch - working array for intermediate results
+* @param {NonNegativeInteger} chOffset - starting index for `ch`
+* @param {Float64Array} wa - workspace array for storing twiddle factors
+* @param {NonNegativeInteger} waOffset - starting index for `wa`
+* @param {Int32Array} ifac - workspace array for storing factorization results
+* @param {NonNegativeInteger} ifacOffset - starting index for `ifac`
+* @returns {void}
+*/
+function rfftf1( N, c, cOffset, ch, chOffset, wa, waOffset, ifac, ifacOffset ) {
+ var factor;
+ var idl1;
+ var FLG;
+ var ido;
+ var ix4;
+ var ix3;
+ var ix2;
+ var nf;
+ var l2;
+ var l1;
+ var kh;
+ var iw;
+ var k1;
+ var i;
+
+ // Resolve the number of factors:
+ nf = ifac[ ifacOffset+1 ];
+
+ FLG = 1; // FIXME: describe the point of this flag
+ l2 = N;
+
+ // FIXME
+ printWorkspace( N, ch, 1, chOffset );
+
+ // Initialize an index offset to the last element in each workspace:
+ iw = N - 1;
+
+ for ( k1 = 1; k1 <= nf; k1++ ) {
+ kh = nf - k1;
+
+ // Resolve the next factor:
+ factor = ifac[ ifacOffset+kh+2 ];
+
+ // Compute a sub-transform length:
+ l1 = floor( l2 / factor );
+
+ ido = floor( N / l2 );
+ idl1 = ido * l1;
+
+ // Adjust the index offset
+ iw -= ( (factor-1) * ido );
+
+ // Toggle the flag: // FIXME: better description?
+ FLG = 1 - FLG;
+
+ switch ( factor ) {
+ case 4:
+ ix2 = iw + ido;
+ ix3 = ix2 + ido;
+ radf4( ido, l1, ( FLG ) ? ch : c, ( FLG ) ? chOffset : cOffset, ( FLG ) ? c : ch, ( FLG ) ? cOffset : chOffset, wa, iw+waOffset, wa, ix2+waOffset, wa, ix3+waOffset );
+ break;
+ case 2:
+ radf2( ido, l1, ( FLG ) ? ch : c, 1, ( FLG ) ? chOffset : cOffset, ( FLG ) ? c : ch, 1, ( FLG ) ? cOffset : chOffset, wa, 1, iw+waOffset );
+ break;
+ case 3:
+ ix2 = iw + ido;
+ radf3( ido, l1, ( FLG ) ? ch : c, ( FLG ) ? chOffset : cOffset, ( FLG ) ? c : ch, ( FLG ) ? cOffset : chOffset, wa, iw+waOffset, wa, ix2+waOffset );
+ break;
+ case 5:
+ ix2 = iw + ido;
+ ix3 = ix2 + ido;
+ ix4 = ix3 + ido;
+ radf5( ido, l1, ( FLG ) ? ch : c, ( FLG ) ? chOffset : cOffset, ( FLG ) ? c : ch, ( FLG ) ? cOffset : chOffset, wa, iw+waOffset, wa, ix2+waOffset, wa, ix3+waOffset, wa, ix4+waOffset );
+ break;
+ default:
+ if ( ido === 1 ) {
+ FLG = 1 - FLG;
+ }
+ if ( FLG === 0 ) {
+ radfg( ido, factor, l1, idl1, c, cOffset, c, cOffset, c, cOffset, ch, chOffset, ch, chOffset, wa, iw+waOffset );
+ FLG = 1;
+ } else {
+ radfg( ido, factor, l1, idl1, ch, chOffset, ch, chOffset, ch, chOffset, c, cOffset, c, cOffset, wa, iw+waOffset );
+ FLG = 0;
+ }
+ break;
+ }
+ l2 = l1;
+ }
+ if ( FLG === 1 ) {
+ return;
+ }
+ // Now that we've finished computing the transforms, copy over the final results to the input array...
+ for ( i = 0; i < N; i++ ) {
+ c[ cOffset+i ] = ch[ chOffset+i ]; // FIXME: use `blas/base/dcopy`
+ }
+}
+
+
+// EXPORTS //
+
+module.exports = rfftf1;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/package.json b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/package.json
new file mode 100644
index 000000000000..ea90c07e9bf4
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/package.json
@@ -0,0 +1,56 @@
+{
+ "name": "@stdlib/fft/base/fftpack/rfftf",
+ "version": "0.0.0",
+ "description": "TODO: description.",
+ "license": "Apache-2.0",
+ "author": {
+ "name": "The Stdlib Authors",
+ "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
+ },
+ "contributors": [
+ {
+ "name": "The Stdlib Authors",
+ "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
+ }
+ ],
+ "main": "./lib",
+ "directories": {
+ "benchmark": "./benchmark",
+ "doc": "./docs",
+ "example": "./examples",
+ "lib": "./lib",
+ "test": "./test"
+ },
+ "types": "./docs/types",
+ "scripts": {},
+ "homepage": "https://github.com/stdlib-js/stdlib",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/stdlib-js/stdlib.git"
+ },
+ "bugs": {
+ "url": "https://github.com/stdlib-js/stdlib/issues"
+ },
+ "dependencies": {},
+ "devDependencies": {},
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "keywords": [
+ "stdlib",
+ "{{TODO:keywords}}"
+ ],
+ "__stdlib__": {}
+}
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rffti/README.md b/lib/node_modules/@stdlib/fft/base/fftpack/rffti/README.md
new file mode 100644
index 000000000000..9a8c88d4fb15
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/rffti/README.md
@@ -0,0 +1,131 @@
+
+
+# rffti
+
+> Initialize a workspace array for performing a real-valued Fourier transform.
+
+
+
+
+
+
+
+
+
+
+
+## Usage
+
+```javascript
+var rffti = require( '@stdlib/fft/base/fftpack/rffti' );
+```
+
+#### rffti( N, workspace, strideW, offsetW )
+
+Initializes a workspace array for performing a real-valued Fourier transform.
+
+```javascript
+var Float64Array = require( '@stdlib/array/float64' );
+var workspace;
+var N = 8;
+
+workspace = new Float64Array( ( 2*N ) + 34 );
+rffti( N, workspace, 1, 0 );
+```
+
+The function accepts the following arguments:
+
+- **N**: length of the sequence to transform.
+- **workspace**: workspace array.
+- **strideW**: stride length for `workspace`.
+- **offsetW**: starting index for `workspace`.
+
+
+
+
+
+
+
+
+
+## Notes
+
+- The workspace array should have a length of at least `( 2*N ) + 34` elements.
+- For single-point sequences ( N = 1 ), the function returns immediately as the FFT is the identity operation.
+
+
+
+
+
+
+
+## Examples
+
+
+
+```javascript
+var Float64Array = require( '@stdlib/array/float64' );
+var rffti = require( '@stdlib/fft/base/fftpack/rffti' );
+
+var workspace;
+var N = 8;
+var i;
+
+workspace = new Float64Array( ( 2*N ) + 34 );
+
+rffti( N, workspace, 1, 0 );
+
+console.log( 'Sequence length: %d', N );
+console.log( 'Workspace array:' );
+for ( i = 0; i < workspace.length; i++ ) {
+ console.log( ' %d: %d', i, workspace[ i ] );
+}
+```
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rffti/benchmark/benchmark.js b/lib/node_modules/@stdlib/fft/base/fftpack/rffti/benchmark/benchmark.js
new file mode 100644
index 000000000000..a85bf1370f60
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/rffti/benchmark/benchmark.js
@@ -0,0 +1,99 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+'use strict';
+
+// MODULES //
+
+var bench = require( '@stdlib/bench' );
+var Float64Array = require( '@stdlib/array/float64' );
+var pkg = require( './../package.json' ).name;
+var rffti = require( './../lib' );
+
+
+// FUNCTIONS //
+
+/**
+* Creates a benchmark function.
+*
+* @private
+* @param {PositiveInteger} N - sequence length to transform
+* @returns {Function} benchmark function
+*/
+function createBenchmark( N ) {
+ return benchmark;
+
+ /**
+ * Benchmark function.
+ *
+ * @private
+ * @param {Benchmark} b - benchmark instance
+ */
+ function benchmark( b ) {
+ var workspace;
+ var i;
+
+ workspace = new Float64Array( ( 2*N ) + 34 );
+
+ b.tic();
+ for ( i = 0; i < b.iterations; i++ ) {
+ rffti( N, workspace, 1, 0 );
+ if ( workspace[ 2*N ] !== N ) {
+ b.fail( 'unexpected result' );
+ }
+ }
+ b.toc();
+
+ if ( workspace[ 2*N ] !== N ) {
+ b.fail( 'unexpected result' );
+ }
+ b.pass( 'benchmark finished' );
+ b.end();
+ }
+}
+
+
+// MAIN //
+
+/**
+* Main execution sequence.
+*
+* @private
+*/
+function main() {
+ var lengths;
+ var N;
+ var f;
+ var i;
+
+ lengths = [
+ 8,
+ 16,
+ 32,
+ 64,
+ 128
+ ];
+
+ for ( i = 0; i < lengths.length; i++ ) {
+ N = lengths[ i ];
+ f = createBenchmark( N );
+ bench( pkg+':N='+N, f );
+ }
+}
+
+main();
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rffti/docs/repl.txt b/lib/node_modules/@stdlib/fft/base/fftpack/rffti/docs/repl.txt
new file mode 100644
index 000000000000..57ccda8c6ab9
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/rffti/docs/repl.txt
@@ -0,0 +1,36 @@
+
+{{alias}}( N, workspace, strideW, offsetW )
+ Initializes a workspace array for performing a real-valued
+ Fourier transform.
+
+ Parameters
+ ----------
+ N: integer
+ Length of the sequence to transform.
+
+ workspace: Float64Array
+ Workspace array.
+
+ strideW: integer
+ Stride length for `workspace`.
+
+ offsetW: integer
+ Starting index for `workspace`.
+
+ Returns
+ -------
+ void
+
+ Examples
+ --------
+ > var N = 8;
+ > var workspace = new {{alias:@stdlib/array/float64}}( ( 2*N ) + 34 );
+ > {{alias}}( N, workspace, 1, 0 );
+ > workspace.slice( N, 2*N )
+ [ 0, 0, ~0.707, ~0.707, 0, 0, 0, 0 ]
+ > workspace.slice( 2*N, ( 2*N ) + 4 )
+ [ 8, 2, 2, 4 ]
+
+ See Also
+ --------
+
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rffti/docs/types/index.d.ts b/lib/node_modules/@stdlib/fft/base/fftpack/rffti/docs/types/index.d.ts
new file mode 100644
index 000000000000..e1cdc89d9d4a
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/rffti/docs/types/index.d.ts
@@ -0,0 +1,58 @@
+/*
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+// TypeScript Version: 4.1
+
+///
+
+/**
+* Initializes a workspace array for performing a real-valued Fourier transform.
+*
+* ## Notes
+*
+* - The workspace array should have a length of at least `( 2*N ) + 34` elements.
+* - For single-point sequences (N=1), the function returns immediately as the FFT is the identity operation.
+*
+* @param N - length of the sequence to transform
+* @param workspace - workspace array
+* @param strideW - stride length for `workspace`
+* @param offsetW - starting index for `workspace`
+*
+* @example
+* // Define a sequence length:
+* var N = 8;
+*
+* // Initialize a workspace array:
+* var workspace = new Float64Array( ( 2*N ) + 34 );
+*
+* rffti( N, workspace, 1, 0 );
+*
+* // Twiddle factors:
+* var f = workspace.slice( N, 2*N );
+* // returns [ 0, 0, ~0.707, ~0.707, 0, 0, 0, 0 ]
+*
+* // Factorization results:
+* f = workspace.slice( 2*N, ( 2*N ) + 4 );
+* // returns [ 8, 2, 2, 4 ]
+*/
+declare function rffti( N: number, workspace: Float64Array, strideW: number, offsetW: number ): void;
+
+
+// EXPORTS //
+
+export = rffti;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rffti/docs/types/test.ts b/lib/node_modules/@stdlib/fft/base/fftpack/rffti/docs/types/test.ts
new file mode 100644
index 000000000000..bc04a38a4ec8
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/rffti/docs/types/test.ts
@@ -0,0 +1,93 @@
+/*
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+import rffti = require( './index' );
+
+// TESTS //
+
+// The function returns void...
+{
+ const workspace = new Float64Array( 50 );
+ rffti( 8, workspace, 1, 0 ); // $ExpectType void
+}
+
+// The compiler throws an error if the function is provided a sequence length which is not a number...
+{
+ const workspace = new Float64Array( 50 );
+
+ rffti( '12', workspace, 1, 0 ); // $ExpectError
+ rffti( true, workspace, 1, 0 ); // $ExpectError
+ rffti( false, workspace, 1, 0 ); // $ExpectError
+ rffti( null, workspace, 1, 0 ); // $ExpectError
+ rffti( undefined, workspace, 1, 0 ); // $ExpectError
+ rffti( [], workspace, 1, 0 ); // $ExpectError
+ rffti( {}, workspace, 1, 0 ); // $ExpectError
+ rffti( ( x: number ): number => x, workspace, 1, 0 ); // $ExpectError
+}
+
+// The compiler throws an error if the function is provided a workspace which is not a Float64Array...
+{
+ rffti( 8, '4,2,3,5', 1, 0 ); // $ExpectError
+ rffti( 8, 5, 1, 0 ); // $ExpectError
+ rffti( 8, true, 1, 0 ); // $ExpectError
+ rffti( 8, false, 1, 0 ); // $ExpectError
+ rffti( 8, null, 1, 0 ); // $ExpectError
+ rffti( 8, undefined, 1, 0 ); // $ExpectError
+ rffti( 8, [], 1, 0 ); // $ExpectError
+ rffti( 8, {}, 1, 0 ); // $ExpectError
+ rffti( 8, ( x: number ): number => x, 1, 0 ); // $ExpectError
+}
+
+// The compiler throws an error if the function is provided a stride which is not a number...
+{
+ const workspace = new Float64Array( 50 );
+
+ rffti( 8, workspace, '1', 0 ); // $ExpectError
+ rffti( 8, workspace, true, 0 ); // $ExpectError
+ rffti( 8, workspace, false, 0 ); // $ExpectError
+ rffti( 8, workspace, null, 0 ); // $ExpectError
+ rffti( 8, workspace, undefined, 0 ); // $ExpectError
+ rffti( 8, workspace, [], 0 ); // $ExpectError
+ rffti( 8, workspace, {}, 0 ); // $ExpectError
+ rffti( 8, workspace, ( x: number ): number => x, 0 ); // $ExpectError
+}
+
+// The compiler throws an error if the function is provided an offset which is not a number...
+{
+ const workspace = new Float64Array( 50 );
+
+ rffti( 8, workspace, 1, '0' ); // $ExpectError
+ rffti( 8, workspace, 1, true ); // $ExpectError
+ rffti( 8, workspace, 1, false ); // $ExpectError
+ rffti( 8, workspace, 1, null ); // $ExpectError
+ rffti( 8, workspace, 1, undefined ); // $ExpectError
+ rffti( 8, workspace, 1, [] ); // $ExpectError
+ rffti( 8, workspace, 1, {} ); // $ExpectError
+ rffti( 8, workspace, 1, ( x: number ): number => x ); // $ExpectError
+}
+
+// The compiler throws an error if the function is provided an unsupported number of arguments...
+{
+ const workspace = new Float64Array( 50 );
+
+ rffti(); // $ExpectError
+ rffti( 8 ); // $ExpectError
+ rffti( 8, workspace ); // $ExpectError
+ rffti( 8, workspace, 1 ); // $ExpectError
+ rffti( 8, workspace, 1, 0, 123 ); // $ExpectError
+}
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rffti/examples/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/rffti/examples/index.js
new file mode 100644
index 000000000000..14118261d582
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/rffti/examples/index.js
@@ -0,0 +1,36 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+'use strict';
+
+var Float64Array = require( '@stdlib/array/float64' );
+var rffti = require( './../lib' );
+
+var workspace;
+var N = 8;
+var i;
+
+workspace = new Float64Array( ( 2*N ) + 34 );
+
+rffti( N, workspace, 1, 0 );
+
+console.log( 'Sequence length: %d', N );
+console.log( 'Workspace array:' );
+for ( i = 0; i < workspace.length; i++ ) {
+ console.log( ' %d: %d', i, workspace[ i ] );
+}
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rffti/lib/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/rffti/lib/index.js
new file mode 100644
index 000000000000..465bdbc2fcfa
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/rffti/lib/index.js
@@ -0,0 +1,53 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+'use strict';
+
+/**
+* Initialize a workspace array for performing a real-valued Fourier transform.
+*
+* @module @stdlib/fft/base/fftpack/rffti
+*
+* @example
+* var rffti = require( '@stdlib/fft/base/fftpack/rffti' );
+*
+* // Define a sequence length:
+* var N = 8;
+*
+* // Initialize a workspace array:
+* var workspace = new Float64Array( ( 2*N ) + 34 );
+*
+* rffti( N, workspace, 1, 0 );
+*
+* // Twiddle factors:
+* var f = workspace.slice( N, 2*N );
+* // returns [ 0, 0, ~0.707, ~0.707, 0, 0, 0, 0 ]
+*
+* // Factorization results:
+* f = workspace.slice( 2*N, ( 2*N ) + 4 );
+* // returns [ 8, 2, 2, 4 ]
+*/
+
+// MODULES //
+
+var main = require( './main.js' );
+
+
+// EXPORTS //
+
+module.exports = main;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rffti/lib/main.js b/lib/node_modules/@stdlib/fft/base/fftpack/rffti/lib/main.js
new file mode 100644
index 000000000000..d992912a5a21
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/rffti/lib/main.js
@@ -0,0 +1,186 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+'use strict';
+
+// MODULES //
+
+var isNonNegativeInteger = require( '@stdlib/assert/is-nonnegative-integer' );
+var isInteger = require( '@stdlib/assert/is-integer' );
+var isFloat64Array = require( '@stdlib/assert/is-float64array' );
+var rffti1 = require( './rffti1.js' );
+
+
+// MAIN //
+
+/**
+* Initializes a workspace array for performing a real-valued Fourier transform.
+*
+* ## Notes
+*
+* The workspace array is divided into three sections:
+*
+* ```text
+* size = N N 2+ceil(log2(N)/2)
+* ↓ ↓ ↓
+* | scratch / workspace | twiddle factors | radix factor table |
+* ↑ ↑ ↑
+* i = 0 ... N ... 2N ...
+* ```
+*
+* where
+*
+* - **scratch/workspace**: used as a scratch space when performing transforms. This section is not updated during initialization.
+* - **twiddle factors**: a table of reusable complex-exponential constants stored as cosine/sine pairs.
+* - **radix factor table**: a table containing the radix factorization of `N`.
+*
+* In general, a workspace array should have `2N + 34` indexed elements (as `log2(N)/2 ≤ 32` for all `2^64`). During initialization, only the sections for storing twiddle factors and the factorization of `N` are updated.
+*
+* > Note: FFTPACK only requires `2N+15`, but we increase that number here to accommodate larger workspace arrays, where `N` may exceed `2^30` indexed elements.
+*
+* The first two sections each contain `N` elements, while the last section contains the sequence length, the number of integer factors, and, at most, `ceil(log2(N)/2)` integer radix factors.
+*
+* The factorization section is comprised as follows:
+*
+* ```text
+* | sequence_length | number_of_factors | integer_factors |
+* ```
+*
+* The sequence length and number of factors (`nf`) comprise a single element each. Only the first `nf` elements in the integer factors section are written to, with the rest being unused.
+*
+* As for twiddle factors, these are small, reusable complex-exponential constants that appear inside each "butterfly" stage of a Cooley–Tukey–style FFT. Every arithmetic step in an FFT multiplies one intermediate value by some
+*
+* ```tex
+* W_N^k
+* ```
+*
+* where `W_N^k` is an N-th root of unity. Formally, in a forward FFT,
+*
+* ```tex
+* W_N^k = e^{-2\pi ik/N}
+* ```
+*
+* In a backward FFT,
+*
+* ```tex
+* W_N^k = e^{+2\pi ik/N}
+* ```
+*
+* As may be observed, `W_N^k` for forward and backward FFTs is the same, except the sign of the exponent is flipped. As a consequence, both real and backward FFT callers can reuse the same set of twiddle factors, with those performing a forward transform (e.g., `rfftf`) multiplying with `(cos,-sin)` and those performing a backward transform (e.g., `rfftb`) multiplying with `(cos,+sin)`.
+*
+* Because these constants only depend on the transform length `N` (and **not** on the input data), we can pre-compute and store them once, then "twiddle" them (i.e., reuse them with different indices) as we proceed through the factorization.
+*
+* > As a quick aside regarding the name "twiddle", early FFT papers (notably Gentleman & Sande, 1966) described how you "twiddle" one branch of each butterfly by a complex rotation before adding/subtracting. The coefficients themselves inherited the nickname "twiddle factors," and the term stuck.
+*
+* By reusing the workspace array when computing multiple transforms of the same length `N`, every subsequent `*f` (forward) or `*b` (backward) call can simply look up the pre-stored twiddle factors instead of recomputing sine and cosine on-the-fly.
+*
+* In short, twiddle factors are cached roots of unity that allow each stage of the algorithm to rotate data quickly and predictably.
+*
+* @param {NonNegativeInteger} N - length of the sequence to transform
+* @param {Float64Array} workspace - workspace array
+* @param {integer} strideW - stride length for `workspace`
+* @param {NonNegativeInteger} offsetW - starting index for `workspace`
+* @returns {void}
+*
+* @example
+* // Define a sequence length:
+* var N = 8;
+*
+* // Initialize a workspace array:
+* var workspace = new Float64Array( ( 2*N ) + 34 );
+*
+* rffti( N, workspace, 1, 0 );
+*
+* // Twiddle factors:
+* var f = workspace.slice( N, 2*N );
+* // returns [ 0, 0, ~0.707, ~0.707, 0, 0, 0, 0 ]
+*
+* // Factorization results:
+* f = workspace.slice( 2*N, ( 2*N ) + 4 );
+* // returns [ 8, 2, 2, 4 ]
+*/
+function rffti( N, workspace, strideW, offsetW ) {
+ var offsetT;
+ var offsetF;
+
+ if (
+ !isNonNegativeInteger( N ) ||
+ !isFloat64Array( workspace ) ||
+ !isInteger( strideW ) ||
+ !isNonNegativeInteger( offsetW ) ||
+ workspace.length < offsetW + ( ( ( 2*N ) + 34 ) * strideW )
+ ) {
+ return;
+ }
+
+ // When a sub-sequence is a single data point, the FFT is the identity, so no initialization necessary...
+ if ( N === 1 ) {
+ return;
+ }
+ // Resolve the starting indices for storing twiddle factors and factorization results:
+ offsetT = offsetW + ( N*strideW ); // index offset for twiddle factors
+ offsetF = offsetT + ( N*strideW ); // index offset for factorization results
+
+ // Initialize a provided workspace array:
+ rffti1( N, workspace, strideW, offsetT, workspace, strideW, offsetF );
+}
+
+
+// EXPORTS //
+
+module.exports = rffti;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rffti/lib/rffti1.js b/lib/node_modules/@stdlib/fft/base/fftpack/rffti/lib/rffti1.js
new file mode 100644
index 000000000000..0a795762c651
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/rffti/lib/rffti1.js
@@ -0,0 +1,183 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+'use strict';
+
+// MODULES //
+
+var sincos = require( '@stdlib/math/base/special/sincos' ).assign;
+var TWO_PI = require( '@stdlib/constants/float64/two-pi' );
+var floor = require( '@stdlib/math/base/special/floor' );
+var decompose = require( '@stdlib/fft/base/fftpack/decompose' );
+
+
+// VARIABLES //
+
+// Define a list of initial trial factors for FFT factorization:
+var TRIAL_FACTORS = [ 4, 2, 3, 5 ];
+
+
+// MAIN //
+
+/**
+* Initializes the working arrays for applying a Fourier transform to a real-valued sequence.
+*
+* @private
+* @param {NonNegativeInteger} N - length of the sequence
+* @param {Collection} twiddles - array of twiddle factors
+* @param {integer} strideT - stride length for `twiddles`
+* @param {NonNegativeInteger} offsetT - starting index for `twiddles`
+* @param {Collection} factors - array containing a radix factorization
+* @param {integer} strideF - stride length for `factors`
+* @param {NonNegativeInteger} offsetF - starting index for `factors`
+* @returns {void}
+*/
+function rffti1( N, twiddles, strideT, offsetT, factors, strideF, offsetF ) {
+ var factor;
+ var argld;
+ var argh;
+ var fidx;
+ var nf;
+ var fi;
+ var l2;
+ var l1;
+ var ld;
+ var st;
+ var it;
+ var im;
+ var M;
+ var m;
+ var k;
+ var j;
+
+ // Decompose the sequence length into its radix factors:
+ nf = decompose( N, TRIAL_FACTORS, factors, strideF, offsetF );
+
+ // If the number of radix factors is `1`, the only twiddle factor we need is `W_N^0 = 1`, which the main transform kernels already hard-code, so nothing to pre-compute...
+ if ( nf-1 === 0 ) {
+ return;
+ }
+ // Compute the master angular step (i.e., the basic angle that generates all twiddles):
+ argh = TWO_PI / N;
+
+ // Define the location of the first sine term we want to compute:
+ im = 3;
+
+ // Initialize a running product of factors already processed:
+ l1 = 1;
+
+ // Compute the index of the first radix factor:
+ fidx = offsetF + ( 2*strideF );
+
+ // Compute the stride length for each cosine/sine pair:
+ st = 2 * strideT;
+
+ // Generate twiddle factors...
+ for ( k = 0; k < nf-1; k++ ) {
+ // Resolve the next radix factor:
+ factor = factors[ fidx ];
+
+ // Compute the length of the transform after including the current radix:
+ l2 = factor * l1;
+
+ // Compute the number of the "butterfly wings" (at this stage, the data is viewed as a `factor`-point transform of sub-vectors of length `l1`; `M` describes how many such vectors fit in the full array of length `N`):
+ M = floor( N / l2 );
+
+ // Initialize a running offset used to step the angle:
+ ld = 0;
+
+ // Iterate over each butterfly column within the current radix...
+ for ( j = 1; j < factor; j++ ) {
+ // Advance to the next column:
+ ld += l1;
+
+ // Compute the angle step for this column:
+ argld = ld * argh; // 2π ⋅ j ⋅ li / N, which is the j-th column's base angle
+
+ // Initialize a counter which counts from `1` to `(M/2)-1` (i.e., all non-trivial harmonics):
+ fi = 1.0;
+
+ // Compute the index of the sine term:
+ it = offsetT + ( im*strideT );
+
+ // Iterate over each non-trivial harmonic in the column (note: we skip the `m=0` and `m=1` (i.e., the first cosine/sine pair, the first harmonic `W_N^0 = cos(0) + j sin(0) = 1 + j⋅0` is trivial and hard-coded by transform kernels)...
+ for ( m = 2; m < M; m += 2 ) {
+ // Compute `(cos(fi*argld), sin(fi*argld))`:
+ sincos( fi*argld, twiddles, -strideT, it ); // note: `sincos` returns the sine and cosine, in that order, so we need to use a negative stride when assigning the values to `twiddles` to ensure that cosine comes before sine in the twiddles table
+
+ // Update for the next harmonic:
+ fi += 1.0;
+
+ // Resolve the index of the next sine term:
+ it += st;
+ }
+ // Advance `im` by the size of the current block, skipping the cosine/sine pairs we have just written:
+ im += M;
+ }
+ // Update the running product of factors already processed:
+ l1 = l2;
+
+ // Resolve the index of the next radix factor:
+ fidx += strideF;
+ }
+}
+
+
+// EXPORTS //
+
+module.exports = rffti1;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rffti/package.json b/lib/node_modules/@stdlib/fft/base/fftpack/rffti/package.json
new file mode 100644
index 000000000000..449dabea170a
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/rffti/package.json
@@ -0,0 +1,56 @@
+{
+ "name": "@stdlib/fft/base/fftpack/rffti",
+ "version": "0.0.0",
+ "description": "Initialize a workspace array for performing a real-valued Fourier transform.",
+ "license": "Apache-2.0",
+ "author": {
+ "name": "The Stdlib Authors",
+ "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
+ },
+ "contributors": [
+ {
+ "name": "The Stdlib Authors",
+ "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
+ }
+ ],
+ "main": "./lib",
+ "directories": {
+ "benchmark": "./benchmark",
+ "doc": "./docs",
+ "example": "./examples",
+ "lib": "./lib",
+ "test": "./test"
+ },
+ "types": "./docs/types",
+ "scripts": {},
+ "homepage": "https://github.com/stdlib-js/stdlib",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/stdlib-js/stdlib.git"
+ },
+ "bugs": {
+ "url": "https://github.com/stdlib-js/stdlib/issues"
+ },
+ "dependencies": {},
+ "devDependencies": {},
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "keywords": [
+ "stdlib",
+ "{{TODO:keywords}}"
+ ],
+ "__stdlib__": {}
+}
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rffti/test/test.js b/lib/node_modules/@stdlib/fft/base/fftpack/rffti/test/test.js
new file mode 100644
index 000000000000..87435a124561
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/rffti/test/test.js
@@ -0,0 +1,237 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+'use strict';
+
+// MODULES //
+
+var tape = require( 'tape' );
+var Float64Array = require( '@stdlib/array/float64' );
+var rffti = require( './../lib' );
+
+
+// TESTS //
+
+tape( 'main export is a function', function test( t ) {
+ t.ok( true, __filename );
+ t.strictEqual( typeof rffti, 'function', 'main export is a function' );
+ t.end();
+});
+
+tape( 'the function initializes a workspace array for performing a real-valued Fourier transform', function test( t ) {
+ var hasNonZero;
+ var workspace;
+ var N;
+ var i;
+
+ N = 8;
+ workspace = new Float64Array( ( 2*N ) + 34 );
+ rffti( N, workspace, 1, 0 );
+
+ // Checking that the workspace has been initialized with non-zero values:
+ hasNonZero = false;
+ for ( i = 0; i < workspace.length; i++ ) {
+ if ( workspace[ i ] !== 0 ) {
+ hasNonZero = true;
+ break;
+ }
+ }
+ t.ok( hasNonZero, 'workspace contains non-zero values' );
+ t.end();
+});
+
+tape( 'the function handles N=1 case (identity transform)', function test( t ) {
+ var workspace;
+ var original;
+ var N;
+ var i;
+
+ N = 1;
+ workspace = new Float64Array( ( 2*N ) + 34 );
+
+ // Filling with non-zero values to check if they remain unchanged:
+ for ( i = 0; i < workspace.length; i++ ) {
+ workspace[ i ] = i + 1;
+ }
+
+ original = workspace.slice();
+ rffti( N, workspace, 1, 0 );
+
+ t.deepEqual( workspace, original, 'workspace remains unchanged for N=1' );
+ t.end();
+});
+
+tape( 'the function correctly initializes workspace for various sequence lengths', function test( t ) {
+ var workspace;
+ var lengths;
+ var N;
+ var i;
+
+ lengths = [ 2, 4, 8, 16, 32 ];
+
+ for ( i = 0; i < lengths.length; i++ ) {
+ N = lengths[ i ];
+ workspace = new Float64Array( ( 2*N ) + 34 );
+ rffti( N, workspace, 1, 0 );
+ t.strictEqual( workspace[ 2*N ], N, 'stores sequence length N = ' + N + ' in workspace' );
+ }
+ t.end();
+});
+
+tape( 'the function handles stride parameter correctly', function test( t ) {
+ var hasNonZeroAtStride;
+ var workspace;
+ var stride;
+ var N;
+ var i;
+
+ N = 8;
+ stride = 2;
+ workspace = new Float64Array( ( ( 2*N ) + 34 ) * stride );
+ rffti( N, workspace, stride, 0 );
+
+ // Checking that values are stored with the correct stride:
+ hasNonZeroAtStride = false;
+ for ( i = 0; i < workspace.length; i += stride ) {
+ if ( workspace[ i ] !== 0 ) {
+ hasNonZeroAtStride = true;
+ break;
+ }
+ }
+ t.ok( hasNonZeroAtStride, 'workspace contains non-zero values at stride intervals' );
+ t.end();
+});
+
+tape( 'the function handles offset parameter correctly', function test( t ) {
+ var hasNonZeroAfterOffset;
+ var allZerosBeforeOffset;
+ var workspace;
+ var offset;
+ var N;
+ var j;
+ var i;
+
+ N = 8;
+ offset = 5;
+ workspace = new Float64Array( ( 2*N ) + 34 + offset );
+ rffti( N, workspace, 1, offset );
+
+ // Checking that values are stored with the correct offset:
+ hasNonZeroAfterOffset = false;
+ for ( i = offset; i < workspace.length; i++ ) {
+ if ( workspace[ i ] !== 0 ) {
+ hasNonZeroAfterOffset = true;
+ break;
+ }
+ }
+ t.ok( hasNonZeroAfterOffset, 'workspace contains non-zero values after offset' );
+
+ // Checking that values before offset remain zero:
+ allZerosBeforeOffset = true;
+ for ( j = 0; j < offset; j++ ) {
+ if ( workspace[ j ] !== 0 ) {
+ allZerosBeforeOffset = false;
+ break;
+ }
+ }
+ t.ok( allZerosBeforeOffset, 'workspace contains only zeros before offset' );
+ t.end();
+});
+
+tape( 'the function handles invalid arguments', function test( t ) {
+ var workspace;
+ var values;
+ var i;
+
+ // Testing invalid N values:
+ values = [
+ '5',
+ -5,
+ 3.14,
+ NaN,
+ true,
+ false,
+ null,
+ void 0,
+ {},
+ [],
+ function foo() {}
+ ];
+
+ for ( i = 0; i < values.length; i++ ) {
+ workspace = new Float64Array( 50 );
+ rffti( values[ i ], workspace, 1, 0 );
+ t.deepEqual( workspace, new Float64Array( 50 ), 'workspace remains unchanged when provided ' + values[ i ] );
+ }
+
+ // Testing invalid stride values:
+ values = [
+ '5',
+ 3.14,
+ NaN,
+ true,
+ false,
+ null,
+ void 0,
+ {},
+ [],
+ function foo() {}
+ ];
+
+ for ( i = 0; i < values.length; i++ ) {
+ workspace = new Float64Array( 50 );
+ rffti( 8, workspace, values[ i ], 0 );
+ t.deepEqual( workspace, new Float64Array( 50 ), 'workspace remains unchanged when provided ' + values[ i ] );
+ }
+
+ // Testing invalid offset values:
+ values = [
+ '5',
+ -5,
+ 3.14,
+ NaN,
+ true,
+ false,
+ null,
+ void 0,
+ {},
+ [],
+ function foo() {}
+ ];
+
+ for ( i = 0; i < values.length; i++ ) {
+ workspace = new Float64Array( 50 );
+ rffti( 8, workspace, 1, values[ i ] );
+ t.deepEqual( workspace, new Float64Array( 50 ), 'workspace remains unchanged when provided ' + values[ i ] );
+ }
+
+ t.end();
+});
+
+tape( 'the function handles workspace array that is too small', function test( t ) {
+ var workspace;
+ var N;
+
+ N = 8;
+ workspace = new Float64Array( 10 );
+ rffti( N, workspace, 1, 0 );
+
+ // If workspace is too small, function should return without modifying workspace:
+ t.deepEqual( workspace, new Float64Array( 10 ), 'workspace remains unchanged when too small' );
+ t.end();
+});
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinqb/lib/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/sinqb/lib/index.js
new file mode 100644
index 000000000000..9f809837adee
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/sinqb/lib/index.js
@@ -0,0 +1,39 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+'use strict';
+
+/**
+* TODO: description.
+*
+* @module @stdlib/fft/base/fftpack/sinqb
+*
+* @example
+* var sinqb = require( '@stdlib/fft/base/fftpack/sinqb' );
+*
+* // TODO
+*/
+
+// MODULES //
+
+var main = require( './main.js' );
+
+
+// EXPORTS //
+
+module.exports = main;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinqb/lib/main.js b/lib/node_modules/@stdlib/fft/base/fftpack/sinqb/lib/main.js
new file mode 100644
index 000000000000..ffb313646520
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/sinqb/lib/main.js
@@ -0,0 +1,107 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+'use strict';
+
+// MODULES //
+
+var cosqb = require( '@stdlib/fft/base/fftpack/cosqb' );
+
+
+// MAIN //
+
+/**
+* Performs the quarter-wave sine backward transform.
+*
+* @param {number} n - length of the sequence to transform
+* @param {Float64Array} x - input array containing sequence to be transformed
+* @param {number} xptr - starting index for `x`
+* @param {Float64Array} wsave - working array containing precomputed values
+* @param {number} wptr - starting index for `wsave`
+* @returns {void}
+*/
+function sinqb( n, x, xptr, wsave, wptr ) { // FIXME: refactor
+ var xhold;
+ var ns2;
+ var kc;
+ var k;
+
+ wptr -= 1;
+ xptr -= 1;
+
+ if ( n <= 1 ) {
+ x[ xptr + 1 ] *= 4.0;
+ return;
+ }
+ ns2 = n / 2;
+ for ( k = 2; k <= n; k += 2 ) {
+ x[ xptr + k ] = -x[ xptr + k ];
+ }
+ cosqb( n, x, xptr + 1, wsave, wptr + 1 );
+ for ( k = 1; k <= ns2; ++k ) {
+ kc = n - k;
+ xhold = x[ xptr + k ];
+ x[ xptr + k ] = x[ xptr + kc + 1 ];
+ x[ xptr + kc + 1 ] = xhold;
+ }
+}
+
+
+// EXPORTS //
+
+module.exports = sinqb;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinqb/package.json b/lib/node_modules/@stdlib/fft/base/fftpack/sinqb/package.json
new file mode 100644
index 000000000000..ca86a818dea8
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/sinqb/package.json
@@ -0,0 +1,56 @@
+{
+ "name": "@stdlib/fft/base/fftpack/sinqb",
+ "version": "0.0.0",
+ "description": "{{TODO:description}}",
+ "license": "Apache-2.0",
+ "author": {
+ "name": "The Stdlib Authors",
+ "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
+ },
+ "contributors": [
+ {
+ "name": "The Stdlib Authors",
+ "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
+ }
+ ],
+ "main": "./lib",
+ "directories": {
+ "benchmark": "./benchmark",
+ "doc": "./docs",
+ "example": "./examples",
+ "lib": "./lib",
+ "test": "./test"
+ },
+ "types": "./docs/types",
+ "scripts": {},
+ "homepage": "https://github.com/stdlib-js/stdlib",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/stdlib-js/stdlib.git"
+ },
+ "bugs": {
+ "url": "https://github.com/stdlib-js/stdlib/issues"
+ },
+ "dependencies": {},
+ "devDependencies": {},
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "keywords": [
+ "stdlib",
+ "{{TODO:keywords}}"
+ ],
+ "__stdlib__": {}
+}
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinqf/lib/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/sinqf/lib/index.js
new file mode 100644
index 000000000000..ea0678fc0606
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/sinqf/lib/index.js
@@ -0,0 +1,39 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+'use strict';
+
+/**
+* TODO: description.
+*
+* @module @stdlib/fft/base/fftpack/sinqf
+*
+* @example
+* var sinqf = require( '@stdlib/fft/base/fftpack/sinqf' );
+*
+* // TODO
+*/
+
+// MODULES //
+
+var main = require( './main.js' );
+
+
+// EXPORTS //
+
+module.exports = main;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinqf/lib/main.js b/lib/node_modules/@stdlib/fft/base/fftpack/sinqf/lib/main.js
new file mode 100644
index 000000000000..af248890baf0
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/sinqf/lib/main.js
@@ -0,0 +1,106 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+'use strict';
+
+// MODULES //
+
+var cosqb = require( '@stdlib/fft/base/fftpack/cosqb' );
+
+
+// MAIN //
+
+/**
+* Performs the quarter-wave sine forward transform.
+*
+* @param {number} n - length of the sequence to transform
+* @param {Float64Array} x - input array containing sequence to be transformed
+* @param {number} xptr - starting index for `x`
+* @param {Float64Array} wsave - working array containing precomputed values
+* @param {number} wptr - starting index for `wsave`
+* @returns {void}
+*/
+function sinqf( n, x, xptr, wsave, wptr ) { // FIXME: refactor
+ var xhold;
+ var ns2;
+ var kc;
+ var k;
+
+ wptr -= 1;
+ xptr -= 1;
+
+ if ( n === 1 ) {
+ return;
+ }
+ ns2 = n / 2;
+ for ( k = 1; k <= ns2; ++k ) {
+ kc = n - k;
+ xhold = x[ xptr + k ];
+ x[ xptr + k ] = x[ xptr + kc + 1 ];
+ x[ xptr + kc + 1 ] = xhold;
+ }
+ cosqb( n, x, xptr + 1, wsave, wptr + 1 );
+ for ( k = 2; k <= n; k += 2 ) {
+ x[ xptr + k ] = -x[ xptr + k ];
+ }
+}
+
+
+// EXPORTS //
+
+module.exports = sinqf;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinqf/package.json b/lib/node_modules/@stdlib/fft/base/fftpack/sinqf/package.json
new file mode 100644
index 000000000000..57ae9f2de5c5
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/sinqf/package.json
@@ -0,0 +1,56 @@
+{
+ "name": "@stdlib/fft/base/fftpack/sinqf",
+ "version": "0.0.0",
+ "description": "{{TODO:description}}",
+ "license": "Apache-2.0",
+ "author": {
+ "name": "The Stdlib Authors",
+ "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
+ },
+ "contributors": [
+ {
+ "name": "The Stdlib Authors",
+ "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
+ }
+ ],
+ "main": "./lib",
+ "directories": {
+ "benchmark": "./benchmark",
+ "doc": "./docs",
+ "example": "./examples",
+ "lib": "./lib",
+ "test": "./test"
+ },
+ "types": "./docs/types",
+ "scripts": {},
+ "homepage": "https://github.com/stdlib-js/stdlib",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/stdlib-js/stdlib.git"
+ },
+ "bugs": {
+ "url": "https://github.com/stdlib-js/stdlib/issues"
+ },
+ "dependencies": {},
+ "devDependencies": {},
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "keywords": [
+ "stdlib",
+ "{{TODO:keywords}}"
+ ],
+ "__stdlib__": {}
+}
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/lib/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/lib/index.js
new file mode 100644
index 000000000000..76f4974dba02
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/lib/index.js
@@ -0,0 +1,39 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+'use strict';
+
+/**
+* TODO: description.
+*
+* @module @stdlib/fft/base/fftpack/sinqi
+*
+* @example
+* var sinqi = require( '@stdlib/fft/base/fftpack/sinqi' );
+*
+* // TODO
+*/
+
+// MODULES //
+
+var main = require( './main.js' );
+
+
+// EXPORTS //
+
+module.exports = main;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/lib/main.js b/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/lib/main.js
new file mode 100644
index 000000000000..30c8dd1cfe07
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/lib/main.js
@@ -0,0 +1,85 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+'use strict';
+
+// MODULES //
+
+var cosqi = require( '@stdlib/fft/base/fftpack/cosqi' );
+
+
+// MAIN //
+
+/**
+* Initializes the working array for quarter-wave sine transforms.
+*
+* @param {number} n - sequence length
+* @param {Float64Array} wsave - working array
+* @param {number} wptr - starting index for `wsave`
+* @returns {void}
+*/
+function sinqi( n, wsave, wptr ) { // FIXME: refactor
+ wptr -= 1;
+
+ cosqi( n, wsave, wptr + 1 );
+}
+
+
+// EXPORTS //
+
+module.exports = sinqi;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/package.json b/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/package.json
new file mode 100644
index 000000000000..61309a346fd2
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/package.json
@@ -0,0 +1,56 @@
+{
+ "name": "@stdlib/fft/base/fftpack/sinqi",
+ "version": "0.0.0",
+ "description": "TODO: description.",
+ "license": "Apache-2.0",
+ "author": {
+ "name": "The Stdlib Authors",
+ "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
+ },
+ "contributors": [
+ {
+ "name": "The Stdlib Authors",
+ "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
+ }
+ ],
+ "main": "./lib",
+ "directories": {
+ "benchmark": "./benchmark",
+ "doc": "./docs",
+ "example": "./examples",
+ "lib": "./lib",
+ "test": "./test"
+ },
+ "types": "./docs/types",
+ "scripts": {},
+ "homepage": "https://github.com/stdlib-js/stdlib",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/stdlib-js/stdlib.git"
+ },
+ "bugs": {
+ "url": "https://github.com/stdlib-js/stdlib/issues"
+ },
+ "dependencies": {},
+ "devDependencies": {},
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "keywords": [
+ "stdlib",
+ "{{TODO:keywords}}"
+ ],
+ "__stdlib__": {}
+}
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sint/lib/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/sint/lib/index.js
new file mode 100644
index 000000000000..d3dae9453a23
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/sint/lib/index.js
@@ -0,0 +1,39 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+'use strict';
+
+/**
+* TODO: description.
+*
+* @module @stdlib/fft/base/fftpack/sint
+*
+* @example
+* var sint = require( '@stdlib/fft/base/fftpack/sint' );
+*
+* // TODO
+*/
+
+// MODULES //
+
+var main = require( './main.js' );
+
+
+// EXPORTS //
+
+module.exports = main;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sint/lib/main.js b/lib/node_modules/@stdlib/fft/base/fftpack/sint/lib/main.js
new file mode 100644
index 000000000000..166cb7f8e87a
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/sint/lib/main.js
@@ -0,0 +1,101 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+'use strict';
+
+// MODULES //
+
+var sint1 = require( './sint1.js' );
+
+
+// MAIN //
+
+/**
+* Computes the sine transform of a sequence.
+*
+* @private
+* @param {number} n - sequence length
+* @param {Float64Array} x - input/output array
+* @param {number} xptr - starting index for `x`
+* @param {Float64Array} wsave - working array
+* @param {number} wptr - starting index for `wsave`
+* @returns {void}
+*/
+function sint( n, x, xptr, wsave, wptr ) { // FIXME: refactor
+ var iw1;
+ var iw2;
+ var iw3;
+ var np1;
+
+ // Parameter adjustments
+ wptr -= 1;
+ xptr -= 1;
+
+ // Function Body
+ np1 = n + 1;
+ iw1 = ( n / 2 ) + 1;
+ iw2 = iw1 + np1;
+ iw3 = iw2 + np1;
+
+ sint1( n, x, xptr+1, wsave, wptr+1, wsave, wptr+iw1, wsave, wptr+iw2, wsave, wptr+iw3 ); // eslint-disable-line max-len
+}
+
+
+// EXPORTS //
+
+module.exports = sint;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sint/lib/sint1.js b/lib/node_modules/@stdlib/fft/base/fftpack/sint/lib/sint1.js
new file mode 100644
index 000000000000..8ddf6f38e06a
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/sint/lib/sint1.js
@@ -0,0 +1,152 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+'use strict';
+
+// MODULES //
+
+var SQRT3 = require( '@stdlib/constants/float64/sqrt-three' );
+
+// FIXME: refactor implementation to avoid needing to reach into package; dependent on changes to `rfftf` in supporting strides and offsets
+var rfftf1 = require( '@stdlib/fft/base/fftpack/rfft1/lib/rfftf1.js' ); // eslint-disable-line stdlib/no-internal-require, stdlib/require-file-extensions
+
+
+// MAIN //
+
+/**
+* Computes the sine transform of a sequence.
+*
+* @private
+* @param {number} n - sequence length
+* @param {Float64Array} war - working array for real values
+* @param {number} warptr - starting index for `war`
+* @param {Float64Array} was - working array for sine values
+* @param {number} wasptr - starting index for `was`
+* @param {Float64Array} xh - auxiliary array
+* @param {number} xhptr - starting index for `xh`
+* @param {Float64Array} x - input/output array
+* @param {number} xptr - starting index for `x`
+* @param {Int32Array} ifac - array containing factorization
+* @param {number} ifptr - starting index for `ifac`
+* @returns {void}
+*/
+function sint1( n, war, warptr, was, wasptr, xh, xhptr, x, xptr, ifac, ifptr ) { // eslint-disable-line max-params
+ var xhold;
+ var modn;
+ var np1;
+ var ns2;
+ var kc;
+ var t1;
+ var t2;
+ var k;
+ var i;
+
+ // Parameter adjustments
+ ifptr -= 1;
+ xptr -= 1;
+ xhptr -= 1;
+ wasptr -= 1;
+ warptr -= 1;
+
+ // Function Body
+ for ( i = 1; i <= n; i++ ) {
+ xh[ xhptr + i ] = war[ warptr + i ];
+ war[ warptr + i ] = x[ xptr + i ];
+ }
+ if ( n < 2 ) {
+ xh[ xhptr + 1 ] += xh[ xhptr + 1 ];
+ } else if ( n === 2 ) {
+ xhold = SQRT3 * ( xh[ xhptr + 1 ] + xh[ xhptr + 2 ] );
+ xh[ xhptr + 2 ] = SQRT3 * ( xh[ xhptr + 1 ] - xh[ xhptr + 2 ] );
+ xh[ xhptr + 1 ] = xhold;
+ } else {
+ np1 = n + 1;
+ ns2 = n / 2;
+ x[ xptr + 1 ] = 0.0;
+ for ( k = 1; k <= ns2; ++k ) {
+ kc = np1 - k;
+ t1 = xh[ xhptr + k ] - xh[ xhptr + kc ];
+ t2 = was[ wasptr + k ] * ( xh[ xhptr + k ] + xh[ xhptr + kc ] );
+ x[ xptr + k + 1 ] = t1 + t2;
+ x[ xptr + kc + 1 ] = t2 - t1;
+ }
+ modn = n % 2;
+ if ( modn !== 0 ) {
+ x[ xptr + ns2 + 2 ] = xh[ xhptr + ns2 + 1 ] * 4.0;
+ }
+ rfftf1( np1, x, xptr + 1, xh, xhptr + 1, war, warptr + 1, ifac, ifptr + 1 ); // eslint-disable-line max-len
+ xh[ xhptr + 1 ] = x[ xptr + 1 ] * 0.5;
+ for ( i = 3; i <= n; i += 2 ) {
+ xh[ xhptr + i - 1 ] = -x[ xptr + i ];
+ xh[ xhptr + i ] = xh[ xhptr + i - 2 ] + x[ xptr + i - 1 ];
+ }
+ if ( modn === 0 ) {
+ xh[ xhptr + n ] = -x[ xptr + n + 1 ];
+ }
+ }
+
+ for ( i = 1; i <= n; i++ ) {
+ x[ xptr + i ] = war[ warptr + i ];
+ war[ warptr + i ] = xh[ xhptr + i ];
+ }
+}
+
+
+// EXPORTS //
+
+module.exports = sint1;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sint/package.json b/lib/node_modules/@stdlib/fft/base/fftpack/sint/package.json
new file mode 100644
index 000000000000..396dad4834a9
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/sint/package.json
@@ -0,0 +1,56 @@
+{
+ "name": "@stdlib/fft/base/fftpack/sint",
+ "version": "0.0.0",
+ "description": "TODO: description.",
+ "license": "Apache-2.0",
+ "author": {
+ "name": "The Stdlib Authors",
+ "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
+ },
+ "contributors": [
+ {
+ "name": "The Stdlib Authors",
+ "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
+ }
+ ],
+ "main": "./lib",
+ "directories": {
+ "benchmark": "./benchmark",
+ "doc": "./docs",
+ "example": "./examples",
+ "lib": "./lib",
+ "test": "./test"
+ },
+ "types": "./docs/types",
+ "scripts": {},
+ "homepage": "https://github.com/stdlib-js/stdlib",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/stdlib-js/stdlib.git"
+ },
+ "bugs": {
+ "url": "https://github.com/stdlib-js/stdlib/issues"
+ },
+ "dependencies": {},
+ "devDependencies": {},
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "keywords": [
+ "stdlib",
+ "{{TODO:keywords}}"
+ ],
+ "__stdlib__": {}
+}
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinti/lib/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/sinti/lib/index.js
new file mode 100644
index 000000000000..d8186d88b0cd
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/sinti/lib/index.js
@@ -0,0 +1,39 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+'use strict';
+
+/**
+* TODO: description.
+*
+* @module @stdlib/fft/base/fftpack/sinti
+*
+* @example
+* var sinti = require( '@stdlib/fft/base/fftpack/sinti' );
+*
+* // TODO
+*/
+
+// MODULES //
+
+var main = require( './main.js' );
+
+
+// EXPORTS //
+
+module.exports = main;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinti/lib/main.js b/lib/node_modules/@stdlib/fft/base/fftpack/sinti/lib/main.js
new file mode 100644
index 000000000000..3162039ff322
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/sinti/lib/main.js
@@ -0,0 +1,105 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*
+* ## Notice
+*
+* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/master/fftpack.c}. The implementation follows the original, but has been modified for JavaScript.
+*
+* ```text
+* Copyright (c) 2004 the University Corporation for Atmospheric
+* Research ("UCAR"). All rights reserved. Developed by NCAR's
+* Computational and Information Systems Laboratory, UCAR,
+* www.cisl.ucar.edu.
+*
+* Redistribution and use of the Software in source and binary forms,
+* with or without modification, is permitted provided that the
+* following conditions are met:
+*
+* - Neither the names of NCAR's Computational and Information Systems
+* Laboratory, the University Corporation for Atmospheric Research,
+* nor the names of its sponsors or contributors may be used to
+* endorse or promote products derived from this Software without
+* specific prior written permission.
+*
+* - Redistributions of source code must retain the above copyright
+* notices, this list of conditions, and the disclaimer below.
+*
+* - Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions, and the disclaimer below in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+* SOFTWARE.
+* ```
+*/
+
+'use strict';
+
+// MODULES //
+
+var sin = require( '@stdlib/math/base/special/sin' );
+var PI = require( '@stdlib/constants/float64/pi' );
+var rffti = require( '@stdlib/fft/base/fftpack/rffti' );
+
+
+// MAIN //
+
+/**
+* Initializes the sine transform.
+*
+* @private
+* @param {number} n - sequence length
+* @param {Float64Array} wsave - working array
+* @param {number} wptr - starting index for `wsave`
+* @returns {void}
+*/
+function sinti( n, wsave, wptr ) { // FIXME: refactor
+ var np1;
+ var ns2;
+ var dt;
+ var k;
+
+ // Parameter adjustments
+ wptr -= 1;
+
+ // Function Body
+ if ( n <= 1 ) {
+ return;
+ }
+ ns2 = n / 2;
+ np1 = n + 1;
+ dt = PI / np1;
+
+ for ( k = 1; k <= ns2; k++ ) {
+ wsave[ wptr + k ] = sin( k * dt ) * 2.0;
+ }
+ rffti( np1, wsave, wptr + ns2 + 1 );
+}
+
+
+// EXPORTS //
+
+module.exports = sinti;
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinti/package.json b/lib/node_modules/@stdlib/fft/base/fftpack/sinti/package.json
new file mode 100644
index 000000000000..78b70bdb84f0
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/sinti/package.json
@@ -0,0 +1,56 @@
+{
+ "name": "@stdlib/fft/base/fftpack/sinti",
+ "version": "0.0.0",
+ "description": "TODO: description.",
+ "license": "Apache-2.0",
+ "author": {
+ "name": "The Stdlib Authors",
+ "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
+ },
+ "contributors": [
+ {
+ "name": "The Stdlib Authors",
+ "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
+ }
+ ],
+ "main": "./lib",
+ "directories": {
+ "benchmark": "./benchmark",
+ "doc": "./docs",
+ "example": "./examples",
+ "lib": "./lib",
+ "test": "./test"
+ },
+ "types": "./docs/types",
+ "scripts": {},
+ "homepage": "https://github.com/stdlib-js/stdlib",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/stdlib-js/stdlib.git"
+ },
+ "bugs": {
+ "url": "https://github.com/stdlib-js/stdlib/issues"
+ },
+ "dependencies": {},
+ "devDependencies": {},
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "keywords": [
+ "stdlib",
+ "{{TODO:keywords}}"
+ ],
+ "__stdlib__": {}
+}
diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/test/test.rfft.js b/lib/node_modules/@stdlib/fft/base/fftpack/test/test.rfft.js
new file mode 100644
index 000000000000..02b2ff99e4e1
--- /dev/null
+++ b/lib/node_modules/@stdlib/fft/base/fftpack/test/test.rfft.js
@@ -0,0 +1,190 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+'use strict';
+
+// MODULES //
+
+var tape = require( 'tape' );
+var Float64Array = require( '@stdlib/array/float64' );
+var SQRT2 = require( '@stdlib/constants/float64/sqrt-two' );
+var TWO_PI = require( '@stdlib/constants/float64/two-pi' );
+var sin = require( '@stdlib/math/base/special/sin' );
+var cos = require( '@stdlib/math/base/special/cos' );
+var abs = require( '@stdlib/math/base/special/abs' );
+var max = require( '@stdlib/math/base/special/max' );
+var pow = require( '@stdlib/math/base/special/pow' );
+var floor = require( '@stdlib/math/base/special/floor' );
+var rffti = require( '@stdlib/fft/base/fftpack/rffti' );
+var rfftf = require( '@stdlib/fft/base/fftpack/rfftf' );
+var rfftb = require( '@stdlib/fft/base/fftpack/rfftb' );
+
+
+// VARIABLES //
+
+// var nd = [ 120, 91, 54, 49, 32, 28, 24, 8, 4, 3, 2 ];
+var nd = [ 2 ];
+
+
+// TESTS //
+
+tape( 'main export is a function', function test( t ) {
+ t.ok( true, __filename );
+ t.strictEqual( typeof rffti, 'function', 'main export is a function' );
+ t.end();
+});
+
+tape( 'the function initializes FFT working arrays', function test( t ) { // eslint-disable-line max-statements
+ var rftfb;
+ var modn;
+ var rftf;
+ var rftb;
+ var sum1;
+ var sum2;
+ var arg1;
+ var sum;
+ var arg;
+ var np1;
+ var nm1;
+ var ns2;
+ var tol;
+ var r2;
+ var r3;
+ var r1;
+ var nz;
+ var xh;
+ var dt;
+ var cf;
+ var n;
+ var j;
+ var x;
+ var y;
+ var w;
+ var k;
+ var i;
+
+ for ( nz = 1; nz <= nd.length; nz++ ) {
+ n = nd[ nz - 1 ];
+
+ x = new Float64Array( n );
+ y = new Float64Array( n );
+ xh = new Float64Array( n );
+ w = new Float64Array( (n*2)+15 );
+
+ modn = n % 2;
+ np1 = n + 1;
+ nm1 = n - 1;
+
+ for ( j = 1; j <= np1; j++ ) {
+ x[ j - 1 ] = sin( j * SQRT2 );
+ y[ j - 1 ] = x[ j - 1 ];
+ xh[ j - 1 ] = x[ j - 1 ];
+ }
+
+ // TEST SUBROUTINES RFFTI,RFFTF AND RFFTB:
+ rffti( n, w, 1, 0 );
+ dt = TWO_PI / n;
+ ns2 = floor( ( n + 1 ) / 2 );
+ if ( ns2 > 1 ) {
+ for ( k = 2; k <= ns2; k++ ) {
+ sum1 = 0.0;
+ sum2 = 0.0;
+ arg = ( k - 1 ) * dt;
+ for ( i = 1; i <= n; i++ ) {
+ arg1 = ( i - 1 ) * arg;
+ sum1 += x[ i - 1 ] * cos( arg1 );
+ sum2 += x[ i - 1 ] * sin( arg1 );
+ }
+ y[ ( k << 1 ) - 3 ] = sum1;
+ y[ ( k << 1 ) - 2 ] = -sum2;
+ }
+ }
+ sum1 = 0.0;
+ sum2 = 0.0;
+ for ( i = 1; i <= nm1; i += 2 ) {
+ sum1 += x[ i - 1 ];
+ sum2 += x[ i ];
+ }
+ if ( modn === 1 ) {
+ sum1 += x[ n - 1 ];
+ }
+ y[ 0 ] = sum1 + sum2;
+ if ( modn === 0 ) {
+ y[ n - 1 ] = sum1 - sum2;
+ }
+ rfftf( n, x, 0, w, 0 );
+ rftf = 0.0;
+ for ( i = 1; i <= n; i++ ) {
+ // Computing MAX:
+ r2 = rftf;
+ r1 = x[ i - 1 ] - y[ i - 1 ];
+ r3 = abs( r1 );
+ rftf = max( r2, r3 );
+ x[ i - 1 ] = xh[ i - 1 ];
+ }
+ rftf /= n;
+
+ for ( i = 1; i <= n; i++ ) {
+ sum = x[ 0 ] * 0.5;
+ arg = ( i - 1 ) * dt;
+ if ( ns2 > 1 ) {
+ for ( k = 2; k <= ns2; k++ ) {
+ arg1 = ( k - 1 ) * arg;
+ sum += ( x[ ( k << 1 ) - 3 ] * cos( arg1 ) ) - ( x[ ( k << 1 ) - 2 ] * sin( arg1 ) ); // eslint-disable-line max-len
+ }
+ }
+ if ( modn === 0 ) {
+ sum += pow( -1, i - 1 ) * 0.5 * x[ n - 1 ];
+ }
+ y[ i - 1 ] = 2 * sum;
+ }
+
+ rfftb( n, x, 0, w, 0 );
+ rftb = 0.0;
+ for ( i = 1; i <= n; i++ ) {
+ // Computing MAX:
+ r2 = rftb;
+ r1 = x[ i - 1 ] - y[ i - 1 ];
+ r3 = abs( r1 );
+ rftb = max( r2, r3 );
+ x[ i - 1 ] = xh[ i - 1 ];
+ y[ i - 1 ] = xh[ i - 1 ];
+ }
+
+ rfftb( n, y, 0, w, 0 );
+ rfftf( n, y, 0, w, 0 );
+ cf = 1.0 / n;
+ rftfb = 0.0;
+ for ( i = 1; i <= n; i++ ) {
+ // Computing MAX:
+ r2 = rftfb;
+ r1 = ( cf * y[ i - 1 ] ) - x[ i - 1 ];
+ r3 = abs( r1 );
+ rftfb = max( r2, r3 );
+ }
+ console.log( x );
+ console.log( y );
+
+ tol = 1e-3;
+ t.ok( rftf <= tol, 'forward transform error: ' + rftf + ' (expected <= ' + tol + ')' );
+ t.ok( rftb <= tol, 'backward transform error: ' + rftb + ' (expected <= ' + tol + ')' );
+ t.ok( rftfb <= tol, 'forward-backward transform error: ' + rftfb + ' (expected <= ' + tol + ')' );
+ }
+
+ t.end();
+});