From 87deda651b6846f9642d2471866ed8bd6b356602 Mon Sep 17 00:00:00 2001 From: Ujjwal Verma Date: Wed, 30 Sep 2026 01:11:19 +0530 Subject: [PATCH 1/2] refactor!: update `lapack/base/dlassq` to use separate output arrays BREAKING CHANGE: use single-element arrays for `scale` and `sumsq` To migrate, users should provide `scale` and `sumsq` as single-element `Float64Array`s containing the input values. The routine overwrites them with the updated scaling factor and sum of squares and no longer returns an output array. For the `ndarray` method, replace `scale, sumsq, out, strideOut, offsetOut` with `scale, offsetScale, sumsq, offsetSumsq`. --- .../@stdlib/lapack/base/dlassq/README.md | 54 +-- .../lapack/base/dlassq/benchmark/benchmark.js | 15 +- .../dlassq/benchmark/benchmark.ndarray.js | 14 +- .../@stdlib/lapack/base/dlassq/docs/repl.txt | 65 ++-- .../lapack/base/dlassq/docs/types/index.d.ts | 57 ++-- .../lapack/base/dlassq/docs/types/test.ts | 323 +++++++++--------- .../lapack/base/dlassq/examples/index.js | 9 +- .../@stdlib/lapack/base/dlassq/lib/base.js | 92 ++--- .../@stdlib/lapack/base/dlassq/lib/dlassq.js | 19 +- .../@stdlib/lapack/base/dlassq/lib/index.js | 15 +- .../@stdlib/lapack/base/dlassq/lib/ndarray.js | 23 +- .../lapack/base/dlassq/test/test.dlassq.js | 179 ++++++---- .../lapack/base/dlassq/test/test.ndarray.js | 154 +++++---- .../@stdlib/lapack/base/docs/types/index.d.ts | 21 +- 14 files changed, 574 insertions(+), 466 deletions(-) diff --git a/lib/node_modules/@stdlib/lapack/base/dlassq/README.md b/lib/node_modules/@stdlib/lapack/base/dlassq/README.md index dc610bce913e..778f2bd6bc07 100644 --- a/lib/node_modules/@stdlib/lapack/base/dlassq/README.md +++ b/lib/node_modules/@stdlib/lapack/base/dlassq/README.md @@ -61,9 +61,12 @@ Returns an updated sum of squares represented in scaled form. var Float64Array = require( '@stdlib/array/float64' ); var X = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); +var scale = new Float64Array( [ 1.0 ] ); +var sumsq = new Float64Array( [ 0.0 ] ); -var out = dlassq( 4, X, 1, 1.0, 0.0 ); -// returns [ 1.0, 30.0 ] +dlassq( 4, X, 1, scale, sumsq ); +// scale => [ 1.0 ] +// sumsq => [ 30.0 ] ``` The function has the following parameters: @@ -71,8 +74,8 @@ The function has the following parameters: - **N**: number of indexed elements. - **X**: input [`Float64Array`][mdn-float64array]. - **strideX**: stride length for `X`. -- **scale**: scaling factor. -- **sumsq**: basic sum of squares from which output is factored out. +- **scale**: [`Float64Array`][mdn-float64array] containing a single element which specifies the scaling factor and is overwritten by the updated scaling factor. +- **sumsq**: [`Float64Array`][mdn-float64array] containing a single element which specifies the basic sum of squares from which output is factored out and is overwritten by the updated sum of squares. Note that indexing is relative to the first index. To introduce an offset, use [`typed array`][mdn-typed-array] views. @@ -87,14 +90,17 @@ var X0 = new Float64Array( [ 0.0, 1.0, 2.0, 3.0, 4.0 ] ); // Create an offset view: var X1 = new Float64Array( X0.buffer, X0.BYTES_PER_ELEMENT*1 ); // start at 2nd element +// Create single-element arrays for the scaling factor and the sum of squares: +var scale = new Float64Array( [ 1.0 ] ); +var sumsq = new Float64Array( [ 0.0 ] ); + // Compute the sum of squares: -var out = dlassq( X1.length, X1, 1, 1.0, 0.0 ); -// returns [ 1.0, 30.0 ] +dlassq( X1.length, X1, 1, scale, sumsq ); +// scale => [ 1.0 ] +// sumsq => [ 30.0 ] ``` -The returned [`Float64Array`][mdn-float64array] contains an updated scale factor and an updated sum of squares, respectively. - -#### dlassq.ndarray( N, X, sx, ox, scale, sumsq, out, so, oo ) +#### dlassq.ndarray( N, X, sx, ox, scale, offsetScale, sumsq, offsetSumsq ) Returns an updated sum of squares represented in scaled form using alternative indexing semantics. @@ -102,18 +108,19 @@ Returns an updated sum of squares represented in scaled form using alternative i var Float64Array = require( '@stdlib/array/float64' ); var X = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); -var out = new Float64Array( [ 0.0, 0.0 ] ); +var scale = new Float64Array( [ 1.0 ] ); +var sumsq = new Float64Array( [ 0.0 ] ); -dlassq.ndarray( 4, X, 1, 0, 1.0, 0.0, out, 1, 0 ); -// out => [ 1.0, 30.0 ] +dlassq.ndarray( 4, X, 1, 0, scale, 0, sumsq, 0 ); +// scale => [ 1.0 ] +// sumsq => [ 30.0 ] ``` The function has the following additional parameters: - **ox**: starting index for `X`. -- **out**: output [`Float64Array`][mdn-float64array]. -- **so**: stride length for `out`. -- **oo**: starting index for `out`. +- **offsetScale**: index of the element in `scale`. +- **offsetSumsq**: index of the element in `sumsq`. While [`typed array`][mdn-typed-array] views mandate a view offset based on the underlying buffer, the offset parameters support indexing semantics based on starting indices. For example, @@ -121,10 +128,12 @@ While [`typed array`][mdn-typed-array] views mandate a view offset based on the var Float64Array = require( '@stdlib/array/float64' ); var X = new Float64Array( [ 1.0, 0.0, 2.0, 0.0, 3.0, 0.0, 4.0 ] ); -var out = new Float64Array( [ 0.0, 0.0, 999.9, 0.0, 999.9 ] ); +var scale = new Float64Array( [ 0.0, 1.0 ] ); +var sumsq = new Float64Array( [ 0.0, 0.0, 0.0 ] ); -dlassq.ndarray( 4, X, 2, 0, 1.0, 0.0, out, 2, 1 ); -// out => [ 0.0, 1.0, 999.9, 30.0, 999.9 ] +dlassq.ndarray( 4, X, 2, 0, scale, 1, sumsq, 2 ); +// scale => [ 0.0, 1.0 ] +// sumsq => [ 0.0, 0.0, 30.0 ] ``` @@ -149,6 +158,7 @@ dlassq.ndarray( 4, X, 2, 0, 1.0, 0.0, out, 2, 1 ); ```javascript var discreteUniform = require( '@stdlib/random/array/discrete-uniform' ); +var Float64Array = require( '@stdlib/array/float64' ); var dlassq = require( '@stdlib/lapack/base/dlassq' ); var X = discreteUniform( 10, -10, 10, { @@ -156,8 +166,12 @@ var X = discreteUniform( 10, -10, 10, { }); console.log( X ); -var out = dlassq( X.length, X, 1, 1.0, 0.0 ); -console.log( out ); +var scale = new Float64Array( [ 1.0 ] ); +var sumsq = new Float64Array( [ 0.0 ] ); + +dlassq( X.length, X, 1, scale, sumsq ); +console.log( scale ); +console.log( sumsq ); ``` diff --git a/lib/node_modules/@stdlib/lapack/base/dlassq/benchmark/benchmark.js b/lib/node_modules/@stdlib/lapack/base/dlassq/benchmark/benchmark.js index 4a93340cd76a..ae555baf4bdc 100644 --- a/lib/node_modules/@stdlib/lapack/base/dlassq/benchmark/benchmark.js +++ b/lib/node_modules/@stdlib/lapack/base/dlassq/benchmark/benchmark.js @@ -24,6 +24,7 @@ var bench = require( '@stdlib/bench' ); var uniform = require( '@stdlib/random/array/uniform' ); var isnan = require( '@stdlib/math/base/assert/is-nan' ); var pow = require( '@stdlib/math/base/special/pow' ); +var Float64Array = require( '@stdlib/array/float64' ); var format = require( '@stdlib/string/format' ); var pkg = require( './../package.json' ).name; var dlassq = require( './../lib/dlassq.js' ); @@ -56,18 +57,24 @@ function createBenchmark( len ) { * @param {Benchmark} b - benchmark instance */ function benchmark( b ) { - var out; + var scale; + var sumsq; var i; + scale = new Float64Array( 1 ); + sumsq = new Float64Array( 1 ); + b.tic(); for ( i = 0; i < b.iterations; i++ ) { - out = dlassq( x.length, x, 1, 1.0, 0.0 ); - if ( isnan( out[ 0 ] ) ) { + scale[ 0 ] = 1.0; + sumsq[ 0 ] = 0.0; + dlassq( x.length, x, 1, scale, sumsq ); + if ( isnan( scale[ 0 ] ) ) { b.fail( 'should not return NaN' ); } } b.toc(); - if ( isnan( out[ 1 ] ) ) { + if ( isnan( sumsq[ 0 ] ) ) { b.fail( 'should not return NaN' ); } b.pass( 'benchmark finished' ); diff --git a/lib/node_modules/@stdlib/lapack/base/dlassq/benchmark/benchmark.ndarray.js b/lib/node_modules/@stdlib/lapack/base/dlassq/benchmark/benchmark.ndarray.js index 2901250b4cee..bf6d8053e10f 100644 --- a/lib/node_modules/@stdlib/lapack/base/dlassq/benchmark/benchmark.ndarray.js +++ b/lib/node_modules/@stdlib/lapack/base/dlassq/benchmark/benchmark.ndarray.js @@ -57,20 +57,24 @@ function createBenchmark( len ) { * @param {Benchmark} b - benchmark instance */ function benchmark( b ) { - var out; + var scale; + var sumsq; var i; - out = new Float64Array( 2 ); + scale = new Float64Array( 1 ); + sumsq = new Float64Array( 1 ); b.tic(); for ( i = 0; i < b.iterations; i++ ) { - out = dlassq( x.length, x, 1, 0, 1.0, 0.0, out, 1, 0 ); - if ( isnan( out[ 0 ] ) ) { + scale[ 0 ] = 1.0; + sumsq[ 0 ] = 0.0; + dlassq( x.length, x, 1, 0, scale, 0, sumsq, 0 ); + if ( isnan( scale[ 0 ] ) ) { b.fail( 'should not return NaN' ); } } b.toc(); - if ( isnan( out[ 1 ] ) ) { + if ( isnan( sumsq[ 0 ] ) ) { b.fail( 'should not return NaN' ); } b.pass( 'benchmark finished' ); diff --git a/lib/node_modules/@stdlib/lapack/base/dlassq/docs/repl.txt b/lib/node_modules/@stdlib/lapack/base/dlassq/docs/repl.txt index 19044a7e7e33..3b9db458e926 100644 --- a/lib/node_modules/@stdlib/lapack/base/dlassq/docs/repl.txt +++ b/lib/node_modules/@stdlib/lapack/base/dlassq/docs/repl.txt @@ -21,26 +21,28 @@ strideX: integer Stride length for `X`. - scale: number - Scaling factor. + scale: Float64Array + Array containing a single element which specifies the scaling factor + and is overwritten by the updated scaling factor. - sumsq: number - Basic sum of squares from which output is factored out. - - Returns - ------- - out: Float64Array - Two-element array containing the updated scale factor and updated sum of - squares, respectively. + sumsq: Float64Array + Array containing a single element which specifies the basic sum of + squares from which output is factored out and is overwritten by the + updated sum of squares. Examples -------- > var X = new {{alias:@stdlib/array/float64}}( [ 1.0, 2.0, 3.0, 4.0 ] ); - > {{alias}}( 4, X, 1, 1.0, 0.0 ) - [ 1.0, 30.0 ] + > var scale = new {{alias:@stdlib/array/float64}}( [ 1.0 ] ); + > var sumsq = new {{alias:@stdlib/array/float64}}( [ 0.0 ] ); + > {{alias}}( 4, X, 1, scale, sumsq ); + > scale + [ 1.0 ] + > sumsq + [ 30.0 ] -{{alias}}.ndarray( N, X, sx, ox, scale, sumsq, out, so, oo ) +{{alias}}.ndarray( N, X, sx, ox, scale, offsetScale, sumsq, offsetSumsq ) Returns an updated sum of squares represented in scaled form using alternative indexing semantics. @@ -67,32 +69,31 @@ ox: integer Starting index for `X`. - scale: number - Scaling factor. - - sumsq: number - Basic sum of squares from which output is factored out. - - out: Float64Array - Output array. + scale: Float64Array + Array containing an element which specifies the scaling factor and is + overwritten by the updated scaling factor. - so: integer - Stride length for `out`. + offsetScale: integer + Index of the element in `scale`. - oo: integer - Starting index for `out`. + sumsq: Float64Array + Array containing an element which specifies the basic sum of squares + from which output is factored out and is overwritten by the updated sum + of squares. - Returns - ------- - out: Float64Array - Output array. + offsetSumsq: integer + Index of the element in `sumsq`. Examples -------- > var X = new {{alias:@stdlib/array/float64}}( [ 0.0, 1.0, 2.0, 3.0, 4.0 ] ); - > var out = new {{alias:@stdlib/array/float64}}( [ 0.0, 0.0, 0.0 ] ); - > {{alias}}.ndarray( 4, X, 1, 1, 1.0, 0.0, out, 1, 1 ) - [ 0.0, 1.0, 30.0 ] + > var scale = new {{alias:@stdlib/array/float64}}( [ 0.0, 1.0 ] ); + > var sumsq = new {{alias:@stdlib/array/float64}}( [ 0.0, 0.0, 0.0 ] ); + > {{alias}}.ndarray( 4, X, 1, 1, scale, 1, sumsq, 2 ); + > scale + [ 0.0, 1.0 ] + > sumsq + [ 0.0, 0.0, 30.0 ] See Also -------- diff --git a/lib/node_modules/@stdlib/lapack/base/dlassq/docs/types/index.d.ts b/lib/node_modules/@stdlib/lapack/base/dlassq/docs/types/index.d.ts index 3fe5ea8b20d7..dc87a6a2becf 100644 --- a/lib/node_modules/@stdlib/lapack/base/dlassq/docs/types/index.d.ts +++ b/lib/node_modules/@stdlib/lapack/base/dlassq/docs/types/index.d.ts @@ -30,19 +30,22 @@ interface Routine { * @param N - number of indexed elements * @param X - input array * @param strideX - stride length for `X` - * @param scale - scaling factor - * @param sumsq - basic sum of squares from which output is factored out - * @returns output array + * @param scale - array containing a single element which specifies the scaling factor and is overwritten by the updated scaling factor + * @param sumsq - array containing a single element which specifies the basic sum of squares from which output is factored out and is overwritten by the updated sum of squares + * @returns void * * @example * var Float64Array = require( '@stdlib/array/float64' ); * * var X = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); + * var scale = new Float64Array( [ 1.0 ] ); + * var sumsq = new Float64Array( [ 0.0 ] ); * - * var out = dlassq( 4, X, 1, 1.0, 0.0 ); - * // returns [ 1.0, 30.0 ] + * dlassq( 4, X, 1, scale, sumsq ); + * // scale => [ 1.0 ] + * // sumsq => [ 30.0 ] */ - ( N: number, X: Float64Array, strideX: number, scale: number, sumsq: number ): Float64Array; + ( N: number, X: Float64Array, strideX: number, scale: Float64Array, sumsq: Float64Array ): void; /** * Returns an updated sum of squares represented in scaled form using alternative indexing semantics. @@ -51,23 +54,24 @@ interface Routine { * @param X - input array * @param strideX - stride length for `X` * @param offsetX - starting index for `X` - * @param scale - scaling factor - * @param sumsq - basic sum of squares from which output is factored out - * @param out - output array - * @param strideOut - stride length for `out` - * @param offsetOut - starting index for `out` - * @returns output array + * @param scale - array containing an element which specifies the scaling factor and is overwritten by the updated scaling factor + * @param offsetScale - index of the element in `scale` + * @param sumsq - array containing an element which specifies the basic sum of squares from which output is factored out and is overwritten by the updated sum of squares + * @param offsetSumsq - index of the element in `sumsq` + * @returns void * * @example * var Float64Array = require( '@stdlib/array/float64' ); * * var X = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); - * var out = new Float64Array( [ 0.0, 0.0 ] ); + * var scale = new Float64Array( [ 1.0 ] ); + * var sumsq = new Float64Array( [ 0.0 ] ); * - * dlassq.ndarray( 4, X, 1, 0, 1.0, 0.0, out, 1, 0 ); - * // out => [ 1.0, 30.0 ] + * dlassq.ndarray( 4, X, 1, 0, scale, 0, sumsq, 0 ); + * // scale => [ 1.0 ] + * // sumsq => [ 30.0 ] */ - ndarray( N: number, X: Float64Array, strideX: number, offsetX: number, scale: number, sumsq: number, out: Float64Array, strideOut: number, offsetOut: number ): Float64Array; + ndarray( N: number, X: Float64Array, strideX: number, offsetX: number, scale: Float64Array, offsetScale: number, sumsq: Float64Array, offsetSumsq: number ): void; } /** @@ -76,26 +80,31 @@ interface Routine { * @param N - number of indexed elements * @param X - input array * @param strideX - stride length for `X` -* @param scale - scaling factor -* @param sumsq - basic sum of squares from which output is factored out -* @returns output array +* @param scale - array containing a single element which specifies the scaling factor and is overwritten by the updated scaling factor +* @param sumsq - array containing a single element which specifies the basic sum of squares from which output is factored out and is overwritten by the updated sum of squares +* @returns void * * @example * var Float64Array = require( '@stdlib/array/float64' ); * * var X = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); +* var scale = new Float64Array( [ 1.0 ] ); +* var sumsq = new Float64Array( [ 0.0 ] ); * -* var out = dlassq( 4, X, 1, 1.0, 0.0 ); -* // returns [ 1.0, 30.0 ] +* dlassq( 4, X, 1, scale, sumsq ); +* // scale => [ 1.0 ] +* // sumsq => [ 30.0 ] * * @example * var Float64Array = require( '@stdlib/array/float64' ); * * var X = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); -* var out = new Float64Array( [ 0.0, 0.0 ] ); +* var scale = new Float64Array( [ 1.0 ] ); +* var sumsq = new Float64Array( [ 0.0 ] ); * -* dlassq.ndarray( 4, X, 1, 0, 1.0, 0.0, out, 1, 0 ); -* // out => [ 1.0, 30.0 ] +* dlassq.ndarray( 4, X, 1, 0, scale, 0, sumsq, 0 ); +* // scale => [ 1.0 ] +* // sumsq => [ 30.0 ] */ declare var dlassq: Routine; diff --git a/lib/node_modules/@stdlib/lapack/base/dlassq/docs/types/test.ts b/lib/node_modules/@stdlib/lapack/base/dlassq/docs/types/test.ts index a17b7a55d7e2..439b75203206 100644 --- a/lib/node_modules/@stdlib/lapack/base/dlassq/docs/types/test.ts +++ b/lib/node_modules/@stdlib/lapack/base/dlassq/docs/types/test.ts @@ -21,250 +21,259 @@ import dlassq = require( './index' ); // TESTS // -// The function returns a Float64Array... +// The function returns void... { const X = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); + const scale = new Float64Array( [ 1.0 ] ); + const sumsq = new Float64Array( [ 0.0 ] ); - dlassq( 4, X, 1, 1.0, 0.0 ); // $ExpectType Float64Array + dlassq( 4, X, 1, scale, sumsq ); // $ExpectType void } // The compiler throws an error if the function is provided a first argument which is not a number... { const X = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); - - dlassq( '5', X, 1, 1.0, 0.0 ); // $ExpectError - dlassq( true, X, 1, 1.0, 0.0 ); // $ExpectError - dlassq( false, X, 1, 1.0, 0.0 ); // $ExpectError - dlassq( null, X, 1, 1.0, 0.0 ); // $ExpectError - dlassq( void 0, X, 1, 1.0, 0.0 ); // $ExpectError - dlassq( [], X, 1, 1.0, 0.0 ); // $ExpectError - dlassq( {}, X, 1, 1.0, 0.0 ); // $ExpectError - dlassq( ( x: number ): number => x, X, 1, 1.0, 0.0 ); // $ExpectError + const scale = new Float64Array( [ 1.0 ] ); + const sumsq = new Float64Array( [ 0.0 ] ); + + dlassq( '5', X, 1, scale, sumsq ); // $ExpectError + dlassq( true, X, 1, scale, sumsq ); // $ExpectError + dlassq( false, X, 1, scale, sumsq ); // $ExpectError + dlassq( null, X, 1, scale, sumsq ); // $ExpectError + dlassq( void 0, X, 1, scale, sumsq ); // $ExpectError + dlassq( [], X, 1, scale, sumsq ); // $ExpectError + dlassq( {}, X, 1, scale, sumsq ); // $ExpectError + dlassq( ( x: number ): number => x, X, 1, scale, sumsq ); // $ExpectError } // The compiler throws an error if the function is provided a second argument which is not a Float64Array... { - dlassq( 4, '5', 1, 1.0, 0.0 ); // $ExpectError - dlassq( 4, 5, 1, 1.0, 0.0 ); // $ExpectError - dlassq( 4, true, 1, 1.0, 0.0 ); // $ExpectError - dlassq( 4, false, 1, 1.0, 0.0 ); // $ExpectError - dlassq( 4, null, 1, 1.0, 0.0 ); // $ExpectError - dlassq( 4, void 0, 1, 1.0, 0.0 ); // $ExpectError - dlassq( 4, [], 1, 1.0, 0.0 ); // $ExpectError - dlassq( 4, {}, 1, 1.0, 0.0 ); // $ExpectError - dlassq( 4, ( x: number ): number => x, 1, 1.0, 0.0 ); // $ExpectError + const scale = new Float64Array( [ 1.0 ] ); + const sumsq = new Float64Array( [ 0.0 ] ); + + dlassq( 4, '5', 1, scale, sumsq ); // $ExpectError + dlassq( 4, 5, 1, scale, sumsq ); // $ExpectError + dlassq( 4, true, 1, scale, sumsq ); // $ExpectError + dlassq( 4, false, 1, scale, sumsq ); // $ExpectError + dlassq( 4, null, 1, scale, sumsq ); // $ExpectError + dlassq( 4, void 0, 1, scale, sumsq ); // $ExpectError + dlassq( 4, [], 1, scale, sumsq ); // $ExpectError + dlassq( 4, {}, 1, scale, sumsq ); // $ExpectError + dlassq( 4, ( x: number ): number => x, 1, scale, sumsq ); // $ExpectError } // The compiler throws an error if the function is provided a third argument which is not a number... { const X = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); - - dlassq( 4, X, '5', 1.0, 0.0 ); // $ExpectError - dlassq( 4, X, true, 1.0, 0.0 ); // $ExpectError - dlassq( 4, X, false, 1.0, 0.0 ); // $ExpectError - dlassq( 4, X, null, 1.0, 0.0 ); // $ExpectError - dlassq( 4, X, void 0, 1.0, 0.0 ); // $ExpectError - dlassq( 4, X, [], 1.0, 0.0 ); // $ExpectError - dlassq( 4, X, {}, 1.0, 0.0 ); // $ExpectError - dlassq( 4, X, ( x: number ): number => x, 1.0, 0.0 ); // $ExpectError + const scale = new Float64Array( [ 1.0 ] ); + const sumsq = new Float64Array( [ 0.0 ] ); + + dlassq( 4, X, '5', scale, sumsq ); // $ExpectError + dlassq( 4, X, true, scale, sumsq ); // $ExpectError + dlassq( 4, X, false, scale, sumsq ); // $ExpectError + dlassq( 4, X, null, scale, sumsq ); // $ExpectError + dlassq( 4, X, void 0, scale, sumsq ); // $ExpectError + dlassq( 4, X, [], scale, sumsq ); // $ExpectError + dlassq( 4, X, {}, scale, sumsq ); // $ExpectError + dlassq( 4, X, ( x: number ): number => x, scale, sumsq ); // $ExpectError } -// The compiler throws an error if the function is provided a fourth argument which is not a number... +// The compiler throws an error if the function is provided a fourth argument which is not a Float64Array... { const X = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); - - dlassq( 4, X, 1, '5', 0.0 ); // $ExpectError - dlassq( 4, X, 1, true, 0.0 ); // $ExpectError - dlassq( 4, X, 1, false, 0.0 ); // $ExpectError - dlassq( 4, X, 1, null, 0.0 ); // $ExpectError - dlassq( 4, X, 1, void 0, 0.0 ); // $ExpectError - dlassq( 4, X, 1, [], 0.0 ); // $ExpectError - dlassq( 4, X, 1, {}, 0.0 ); // $ExpectError - dlassq( 4, X, 1, ( x: number ): number => x, 0.0 ); // $ExpectError + const sumsq = new Float64Array( [ 0.0 ] ); + + dlassq( 4, X, 1, '5', sumsq ); // $ExpectError + dlassq( 4, X, 1, 5, sumsq ); // $ExpectError + dlassq( 4, X, 1, true, sumsq ); // $ExpectError + dlassq( 4, X, 1, false, sumsq ); // $ExpectError + dlassq( 4, X, 1, null, sumsq ); // $ExpectError + dlassq( 4, X, 1, void 0, sumsq ); // $ExpectError + dlassq( 4, X, 1, [], sumsq ); // $ExpectError + dlassq( 4, X, 1, {}, sumsq ); // $ExpectError + dlassq( 4, X, 1, ( x: number ): number => x, sumsq ); // $ExpectError } -// The compiler throws an error if the function is provided a fifth argument which is not a number... +// The compiler throws an error if the function is provided a fifth argument which is not a Float64Array... { const X = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); - - dlassq( 4, X, 1, 1.0, '5' ); // $ExpectError - dlassq( 4, X, 1, 1.0, true ); // $ExpectError - dlassq( 4, X, 1, 1.0, false ); // $ExpectError - dlassq( 4, X, 1, 1.0, null ); // $ExpectError - dlassq( 4, X, 1, 1.0, void 0 ); // $ExpectError - dlassq( 4, X, 1, 1.0, [] ); // $ExpectError - dlassq( 4, X, 1, 1.0, {} ); // $ExpectError - dlassq( 4, X, 1, 1.0, ( x: number ): number => x ); // $ExpectError + const scale = new Float64Array( [ 1.0 ] ); + + dlassq( 4, X, 1, scale, '5' ); // $ExpectError + dlassq( 4, X, 1, scale, 5 ); // $ExpectError + dlassq( 4, X, 1, scale, true ); // $ExpectError + dlassq( 4, X, 1, scale, false ); // $ExpectError + dlassq( 4, X, 1, scale, null ); // $ExpectError + dlassq( 4, X, 1, scale, void 0 ); // $ExpectError + dlassq( 4, X, 1, scale, [] ); // $ExpectError + dlassq( 4, X, 1, scale, {} ); // $ExpectError + dlassq( 4, X, 1, scale, ( x: number ): number => x ); // $ExpectError } // The compiler throws an error if the function is provided an unsupported number of arguments... { const X = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); + const scale = new Float64Array( [ 1.0 ] ); + const sumsq = new Float64Array( [ 0.0 ] ); dlassq(); // $ExpectError dlassq( 4 ); // $ExpectError dlassq( 4, X ); // $ExpectError dlassq( 4, X, 1 ); // $ExpectError - dlassq( 4, X, 1, 1.0 ); // $ExpectError - dlassq( 4, X, 1, 1.0, 0.0, 10 ); // $ExpectError + dlassq( 4, X, 1, scale ); // $ExpectError + dlassq( 4, X, 1, scale, sumsq, 10 ); // $ExpectError } -// Attached to main export is an `ndarray` method which returns a Float64Array... +// Attached to main export is an `ndarray` method which returns void... { - const out = new Float64Array( [ 0.0, 0.0 ] ); const X = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); + const scale = new Float64Array( [ 1.0 ] ); + const sumsq = new Float64Array( [ 0.0 ] ); - dlassq.ndarray( 4, X, 1, 0, 1.0, 0.0, out, 1, 0 ); // $ExpectType Float64Array + dlassq.ndarray( 4, X, 1, 0, scale, 0, sumsq, 0 ); // $ExpectType void } // The compiler throws an error if the function is provided a first argument which is not a number... { - const out = new Float64Array( [ 0.0, 0.0 ] ); const X = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); - - dlassq.ndarray( '5', X, 1, 0, 1.0, 0.0, out, 1, 0 ); // $ExpectError - dlassq.ndarray( true, X, 1, 0, 1.0, 0.0, out, 1, 0 ); // $ExpectError - dlassq.ndarray( false, X, 1, 0, 1.0, 0.0, out, 1, 0 ); // $ExpectError - dlassq.ndarray( null, X, 1, 0, 1.0, 0.0, out, 1, 0 ); // $ExpectError - dlassq.ndarray( void 0, X, 1, 0, 1.0, 0.0, out, 1, 0 ); // $ExpectError - dlassq.ndarray( [], X, 1, 0, 1.0, 0.0, out, 1, 0 ); // $ExpectError - dlassq.ndarray( {}, X, 1, 0, 1.0, 0.0, out, 1, 0 ); // $ExpectError - dlassq.ndarray( ( x: number ): number => x, X, 1, 0, 1.0, 0.0, out, 1, 0 ); // $ExpectError + const scale = new Float64Array( [ 1.0 ] ); + const sumsq = new Float64Array( [ 0.0 ] ); + + dlassq.ndarray( '5', X, 1, 0, scale, 0, sumsq, 0 ); // $ExpectError + dlassq.ndarray( true, X, 1, 0, scale, 0, sumsq, 0 ); // $ExpectError + dlassq.ndarray( false, X, 1, 0, scale, 0, sumsq, 0 ); // $ExpectError + dlassq.ndarray( null, X, 1, 0, scale, 0, sumsq, 0 ); // $ExpectError + dlassq.ndarray( void 0, X, 1, 0, scale, 0, sumsq, 0 ); // $ExpectError + dlassq.ndarray( [], X, 1, 0, scale, 0, sumsq, 0 ); // $ExpectError + dlassq.ndarray( {}, X, 1, 0, scale, 0, sumsq, 0 ); // $ExpectError + dlassq.ndarray( ( x: number ): number => x, X, 1, 0, scale, 0, sumsq, 0 ); // $ExpectError } // The compiler throws an error if the function is provided a second argument which is not a Float64Array... { - const out = new Float64Array( [ 0.0, 0.0 ] ); - - dlassq.ndarray( 4, '5', 1, 0, 1.0, 0.0, out, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, 5, 1, 0, 1.0, 0.0, out, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, true, 1, 0, 1.0, 0.0, out, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, false, 1, 0, 1.0, 0.0, out, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, null, 1, 0, 1.0, 0.0, out, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, void 0, 1, 0, 1.0, 0.0, out, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, [], 1, 0, 1.0, 0.0, out, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, {}, 1, 0, 1.0, 0.0, out, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, ( x: number ): number => x, 1, 0, 1.0, 0.0, out, 1, 0 ); // $ExpectError + const scale = new Float64Array( [ 1.0 ] ); + const sumsq = new Float64Array( [ 0.0 ] ); + + dlassq.ndarray( 4, '5', 1, 0, scale, 0, sumsq, 0 ); // $ExpectError + dlassq.ndarray( 4, 5, 1, 0, scale, 0, sumsq, 0 ); // $ExpectError + dlassq.ndarray( 4, true, 1, 0, scale, 0, sumsq, 0 ); // $ExpectError + dlassq.ndarray( 4, false, 1, 0, scale, 0, sumsq, 0 ); // $ExpectError + dlassq.ndarray( 4, null, 1, 0, scale, 0, sumsq, 0 ); // $ExpectError + dlassq.ndarray( 4, void 0, 1, 0, scale, 0, sumsq, 0 ); // $ExpectError + dlassq.ndarray( 4, [], 1, 0, scale, 0, sumsq, 0 ); // $ExpectError + dlassq.ndarray( 4, {}, 1, 0, scale, 0, sumsq, 0 ); // $ExpectError + dlassq.ndarray( 4, ( x: number ): number => x, 1, 0, scale, 0, sumsq, 0 ); // $ExpectError } // The compiler throws an error if the function is provided a third argument which is not a number... { - const out = new Float64Array( [ 0.0, 0.0 ] ); const X = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); - - dlassq.ndarray( 4, X, '5', 0, 1.0, 0.0, out, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, X, true, 0, 1.0, 0.0, out, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, X, false, 0, 1.0, 0.0, out, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, X, null, 0, 1.0, 0.0, out, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, X, void 0, 0, 1.0, 0.0, out, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, X, [], 0, 1.0, 0.0, out, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, X, {}, 0, 1.0, 0.0, out, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, X, ( x: number ): number => x, 0, 1.0, 0.0, out, 1, 0 ); // $ExpectError + const scale = new Float64Array( [ 1.0 ] ); + const sumsq = new Float64Array( [ 0.0 ] ); + + dlassq.ndarray( 4, X, '5', 0, scale, 0, sumsq, 0 ); // $ExpectError + dlassq.ndarray( 4, X, true, 0, scale, 0, sumsq, 0 ); // $ExpectError + dlassq.ndarray( 4, X, false, 0, scale, 0, sumsq, 0 ); // $ExpectError + dlassq.ndarray( 4, X, null, 0, scale, 0, sumsq, 0 ); // $ExpectError + dlassq.ndarray( 4, X, void 0, 0, scale, 0, sumsq, 0 ); // $ExpectError + dlassq.ndarray( 4, X, [], 0, scale, 0, sumsq, 0 ); // $ExpectError + dlassq.ndarray( 4, X, {}, 0, scale, 0, sumsq, 0 ); // $ExpectError + dlassq.ndarray( 4, X, ( x: number ): number => x, 0, scale, 0, sumsq, 0 ); // $ExpectError } // The compiler throws an error if the function is provided a fourth argument which is not a number... { - const out = new Float64Array( [ 0.0, 0.0 ] ); const X = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); - - dlassq.ndarray( 4, X, 1, '5', 1.0, 0.0, out, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, X, 1, true, 1.0, 0.0, out, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, X, 1, false, 1.0, 0.0, out, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, X, 1, null, 1.0, 0.0, out, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, X, 1, void 0, 1.0, 0.0, out, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, X, 1, [], 1.0, 0.0, out, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, X, 1, {}, 1.0, 0.0, out, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, X, 1, ( x: number ): number => x, 1.0, 0.0, out, 1, 0 ); // $ExpectError + const scale = new Float64Array( [ 1.0 ] ); + const sumsq = new Float64Array( [ 0.0 ] ); + + dlassq.ndarray( 4, X, 1, '5', scale, 0, sumsq, 0 ); // $ExpectError + dlassq.ndarray( 4, X, 1, true, scale, 0, sumsq, 0 ); // $ExpectError + dlassq.ndarray( 4, X, 1, false, scale, 0, sumsq, 0 ); // $ExpectError + dlassq.ndarray( 4, X, 1, null, scale, 0, sumsq, 0 ); // $ExpectError + dlassq.ndarray( 4, X, 1, void 0, scale, 0, sumsq, 0 ); // $ExpectError + dlassq.ndarray( 4, X, 1, [], scale, 0, sumsq, 0 ); // $ExpectError + dlassq.ndarray( 4, X, 1, {}, scale, 0, sumsq, 0 ); // $ExpectError + dlassq.ndarray( 4, X, 1, ( x: number ): number => x, scale, 0, sumsq, 0 ); // $ExpectError } -// The compiler throws an error if the function is provided a fifth argument which is not a number... +// The compiler throws an error if the function is provided a fifth argument which is not a Float64Array... { - const out = new Float64Array( [ 0.0, 0.0 ] ); const X = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); - - dlassq.ndarray( 4, X, 1, 0, '5', 0.0, out, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, X, 1, 0, true, 0.0, out, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, X, 1, 0, false, 0.0, out, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, X, 1, 0, null, 0.0, out, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, X, 1, 0, void 0, 0.0, out, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, X, 1, 0, [], 0.0, out, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, X, 1, 0, {}, 0.0, out, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, X, 1, 0, ( x: number ): number => x, 0.0, out, 1, 0 ); // $ExpectError + const sumsq = new Float64Array( [ 0.0 ] ); + + dlassq.ndarray( 4, X, 1, 0, '5', 0, sumsq, 0 ); // $ExpectError + dlassq.ndarray( 4, X, 1, 0, 5, 0, sumsq, 0 ); // $ExpectError + dlassq.ndarray( 4, X, 1, 0, true, 0, sumsq, 0 ); // $ExpectError + dlassq.ndarray( 4, X, 1, 0, false, 0, sumsq, 0 ); // $ExpectError + dlassq.ndarray( 4, X, 1, 0, null, 0, sumsq, 0 ); // $ExpectError + dlassq.ndarray( 4, X, 1, 0, void 0, 0, sumsq, 0 ); // $ExpectError + dlassq.ndarray( 4, X, 1, 0, [], 0, sumsq, 0 ); // $ExpectError + dlassq.ndarray( 4, X, 1, 0, {}, 0, sumsq, 0 ); // $ExpectError + dlassq.ndarray( 4, X, 1, 0, ( x: number ): number => x, 0, sumsq, 0 ); // $ExpectError } // The compiler throws an error if the function is provided a sixth argument which is not a number... { - const out = new Float64Array( [ 0.0, 0.0 ] ); const X = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); - - dlassq.ndarray( 4, X, 1, 0, 1.0, '5', out, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, X, 1, 0, 1.0, true, out, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, X, 1, 0, 1.0, false, out, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, X, 1, 0, 1.0, null, out, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, X, 1, 0, 1.0, void 0, out, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, X, 1, 0, 1.0, [], out, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, X, 1, 0, 1.0, {}, out, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, X, 1, 0, 1.0, ( x: number ): number => x, out, 1, 0 ); // $ExpectError + const scale = new Float64Array( [ 1.0 ] ); + const sumsq = new Float64Array( [ 0.0 ] ); + + dlassq.ndarray( 4, X, 1, 0, scale, '5', sumsq, 0 ); // $ExpectError + dlassq.ndarray( 4, X, 1, 0, scale, true, sumsq, 0 ); // $ExpectError + dlassq.ndarray( 4, X, 1, 0, scale, false, sumsq, 0 ); // $ExpectError + dlassq.ndarray( 4, X, 1, 0, scale, null, sumsq, 0 ); // $ExpectError + dlassq.ndarray( 4, X, 1, 0, scale, void 0, sumsq, 0 ); // $ExpectError + dlassq.ndarray( 4, X, 1, 0, scale, [], sumsq, 0 ); // $ExpectError + dlassq.ndarray( 4, X, 1, 0, scale, {}, sumsq, 0 ); // $ExpectError + dlassq.ndarray( 4, X, 1, 0, scale, ( x: number ): number => x, sumsq, 0 ); // $ExpectError } // The compiler throws an error if the function is provided a seventh argument which is not a Float64Array... { const X = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); - - dlassq.ndarray( 4, X, 1, 0, 1.0, 0.0, '5', 1, 0 ); // $ExpectError - dlassq.ndarray( 4, X, 1, 0, 1.0, 0.0, 5, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, X, 1, 0, 1.0, 0.0, true, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, X, 1, 0, 1.0, 0.0, false, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, X, 1, 0, 1.0, 0.0, null, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, X, 1, 0, 1.0, 0.0, void 0, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, X, 1, 0, 1.0, 0.0, [], 1, 0 ); // $ExpectError - dlassq.ndarray( 4, X, 1, 0, 1.0, 0.0, {}, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, X, 1, 0, 1.0, 0.0, ( x: number ): number => x, 1, 0 ); // $ExpectError + const scale = new Float64Array( [ 1.0 ] ); + + dlassq.ndarray( 4, X, 1, 0, scale, 0, '5', 0 ); // $ExpectError + dlassq.ndarray( 4, X, 1, 0, scale, 0, 5, 0 ); // $ExpectError + dlassq.ndarray( 4, X, 1, 0, scale, 0, true, 0 ); // $ExpectError + dlassq.ndarray( 4, X, 1, 0, scale, 0, false, 0 ); // $ExpectError + dlassq.ndarray( 4, X, 1, 0, scale, 0, null, 0 ); // $ExpectError + dlassq.ndarray( 4, X, 1, 0, scale, 0, void 0, 0 ); // $ExpectError + dlassq.ndarray( 4, X, 1, 0, scale, 0, [], 0 ); // $ExpectError + dlassq.ndarray( 4, X, 1, 0, scale, 0, {}, 0 ); // $ExpectError + dlassq.ndarray( 4, X, 1, 0, scale, 0, ( x: number ): number => x, 0 ); // $ExpectError } // The compiler throws an error if the function is provided an eighth argument which is not a number... { - const out = new Float64Array( [ 0.0, 0.0 ] ); - const X = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); - - dlassq.ndarray( 4, X, 1, 0, 1.0, 0.0, out, '5', 0 ); // $ExpectError - dlassq.ndarray( 4, X, 1, 0, 1.0, 0.0, out, true, 0 ); // $ExpectError - dlassq.ndarray( 4, X, 1, 0, 1.0, 0.0, out, false, 0 ); // $ExpectError - dlassq.ndarray( 4, X, 1, 0, 1.0, 0.0, out, null, 0 ); // $ExpectError - dlassq.ndarray( 4, X, 1, 0, 1.0, 0.0, out, void 0, 0 ); // $ExpectError - dlassq.ndarray( 4, X, 1, 0, 1.0, 0.0, out, [], 0 ); // $ExpectError - dlassq.ndarray( 4, X, 1, 0, 1.0, 0.0, out, {}, 0 ); // $ExpectError - dlassq.ndarray( 4, X, 1, 0, 1.0, 0.0, out, ( x: number ): number => x, 0 ); // $ExpectError -} - -// The compiler throws an error if the function is provided a ninth argument which is not a number... -{ - const out = new Float64Array( [ 0.0, 0.0 ] ); const X = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); - - dlassq.ndarray( 4, X, 1, 0, 1.0, 0.0, out, 1, '5' ); // $ExpectError - dlassq.ndarray( 4, X, 1, 0, 1.0, 0.0, out, 1, true ); // $ExpectError - dlassq.ndarray( 4, X, 1, 0, 1.0, 0.0, out, 1, false ); // $ExpectError - dlassq.ndarray( 4, X, 1, 0, 1.0, 0.0, out, 1, null ); // $ExpectError - dlassq.ndarray( 4, X, 1, 0, 1.0, 0.0, out, 1, void 0 ); // $ExpectError - dlassq.ndarray( 4, X, 1, 0, 1.0, 0.0, out, 1, [] ); // $ExpectError - dlassq.ndarray( 4, X, 1, 0, 1.0, 0.0, out, 1, {} ); // $ExpectError - dlassq.ndarray( 4, X, 1, 0, 1.0, 0.0, out, 1, ( x: number ): number => x ); // $ExpectError + const scale = new Float64Array( [ 1.0 ] ); + const sumsq = new Float64Array( [ 0.0 ] ); + + dlassq.ndarray( 4, X, 1, 0, scale, 0, sumsq, '5' ); // $ExpectError + dlassq.ndarray( 4, X, 1, 0, scale, 0, sumsq, true ); // $ExpectError + dlassq.ndarray( 4, X, 1, 0, scale, 0, sumsq, false ); // $ExpectError + dlassq.ndarray( 4, X, 1, 0, scale, 0, sumsq, null ); // $ExpectError + dlassq.ndarray( 4, X, 1, 0, scale, 0, sumsq, void 0 ); // $ExpectError + dlassq.ndarray( 4, X, 1, 0, scale, 0, sumsq, [] ); // $ExpectError + dlassq.ndarray( 4, X, 1, 0, scale, 0, sumsq, {} ); // $ExpectError + dlassq.ndarray( 4, X, 1, 0, scale, 0, sumsq, ( x: number ): number => x ); // $ExpectError } // The compiler throws an error if the `ndarray` method is provided an unsupported number of arguments... { - const out = new Float64Array( [ 0.0, 0.0 ] ); const X = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); + const scale = new Float64Array( [ 1.0 ] ); + const sumsq = new Float64Array( [ 0.0 ] ); dlassq.ndarray(); // $ExpectError dlassq.ndarray( 4 ); // $ExpectError dlassq.ndarray( 4, X ); // $ExpectError dlassq.ndarray( 4, X, 1 ); // $ExpectError dlassq.ndarray( 4, X, 1, 0 ); // $ExpectError - dlassq.ndarray( 4, X, 1, 0, 1.0 ); // $ExpectError - dlassq.ndarray( 4, X, 1, 0, 1.0, 0.0 ); // $ExpectError - dlassq.ndarray( 4, X, 1, 0, 1.0, 0.0, out ); // $ExpectError - dlassq.ndarray( 4, X, 1, 0, 1.0, 0.0, out, 1 ); // $ExpectError - dlassq.ndarray( 4, X, 1, 0, 1.0, 0.0, out, 1, 0, 10 ); // $ExpectError + dlassq.ndarray( 4, X, 1, 0, scale ); // $ExpectError + dlassq.ndarray( 4, X, 1, 0, scale, 0 ); // $ExpectError + dlassq.ndarray( 4, X, 1, 0, scale, 0, sumsq ); // $ExpectError + dlassq.ndarray( 4, X, 1, 0, scale, 0, sumsq, 0, 10 ); // $ExpectError } diff --git a/lib/node_modules/@stdlib/lapack/base/dlassq/examples/index.js b/lib/node_modules/@stdlib/lapack/base/dlassq/examples/index.js index c5b4ac81ba97..b6d2c02ffee2 100644 --- a/lib/node_modules/@stdlib/lapack/base/dlassq/examples/index.js +++ b/lib/node_modules/@stdlib/lapack/base/dlassq/examples/index.js @@ -19,6 +19,7 @@ 'use strict'; var discreteUniform = require( '@stdlib/random/array/discrete-uniform' ); +var Float64Array = require( '@stdlib/array/float64' ); var dlassq = require( './../lib' ); var X = discreteUniform( 10, -10, 10, { @@ -26,5 +27,9 @@ var X = discreteUniform( 10, -10, 10, { }); console.log( X ); -var out = dlassq( X.length, X, 1, 1.0, 0.0 ); -console.log( out ); +var scale = new Float64Array( [ 1.0 ] ); +var sumsq = new Float64Array( [ 0.0 ] ); + +dlassq( X.length, X, 1, scale, sumsq ); +console.log( scale ); +console.log( sumsq ); diff --git a/lib/node_modules/@stdlib/lapack/base/dlassq/lib/base.js b/lib/node_modules/@stdlib/lapack/base/dlassq/lib/base.js index e177b36b47db..23772052b1e1 100644 --- a/lib/node_modules/@stdlib/lapack/base/dlassq/lib/base.js +++ b/lib/node_modules/@stdlib/lapack/base/dlassq/lib/base.js @@ -44,23 +44,24 @@ var TSML = 1.49166814624004135e-154; * @param {Float64Array} X - input array * @param {integer} strideX - stride length for `X` * @param {NonNegativeInteger} offsetX - starting index for `X` -* @param {number} scale - scaling factor -* @param {number} sumsq - basic sum of squares from which output is factored out -* @param {Float64Array} out - output array -* @param {integer} strideOut - stride length for `out` -* @param {NonNegativeInteger} offsetOut - starting index for `out` -* @returns {Float64Array} output array +* @param {Float64Array} scale - array containing an element which specifies the scaling factor and is overwritten by the updated scaling factor +* @param {NonNegativeInteger} offsetScale - index of the element in `scale` +* @param {Float64Array} sumsq - array containing an element which specifies the basic sum of squares from which output is factored out and is overwritten by the updated sum of squares +* @param {NonNegativeInteger} offsetSumsq - index of the element in `sumsq` +* @returns {void} * * @example * var Float64Array = require( '@stdlib/array/float64' ); * * var X = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); -* var out = new Float64Array( [ 0.0, 0.0 ] ); +* var scale = new Float64Array( [ 1.0 ] ); +* var sumsq = new Float64Array( [ 0.0 ] ); * -* dlassq( 4, X, 1, 0, 1.0, 0.0, out, 1, 0 ); -* // out => [ 1.0, 30.0 ] +* dlassq( 4, X, 1, 0, scale, 0, sumsq, 0 ); +* // scale => [ 1.0 ] +* // sumsq => [ 30.0 ] */ -function dlassq( N, X, strideX, offsetX, scale, sumsq, out, strideOut, offsetOut ) { // eslint-disable-line max-len +function dlassq( N, X, strideX, offsetX, scale, offsetScale, sumsq, offsetSumsq ) { // eslint-disable-line max-len var notbig; var abig; var asml; @@ -69,22 +70,26 @@ function dlassq( N, X, strideX, offsetX, scale, sumsq, out, strideOut, offsetOut var ymax; var ax; var ox; + var ss; + var s; var i; - if ( isnan( scale ) || isnan( sumsq ) ) { - return out; + s = scale[ offsetScale ]; + ss = sumsq[ offsetSumsq ]; + if ( isnan( s ) || isnan( ss ) ) { + return; } - if ( sumsq === 0.0 ) { - scale = 1.0; + if ( ss === 0.0 ) { + s = 1.0; } - if ( scale === 0.0 ) { - scale = 1.0; - sumsq = 0.0; + if ( s === 0.0 ) { + s = 1.0; + ss = 0.0; } if ( N <= 0 ) { - out[ offsetOut ] = scale; - out[ offsetOut + strideOut ] = sumsq; - return out; + scale[ offsetScale ] = s; + sumsq[ offsetSumsq ] = ss; + return; } /* * Compute the sum of squares in 3 accumulators: @@ -118,28 +123,28 @@ function dlassq( N, X, strideX, offsetX, scale, sumsq, out, strideOut, offsetOut ox += strideX; } // Put the existing sum of squares into one of the accumulators... - if ( sumsq > 0.0 ) { - ax = scale * sqrt( sumsq ); + if ( ss > 0.0 ) { + ax = s * sqrt( ss ); if ( ax > TBIG ) { - if ( scale > 1.0 ) { - scale *= SBIG; - abig += scale * ( scale * sumsq ); + if ( s > 1.0 ) { + s *= SBIG; + abig += s * ( s * ss ); } else { // `sumsq > tbig^2` => `(sbig * (sbig * sumsq))` is representable - abig += scale * ( scale * ( SBIG * ( SBIG*sumsq ) ) ); + abig += s * ( s * ( SBIG * ( SBIG*ss ) ) ); } } else if ( ax < TSML ) { if ( notbig ) { - if ( scale < 1.0 ) { - scale *= SSML; - asml += scale * ( scale*sumsq ); + if ( s < 1.0 ) { + s *= SSML; + asml += s * ( s*ss ); } else { // `sumsq < tsml^2` => `(ssml * (ssml * sumsq))` is representable - asml += scale * ( scale * ( SSML * ( SSML*sumsq ) ) ); + asml += s * ( s * ( SSML * ( SSML*ss ) ) ); } } } else { - amed += scale * ( scale*sumsq ); + amed += s * ( s*ss ); } } // Combine `abig` and `amed` or `amed` and `asml` if more than one accumulator was used... @@ -148,9 +153,9 @@ function dlassq( N, X, strideX, offsetX, scale, sumsq, out, strideOut, offsetOut if ( amed > 0.0 || isnan( amed ) ) { abig += ( amed*SBIG ) * SBIG; } - out[ offsetOut ] = 1.0 / SBIG; - out[ offsetOut + strideOut ] = abig; - return out; + scale[ offsetScale ] = 1.0 / SBIG; + sumsq[ offsetSumsq ] = abig; + return; } if ( asml > 0.0 ) { // Combine `amed` and `asml` if `asml > 0`... @@ -164,20 +169,19 @@ function dlassq( N, X, strideX, offsetX, scale, sumsq, out, strideOut, offsetOut ymin = asml; ymax = amed; } - scale = 1.0; - sumsq = abs2( ymax ) * ( 1.0 + abs2( ymin/ymax ) ); + s = 1.0; + ss = abs2( ymax ) * ( 1.0 + abs2( ymin/ymax ) ); } else { - scale = 1.0 / SSML; - sumsq = asml; + s = 1.0 / SSML; + ss = asml; } - out[ offsetOut ] = scale; - out[ offsetOut + strideOut ] = sumsq; - return out; + scale[ offsetScale ] = s; + sumsq[ offsetSumsq ] = ss; + return; } // Otherwise all values are mid-range or zero... - out[ offsetOut ] = 1.0; - out[ offsetOut + strideOut ] = amed; - return out; + scale[ offsetScale ] = 1.0; + sumsq[ offsetSumsq ] = amed; } diff --git a/lib/node_modules/@stdlib/lapack/base/dlassq/lib/dlassq.js b/lib/node_modules/@stdlib/lapack/base/dlassq/lib/dlassq.js index bfccec29bf12..5da17a982591 100644 --- a/lib/node_modules/@stdlib/lapack/base/dlassq/lib/dlassq.js +++ b/lib/node_modules/@stdlib/lapack/base/dlassq/lib/dlassq.js @@ -20,7 +20,6 @@ // MODULES // -var Float64Array = require( '@stdlib/array/float64' ); var stride2offset = require( '@stdlib/strided/base/stride2offset' ); var base = require( './base.js' ); @@ -33,25 +32,25 @@ var base = require( './base.js' ); * @param {NonNegativeInteger} N - number of indexed elements * @param {Float64Array} X - input array * @param {integer} strideX - stride length for `X` -* @param {number} scale - scaling factor -* @param {number} sumsq - basic sum of squares from which output is factored out -* @returns {Float64Array} output array +* @param {Float64Array} scale - array containing a single element which specifies the scaling factor and is overwritten by the updated scaling factor +* @param {Float64Array} sumsq - array containing a single element which specifies the basic sum of squares from which output is factored out and is overwritten by the updated sum of squares +* @returns {void} * * @example * var Float64Array = require( '@stdlib/array/float64' ); * * var X = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); +* var scale = new Float64Array( [ 1.0 ] ); +* var sumsq = new Float64Array( [ 0.0 ] ); * -* var out = dlassq( 4, X, 1, 1.0, 0.0 ); -* // returns [ 1.0, 30.0 ] +* dlassq( 4, X, 1, scale, sumsq ); +* // scale => [ 1.0 ] +* // sumsq => [ 30.0 ] */ function dlassq( N, X, strideX, scale, sumsq ) { - var out; var ox; - ox = stride2offset( N, strideX ); - out = new Float64Array( 2 ); - return base( N, X, strideX, ox, scale, sumsq, out, 1, 0 ); + base( N, X, strideX, ox, scale, 0, sumsq, 0 ); } diff --git a/lib/node_modules/@stdlib/lapack/base/dlassq/lib/index.js b/lib/node_modules/@stdlib/lapack/base/dlassq/lib/index.js index 06da72246b4d..19903838f6c4 100644 --- a/lib/node_modules/@stdlib/lapack/base/dlassq/lib/index.js +++ b/lib/node_modules/@stdlib/lapack/base/dlassq/lib/index.js @@ -28,19 +28,24 @@ * var dlassq = require( '@stdlib/lapack/base/dlassq' ); * * var X = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); +* var scale = new Float64Array( [ 1.0 ] ); +* var sumsq = new Float64Array( [ 0.0 ] ); * -* var out = dlassq( X.length, X, 1, 1.0, 0.0 ); -* // returns [ 1.0, 30.0 ] +* dlassq( X.length, X, 1, scale, sumsq ); +* // scale => [ 1.0 ] +* // sumsq => [ 30.0 ] * * @example * var Float64Array = require( '@stdlib/array/float64' ); * var dlassq = require( '@stdlib/lapack/base/dlassq' ); * * var X = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); -* var out = new Float64Array( [ 0.0, 0.0 ] ); +* var scale = new Float64Array( [ 1.0 ] ); +* var sumsq = new Float64Array( [ 0.0 ] ); * -* dlassq.ndarray( X.length, X, 1, 0, 1.0, 0.0, out, 1, 0 ); -* // out => [ 1.0, 30.0 ] +* dlassq.ndarray( X.length, X, 1, 0, scale, 0, sumsq, 0 ); +* // scale => [ 1.0 ] +* // sumsq => [ 30.0 ] */ // MODULES // diff --git a/lib/node_modules/@stdlib/lapack/base/dlassq/lib/ndarray.js b/lib/node_modules/@stdlib/lapack/base/dlassq/lib/ndarray.js index 5aefdec5104f..b17100a13d60 100644 --- a/lib/node_modules/@stdlib/lapack/base/dlassq/lib/ndarray.js +++ b/lib/node_modules/@stdlib/lapack/base/dlassq/lib/ndarray.js @@ -34,24 +34,25 @@ var base = require( './base.js' ); * @param {Float64Array} X - input array * @param {integer} strideX - stride length for `X` * @param {NonNegativeInteger} offsetX - starting index for `X` -* @param {number} scale - scaling factor -* @param {number} sumsq - basic sum of squares from which output is factored out -* @param {Float64Array} out - output array -* @param {integer} strideOut - stride length for `out` -* @param {NonNegativeInteger} offsetOut - starting index for `out` -* @returns {Float64Array} output array +* @param {Float64Array} scale - array containing an element which specifies the scaling factor and is overwritten by the updated scaling factor +* @param {NonNegativeInteger} offsetScale - index of the element in `scale` +* @param {Float64Array} sumsq - array containing an element which specifies the basic sum of squares from which output is factored out and is overwritten by the updated sum of squares +* @param {NonNegativeInteger} offsetSumsq - index of the element in `sumsq` +* @returns {void} * * @example * var Float64Array = require( '@stdlib/array/float64' ); * * var X = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); -* var out = new Float64Array( [ 0.0, 0.0 ] ); +* var scale = new Float64Array( [ 1.0 ] ); +* var sumsq = new Float64Array( [ 0.0 ] ); * -* dlassq( 4, X, 1, 0, 1.0, 0.0, out, 1, 0 ); -* // out => [ 1.0, 30.0 ] +* dlassq( 4, X, 1, 0, scale, 0, sumsq, 0 ); +* // scale => [ 1.0 ] +* // sumsq => [ 30.0 ] */ -function dlassq( N, X, strideX, offsetX, scale, sumsq, out, strideOut, offsetOut ) { - return base( N, X, strideX, offsetX, scale, sumsq, out, strideOut, offsetOut ); +function dlassq( N, X, strideX, offsetX, scale, offsetScale, sumsq, offsetSumsq ) { + base( N, X, strideX, offsetX, scale, offsetScale, sumsq, offsetSumsq ); } diff --git a/lib/node_modules/@stdlib/lapack/base/dlassq/test/test.dlassq.js b/lib/node_modules/@stdlib/lapack/base/dlassq/test/test.dlassq.js index 91c0d9699313..2d50bdb2ce85 100644 --- a/lib/node_modules/@stdlib/lapack/base/dlassq/test/test.dlassq.js +++ b/lib/node_modules/@stdlib/lapack/base/dlassq/test/test.dlassq.js @@ -24,7 +24,7 @@ var tape = require( 'tape' ); var Float64Array = require( '@stdlib/array/float64' ); -var isSameFloat64Array = require( '@stdlib/assert/is-same-float64array' ); +var isnan = require( '@stdlib/math/base/assert/is-nan' ); var dlassq = require( './../lib/dlassq.js' ); @@ -42,186 +42,221 @@ tape( 'the function has an arity of 5', function test( t ) { }); tape( 'the function computes an updated sum of squares represented in scaled form', function test( t ) { - var expected; - var out; + var scale; + var sumsq; var X; X = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); - expected = new Float64Array( [ 1.0, 30.0 ] ); + scale = new Float64Array( [ 1.0 ] ); + sumsq = new Float64Array( [ 0.0 ] ); - out = dlassq( 4, X, 1, 1.0, 0.0 ); - t.deepEqual( out, expected, 'returns expected value' ); + dlassq( 4, X, 1, scale, sumsq ); + t.strictEqual( scale[ 0 ], 1.0, 'returns expected value' ); + t.strictEqual( sumsq[ 0 ], 30.0, 'returns expected value' ); t.end(); }); tape( 'the function computes an updated sum of squares represented in scaled form (NaNs)', function test( t ) { - var expected; - var out; + var scale; + var sumsq; var X; X = new Float64Array( [ 1.0, NaN, 3.0, 4.0 ] ); - expected = new Float64Array( [ 1.0, NaN ] ); + scale = new Float64Array( [ 1.0 ] ); + sumsq = new Float64Array( [ 0.0 ] ); - out = dlassq( 4, X, 1, 1.0, 0.0 ); - t.strictEqual( isSameFloat64Array( out, expected ), true, 'returns expected value' ); + dlassq( 4, X, 1, scale, sumsq ); + t.strictEqual( scale[ 0 ], 1.0, 'returns expected value' ); + t.strictEqual( isnan( sumsq[ 0 ] ), true, 'returns expected value' ); X = new Float64Array( [ 1.0e-160, 1.0e-160, NaN, 1.0e-160 ] ); - expected = new Float64Array( [ 1.0, NaN ] ); + scale = new Float64Array( [ 1.0 ] ); + sumsq = new Float64Array( [ 0.0 ] ); - out = dlassq( 4, X, 1, 1.0, 0.0 ); - t.strictEqual( isSameFloat64Array( out, expected ), true, 'returns expected value' ); + dlassq( 4, X, 1, scale, sumsq ); + t.strictEqual( scale[ 0 ], 1.0, 'returns expected value' ); + t.strictEqual( isnan( sumsq[ 0 ] ), true, 'returns expected value' ); // Checked on Wolfram Alpha: X = new Float64Array( [ 1.0e150, 1.0e150, NaN, 1.0e150 ] ); - expected = new Float64Array( [ 8.997827589086393e+161, NaN ] ); + scale = new Float64Array( [ 1.0 ] ); + sumsq = new Float64Array( [ 0.0 ] ); - out = dlassq( 4, X, 1, 1.0, 0.0 ); - t.strictEqual( isSameFloat64Array( out, expected ), true, 'returns expected value' ); + dlassq( 4, X, 1, scale, sumsq ); + t.strictEqual( scale[ 0 ], 8.997827589086393e+161, 'returns expected value' ); + t.strictEqual( isnan( sumsq[ 0 ] ), true, 'returns expected value' ); t.end(); }); tape( 'the function computes an updated sum of squares represented in scaled form (large values)', function test( t ) { - var expected; - var out; + var scale; + var sumsq; var X; // Checked on Wolfram Alpha: X = new Float64Array( [ 1.0e150, 1.0e150, 1.0e150, 1.0e150 ] ); - expected = new Float64Array( [ 8.997827589086393e+161, 4.940656458412465e-24 ] ); // => 4.0e300 + scale = new Float64Array( [ 1.0 ] ); + sumsq = new Float64Array( [ 0.0 ] ); - out = dlassq( 4, X, 1, 1.0, 0.0 ); - t.deepEqual( out, expected, 'returns expected value' ); + dlassq( 4, X, 1, scale, sumsq ); + t.strictEqual( scale[ 0 ], 8.997827589086393e+161, 'returns expected value' ); + t.strictEqual( sumsq[ 0 ], 4.940656458412465e-24, 'returns expected value' ); // => 4.0e300 // Checked on Wolfram Alpha: X = new Float64Array( [ 1.0e150, 1.0e150, 1.0e150, 1.0e150 ] ); - expected = new Float64Array( [ 8.997827589086393e+161, 9.881312916824931e-24 ] ); // => 8.0e300 + scale = new Float64Array( [ 2.0 ] ); + sumsq = new Float64Array( [ 1.0e300 ] ); - out = dlassq( 4, X, 1, 2.0, 1.0e300 ); - t.deepEqual( out, expected, 'returns expected value' ); + dlassq( 4, X, 1, scale, sumsq ); + t.strictEqual( scale[ 0 ], 8.997827589086393e+161, 'returns expected value' ); + t.strictEqual( sumsq[ 0 ], 9.881312916824931e-24, 'returns expected value' ); // => 8.0e300 // Checked on Wolfram Alpha: X = new Float64Array( [ 1.0e150, 1.0e150, 1.0e150, 1.0e150 ] ); - expected = new Float64Array( [ 8.997827589086393e+161, 6.1758205730155814e-24 ] ); // => 5.0e300 + scale = new Float64Array( [ 1.0 ] ); + sumsq = new Float64Array( [ 1.0e300 ] ); - out = dlassq( 4, X, 1, 1.0, 1.0e300 ); - t.deepEqual( out, expected, 'returns expected value' ); + dlassq( 4, X, 1, scale, sumsq ); + t.strictEqual( scale[ 0 ], 8.997827589086393e+161, 'returns expected value' ); + t.strictEqual( sumsq[ 0 ], 6.1758205730155814e-24, 'returns expected value' ); // => 5.0e300 // Checked on Wolfram Alpha: X = new Float64Array( [ 1.0e308, 1.0e308, 1.0e308, 1.0e308 ] ); - expected = new Float64Array( [ 8.997827589086393e+161, 1.0/0.0 ] ); + scale = new Float64Array( [ 1.0e308 ] ); + sumsq = new Float64Array( [ 1.0e308 ] ); - out = dlassq( 4, X, 1, 1.0e308, 1.0e308 ); - t.deepEqual( out, expected, 'returns expected value' ); + dlassq( 4, X, 1, scale, sumsq ); + t.strictEqual( scale[ 0 ], 8.997827589086393e+161, 'returns expected value' ); + t.strictEqual( sumsq[ 0 ], 1.0/0.0, 'returns expected value' ); t.end(); }); tape( 'the function computes an updated sum of squares represented in scaled form (small values)', function test( t ) { - var expected; - var out; + var scale; + var sumsq; var X; // Checked on Wolfram Alpha: X = new Float64Array( [ 1.0e-160, 1.0e-160, 1.0e-160, 1.0e-160 ] ); - expected = new Float64Array( [ 2.2227587494850775e-162, 8096.090132292425 ] ); // => ~4.0e-320 + scale = new Float64Array( [ 1.0 ] ); + sumsq = new Float64Array( [ 0.0 ] ); - out = dlassq( 4, X, 1, 1.0, 0.0 ); - t.deepEqual( out, expected, 'returns expected value' ); + dlassq( 4, X, 1, scale, sumsq ); + t.strictEqual( scale[ 0 ], 2.2227587494850775e-162, 'returns expected value' ); + t.strictEqual( sumsq[ 0 ], 8096.090132292425, 'returns expected value' ); // => ~4.0e-320 // Checked on Wolfram Alpha: X = new Float64Array( [ 1.0e-160, 1.0e-160, 1.0e-160, 1.0e-160 ] ); - expected = new Float64Array( [ 2.2227587494850775e-162, 8602.090132292426 ] ); // => ~4.24e-320 + scale = new Float64Array( [ 0.5 ] ); + sumsq = new Float64Array( [ 1.0e-320 ] ); - out = dlassq( 4, X, 1, 0.5, 1.0e-320 ); - t.deepEqual( out, expected, 'returns expected value' ); + dlassq( 4, X, 1, scale, sumsq ); + t.strictEqual( scale[ 0 ], 2.2227587494850775e-162, 'returns expected value' ); + t.strictEqual( sumsq[ 0 ], 8602.090132292426, 'returns expected value' ); // => ~4.24e-320 // Checked on Wolfram Alpha: X = new Float64Array( [ 1.0e-160, 1.0e-160, 1.0e-160, 1.0e-160 ] ); - expected = new Float64Array( [ 2.2227587494850775e-162, 10120.090132292426 ] ); // => ~5.0e-320 + scale = new Float64Array( [ 1.0 ] ); + sumsq = new Float64Array( [ 1.0e-320 ] ); - out = dlassq( 4, X, 1, 1.0, 1.0e-320 ); - t.deepEqual( out, expected, 'returns expected value' ); + dlassq( 4, X, 1, scale, sumsq ); + t.strictEqual( scale[ 0 ], 2.2227587494850775e-162, 'returns expected value' ); + t.strictEqual( sumsq[ 0 ], 10120.090132292426, 'returns expected value' ); // => ~5.0e-320 t.end(); }); tape( 'the function computes an updated sum of squares represented in scaled form (sumsq > 0)', function test( t ) { - var expected; - var out; + var scale; + var sumsq; var X; X = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); - expected = new Float64Array( [ 1.0, 31.0 ] ); + scale = new Float64Array( [ 1.0 ] ); + sumsq = new Float64Array( [ 1.0 ] ); - out = dlassq( 4, X, 1, 1.0, 1.0 ); - t.deepEqual( out, expected, 'returns expected value' ); + dlassq( 4, X, 1, scale, sumsq ); + t.strictEqual( scale[ 0 ], 1.0, 'returns expected value' ); + t.strictEqual( sumsq[ 0 ], 31.0, 'returns expected value' ); t.end(); }); tape( 'the function supports negative strides', function test( t ) { - var expected; - var out; + var scale; + var sumsq; var X; X = new Float64Array( [ 4.0, 3.0, 2.0, 1.0 ] ); - expected = new Float64Array( [ 1.0, 31.0 ] ); + scale = new Float64Array( [ 1.0 ] ); + sumsq = new Float64Array( [ 1.0 ] ); - out = dlassq( 4, X, -1, 1.0, 1.0 ); - t.deepEqual( out, expected, 'returns expected value' ); + dlassq( 4, X, -1, scale, sumsq ); + t.strictEqual( scale[ 0 ], 1.0, 'returns expected value' ); + t.strictEqual( sumsq[ 0 ], 31.0, 'returns expected value' ); t.end(); }); tape( 'the function returns initialized values if provided an `N` argument less than or equal to `0`', function test( t ) { - var expected; - var out; + var scale; + var sumsq; var X; X = new Float64Array( [ 4.0, 3.0, 2.0, 1.0 ] ); - expected = new Float64Array( [ 1.0, 1.0 ] ); + scale = new Float64Array( [ 1.0 ] ); + sumsq = new Float64Array( [ 1.0 ] ); - out = dlassq( 0, X, -1, 1.0, 1.0 ); - t.deepEqual( out, expected, 'returns expected value' ); + dlassq( 0, X, -1, scale, sumsq ); + t.strictEqual( scale[ 0 ], 1.0, 'returns expected value' ); + t.strictEqual( sumsq[ 0 ], 1.0, 'returns expected value' ); - out = dlassq( -5, X, -1, 1.0, 1.0 ); - t.deepEqual( out, expected, 'returns expected value' ); + dlassq( -5, X, -1, scale, sumsq ); + t.strictEqual( scale[ 0 ], 1.0, 'returns expected value' ); + t.strictEqual( sumsq[ 0 ], 1.0, 'returns expected value' ); X = new Float64Array( [ 4.0, 3.0, 2.0, 1.0 ] ); - expected = new Float64Array( [ 1.0, 0.0 ] ); + scale = new Float64Array( [ 0.0 ] ); + sumsq = new Float64Array( [ 999.0 ] ); - out = dlassq( 0, X, 1, 0.0, 999.0 ); - t.deepEqual( out, expected, 'returns expected value' ); + dlassq( 0, X, 1, scale, sumsq ); + t.strictEqual( scale[ 0 ], 1.0, 'returns expected value' ); + t.strictEqual( sumsq[ 0 ], 0.0, 'returns expected value' ); t.end(); }); tape( 'the function does not compute an updated sum of squares if the scale factor is `NaN`', function test( t ) { - var expected; - var out; + var scale; + var sumsq; var X; X = new Float64Array( [ 4.0, 3.0, 2.0, 1.0 ] ); - expected = new Float64Array( [ 0.0, 0.0 ] ); + scale = new Float64Array( [ NaN ] ); + sumsq = new Float64Array( [ 1.0 ] ); - out = dlassq( 4, X, -1, NaN, 1.0 ); - t.strictEqual( isSameFloat64Array( out, expected ), true, 'returns expected value' ); + dlassq( 4, X, -1, scale, sumsq ); + t.strictEqual( isnan( scale[ 0 ] ), true, 'returns expected value' ); + t.strictEqual( sumsq[ 0 ], 1.0, 'returns expected value' ); t.end(); }); tape( 'the function does not compute an updated sum of squares if the sum of squares is `NaN`', function test( t ) { - var expected; - var out; + var scale; + var sumsq; var X; X = new Float64Array( [ 4.0, 3.0, 2.0, 1.0 ] ); - expected = new Float64Array( [ 0.0, 0.0 ] ); + scale = new Float64Array( [ 1.0 ] ); + sumsq = new Float64Array( [ NaN ] ); - out = dlassq( 4, X, -1, 1.0, NaN ); - t.strictEqual( isSameFloat64Array( out, expected ), true, 'returns expected value' ); + dlassq( 4, X, -1, scale, sumsq ); + t.strictEqual( scale[ 0 ], 1.0, 'returns expected value' ); + t.strictEqual( isnan( sumsq[ 0 ] ), true, 'returns expected value' ); t.end(); }); diff --git a/lib/node_modules/@stdlib/lapack/base/dlassq/test/test.ndarray.js b/lib/node_modules/@stdlib/lapack/base/dlassq/test/test.ndarray.js index 4cb2e12533dc..74904315ff3f 100644 --- a/lib/node_modules/@stdlib/lapack/base/dlassq/test/test.ndarray.js +++ b/lib/node_modules/@stdlib/lapack/base/dlassq/test/test.ndarray.js @@ -22,7 +22,7 @@ var tape = require( 'tape' ); var Float64Array = require( '@stdlib/array/float64' ); -var isSameFloat64Array = require( '@stdlib/assert/is-same-float64array' ); +var isnan = require( '@stdlib/math/base/assert/is-nan' ); var dlassq = require( './../lib/ndarray.js' ); @@ -34,147 +34,157 @@ tape( 'main export is a function', function test( t ) { t.end(); }); -tape( 'the function has an arity of 9', function test( t ) { - t.strictEqual( dlassq.length, 9, 'returns expected value' ); +tape( 'the function has an arity of 8', function test( t ) { + t.strictEqual( dlassq.length, 8, 'returns expected value' ); t.end(); }); tape( 'the function computes an updated sum of squares represented in scaled form', function test( t ) { - var expected; - var actual; - var out; + var scale; + var sumsq; var X; X = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); - out = new Float64Array( [ 0.0, 0.0 ] ); - expected = new Float64Array( [ 1.0, 30.0 ] ); + scale = new Float64Array( [ 1.0 ] ); + sumsq = new Float64Array( [ 0.0 ] ); - actual = dlassq( 4, X, 1, 0, 1.0, 0.0, out, 1, 0 ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); + dlassq( 4, X, 1, 0, scale, 0, sumsq, 0 ); + t.strictEqual( scale[ 0 ], 1.0, 'returns expected value' ); + t.strictEqual( sumsq[ 0 ], 30.0, 'returns expected value' ); t.end(); }); tape( 'the function computes an updated sum of squares represented in scaled form (sumsq > 0)', function test( t ) { - var expected; - var actual; - var out; + var scale; + var sumsq; var X; X = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); - out = new Float64Array( [ 0.0, 0.0 ] ); - expected = new Float64Array( [ 1.0, 31.0 ] ); + scale = new Float64Array( [ 1.0 ] ); + sumsq = new Float64Array( [ 1.0 ] ); - actual = dlassq( 4, X, 1, 0, 1.0, 1.0, out, 1, 0 ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); + dlassq( 4, X, 1, 0, scale, 0, sumsq, 0 ); + t.strictEqual( scale[ 0 ], 1.0, 'returns expected value' ); + t.strictEqual( sumsq[ 0 ], 31.0, 'returns expected value' ); t.end(); }); tape( 'the function supports negative strides', function test( t ) { - var expected; - var actual; - var out; + var scale; + var sumsq; var X; X = new Float64Array( [ 4.0, 3.0, 2.0, 1.0 ] ); - out = new Float64Array( [ 0.0, 0.0 ] ); - expected = new Float64Array( [ 1.0, 31.0 ] ); + scale = new Float64Array( [ 1.0 ] ); + sumsq = new Float64Array( [ 1.0 ] ); - actual = dlassq( 4, X, -1, 3, 1.0, 1.0, out, 1, 0 ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); + dlassq( 4, X, -1, 3, scale, 0, sumsq, 0 ); + t.strictEqual( scale[ 0 ], 1.0, 'returns expected value' ); + t.strictEqual( sumsq[ 0 ], 31.0, 'returns expected value' ); - X = new Float64Array( [ 4.0, 3.0, 2.0, 1.0 ] ); - out = new Float64Array( [ 0.0, 0.0 ] ); - expected = new Float64Array( [ 31.0, 1.0 ] ); + t.end(); +}); + +tape( 'the function supports array offsets', function test( t ) { + var expected; + var scale; + var sumsq; + var X; + + X = new Float64Array( [ 0.0, 1.0, 2.0, 3.0, 4.0 ] ); + scale = new Float64Array( [ 999.9, 1.0, 999.9 ] ); + sumsq = new Float64Array( [ 999.9, 999.9, 0.0 ] ); + + dlassq( 4, X, 1, 1, scale, 1, sumsq, 2 ); + + expected = new Float64Array( [ 999.9, 1.0, 999.9 ] ); + t.deepEqual( scale, expected, 'returns expected value' ); - actual = dlassq( 4, X, 1, 0, 1.0, 1.0, out, -1, 1 ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); + expected = new Float64Array( [ 999.9, 999.9, 30.0 ] ); + t.deepEqual( sumsq, expected, 'returns expected value' ); t.end(); }); tape( 'the function returns initialized values if provided an `N` argument less than or equal to `0`', function test( t ) { - var expected; - var actual; - var out; + var scale; + var sumsq; var X; X = new Float64Array( [ 4.0, 3.0, 2.0, 1.0 ] ); - out = new Float64Array( [ 0.0, 0.0 ] ); - expected = new Float64Array( [ 1.0, 1.0 ] ); + scale = new Float64Array( [ 1.0 ] ); + sumsq = new Float64Array( [ 1.0 ] ); - actual = dlassq( 0, X, 1, 0, 1.0, 1.0, out, 1, 0 ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); + dlassq( 0, X, 1, 0, scale, 0, sumsq, 0 ); + t.strictEqual( scale[ 0 ], 1.0, 'returns expected value' ); + t.strictEqual( sumsq[ 0 ], 1.0, 'returns expected value' ); - actual = dlassq( -5, X, 1, 0, 1.0, 1.0, out, 1, 0 ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); + dlassq( -5, X, 1, 0, scale, 0, sumsq, 0 ); + t.strictEqual( scale[ 0 ], 1.0, 'returns expected value' ); + t.strictEqual( sumsq[ 0 ], 1.0, 'returns expected value' ); X = new Float64Array( [ 4.0, 3.0, 2.0, 1.0 ] ); - out = new Float64Array( [ 0.0, 0.0 ] ); - expected = new Float64Array( [ 1.0, 0.0 ] ); + scale = new Float64Array( [ 0.0 ] ); + sumsq = new Float64Array( [ 999.0 ] ); - actual = dlassq( 0, X, 1, 0, 0.0, 999.0, out, 1, 0 ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); + dlassq( 0, X, 1, 0, scale, 0, sumsq, 0 ); + t.strictEqual( scale[ 0 ], 1.0, 'returns expected value' ); + t.strictEqual( sumsq[ 0 ], 0.0, 'returns expected value' ); t.end(); }); tape( 'the function does not compute an updated sum of squares if the scale factor is `NaN`', function test( t ) { - var expected; - var actual; - var out; + var scale; + var sumsq; var X; X = new Float64Array( [ 4.0, 3.0, 2.0, 1.0 ] ); - out = new Float64Array( [ 0.0, 0.0 ] ); - expected = new Float64Array( [ 0.0, 0.0 ] ); + scale = new Float64Array( [ NaN ] ); + sumsq = new Float64Array( [ 1.0 ] ); - actual = dlassq( 4, X, 1, 0, NaN, 1.0, out, 1, 0 ); - t.strictEqual( actual, out, 'returns expected value' ); - t.strictEqual( isSameFloat64Array( out, expected ), true, 'returns expected value' ); + dlassq( 4, X, 1, 0, scale, 0, sumsq, 0 ); + t.strictEqual( isnan( scale[ 0 ] ), true, 'returns expected value' ); + t.strictEqual( sumsq[ 0 ], 1.0, 'returns expected value' ); t.end(); }); tape( 'the function does not compute an updated sum of squares if the sum of squares is `NaN`', function test( t ) { - var expected; - var actual; - var out; + var scale; + var sumsq; var X; X = new Float64Array( [ 4.0, 3.0, 2.0, 1.0 ] ); - out = new Float64Array( [ 0.0, 0.0 ] ); - expected = new Float64Array( [ 0.0, 0.0 ] ); + scale = new Float64Array( [ 1.0 ] ); + sumsq = new Float64Array( [ NaN ] ); - actual = dlassq( 4, X, 1, 0, 1.0, NaN, out, 1, 0 ); - t.strictEqual( actual, out, 'returns expected value' ); - t.strictEqual( isSameFloat64Array( out, expected ), true, 'returns expected value' ); + dlassq( 4, X, 1, 0, scale, 0, sumsq, 0 ); + t.strictEqual( scale[ 0 ], 1.0, 'returns expected value' ); + t.strictEqual( isnan( sumsq[ 0 ] ), true, 'returns expected value' ); t.end(); }); tape( 'the function supports complex access patterns', function test( t ) { var expected; - var actual; - var out; + var scale; + var sumsq; var X; X = new Float64Array( [ 0.0, 0.0, 4.0, 0.0, 0.0, 0.0, 3.0, 0.0, 0.0, 0.0, 2.0, 0.0, 0.0, 0.0, 1.0 ] ); // eslint-disable-line max-len - out = new Float64Array( [ 0.0, 0.0, 0.0, 999.9, 0.0, 0.0, 999.9 ] ); + scale = new Float64Array( [ 999.9, 999.9, 999.9, 1.0 ] ); + sumsq = new Float64Array( [ 999.9, 0.0, 999.9 ] ); + + dlassq( 4, X, -4, 14, scale, 3, sumsq, 1 ); - expected = new Float64Array( [ 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 30.0 ] ); + expected = new Float64Array( [ 999.9, 999.9, 999.9, 1.0 ] ); + t.deepEqual( scale, expected, 'returns expected value' ); - actual = dlassq( 4, X, -4, 14, 1.0, 0.0, out, 3, 3 ); - t.strictEqual( actual, out, 'returns expected value' ); - t.deepEqual( out, expected, 'returns expected value' ); + expected = new Float64Array( [ 999.9, 30.0, 999.9 ] ); + t.deepEqual( sumsq, expected, 'returns expected value' ); t.end(); }); diff --git a/lib/node_modules/@stdlib/lapack/base/docs/types/index.d.ts b/lib/node_modules/@stdlib/lapack/base/docs/types/index.d.ts index f2ce2996eb1c..8806b04fbd77 100644 --- a/lib/node_modules/@stdlib/lapack/base/docs/types/index.d.ts +++ b/lib/node_modules/@stdlib/lapack/base/docs/types/index.d.ts @@ -655,26 +655,31 @@ interface Namespace { * @param N - number of indexed elements * @param X - input array * @param strideX - stride length for `X` - * @param scale - scaling factor - * @param sumsq - basic sum of squares from which output is factored out - * @returns output array + * @param scale - array containing a single element which specifies the scaling factor and is overwritten by the updated scaling factor + * @param sumsq - array containing a single element which specifies the basic sum of squares from which output is factored out and is overwritten by the updated sum of squares + * @returns void * * @example * var Float64Array = require( '@stdlib/array/float64' ); * * var X = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); + * var scale = new Float64Array( [ 1.0 ] ); + * var sumsq = new Float64Array( [ 0.0 ] ); * - * var out = ns.dlassq( 4, X, 1, 1.0, 0.0 ); - * // returns [ 1.0, 30.0 ] + * ns.dlassq( 4, X, 1, scale, sumsq ); + * // scale => [ 1.0 ] + * // sumsq => [ 30.0 ] * * @example * var Float64Array = require( '@stdlib/array/float64' ); * * var X = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); - * var out = new Float64Array( [ 0.0, 0.0 ] ); + * var scale = new Float64Array( [ 1.0 ] ); + * var sumsq = new Float64Array( [ 0.0 ] ); * - * ns.dlassq.ndarray( 4, X, 1, 0, 1.0, 0.0, out, 1, 0 ); - * // out => [ 1.0, 30.0 ] + * ns.dlassq.ndarray( 4, X, 1, 0, scale, 0, sumsq, 0 ); + * // scale => [ 1.0 ] + * // sumsq => [ 30.0 ] */ dlassq: typeof dlassq; From c50a9b953796e6f8f3aea658b1924487439f8856 Mon Sep 17 00:00:00 2001 From: Ujjwal Verma Date: Wed, 30 Sep 2026 01:35:28 +0530 Subject: [PATCH 2/2] chore: fix lint errors --- lib/node_modules/@stdlib/lapack/base/dlassq/README.md | 8 +++++++- lib/node_modules/@stdlib/lapack/base/dlassq/docs/repl.txt | 4 ++-- .../@stdlib/lapack/base/dlassq/test/test.dlassq.js | 2 -- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/lib/node_modules/@stdlib/lapack/base/dlassq/README.md b/lib/node_modules/@stdlib/lapack/base/dlassq/README.md index 778f2bd6bc07..6291b9efa387 100644 --- a/lib/node_modules/@stdlib/lapack/base/dlassq/README.md +++ b/lib/node_modules/@stdlib/lapack/base/dlassq/README.md @@ -57,6 +57,8 @@ var dlassq = require( '@stdlib/lapack/base/dlassq' ); Returns an updated sum of squares represented in scaled form. + + ```javascript var Float64Array = require( '@stdlib/array/float64' ); @@ -79,7 +81,7 @@ The function has the following parameters: Note that indexing is relative to the first index. To introduce an offset, use [`typed array`][mdn-typed-array] views. - + ```javascript var Float64Array = require( '@stdlib/array/float64' ); @@ -104,6 +106,8 @@ dlassq( X1.length, X1, 1, scale, sumsq ); Returns an updated sum of squares represented in scaled form using alternative indexing semantics. + + ```javascript var Float64Array = require( '@stdlib/array/float64' ); @@ -124,6 +128,8 @@ The function has the following additional parameters: While [`typed array`][mdn-typed-array] views mandate a view offset based on the underlying buffer, the offset parameters support indexing semantics based on starting indices. For example, + + ```javascript var Float64Array = require( '@stdlib/array/float64' ); diff --git a/lib/node_modules/@stdlib/lapack/base/dlassq/docs/repl.txt b/lib/node_modules/@stdlib/lapack/base/dlassq/docs/repl.txt index 3b9db458e926..3304ce24a00d 100644 --- a/lib/node_modules/@stdlib/lapack/base/dlassq/docs/repl.txt +++ b/lib/node_modules/@stdlib/lapack/base/dlassq/docs/repl.txt @@ -2,7 +2,7 @@ {{alias}}( N, X, strideX, scale, sumsq ) Returns an updated sum of squares represented in scaled form. - s_o^2*ss_o = X_0^2 + ... + X_(N-1)^2 + s_i^2*ss_i + s_o^2*ss_o = X_0^2 + ... + X_(N-1)^2 + s_i^2*ss_i where s_o is the output scale factor, ss_o is the output sum of squares, s_i is the input scale factor, and ss_i is the input sum of squares. @@ -46,7 +46,7 @@ Returns an updated sum of squares represented in scaled form using alternative indexing semantics. - s_o^2*ss_o = X_0^2 + ... + X_(N-1)^2 + s_i^2*ss_i + s_o^2*ss_o = X_0^2 + ... + X_(N-1)^2 + s_i^2*ss_i where s_o is the output scale factor, ss_o is the output sum of squares, s_i is the input scale factor, and ss_i is the input sum of squares. diff --git a/lib/node_modules/@stdlib/lapack/base/dlassq/test/test.dlassq.js b/lib/node_modules/@stdlib/lapack/base/dlassq/test/test.dlassq.js index 2d50bdb2ce85..ee24b188407d 100644 --- a/lib/node_modules/@stdlib/lapack/base/dlassq/test/test.dlassq.js +++ b/lib/node_modules/@stdlib/lapack/base/dlassq/test/test.dlassq.js @@ -16,8 +16,6 @@ * limitations under the License. */ -/* eslint-disable max-len */ - 'use strict'; // MODULES //