From 0dac229ae1bfc845645894fb142ed573b96787eb Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Thu, 13 Mar 2025 13:11:21 +0530 Subject: [PATCH 01/43] Update ndarray.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> --- .../stats/base/nanminabs/lib/ndarray.js | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/ndarray.js b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/ndarray.js index fc9d8ff6065d..17ef582cbc60 100644 --- a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/ndarray.js +++ b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/ndarray.js @@ -1,7 +1,7 @@ /** * @license Apache-2.0 * -* Copyright (c) 2020 The Stdlib Authors. +* 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. @@ -22,6 +22,8 @@ var isnan = require( '@stdlib/math/base/assert/is-nan' ); var abs = require( '@stdlib/math/base/special/abs' ); +var arraylike2object = require( '@stdlib/array/base/arraylike2object' ); +var accessors = require( './accessors.js' ); // MAIN // @@ -31,8 +33,8 @@ var abs = require( '@stdlib/math/base/special/abs' ); * * @param {PositiveInteger} N - number of indexed elements * @param {NumericArray} x - input array -* @param {integer} stride - stride length -* @param {NonNegativeInteger} offset - starting index +* @param {integer} strideX - stride length +* @param {NonNegativeInteger} offsetX - starting index * @returns {number} minimum absolute value * * @example @@ -44,8 +46,9 @@ var abs = require( '@stdlib/math/base/special/abs' ); * var v = nanminabs( N, x, 2, 1 ); * // returns 1.0 */ -function nanminabs( N, x, stride, offset ) { +function nanminabs( N, x, strideX, offsetX ) { var min; + var o; var ix; var v; var i; @@ -53,16 +56,20 @@ function nanminabs( N, x, stride, offset ) { if ( N <= 0 ) { return NaN; } - if ( N === 1 || stride === 0 ) { - return x[ offset ]; + o = arraylike2object( x ); + if ( o.accessorProtocol ) { + return accessors( N, o, strideX, offsetX ); } - ix = offset; + if ( N === 1 || strideX === 0 ) { + return abs(x[ offsetX ]); + } + ix = offsetX + (strideX < 0 ? (N - 1) * strideX : 0); for ( i = 0; i < N; i++ ) { v = x[ ix ]; if ( v === v ) { break; } - ix += stride; + ix += strideX; } if ( i === N ) { return NaN; @@ -70,7 +77,7 @@ function nanminabs( N, x, stride, offset ) { min = abs( v ); i += 1; for ( i; i < N; i++ ) { - ix += stride; + ix += strideX; v = abs( x[ ix ] ); if ( isnan( v ) ) { continue; @@ -82,7 +89,6 @@ function nanminabs( N, x, stride, offset ) { return min; } - // EXPORTS // module.exports = nanminabs; From 1d4d0faf56701268371648ddee54b7a58fb4351a Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Thu, 13 Mar 2025 13:13:42 +0530 Subject: [PATCH 02/43] Update nanminabs.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> --- .../stats/base/nanminabs/lib/nanminabs.js | 27 ++++++++++++------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/nanminabs.js b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/nanminabs.js index 6f8e046568dd..78b4f721bc1b 100644 --- a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/nanminabs.js +++ b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/nanminabs.js @@ -1,7 +1,7 @@ /** * @license Apache-2.0 * -* Copyright (c) 2020 The Stdlib Authors. +* 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. @@ -22,6 +22,8 @@ var isnan = require( '@stdlib/math/base/assert/is-nan' ); var abs = require( '@stdlib/math/base/special/abs' ); +var arraylike2object = require( '@stdlib/array/base/arraylike2object' ); +var accessors = require( './accessors.js' ); // MAIN // @@ -31,7 +33,8 @@ var abs = require( '@stdlib/math/base/special/abs' ); * * @param {PositiveInteger} N - number of indexed elements * @param {NumericArray} x - input array -* @param {integer} stride - stride length +* @param {integer} strideX - stride length +* @param {NonNegativeInteger} offsetX - starting index for `x` * @returns {number} minimum absolute value * * @example @@ -41,8 +44,9 @@ var abs = require( '@stdlib/math/base/special/abs' ); * var v = nanminabs( N, x, 1 ); * // returns 1.0 */ -function nanminabs( N, x, stride ) { +function nanminabs( N, x, strideX, offsetX ) { var min; + var o; var ix; var v; var i; @@ -50,11 +54,16 @@ function nanminabs( N, x, stride ) { if ( N <= 0 ) { return NaN; } - if ( N === 1 || stride === 0 ) { - return abs( x[ 0 ] ); + o = arraylike2object( x ); + if ( o.accessorProtocol ) { + return accessors( N, o, strideX, offsetX ); } - if ( stride < 0 ) { - ix = (1-N) * stride; + + if ( N === 1 || strideX === 0 ) { + return x[ offsetX ]; + } + if ( strideX < 0 ) { + ix = (1-N) * strideX; } else { ix = 0; } @@ -63,7 +72,7 @@ function nanminabs( N, x, stride ) { if ( v === v ) { break; } - ix += stride; + ix += strideX; } if ( i === N ) { return NaN; @@ -71,7 +80,7 @@ function nanminabs( N, x, stride ) { min = abs( v ); i += 1; for ( i; i < N; i++ ) { - ix += stride; + ix += strideX; v = abs( x[ ix ] ); if ( isnan( v ) ) { continue; From ab2d094342eb71559446813d51473f9f0879fa0c Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Thu, 13 Mar 2025 13:14:18 +0530 Subject: [PATCH 03/43] Update main.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> --- .../@stdlib/stats/base/nanminabs/lib/main.js | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/main.js b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/main.js index e32d9255d6b5..ba9869f18c6f 100644 --- a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/main.js +++ b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/main.js @@ -1,7 +1,7 @@ /** * @license Apache-2.0 * -* Copyright (c) 2020 The Stdlib Authors. +* 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. @@ -20,15 +20,31 @@ // MODULES // -var setReadOnly = require( '@stdlib/utils/define-nonenumerable-read-only-property' ); var nanminabs = require( './nanminabs.js' ); var ndarray = require( './ndarray.js' ); +var stride2offset = require( '@stdlib/strided/base/stride2offset' ); // MAIN // - +/** + * Computes the minimum absolute value of a strided array. + * + * @param {PositiveInteger} N - number of indexed elements + * @param {NumericArray} x - input array + * @param {integer} strideX - stride length + * @returns {number} minimum absolute value + * + * @example + * var x = [ 1.0, -2.0, 2.0 ]; + * var N = x.length; + * + * var v = min( N, x, 1 ); + * // returns -2.0 + */ setReadOnly( nanminabs, 'ndarray', ndarray ); - +function nanminabs( N, x, strideX ) { + return ndarray( N, x, strideX, stride2offset( N, strideX ) ); +} // EXPORTS // From 94052546c8088c7915c169aab55cd5a53dcb1c3e Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Thu, 13 Mar 2025 13:15:25 +0530 Subject: [PATCH 04/43] Create accessors.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> --- .../stats/base/nanminabs/lib/accessors.js | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js diff --git a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js new file mode 100644 index 000000000000..e21001f8e6f8 --- /dev/null +++ b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js @@ -0,0 +1,89 @@ +/** +* @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 isnan = require('@stdlib/math/base/assert/is-nan'); +var abs = require('@stdlib/math/base/special/abs'); + +// MAIN // + +/** +* Computes the minimum absolute value of a strided array, ignoring `NaN` values, +* and supports accessor protocol. + +* @param {PositiveInteger} N - number of indexed elements +* @param {Object} x - input array object +* @param {Collection} x.data - input array data +* @param {Array} x.accessors - array element accessors +* @param {integer} strideX - stride length for `x` +* @param {NonNegativeInteger} offsetX - starting index for `x` +* @returns {Object} output array object +* @example + +*/ +function nanminabs( N, x, strideX, offsetX) { + var xbuf; + var get; + var min; + var ix; + var v; + var i; + + // Cache reference to array data: + xbuf = x.data; + + // Cache a reference to the element accessor: + get = x.accessors[ 0 ]; + + if ( N === 1 || strideX === 0 ) { + return get ? abs(get(xbuf, offsetX)) : abs(xbuf[offsetX]); + } + + ix = offsetX; + for ( i = 0; i < N; i++ ) { + v = get ? x.get( ix ) : x[ ix ]; + if ( v === v ) { + break; + } + ix += strideX; + } + if ( i === N ) { + return NaN; + } + min = abs( v ); + i += 1; + for ( i; i < N; i++ ) { + ix += strideX; + v = get ? get( xbuf, ix ) : xbuf[ ix ]; + v = abs( v ); + if ( isnan( v ) ) { + continue; + } + if ( v < min ) { + min = v; + } + } + return min; +} + +// EXPORTS // + +module.exports = nanminabs; From e5f5847f7c1bd673953fd5c7901be8d2da4d7a4f Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Thu, 13 Mar 2025 13:16:08 +0530 Subject: [PATCH 05/43] Update benchmark.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> --- .../base/nanminabs/benchmark/benchmark.js | 21 +++++++------------ 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/nanminabs/benchmark/benchmark.js b/lib/node_modules/@stdlib/stats/base/nanminabs/benchmark/benchmark.js index d79514ceffbe..731d2e2edc2c 100644 --- a/lib/node_modules/@stdlib/stats/base/nanminabs/benchmark/benchmark.js +++ b/lib/node_modules/@stdlib/stats/base/nanminabs/benchmark/benchmark.js @@ -1,7 +1,7 @@ /** * @license Apache-2.0 * -* Copyright (c) 2020 The Stdlib Authors. +* 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. @@ -21,13 +21,16 @@ // MODULES // var bench = require( '@stdlib/bench' ); -var randu = require( '@stdlib/random/base/randu' ); +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 pkg = require( './../package.json' ).name; var nanminabs = require( './../lib/nanminabs.js' ); - +// VARIABLES // +var options = { + 'dtype': 'generic' +}; // FUNCTIONS // /** @@ -38,17 +41,7 @@ var nanminabs = require( './../lib/nanminabs.js' ); * @returns {Function} benchmark function */ function createBenchmark( len ) { - var x; - var i; - - x = []; - for ( i = 0; i < len; i++ ) { - if ( randu() < 0.2 ) { - x.push( NaN ); - } else { - x.push( ( randu()*20.0 ) - 10.0 ); - } - } + var x = uniform( len, -10, 10, options ); return benchmark; function benchmark( b ) { From 6d6d131b2481c09a49f81217779413fea3946e17 Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Thu, 13 Mar 2025 13:16:48 +0530 Subject: [PATCH 06/43] Update benchmark.ndarray.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> --- .../nanminabs/benchmark/benchmark.ndarray.js | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/nanminabs/benchmark/benchmark.ndarray.js b/lib/node_modules/@stdlib/stats/base/nanminabs/benchmark/benchmark.ndarray.js index 9513c718b3ad..67342d333021 100644 --- a/lib/node_modules/@stdlib/stats/base/nanminabs/benchmark/benchmark.ndarray.js +++ b/lib/node_modules/@stdlib/stats/base/nanminabs/benchmark/benchmark.ndarray.js @@ -21,12 +21,16 @@ // MODULES // var bench = require( '@stdlib/bench' ); -var randu = require( '@stdlib/random/base/randu' ); +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 pkg = require( './../package.json' ).name; var nanminabs = require( './../lib/ndarray.js' ); +// VARIABLES // +var options = { + 'dtype': 'generic' +}; // FUNCTIONS // @@ -38,17 +42,7 @@ var nanminabs = require( './../lib/ndarray.js' ); * @returns {Function} benchmark function */ function createBenchmark( len ) { - var x; - var i; - - x = []; - for ( i = 0; i < len; i++ ) { - if ( randu() < 0.2 ) { - x.push( NaN ); - } else { - x.push( ( randu()*20.0 ) - 10.0 ); - } - } + var x = uniform( len, -10, 10, options ); return benchmark; function benchmark( b ) { From 1b702506a075b54c78349f93b6e4530d6d1ffe50 Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Thu, 13 Mar 2025 13:19:19 +0530 Subject: [PATCH 07/43] Update README.md Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> --- .../@stdlib/stats/base/nanminabs/README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/nanminabs/README.md b/lib/node_modules/@stdlib/stats/base/nanminabs/README.md index cdced0c3fcde..aacc11c98ca5 100644 --- a/lib/node_modules/@stdlib/stats/base/nanminabs/README.md +++ b/lib/node_modules/@stdlib/stats/base/nanminabs/README.md @@ -2,7 +2,7 @@ @license Apache-2.0 -Copyright (c) 2020 The Stdlib Authors. +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. @@ -36,7 +36,7 @@ limitations under the License. var nanminabs = require( '@stdlib/stats/base/nanminabs' ); ``` -#### nanminabs( N, x, stride ) +#### nanminabs( N, x, strideX ) Computes the minimum absolute value of a strided array `x`, ignoring `NaN` values. @@ -54,7 +54,7 @@ The function has the following parameters: - **x**: input [`Array`][mdn-array] or [`typed array`][mdn-typed-array]. - **stride**: index increment for `x`. -The `N` and `stride` parameters determine which elements in `x` are accessed at runtime. For example, to compute the minimum absolute value of every other element in `x`, +The `N` and `strideX` parameters determine which elements in `x` are accessed at runtime. For example, to compute the minimum absolute value of every other element in `x`, ```javascript var floor = require( '@stdlib/math/base/special/floor' ); @@ -83,7 +83,7 @@ var v = nanminabs( N, x1, 2 ); // returns 1.0 ``` -#### nanminabs.ndarray( N, x, stride, offset ) +#### nanminabs.ndarray( N, x, strideX, offsetX ) Computes the minimum absolute value of a strided array, ignoring `NaN` values and using alternative indexing semantics. @@ -97,9 +97,9 @@ var v = nanminabs.ndarray( N, x, 1, 0 ); The function has the following additional parameters: -- **offset**: starting index for `x`. +- **offsetX**: starting index for `x`. -While [`typed array`][mdn-typed-array] views mandate a view offset based on the underlying `buffer`, the `offset` parameter supports indexing semantics based on a starting index. For example, to calculate the minimum absolute value for every other value in `x` starting from the second value +While [`typed array`][mdn-typed-array] views mandate a view offset based on the underlying `buffer`, the `offsetX` parameter supports indexing semantics based on a starting index. For example, to calculate the minimum absolute value for every other value in `x` starting from the second value ```javascript var floor = require( '@stdlib/math/base/special/floor' ); From 8b839c058dfdae4d0795d9e65c61b7bbc913d9ac Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Thu, 13 Mar 2025 13:20:00 +0530 Subject: [PATCH 08/43] Update test.ndarray.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> --- .../stats/base/nanminabs/test/test.ndarray.js | 126 +++++------------- 1 file changed, 32 insertions(+), 94 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/nanminabs/test/test.ndarray.js b/lib/node_modules/@stdlib/stats/base/nanminabs/test/test.ndarray.js index 7b909841c5fa..a2f6856a8b9b 100644 --- a/lib/node_modules/@stdlib/stats/base/nanminabs/test/test.ndarray.js +++ b/lib/node_modules/@stdlib/stats/base/nanminabs/test/test.ndarray.js @@ -1,7 +1,7 @@ /** * @license Apache-2.0 * -* Copyright (c) 2020 The Stdlib Authors. +* 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. @@ -26,7 +26,6 @@ var isnan = require( '@stdlib/math/base/assert/is-nan' ); var isPositiveZero = require( '@stdlib/math/base/assert/is-positive-zero' ); var nanminabs = require( './../lib/ndarray.js' ); - // TESTS // tape( 'main export is a function', function test( t ) { @@ -41,8 +40,7 @@ tape( 'the function has an arity of 4', function test( t ) { }); tape( 'the function calculates the minimum absolute value of a strided array', function test( t ) { - var x; - var v; + var x, v; x = [ 1.0, -2.0, -4.0, 5.0, NaN, 0.0, 3.0 ]; v = nanminabs( x.length, x, 1, 0 ); @@ -67,116 +65,56 @@ tape( 'the function calculates the minimum absolute value of a strided array', f t.end(); }); -tape( 'if provided an `N` parameter less than or equal to `0`, the function returns `NaN`', function test( t ) { - var x; - var v; - - x = [ 1.0, -2.0, -4.0, 5.0, 3.0 ]; +tape( 'if N <= 0, the function returns NaN', function test( t ) { + var x = [ 1.0, -2.0, -4.0, 5.0, 3.0 ]; - v = nanminabs( 0, x, 1, 0 ); - t.strictEqual( isnan( v ), true, 'returns expected value' ); - - v = nanminabs( -1, x, 1, 0 ); - t.strictEqual( isnan( v ), true, 'returns expected value' ); + t.strictEqual( isnan( nanminabs( 0, x, 1, 0 ) ), true, 'returns NaN' ); + t.strictEqual( isnan( nanminabs( -1, x, 1, 0 ) ), true, 'returns NaN' ); t.end(); }); -tape( 'if provided an `N` parameter equal to `1`, the function returns the first indexed element', function test( t ) { - var x; - var v; - - x = [ 1.0, -2.0, -4.0, 5.0, 3.0 ]; - - v = nanminabs( 1, x, 1, 0 ); - t.strictEqual( v, 1.0, 'returns expected value' ); - +tape( 'if N = 1, the function returns the first indexed element', function test( t ) { + var x = [ 1.0, -2.0, -4.0, 5.0, 3.0 ]; + t.strictEqual( nanminabs( 1, x, 1, 0 ), 1.0, 'returns expected value' ); t.end(); }); -tape( 'the function supports a `stride` parameter', function test( t ) { - var N; - var x; - var v; - - x = [ - 1.0, // 0 - 2.0, - 2.0, // 1 - -7.0, - -2.0, // 2 - 3.0, - 4.0, // 3 - 2.0, - NaN, // 4 - NaN - ]; - - N = floor( x.length / 2 ); - v = nanminabs( N, x, 2, 0 ); - +tape( 'the function supports a stride parameter', function test( t ) { + var x = [ 1.0, 2.0, 2.0, -7.0, -2.0, 3.0, 4.0, 2.0, NaN, NaN ]; + var N = floor( x.length / 2 ); + var v = nanminabs( N, x, 2, 0 ); t.strictEqual( v, 1.0, 'returns expected value' ); t.end(); }); -tape( 'the function supports a negative `stride` parameter', function test( t ) { - var N; - var x; - var v; - - x = [ - NaN, // 4 - NaN, - 1.0, // 3 - 2.0, - 2.0, // 2 - -7.0, - -2.0, // 1 - 3.0, - 4.0, // 0 - 2.0 - ]; - - N = floor( x.length / 2 ); - v = nanminabs( N, x, -2, 8 ); - +tape( 'the function supports a negative stride parameter', function test( t ) { + var x = [ NaN, NaN, 1.0, 2.0, 2.0, -7.0, -2.0, 3.0, 4.0, 2.0 ]; + var N = floor( x.length / 2 ); + var v = nanminabs( N, x, -2, 8 ); t.strictEqual( v, 1.0, 'returns expected value' ); t.end(); }); -tape( 'if provided a `stride` parameter equal to `0`, the function returns the first indexed element', function test( t ) { - var x; - var v; - - x = [ 1.0, -2.0, -4.0, 5.0, 3.0 ]; - - v = nanminabs( x.length, x, 0, 0 ); - t.strictEqual( v, 1.0, 'returns expected value' ); - +tape( 'if stride = 0, the function returns the first indexed element', function test( t ) { + var x = [ 1.0, -2.0, -4.0, 5.0, 3.0 ]; + t.strictEqual( nanminabs( x.length, x, 0, 0 ), 1.0, 'returns expected value' ); t.end(); }); -tape( 'the function supports an `offset` parameter', function test( t ) { - var N; - var x; - var v; - - x = [ - 2.0, - 1.0, // 0 - 2.0, - -2.0, // 1 - -2.0, - 2.0, // 2 - 3.0, - 4.0, // 3 - NaN, - NaN // 4 - ]; - N = floor( x.length / 2 ); - - v = nanminabs( N, x, 2, 1 ); +tape( 'the function supports an offset parameter', function test( t ) { + var x = [ 2.0, 1.0, 2.0, -2.0, -2.0, 2.0, 3.0, 4.0, NaN, NaN ]; + var N = floor( x.length / 2 ); + var v = nanminabs( N, x, 2, 1 ); t.strictEqual( v, 1.0, 'returns expected value' ); + t.end(); +}); +tape( 'the function handles large arrays efficiently', function test( t ) { + var x = new Array( 1e6 ).fill( NaN ); + x[500] = -3.0; + x[750000] = 2.0; + var v = nanminabs( x.length, x, 1, 0 ); + t.strictEqual( v, 2.0, 'returns expected value' ); t.end(); }); From 545f23a0ff600d4f59044e5f28ea4990489f2b63 Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Thu, 13 Mar 2025 13:20:26 +0530 Subject: [PATCH 09/43] Update test.nanminabs.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> --- .../base/nanminabs/test/test.nanminabs.js | 278 +++++++++--------- 1 file changed, 131 insertions(+), 147 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/nanminabs/test/test.nanminabs.js b/lib/node_modules/@stdlib/stats/base/nanminabs/test/test.nanminabs.js index c16643bfa1d5..087dcee503a5 100644 --- a/lib/node_modules/@stdlib/stats/base/nanminabs/test/test.nanminabs.js +++ b/lib/node_modules/@stdlib/stats/base/nanminabs/test/test.nanminabs.js @@ -21,167 +21,151 @@ // MODULES // var tape = require( 'tape' ); -var floor = require( '@stdlib/math/base/special/floor' ); var isnan = require( '@stdlib/math/base/assert/is-nan' ); var isPositiveZero = require( '@stdlib/math/base/assert/is-positive-zero' ); var Float64Array = require( '@stdlib/array/float64' ); var nanminabs = require( './../lib/nanminabs.js' ); - +var toAccessorArray = require( '@stdlib/array/base/to-accessor-array' ); // TESTS // -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof nanminabs, 'function', 'main export is a function' ); +tape('main export is a function', function test(t) { + t.ok(true, __filename); + t.strictEqual(typeof nanminabs, 'function', 'main export is a function'); t.end(); -}); - -tape( 'the function has an arity of 3', function test( t ) { - t.strictEqual( nanminabs.length, 3, 'has expected arity' ); + }); + + tape('the function calculates the minimum absolute value of a strided array (with accessor support)', function test(t) { + var x, v; + + x = toAccessorArray([1.0, -2.0, -4.0, 5.0, 0.0, 3.0, NaN, NaN]); + v = nanminabs(x.data.length, x, 1, 0); + t.strictEqual(v, 0.0, 'returns expected value'); + + x = toAccessorArray([-4.0, NaN, -5.0]); + v = nanminabs(x.data.length, x, 1, 0); + t.strictEqual(v, 4.0, 'returns expected value'); + + x = toAccessorArray([0.0, NaN, -0.0, 0.0]); + v = nanminabs(x.data.length, x, 1, 0); + t.strictEqual(isPositiveZero(v), true, 'returns expected value'); + + x = toAccessorArray([NaN]); + v = nanminabs(x.data.length, x, 1, 0); + t.strictEqual(isnan(v), true, 'returns expected value'); + + x = toAccessorArray([NaN, NaN]); + v = nanminabs(x.data.length, x, 1, 0); + t.strictEqual(isnan(v), true, 'returns expected value'); + t.end(); -}); - -tape( 'the function calculates the minimum absolute value of a strided array', function test( t ) { - var x; - var v; - - x = [ 1.0, -2.0, -4.0, 5.0, 0.0, 3.0, NaN, NaN ]; - v = nanminabs( x.length, x, 1 ); - t.strictEqual( v, 0.0, 'returns expected value' ); - - x = [ -4.0, NaN, -5.0 ]; - v = nanminabs( x.length, x, 1 ); - t.strictEqual( v, 4.0, 'returns expected value' ); - - x = [ 0.0, NaN, -0.0, 0.0 ]; - v = nanminabs( x.length, x, 1 ); - t.strictEqual( isPositiveZero( v ), true, 'returns expected value' ); - - x = [ NaN ]; - v = nanminabs( x.length, x, 1 ); - t.strictEqual( isnan( v ), true, 'returns expected value' ); - - x = [ NaN, NaN ]; - v = nanminabs( x.length, x, 1 ); - t.strictEqual( isnan( v ), true, 'returns expected value' ); - + }); + + tape('if provided an `N` parameter less than or equal to `0`, the function returns `NaN`', function test(t) { + var x, v; + + x = toAccessorArray([1.0, -2.0, -4.0, 5.0, 3.0]); + + v = nanminabs(0, x, 1, 0); + t.strictEqual(isnan(v), true, 'returns expected value'); + + v = nanminabs(-1, x, 1, 0); + t.strictEqual(isnan(v), true, 'returns expected value'); + t.end(); -}); - -tape( 'if provided an `N` parameter less than or equal to `0`, the function returns `NaN`', function test( t ) { - var x; - var v; - - x = [ 1.0, -2.0, -4.0, 5.0, 3.0 ]; - - v = nanminabs( 0, x, 1 ); - t.strictEqual( isnan( v ), true, 'returns expected value' ); - - v = nanminabs( -1, x, 1 ); - t.strictEqual( isnan( v ), true, 'returns expected value' ); - - t.end(); -}); - -tape( 'if provided an `N` parameter equal to `1`, the function returns the first element', function test( t ) { - var x; - var v; - - x = [ 1.0, -2.0, -4.0, 5.0, 3.0 ]; - - v = nanminabs( 1, x, 1 ); - t.strictEqual( v, 1.0, 'returns expected value' ); - + }); + + tape('if provided an `N` parameter equal to `1`, the function returns the first element', function test(t) { + var x, v; + + x = toAccessorArray([1.0, -2.0, -4.0, 5.0, 3.0]); + + v = nanminabs(1, x, 1, 0); + t.strictEqual(v, 1.0, 'returns expected value'); + t.end(); -}); - -tape( 'the function supports a `stride` parameter', function test( t ) { - var N; - var x; - var v; - - x = [ - 1.0, // 0 - 2.0, - 2.0, // 1 - -7.0, - -2.0, // 2 - 3.0, - 4.0, // 3 - 2.0, - NaN, // 4 - NaN - ]; - - N = floor( x.length / 2 ); - v = nanminabs( N, x, 2 ); - - t.strictEqual( v, 1.0, 'returns expected value' ); + }); + + tape('the function supports a `stride` parameter', function test(t) { + var N, x, v; + + x = toAccessorArray([ + 1.0, + 2.0, + 2.0, + -7.0, + -2.0, + 3.0, + 4.0, + 2.0, + NaN, + NaN + ]); + + N = Math.floor(x.data.length / 2); + v = nanminabs(N, x, 2, 0); + + t.strictEqual(v, 1.0, 'returns expected value'); t.end(); -}); - -tape( 'the function supports a negative `stride` parameter', function test( t ) { - var N; - var x; - var v; - - x = [ - NaN, // 4 - NaN, - 1.0, // 3 - 2.0, - 2.0, // 2 - -7.0, - -2.0, // 1 - 3.0, - 4.0, // 0 - 2.0 - ]; - - N = floor( x.length / 2 ); - v = nanminabs( N, x, -2 ); - - t.strictEqual( v, 1.0, 'returns expected value' ); + }); + + tape('the function supports a negative `stride` parameter', function test(t) { + var N, x, v; + + x = toAccessorArray([ + NaN, + NaN, + 1.0, + 2.0, + 2.0, + -7.0, + -2.0, + 3.0, + 4.0, + 2.0 + ]); + + N = Math.floor(x.data.length / 2); + v = nanminabs(N, x, -2, x.data.length - 1); + + t.strictEqual(v, 1.0, 'returns expected value'); t.end(); -}); - -tape( 'if provided a `stride` parameter equal to `0`, the function returns the first element', function test( t ) { - var x; - var v; - - x = [ 1.0, -2.0, -4.0, 5.0, 3.0 ]; - - v = nanminabs( x.length, x, 0 ); - t.strictEqual( v, 1.0, 'returns expected value' ); - + }); + + tape('if provided a `stride` parameter equal to `0`, the function returns the first element', function test(t) { + var x, v; + + x = toAccessorArray([1.0, -2.0, -4.0, 5.0, 3.0]); + + v = nanminabs(x.data.length, x, 0, 0); + t.strictEqual(v, 1.0, 'returns expected value'); + t.end(); -}); - -tape( 'the function supports view offsets', function test( t ) { - var x0; - var x1; - var N; - var v; - + }); + + tape('the function supports view offsets', function test(t) { + var x0, x1, N, v; + x0 = new Float64Array([ - 2.0, - 1.0, // 0 - 2.0, - -2.0, // 1 - -2.0, - 2.0, // 2 - 3.0, - 4.0, // 3 - 6.0, - NaN, // 4 - NaN + 2.0, + 1.0, + 2.0, + -2.0, + -2.0, + 2.0, + 3.0, + 4.0, + 6.0, + NaN, + NaN ]); - - x1 = new Float64Array( x0.buffer, x0.BYTES_PER_ELEMENT*1 ); // start at 2nd element - N = floor(x1.length / 2); - - v = nanminabs( N, x1, 2 ); - t.strictEqual( v, 1.0, 'returns expected value' ); - + + x1 = new Float64Array(x0.buffer, x0.BYTES_PER_ELEMENT * 1); // start at 2nd element + N = Math.floor(x1.length / 2); + + x1 = toAccessorArray(x1); + v = nanminabs(N, x1, 2, 0); + t.strictEqual(v, 1.0, 'returns expected value'); + t.end(); -}); + }); From 1a1eff4776f9a3cd8dade80f3f315fd15aeba9ae Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Thu, 13 Mar 2025 13:20:55 +0530 Subject: [PATCH 10/43] Update test.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> From 4b58244a65ca9dbb6d01a9a7726329eb0492975b Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Thu, 13 Mar 2025 18:19:47 +0530 Subject: [PATCH 11/43] fixed linting error in accessors.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> --- .../stats/base/nanminabs/lib/accessors.js | 71 +++++++++++-------- 1 file changed, 41 insertions(+), 30 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js index e21001f8e6f8..ac0fc2b38827 100644 --- a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js +++ b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js @@ -21,66 +21,77 @@ // MODULES // var isnan = require('@stdlib/math/base/assert/is-nan'); -var abs = require('@stdlib/math/base/special/abs'); +var abs = require('@stdlib/math/base/special/abs'); // MAIN // /** * Computes the minimum absolute value of a strided array, ignoring `NaN` values, * and supports accessor protocol. - +* * @param {PositiveInteger} N - number of indexed elements * @param {Object} x - input array object * @param {Collection} x.data - input array data * @param {Array} x.accessors - array element accessors * @param {integer} strideX - stride length for `x` * @param {NonNegativeInteger} offsetX - starting index for `x` -* @returns {Object} output array object +* @returns {number} minimum absolute value +* * @example - +* var x = { +* data: [ -2.0, NaN, -1.0, -3.0 ], +* accessors: [ (arr, idx) => arr[idx] ] +* }; +* var v = nanminabs( 4, x, 1, 0 ); +* // returns 1.0 */ -function nanminabs( N, x, strideX, offsetX) { - var xbuf; - var get; - var min; - var ix; - var v; - var i; - - // Cache reference to array data: - xbuf = x.data; - - // Cache a reference to the element accessor: - get = x.accessors[ 0 ]; - - if ( N === 1 || strideX === 0 ) { - return get ? abs(get(xbuf, offsetX)) : abs(xbuf[offsetX]); +function nanminabs(N, x, strideX, offsetX) { + var xbuf; + var get; + var min; + var ix; + var v; + var i; + + // Cache reference to array data: + xbuf = x.data; + + // Cache a reference to the element accessor: + get = x.accessors[0]; + + if (N === 1 || strideX === 0) { + return get ? abs(get(xbuf, offsetX)) : abs(xbuf[offsetX]); } ix = offsetX; - for ( i = 0; i < N; i++ ) { - v = get ? x.get( ix ) : x[ ix ]; - if ( v === v ) { + + for (i = 0; i < N; i++) { + v = get ? get(xbuf, ix) : xbuf[ix]; + if (v === v) { break; } ix += strideX; } - if ( i === N ) { + + if (i === N) { return NaN; } - min = abs( v ); + + min = abs(v); i += 1; - for ( i; i < N; i++ ) { + + for (; i < N; i++) { ix += strideX; - v = get ? get( xbuf, ix ) : xbuf[ ix ]; - v = abs( v ); - if ( isnan( v ) ) { + v = get ? get(xbuf, ix) : xbuf[ix]; + v = abs(v); + if (isnan(v)) { continue; } - if ( v < min ) { + if (v < min) { min = v; } } + return min; } From 2021fb28e56577438401b50d56a5959b0721106f Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Thu, 13 Mar 2025 18:28:18 +0530 Subject: [PATCH 12/43] Update accessors.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> --- .../stats/base/nanminabs/lib/accessors.js | 120 ++++++++---------- 1 file changed, 54 insertions(+), 66 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js index ac0fc2b38827..ed6149ffbc62 100644 --- a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js +++ b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js @@ -26,73 +26,61 @@ var abs = require('@stdlib/math/base/special/abs'); // MAIN // /** -* Computes the minimum absolute value of a strided array, ignoring `NaN` values, -* and supports accessor protocol. -* -* @param {PositiveInteger} N - number of indexed elements -* @param {Object} x - input array object -* @param {Collection} x.data - input array data -* @param {Array} x.accessors - array element accessors -* @param {integer} strideX - stride length for `x` -* @param {NonNegativeInteger} offsetX - starting index for `x` -* @returns {number} minimum absolute value -* -* @example -* var x = { -* data: [ -2.0, NaN, -1.0, -3.0 ], -* accessors: [ (arr, idx) => arr[idx] ] -* }; -* var v = nanminabs( 4, x, 1, 0 ); -* // returns 1.0 -*/ + * Computes the minimum absolute value of a strided array, ignoring `NaN` values, + * and supports accessor protocol. + * + * @param {PositiveInteger} N - number of indexed elements + * @param {Object} x - input array object + * @param {Collection} x.data - input array data + * @param {Array} x.accessors - array element accessors + * @param {integer} strideX - stride length for `x` + * @param {NonNegativeInteger} offsetX - starting index for `x` + * @returns {Object} output array object + * + * @example + * var data = { data: [ -3, NaN, 2, -1 ], accessors: [ (arr, idx) => arr[idx] ] }; + * var minAbs = nanminabs( 4, data, 1, 0 ); + * // returns 1 + */ function nanminabs(N, x, strideX, offsetX) { - var xbuf; - var get; - var min; - var ix; - var v; - var i; - - // Cache reference to array data: - xbuf = x.data; - - // Cache a reference to the element accessor: - get = x.accessors[0]; - - if (N === 1 || strideX === 0) { - return get ? abs(get(xbuf, offsetX)) : abs(xbuf[offsetX]); - } - - ix = offsetX; - - for (i = 0; i < N; i++) { - v = get ? get(xbuf, ix) : xbuf[ix]; - if (v === v) { - break; - } - ix += strideX; - } - - if (i === N) { - return NaN; - } - - min = abs(v); - i += 1; - - for (; i < N; i++) { - ix += strideX; - v = get ? get(xbuf, ix) : xbuf[ix]; - v = abs(v); - if (isnan(v)) { - continue; - } - if (v < min) { - min = v; - } - } - - return min; + var xbuf; + var get; + var min; + var ix; + var v; + var i; + + // Cache reference to array data: + xbuf = x.data; + + // Cache a reference to the element accessor: + get = x.accessors[0]; + + if (N === 1 || strideX === 0) { + return get ? abs(get(xbuf, offsetX)) : abs(xbuf[offsetX]); + } + + ix = offsetX; + for (i = 0; i < N; i++) { + v = get ? get(xbuf, ix) : xbuf[ix]; + if (v === v) { + break; + } + ix += strideX; + } + if (i === N) { + return NaN; + } + min = abs(v); + for (i += 1; i < N; i++) { + ix += strideX; + v = get ? get(xbuf, ix) : xbuf[ix]; + v = abs(v); + if (!isnan(v) && v < min) { + min = v; + } + } + return min; } // EXPORTS // From 454fa59debd387e22a34a62f1f4c02c68abb6c6e Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Thu, 13 Mar 2025 18:41:47 +0530 Subject: [PATCH 13/43] Update main.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> --- lib/node_modules/@stdlib/stats/base/nanminabs/lib/main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/main.js b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/main.js index ba9869f18c6f..7fb06b469308 100644 --- a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/main.js +++ b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/main.js @@ -23,7 +23,7 @@ var nanminabs = require( './nanminabs.js' ); var ndarray = require( './ndarray.js' ); var stride2offset = require( '@stdlib/strided/base/stride2offset' ); - +var setReadOnly = require( '@stdlib/utils/define-read-only-property' ); // MAIN // /** From eff537de69a12a4a516d6926ad7b5455ac7a6476 Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Thu, 13 Mar 2025 18:49:11 +0530 Subject: [PATCH 14/43] Update test.nanminabs.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> --- .../base/nanminabs/test/test.nanminabs.js | 116 +++++++++--------- 1 file changed, 58 insertions(+), 58 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/nanminabs/test/test.nanminabs.js b/lib/node_modules/@stdlib/stats/base/nanminabs/test/test.nanminabs.js index 087dcee503a5..45e2b993d283 100644 --- a/lib/node_modules/@stdlib/stats/base/nanminabs/test/test.nanminabs.js +++ b/lib/node_modules/@stdlib/stats/base/nanminabs/test/test.nanminabs.js @@ -1,7 +1,7 @@ /** * @license Apache-2.0 * -* Copyright (c) 2020 The Stdlib Authors. +* 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. @@ -33,62 +33,62 @@ tape('main export is a function', function test(t) { t.ok(true, __filename); t.strictEqual(typeof nanminabs, 'function', 'main export is a function'); t.end(); - }); - - tape('the function calculates the minimum absolute value of a strided array (with accessor support)', function test(t) { +}); + +tape('the function calculates the minimum absolute value of a strided array (with accessor support)', function test(t) { var x, v; - + x = toAccessorArray([1.0, -2.0, -4.0, 5.0, 0.0, 3.0, NaN, NaN]); - v = nanminabs(x.data.length, x, 1, 0); + v = nanminabs(x.length, x, 1, 0); t.strictEqual(v, 0.0, 'returns expected value'); - + x = toAccessorArray([-4.0, NaN, -5.0]); - v = nanminabs(x.data.length, x, 1, 0); + v = nanminabs(x.length, x, 1, 0); t.strictEqual(v, 4.0, 'returns expected value'); - + x = toAccessorArray([0.0, NaN, -0.0, 0.0]); - v = nanminabs(x.data.length, x, 1, 0); + v = nanminabs(x.length, x, 1, 0); t.strictEqual(isPositiveZero(v), true, 'returns expected value'); - + x = toAccessorArray([NaN]); - v = nanminabs(x.data.length, x, 1, 0); + v = nanminabs(x.length, x, 1, 0); t.strictEqual(isnan(v), true, 'returns expected value'); - + x = toAccessorArray([NaN, NaN]); - v = nanminabs(x.data.length, x, 1, 0); + v = nanminabs(x.length, x, 1, 0); t.strictEqual(isnan(v), true, 'returns expected value'); - + t.end(); - }); - - tape('if provided an `N` parameter less than or equal to `0`, the function returns `NaN`', function test(t) { +}); + +tape('if provided an `N` parameter less than or equal to `0`, the function returns `NaN`', function test(t) { var x, v; - + x = toAccessorArray([1.0, -2.0, -4.0, 5.0, 3.0]); - + v = nanminabs(0, x, 1, 0); t.strictEqual(isnan(v), true, 'returns expected value'); - + v = nanminabs(-1, x, 1, 0); t.strictEqual(isnan(v), true, 'returns expected value'); - + t.end(); - }); - - tape('if provided an `N` parameter equal to `1`, the function returns the first element', function test(t) { +}); + +tape('if provided an `N` parameter equal to `1`, the function returns the first element', function test(t) { var x, v; - + x = toAccessorArray([1.0, -2.0, -4.0, 5.0, 3.0]); - + v = nanminabs(1, x, 1, 0); t.strictEqual(v, 1.0, 'returns expected value'); - + t.end(); - }); - - tape('the function supports a `stride` parameter', function test(t) { +}); + +tape('the function supports a `stride` parameter', function test(t) { var N, x, v; - + x = toAccessorArray([ 1.0, 2.0, @@ -101,17 +101,17 @@ tape('main export is a function', function test(t) { NaN, NaN ]); - - N = Math.floor(x.data.length / 2); + + N = Math.floor(x.length / 2); v = nanminabs(N, x, 2, 0); - + t.strictEqual(v, 1.0, 'returns expected value'); t.end(); - }); - - tape('the function supports a negative `stride` parameter', function test(t) { +}); + +tape('the function supports a negative `stride` parameter', function test(t) { var N, x, v; - + x = toAccessorArray([ NaN, NaN, @@ -124,28 +124,28 @@ tape('main export is a function', function test(t) { 4.0, 2.0 ]); - - N = Math.floor(x.data.length / 2); - v = nanminabs(N, x, -2, x.data.length - 1); - + + N = Math.floor(x.length / 2); + v = nanminabs(N, x, -2, x.length - 1); + t.strictEqual(v, 1.0, 'returns expected value'); t.end(); - }); - - tape('if provided a `stride` parameter equal to `0`, the function returns the first element', function test(t) { +}); + +tape('if provided a `stride` parameter equal to `0`, the function returns the first element', function test(t) { var x, v; - + x = toAccessorArray([1.0, -2.0, -4.0, 5.0, 3.0]); - - v = nanminabs(x.data.length, x, 0, 0); + + v = nanminabs(x.length, x, 0, 0); t.strictEqual(v, 1.0, 'returns expected value'); - + t.end(); - }); - - tape('the function supports view offsets', function test(t) { +}); + +tape('the function supports view offsets', function test(t) { var x0, x1, N, v; - + x0 = new Float64Array([ 2.0, 1.0, @@ -159,13 +159,13 @@ tape('main export is a function', function test(t) { NaN, NaN ]); - + x1 = new Float64Array(x0.buffer, x0.BYTES_PER_ELEMENT * 1); // start at 2nd element N = Math.floor(x1.length / 2); - + x1 = toAccessorArray(x1); v = nanminabs(N, x1, 2, 0); t.strictEqual(v, 1.0, 'returns expected value'); - + t.end(); - }); +}); From b1b03bbfdbb4cb7d54bf18a66cce6edee9a7f482 Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Thu, 13 Mar 2025 18:56:07 +0530 Subject: [PATCH 15/43] Update accessors.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> --- .../stats/base/nanminabs/lib/accessors.js | 84 ++++++++++--------- 1 file changed, 44 insertions(+), 40 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js index ed6149ffbc62..de716885e5e1 100644 --- a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js +++ b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js @@ -20,8 +20,8 @@ // MODULES // -var isnan = require('@stdlib/math/base/assert/is-nan'); -var abs = require('@stdlib/math/base/special/abs'); +var isnan = require( '@stdlib/math/base/assert/is-nan' ); +var abs = require( '@stdlib/math/base/special/abs' ); // MAIN // @@ -38,49 +38,53 @@ var abs = require('@stdlib/math/base/special/abs'); * @returns {Object} output array object * * @example - * var data = { data: [ -3, NaN, 2, -1 ], accessors: [ (arr, idx) => arr[idx] ] }; - * var minAbs = nanminabs( 4, data, 1, 0 ); - * // returns 1 + * var x = { data: [ -3.0, NaN, 2.0, -1.0 ], accessors: [ ( arr, i ) => arr[ i ] ] }; + * var minAbs = nanminabs( 4, x, 1, 0 ); + * // returns 1.0 */ -function nanminabs(N, x, strideX, offsetX) { - var xbuf; - var get; - var min; - var ix; - var v; - var i; +function nanminabs( N, x, strideX, offsetX ) { + var xbuf; + var get; + var min; + var ix; + var v; + var i; - // Cache reference to array data: - xbuf = x.data; + // Cache reference to array data: + xbuf = x.data; - // Cache a reference to the element accessor: - get = x.accessors[0]; + // Cache a reference to the element accessor: + get = x.accessors[ 0 ]; - if (N === 1 || strideX === 0) { - return get ? abs(get(xbuf, offsetX)) : abs(xbuf[offsetX]); - } + if ( N === 1 || strideX === 0 ) { + return get ? abs( get( xbuf, offsetX ) ) : abs( xbuf[ offsetX ] ); + } - ix = offsetX; - for (i = 0; i < N; i++) { - v = get ? get(xbuf, ix) : xbuf[ix]; - if (v === v) { - break; - } - ix += strideX; - } - if (i === N) { - return NaN; - } - min = abs(v); - for (i += 1; i < N; i++) { - ix += strideX; - v = get ? get(xbuf, ix) : xbuf[ix]; - v = abs(v); - if (!isnan(v) && v < min) { - min = v; - } - } - return min; + ix = offsetX; + for ( i = 0; i < N; i++ ) { + v = get ? get( xbuf, ix ) : xbuf[ ix ]; + if ( v === v ) { + break; + } + ix += strideX; + } + if ( i === N ) { + return NaN; + } + min = abs( v ); + + for ( i += 1; i < N; i++ ) { + ix += strideX; + v = get ? get( xbuf, ix ) : xbuf[ ix ]; + v = abs( v ); + if ( isnan( v ) ) { + continue; + } + if ( v < min ) { + min = v; + } + } + return min; } // EXPORTS // From d7a27f16b7d6f19ac1542c17e24bde23d7f58353 Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Thu, 13 Mar 2025 19:58:09 +0530 Subject: [PATCH 16/43] Update accessors.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> --- .../stats/base/nanminabs/lib/accessors.js | 106 +++++++++--------- 1 file changed, 53 insertions(+), 53 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js index de716885e5e1..ff5403542afe 100644 --- a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js +++ b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js @@ -26,65 +26,65 @@ var abs = require( '@stdlib/math/base/special/abs' ); // MAIN // /** - * Computes the minimum absolute value of a strided array, ignoring `NaN` values, - * and supports accessor protocol. - * - * @param {PositiveInteger} N - number of indexed elements - * @param {Object} x - input array object - * @param {Collection} x.data - input array data - * @param {Array} x.accessors - array element accessors - * @param {integer} strideX - stride length for `x` - * @param {NonNegativeInteger} offsetX - starting index for `x` - * @returns {Object} output array object - * - * @example - * var x = { data: [ -3.0, NaN, 2.0, -1.0 ], accessors: [ ( arr, i ) => arr[ i ] ] }; - * var minAbs = nanminabs( 4, x, 1, 0 ); - * // returns 1.0 - */ +* Computes the minimum absolute value of a strided array, ignoring `NaN` values. +* Supports accessor protocol. +* +* @param {PositiveInteger} N - number of indexed elements +* @param {Object} x - input array object +* @param {Collection} x.data - input array data +* @param {Array} x.accessors - array element accessors +* @param {integer} strideX - stride length for `x` +* @param {NonNegativeInteger} offsetX - starting index for `x` +* @returns {Object} output array object +* +* @example +* var x = { data: [ -3.0, NaN, 2.0, -1.0 ], accessors: [ ( arr, i ) => arr[ i ] ] }; +* var minAbs = nanminabs( 4, x, 1, 0 ); +* // returns 1.0 +*/ function nanminabs( N, x, strideX, offsetX ) { - var xbuf; - var get; - var min; - var ix; - var v; - var i; + var xbuf; + var get; + var min; + var ix; + var v; + var i; - // Cache reference to array data: - xbuf = x.data; + // Cache reference to array data: + xbuf = x.data; - // Cache a reference to the element accessor: - get = x.accessors[ 0 ]; + // Cache a reference to the element accessor: + get = x.accessors[ 0 ]; - if ( N === 1 || strideX === 0 ) { - return get ? abs( get( xbuf, offsetX ) ) : abs( xbuf[ offsetX ] ); - } + if ( N === 1 || strideX === 0 ) { + return ( get ? abs( get( xbuf, offsetX ) ) : abs( xbuf[ offsetX ] ) ); + } - ix = offsetX; - for ( i = 0; i < N; i++ ) { - v = get ? get( xbuf, ix ) : xbuf[ ix ]; - if ( v === v ) { - break; - } - ix += strideX; - } - if ( i === N ) { - return NaN; - } - min = abs( v ); + ix = offsetX; + for ( i = 0; i < N; i++ ) { + v = get ? get( xbuf, ix ) : xbuf[ ix ]; + if ( v === v ) { + break; + } + ix += strideX; + } + if ( i === N ) { + return NaN; + } + min = abs( v ); - for ( i += 1; i < N; i++ ) { - ix += strideX; - v = get ? get( xbuf, ix ) : xbuf[ ix ]; - v = abs( v ); - if ( isnan( v ) ) { - continue; - } - if ( v < min ) { - min = v; - } - } - return min; + for ( i += 1; i < N; i++ ) { + ix += strideX; + v = get ? get( xbuf, ix ) : xbuf[ ix ]; + v = abs( v ); + if ( isnan( v ) ) { + continue; + } + if ( v < min ) { + min = v; + } + } + return min; } // EXPORTS // From ca5a80e7723cf7e33ddd4c9c34ac0332078ae6bb Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Thu, 13 Mar 2025 20:04:58 +0530 Subject: [PATCH 17/43] Update accessors.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> --- .../@stdlib/stats/base/nanminabs/lib/accessors.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js index ff5403542afe..c46534b55875 100644 --- a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js +++ b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js @@ -57,12 +57,12 @@ function nanminabs( N, x, strideX, offsetX ) { get = x.accessors[ 0 ]; if ( N === 1 || strideX === 0 ) { - return ( get ? abs( get( xbuf, offsetX ) ) : abs( xbuf[ offsetX ] ) ); + return ( ( get ? abs( get( xbuf, offsetX ) ) : abs( xbuf[ offsetX ] ) ) ); } ix = offsetX; for ( i = 0; i < N; i++ ) { - v = get ? get( xbuf, ix ) : xbuf[ ix ]; + v = ( get ? get( xbuf, ix ) : xbuf[ ix ] ); if ( v === v ) { break; } @@ -75,7 +75,7 @@ function nanminabs( N, x, strideX, offsetX ) { for ( i += 1; i < N; i++ ) { ix += strideX; - v = get ? get( xbuf, ix ) : xbuf[ ix ]; + v = ( get ? get( xbuf, ix ) : xbuf[ ix ] ); v = abs( v ); if ( isnan( v ) ) { continue; @@ -85,6 +85,7 @@ function nanminabs( N, x, strideX, offsetX ) { } } return min; + } // EXPORTS // From 37f384ba9c840ab1c7275f1ff092964b7277b629 Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Thu, 13 Mar 2025 20:09:27 +0530 Subject: [PATCH 18/43] Update accessors.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> --- .../@stdlib/stats/base/nanminabs/lib/accessors.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js index c46534b55875..be22d045ac65 100644 --- a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js +++ b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js @@ -15,7 +15,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - 'use strict'; // MODULES // @@ -57,7 +56,8 @@ function nanminabs( N, x, strideX, offsetX ) { get = x.accessors[ 0 ]; if ( N === 1 || strideX === 0 ) { - return ( ( get ? abs( get( xbuf, offsetX ) ) : abs( xbuf[ offsetX ] ) ) ); + return ( ( get ? abs( get( xbuf, offsetX ) ) + : abs( xbuf[ offsetX ] ) ) ); } ix = offsetX; @@ -85,7 +85,6 @@ function nanminabs( N, x, strideX, offsetX ) { } } return min; - } // EXPORTS // From 3e64cdfa5a4f78d6f9ac7c11d26f4d1dc12d4f0e Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Fri, 14 Mar 2025 21:36:14 +0530 Subject: [PATCH 19/43] Update accessors.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> --- .../@stdlib/stats/base/nanminabs/lib/accessors.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js index be22d045ac65..fc93e9b98192 100644 --- a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js +++ b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js @@ -22,6 +22,8 @@ var isnan = require( '@stdlib/math/base/assert/is-nan' ); var abs = require( '@stdlib/math/base/special/abs' ); + + // MAIN // /** @@ -56,13 +58,12 @@ function nanminabs( N, x, strideX, offsetX ) { get = x.accessors[ 0 ]; if ( N === 1 || strideX === 0 ) { - return ( ( get ? abs( get( xbuf, offsetX ) ) - : abs( xbuf[ offsetX ] ) ) ); + return ( ( get ) ? abs( get( xbuf, offsetX ) ) : abs( xbuf[ offsetX ] ) ); } ix = offsetX; for ( i = 0; i < N; i++ ) { - v = ( get ? get( xbuf, ix ) : xbuf[ ix ] ); + v = ( ( get ) ? get( xbuf, ix ) : xbuf[ ix ] ); if ( v === v ) { break; } @@ -75,7 +76,7 @@ function nanminabs( N, x, strideX, offsetX ) { for ( i += 1; i < N; i++ ) { ix += strideX; - v = ( get ? get( xbuf, ix ) : xbuf[ ix ] ); + v = ( ( get ) ? get( xbuf, ix ) : xbuf[ ix ] ); v = abs( v ); if ( isnan( v ) ) { continue; @@ -87,6 +88,8 @@ function nanminabs( N, x, strideX, offsetX ) { return min; } + + // EXPORTS // module.exports = nanminabs; From e36963b2b04687a7f1109028f5163a945d1e798e Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Fri, 14 Mar 2025 21:46:43 +0530 Subject: [PATCH 20/43] Update test.nanminabs.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> --- .../@stdlib/stats/base/nanminabs/test/test.nanminabs.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/stats/base/nanminabs/test/test.nanminabs.js b/lib/node_modules/@stdlib/stats/base/nanminabs/test/test.nanminabs.js index 45e2b993d283..17246b791167 100644 --- a/lib/node_modules/@stdlib/stats/base/nanminabs/test/test.nanminabs.js +++ b/lib/node_modules/@stdlib/stats/base/nanminabs/test/test.nanminabs.js @@ -126,7 +126,7 @@ tape('the function supports a negative `stride` parameter', function test(t) { ]); N = Math.floor(x.length / 2); - v = nanminabs(N, x, -2, x.length - 1); + v = nanminabs(5, x, -2, 8); t.strictEqual(v, 1.0, 'returns expected value'); t.end(); From 1a633de28342657b32811892aeed4e5b2eff5b9b Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Fri, 14 Mar 2025 21:54:51 +0530 Subject: [PATCH 21/43] Update accessors.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> --- .../@stdlib/stats/base/nanminabs/lib/accessors.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js index fc93e9b98192..194cbe5f1aaf 100644 --- a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js +++ b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js @@ -23,7 +23,6 @@ var isnan = require( '@stdlib/math/base/assert/is-nan' ); var abs = require( '@stdlib/math/base/special/abs' ); - // MAIN // /** @@ -58,7 +57,10 @@ function nanminabs( N, x, strideX, offsetX ) { get = x.accessors[ 0 ]; if ( N === 1 || strideX === 0 ) { - return ( ( get ) ? abs( get( xbuf, offsetX ) ) : abs( xbuf[ offsetX ] ) ); + return ( ( get ) + ? abs( get( xbuf, offsetX ) ) + : abs( xbuf[ offsetX ] ) ) ); +); } ix = offsetX; @@ -89,7 +91,6 @@ function nanminabs( N, x, strideX, offsetX ) { } - // EXPORTS // module.exports = nanminabs; From 630d5c169d92f6249e3c577c0a5b9dc0d7e041fa Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Fri, 14 Mar 2025 22:00:35 +0530 Subject: [PATCH 22/43] Update accessors.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> --- lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js index 194cbe5f1aaf..3f4212e3bab6 100644 --- a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js +++ b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js @@ -60,7 +60,6 @@ function nanminabs( N, x, strideX, offsetX ) { return ( ( get ) ? abs( get( xbuf, offsetX ) ) : abs( xbuf[ offsetX ] ) ) ); -); } ix = offsetX; From b57c07f62b4796a997456f283aaa8c5a528d1547 Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Fri, 14 Mar 2025 22:03:32 +0530 Subject: [PATCH 23/43] Update accessors.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> --- .../@stdlib/stats/base/nanminabs/lib/accessors.js | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js index 3f4212e3bab6..2d16488814fd 100644 --- a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js +++ b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js @@ -22,7 +22,6 @@ var isnan = require( '@stdlib/math/base/assert/is-nan' ); var abs = require( '@stdlib/math/base/special/abs' ); - // MAIN // /** @@ -57,14 +56,12 @@ function nanminabs( N, x, strideX, offsetX ) { get = x.accessors[ 0 ]; if ( N === 1 || strideX === 0 ) { - return ( ( get ) - ? abs( get( xbuf, offsetX ) ) - : abs( xbuf[ offsetX ] ) ) ); + return ( get ? abs( get( xbuf, offsetX ) ) : abs( xbuf[ offsetX ] ) ); } ix = offsetX; for ( i = 0; i < N; i++ ) { - v = ( ( get ) ? get( xbuf, ix ) : xbuf[ ix ] ); + v = get ? get( xbuf, ix ) : xbuf[ ix ]; if ( v === v ) { break; } @@ -77,7 +74,7 @@ function nanminabs( N, x, strideX, offsetX ) { for ( i += 1; i < N; i++ ) { ix += strideX; - v = ( ( get ) ? get( xbuf, ix ) : xbuf[ ix ] ); + v = get ? get( xbuf, ix ) : xbuf[ ix ]; v = abs( v ); if ( isnan( v ) ) { continue; @@ -89,7 +86,6 @@ function nanminabs( N, x, strideX, offsetX ) { return min; } - // EXPORTS // module.exports = nanminabs; From 7cfc267d88047c510844906e2d870b2af65f8a28 Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Fri, 14 Mar 2025 22:10:29 +0530 Subject: [PATCH 24/43] Update test.nanminabs.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> --- .../@stdlib/stats/base/nanminabs/test/test.nanminabs.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/nanminabs/test/test.nanminabs.js b/lib/node_modules/@stdlib/stats/base/nanminabs/test/test.nanminabs.js index 17246b791167..b9a2743cac05 100644 --- a/lib/node_modules/@stdlib/stats/base/nanminabs/test/test.nanminabs.js +++ b/lib/node_modules/@stdlib/stats/base/nanminabs/test/test.nanminabs.js @@ -113,8 +113,6 @@ tape('the function supports a negative `stride` parameter', function test(t) { var N, x, v; x = toAccessorArray([ - NaN, - NaN, 1.0, 2.0, 2.0, @@ -126,7 +124,7 @@ tape('the function supports a negative `stride` parameter', function test(t) { ]); N = Math.floor(x.length / 2); - v = nanminabs(5, x, -2, 8); + v = nanminabs(5, x, -2, 6); t.strictEqual(v, 1.0, 'returns expected value'); t.end(); From 07a4746b161f9a0e7e334342b977bd1d8d70ddc4 Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Fri, 14 Mar 2025 22:12:23 +0530 Subject: [PATCH 25/43] Update accessors.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> --- .../@stdlib/stats/base/nanminabs/lib/accessors.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js index 2d16488814fd..09cad754d887 100644 --- a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js +++ b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js @@ -56,7 +56,9 @@ function nanminabs( N, x, strideX, offsetX ) { get = x.accessors[ 0 ]; if ( N === 1 || strideX === 0 ) { - return ( get ? abs( get( xbuf, offsetX ) ) : abs( xbuf[ offsetX ] ) ); + return ( ( get ) + ? abs( get( xbuf, offsetX ) ) + : abs( xbuf[ offsetX ] ) ) ); } ix = offsetX; From b334a812a70b6f3a62b98d2d561914b336f567e2 Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Fri, 14 Mar 2025 22:16:09 +0530 Subject: [PATCH 26/43] Update accessors.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> --- lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js index 09cad754d887..fc441d0a7087 100644 --- a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js +++ b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js @@ -58,7 +58,7 @@ function nanminabs( N, x, strideX, offsetX ) { if ( N === 1 || strideX === 0 ) { return ( ( get ) ? abs( get( xbuf, offsetX ) ) - : abs( xbuf[ offsetX ] ) ) ); + : abs( xbuf[ offsetX ] ) ); } ix = offsetX; From edb144f822a1b4b8e18d6bc4d6b7246d84d4a3dd Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Fri, 14 Mar 2025 22:55:27 +0530 Subject: [PATCH 27/43] Update test.nanminabs.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> --- .../@stdlib/stats/base/nanminabs/test/test.nanminabs.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/stats/base/nanminabs/test/test.nanminabs.js b/lib/node_modules/@stdlib/stats/base/nanminabs/test/test.nanminabs.js index b9a2743cac05..fa10bacca4ae 100644 --- a/lib/node_modules/@stdlib/stats/base/nanminabs/test/test.nanminabs.js +++ b/lib/node_modules/@stdlib/stats/base/nanminabs/test/test.nanminabs.js @@ -126,7 +126,7 @@ tape('the function supports a negative `stride` parameter', function test(t) { N = Math.floor(x.length / 2); v = nanminabs(5, x, -2, 6); - t.strictEqual(v, 1.0, 'returns expected value'); + t.strictEqual(v, -2.0, 'returns expected value'); t.end(); }); From e7cbe1f59cd1594a6a17a1e75eec4edda1ca8841 Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Fri, 14 Mar 2025 23:07:09 +0530 Subject: [PATCH 28/43] Update accessors.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> --- .../@stdlib/stats/base/nanminabs/lib/accessors.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js index fc441d0a7087..15c8af455621 100644 --- a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js +++ b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js @@ -17,11 +17,13 @@ */ 'use strict'; + // MODULES // var isnan = require( '@stdlib/math/base/assert/is-nan' ); var abs = require( '@stdlib/math/base/special/abs' ); + // MAIN // /** @@ -56,14 +58,15 @@ function nanminabs( N, x, strideX, offsetX ) { get = x.accessors[ 0 ]; if ( N === 1 || strideX === 0 ) { - return ( ( get ) - ? abs( get( xbuf, offsetX ) ) - : abs( xbuf[ offsetX ] ) ); + return ( (get) + ? abs( get( xbuf, offsetX)) + : abs( xbuf[offsetX]) +); } ix = offsetX; for ( i = 0; i < N; i++ ) { - v = get ? get( xbuf, ix ) : xbuf[ ix ]; + v = (get ? get(xbuf, ix) : xbuf[ix]); if ( v === v ) { break; } @@ -88,6 +91,7 @@ function nanminabs( N, x, strideX, offsetX ) { return min; } + // EXPORTS // module.exports = nanminabs; From cf21233160ef05e25f51e77b32451a4e260a9a4f Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Fri, 14 Mar 2025 23:13:10 +0530 Subject: [PATCH 29/43] Update test.nanminabs.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> --- .../@stdlib/stats/base/nanminabs/test/test.nanminabs.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/nanminabs/test/test.nanminabs.js b/lib/node_modules/@stdlib/stats/base/nanminabs/test/test.nanminabs.js index fa10bacca4ae..ab4e5be00774 100644 --- a/lib/node_modules/@stdlib/stats/base/nanminabs/test/test.nanminabs.js +++ b/lib/node_modules/@stdlib/stats/base/nanminabs/test/test.nanminabs.js @@ -113,6 +113,8 @@ tape('the function supports a negative `stride` parameter', function test(t) { var N, x, v; x = toAccessorArray([ + NaN, + NaN, 1.0, 2.0, 2.0, @@ -124,9 +126,9 @@ tape('the function supports a negative `stride` parameter', function test(t) { ]); N = Math.floor(x.length / 2); - v = nanminabs(5, x, -2, 6); + v = nanminabs(N, x, -2, 6); - t.strictEqual(v, -2.0, 'returns expected value'); + t.strictEqual(v, 1.0, 'returns expected value'); t.end(); }); From a18dff77959f7f0327289cd30bbbd81270840520 Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Fri, 14 Mar 2025 23:20:43 +0530 Subject: [PATCH 30/43] Update nanminabs.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> --- .../@stdlib/stats/base/nanminabs/lib/nanminabs.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/nanminabs.js b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/nanminabs.js index 78b4f721bc1b..b390db5dfbe6 100644 --- a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/nanminabs.js +++ b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/nanminabs.js @@ -62,11 +62,6 @@ function nanminabs( N, x, strideX, offsetX ) { if ( N === 1 || strideX === 0 ) { return x[ offsetX ]; } - if ( strideX < 0 ) { - ix = (1-N) * strideX; - } else { - ix = 0; - } for ( i = 0; i < N; i++ ) { v = x[ ix ]; if ( v === v ) { From 26b678214c552eafe62b5aeba137963c312494c6 Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Fri, 14 Mar 2025 23:27:51 +0530 Subject: [PATCH 31/43] Update accessors.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> --- .../@stdlib/stats/base/nanminabs/lib/accessors.js | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js index 15c8af455621..f3e14d0d73bb 100644 --- a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js +++ b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js @@ -17,7 +17,6 @@ */ 'use strict'; - // MODULES // var isnan = require( '@stdlib/math/base/assert/is-nan' ); @@ -58,15 +57,15 @@ function nanminabs( N, x, strideX, offsetX ) { get = x.accessors[ 0 ]; if ( N === 1 || strideX === 0 ) { - return ( (get) - ? abs( get( xbuf, offsetX)) - : abs( xbuf[offsetX]) -); + return ( (get) ? + abs( get( xbuf, offsetX)) : + abs( xbuf[offsetX]) + ); } ix = offsetX; for ( i = 0; i < N; i++ ) { - v = (get ? get(xbuf, ix) : xbuf[ix]); + v = ((get) ? get(xbuf, ix) : xbuf[ix]); if ( v === v ) { break; } @@ -79,7 +78,7 @@ function nanminabs( N, x, strideX, offsetX ) { for ( i += 1; i < N; i++ ) { ix += strideX; - v = get ? get( xbuf, ix ) : xbuf[ ix ]; + v = ((get) ? get(xbuf, ix) : xbuf[ix]); v = abs( v ); if ( isnan( v ) ) { continue; From 0aa0d8783cfd3f890dc4ff80361923123cf1d636 Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Fri, 14 Mar 2025 23:31:49 +0530 Subject: [PATCH 32/43] Update nanminabs.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> --- .../@stdlib/stats/base/nanminabs/lib/nanminabs.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/nanminabs.js b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/nanminabs.js index b390db5dfbe6..14418c32e002 100644 --- a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/nanminabs.js +++ b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/nanminabs.js @@ -62,6 +62,11 @@ function nanminabs( N, x, strideX, offsetX ) { if ( N === 1 || strideX === 0 ) { return x[ offsetX ]; } + if ( strideX < 0 ) { + ix = (1-N) * abs( strideX ); + } else { + ix = 0; + } for ( i = 0; i < N; i++ ) { v = x[ ix ]; if ( v === v ) { From 3691d9a671b20d903e555ad12c5f198d192b8497 Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Fri, 14 Mar 2025 23:35:59 +0530 Subject: [PATCH 33/43] Update accessors.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> --- .../@stdlib/stats/base/nanminabs/lib/accessors.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js index f3e14d0d73bb..89b33b1cebad 100644 --- a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js +++ b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js @@ -58,9 +58,9 @@ function nanminabs( N, x, strideX, offsetX ) { if ( N === 1 || strideX === 0 ) { return ( (get) ? - abs( get( xbuf, offsetX)) : - abs( xbuf[offsetX]) - ); + + abs( get( xbuf, offsetX) ) : + abs( xbuf[offsetX] ) ); } ix = offsetX; From c9d41d4ea7d1eeba2aef6b3fc1f9b11aa8422040 Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Fri, 14 Mar 2025 23:39:10 +0530 Subject: [PATCH 34/43] Update accessors.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> --- lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js index 89b33b1cebad..98996bad2e65 100644 --- a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js +++ b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js @@ -57,8 +57,7 @@ function nanminabs( N, x, strideX, offsetX ) { get = x.accessors[ 0 ]; if ( N === 1 || strideX === 0 ) { - return ( (get) ? - + return ( (get) ? abs( get( xbuf, offsetX) ) : abs( xbuf[offsetX] ) ); } From 8f5dd4247f4e9db4f17642669e01374c567eaaf8 Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Sat, 15 Mar 2025 00:04:14 +0530 Subject: [PATCH 35/43] Update accessors.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> --- lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js index 98996bad2e65..bb0c325569d1 100644 --- a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js +++ b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js @@ -57,7 +57,7 @@ function nanminabs( N, x, strideX, offsetX ) { get = x.accessors[ 0 ]; if ( N === 1 || strideX === 0 ) { - return ( (get) ? + return ((get) ? abs( get( xbuf, offsetX) ) : abs( xbuf[offsetX] ) ); } From bd4ea7e1c52914ac0a511cab4bf8c3aed88b25fa Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Sat, 15 Mar 2025 00:09:30 +0530 Subject: [PATCH 36/43] Update accessors.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> --- lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js index bb0c325569d1..0679d7f06794 100644 --- a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js +++ b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/accessors.js @@ -57,7 +57,7 @@ function nanminabs( N, x, strideX, offsetX ) { get = x.accessors[ 0 ]; if ( N === 1 || strideX === 0 ) { - return ((get) ? + return ((get) ? abs( get( xbuf, offsetX) ) : abs( xbuf[offsetX] ) ); } From 4a872745d8cfd7a5dbbe60837633b7e2c4d6612f Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Sat, 15 Mar 2025 00:25:10 +0530 Subject: [PATCH 37/43] Update ndarray.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> --- .../stats/base/nanminabs/lib/ndarray.js | 96 +++++++++++-------- 1 file changed, 55 insertions(+), 41 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/ndarray.js b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/ndarray.js index 17ef582cbc60..f8d3bc0f17cb 100644 --- a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/ndarray.js +++ b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/ndarray.js @@ -46,49 +46,63 @@ var accessors = require( './accessors.js' ); * var v = nanminabs( N, x, 2, 1 ); * // returns 1.0 */ -function nanminabs( N, x, strideX, offsetX ) { - var min; - var o; - var ix; - var v; - var i; - - if ( N <= 0 ) { - return NaN; - } - o = arraylike2object( x ); - if ( o.accessorProtocol ) { - return accessors( N, o, strideX, offsetX ); - } - if ( N === 1 || strideX === 0 ) { - return abs(x[ offsetX ]); - } - ix = offsetX + (strideX < 0 ? (N - 1) * strideX : 0); - for ( i = 0; i < N; i++ ) { - v = x[ ix ]; - if ( v === v ) { - break; - } - ix += strideX; - } - if ( i === N ) { - return NaN; - } - min = abs( v ); - i += 1; - for ( i; i < N; i++ ) { - ix += strideX; - v = abs( x[ ix ] ); - if ( isnan( v ) ) { - continue; - } - if ( v < min ) { - min = v; - } - } - return min; +function nanminabs(N, x, strideX, offsetX) { + var min; + var o; + var ix; + var v; + var i; + + if (N <= 0) { + return NaN; + } + + o = arraylike2object(x); + if (o.accessorProtocol) { + return accessors(N, o, strideX, offsetX); + } + + if (N === 1 || strideX === 0) { + return abs(x[offsetX]); + } + + // ✅ Fix: Correct calculation of `ix` for negative strides + if (strideX < 0) { + ix = offsetX + (N - 1) * strideX; // Correctly set the starting index + } else { + ix = offsetX; + } + + // ✅ Find the first non-NaN value + for (i = 0; i < N; i++) { + v = x[ix]; + if (v === v) { // Not NaN + break; + } + ix += strideX; + } + + if (i === N) { + return NaN; + } + + min = abs(v); + + for (i += 1; i < N; i++) { + ix += strideX; + v = abs(x[ix]); + if (isnan(v)) { + continue; + } + if (v < min) { + min = v; + } + } + + return min; } // EXPORTS // + module.exports = nanminabs; From 6bcc5db490c554a7f31cb59860c90bdd0353771a Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Sat, 15 Mar 2025 00:33:49 +0530 Subject: [PATCH 38/43] Update nanminabs.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> --- lib/node_modules/@stdlib/stats/base/nanminabs/lib/nanminabs.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/nanminabs.js b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/nanminabs.js index 14418c32e002..f75f60a495b1 100644 --- a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/nanminabs.js +++ b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/nanminabs.js @@ -64,9 +64,8 @@ function nanminabs( N, x, strideX, offsetX ) { } if ( strideX < 0 ) { ix = (1-N) * abs( strideX ); - } else { - ix = 0; } +} for ( i = 0; i < N; i++ ) { v = x[ ix ]; if ( v === v ) { From 9829b3e2583356c412c7f9e1676c4ed5678d165e Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Sun, 16 Mar 2025 15:38:25 +0530 Subject: [PATCH 39/43] Update nanminabs.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> --- .../stats/base/nanminabs/lib/nanminabs.js | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/nanminabs.js b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/nanminabs.js index f75f60a495b1..2e79f40e30dc 100644 --- a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/nanminabs.js +++ b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/nanminabs.js @@ -54,21 +54,26 @@ function nanminabs( N, x, strideX, offsetX ) { if ( N <= 0 ) { return NaN; } - o = arraylike2object( x ); + o = arraylike2object( x ); if ( o.accessorProtocol ) { return accessors( N, o, strideX, offsetX ); } if ( N === 1 || strideX === 0 ) { - return x[ offsetX ]; + v = x[ offsetX ]; + return isnan( v ) ? NaN : abs( v ); } + if ( strideX < 0 ) { - ix = (1-N) * abs( strideX ); + ix = offsetX + (N-1) * strideX; + } else { + ix = offsetX; } -} + + // Find the first non-NaN value: for ( i = 0; i < N; i++ ) { v = x[ ix ]; - if ( v === v ) { + if ( !isnan( v ) ) { break; } ix += strideX; @@ -76,14 +81,19 @@ function nanminabs( N, x, strideX, offsetX ) { if ( i === N ) { return NaN; } + + // Initialize min with the first non-NaN value: min = abs( v ); i += 1; - for ( i; i < N; i++ ) { + + // Iterate through the remaining elements: + for ( ; i < N; i++ ) { ix += strideX; - v = abs( x[ ix ] ); + v = x[ ix ]; if ( isnan( v ) ) { continue; } + v = abs( v ); if ( v < min ) { min = v; } From 14d8d80674117d17a2169393b517b37f42d9e3ba Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Sun, 16 Mar 2025 15:49:46 +0530 Subject: [PATCH 40/43] Update ndarray.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> --- .../stats/base/nanminabs/lib/ndarray.js | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/ndarray.js b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/ndarray.js index f8d3bc0f17cb..3f9a1781c836 100644 --- a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/ndarray.js +++ b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/ndarray.js @@ -46,6 +46,7 @@ var accessors = require( './accessors.js' ); * var v = nanminabs( N, x, 2, 1 ); * // returns 1.0 */ + function nanminabs(N, x, strideX, offsetX) { var min; var o; @@ -56,44 +57,49 @@ function nanminabs(N, x, strideX, offsetX) { if (N <= 0) { return NaN; } - + o = arraylike2object(x); if (o.accessorProtocol) { return accessors(N, o, strideX, offsetX); } if (N === 1 || strideX === 0) { - return abs(x[offsetX]); + v = x[offsetX]; + return isnan(v) ? NaN : abs(v); } - // ✅ Fix: Correct calculation of `ix` for negative strides + // Initialize the starting index based on the stride: if (strideX < 0) { - ix = offsetX + (N - 1) * strideX; // Correctly set the starting index + ix = offsetX + (N - 1) * strideX; // Start from the end for negative strides } else { - ix = offsetX; + ix = offsetX; // Start from the beginning for positive strides } - // ✅ Find the first non-NaN value + // Find the first non-NaN value: for (i = 0; i < N; i++) { v = x[ix]; - if (v === v) { // Not NaN + if (!isnan(v)) { break; } ix += strideX; } if (i === N) { - return NaN; + return NaN; // All elements are NaN } + // Initialize min with the first non-NaN value: min = abs(v); + i += 1; - for (i += 1; i < N; i++) { + // Iterate through the remaining elements: + for (; i < N; i++) { ix += strideX; - v = abs(x[ix]); + v = x[ix]; if (isnan(v)) { continue; } + v = abs(v); if (v < min) { min = v; } @@ -102,7 +108,7 @@ function nanminabs(N, x, strideX, offsetX) { return min; } -// EXPORTS // +// EXPORTS // module.exports = nanminabs; From 450acfe5036d9a921c6a99951e645892cdc20592 Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Sun, 16 Mar 2025 15:50:02 +0530 Subject: [PATCH 41/43] Update test.ndarray.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> From 86e2ef2fbc25da7f13d02a065cb601f872c5c91b Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Sun, 16 Mar 2025 15:58:16 +0530 Subject: [PATCH 42/43] Update ndarray.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> --- lib/node_modules/@stdlib/stats/base/nanminabs/lib/ndarray.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/ndarray.js b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/ndarray.js index 3f9a1781c836..9df0af552c5f 100644 --- a/lib/node_modules/@stdlib/stats/base/nanminabs/lib/ndarray.js +++ b/lib/node_modules/@stdlib/stats/base/nanminabs/lib/ndarray.js @@ -46,7 +46,6 @@ var accessors = require( './accessors.js' ); * var v = nanminabs( N, x, 2, 1 ); * // returns 1.0 */ - function nanminabs(N, x, strideX, offsetX) { var min; var o; From 103f95abb6c356bfe9ed24509b75e12aec4b1e03 Mon Sep 17 00:00:00 2001 From: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> Date: Sun, 16 Mar 2025 15:58:25 +0530 Subject: [PATCH 43/43] Update test.ndarray.js Signed-off-by: Kaushikgtm <162317291+Kaushikgtm@users.noreply.github.com> --- .../stats/base/nanminabs/test/test.ndarray.js | 106 +++++++++--------- 1 file changed, 53 insertions(+), 53 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/nanminabs/test/test.ndarray.js b/lib/node_modules/@stdlib/stats/base/nanminabs/test/test.ndarray.js index a2f6856a8b9b..fc51b8ac9baa 100644 --- a/lib/node_modules/@stdlib/stats/base/nanminabs/test/test.ndarray.js +++ b/lib/node_modules/@stdlib/stats/base/nanminabs/test/test.ndarray.js @@ -29,92 +29,92 @@ var nanminabs = require( './../lib/ndarray.js' ); // TESTS // tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof nanminabs, 'function', 'main export is a function' ); - t.end(); + t.ok( true, __filename ); + t.strictEqual( typeof nanminabs, 'function', 'main export is a function' ); + t.end(); }); tape( 'the function has an arity of 4', function test( t ) { - t.strictEqual( nanminabs.length, 4, 'has expected arity' ); - t.end(); + t.strictEqual( nanminabs.length, 4, 'has expected arity' ); + t.end(); }); tape( 'the function calculates the minimum absolute value of a strided array', function test( t ) { - var x, v; + var x, v; - x = [ 1.0, -2.0, -4.0, 5.0, NaN, 0.0, 3.0 ]; - v = nanminabs( x.length, x, 1, 0 ); - t.strictEqual( v, 0.0, 'returns expected value' ); + x = [ 1.0, -2.0, -4.0, 5.0, NaN, 0.0, 3.0 ]; + v = nanminabs( x.length, x, 1, 0 ); + t.strictEqual( v, 0.0, 'returns expected value' ); - x = [ -4.0, NaN, -5.0 ]; - v = nanminabs( x.length, x, 1, 0 ); - t.strictEqual( v, 4.0, 'returns expected value' ); + x = [ -4.0, NaN, -5.0 ]; + v = nanminabs( x.length, x, 1, 0 ); + t.strictEqual( v, 4.0, 'returns expected value' ); - x = [ 0.0, -0.0, NaN, 0.0 ]; - v = nanminabs( x.length, x, 1, 0 ); - t.strictEqual( isPositiveZero( v ), true, 'returns expected value' ); + x = [ 0.0, -0.0, NaN, 0.0 ]; + v = nanminabs( x.length, x, 1, 0 ); + t.strictEqual( isPositiveZero( v ), true, 'returns expected value' ); - x = [ NaN ]; - v = nanminabs( x.length, x, 1, 0 ); - t.strictEqual( isnan( v ), true, 'returns expected value' ); + x = [ NaN ]; + v = nanminabs( x.length, x, 1, 0 ); + t.strictEqual( isnan( v ), true, 'returns expected value' ); - x = [ NaN, NaN ]; - v = nanminabs( x.length, x, 1, 0 ); - t.strictEqual( isnan( v ), true, 'returns expected value' ); + x = [ NaN, NaN ]; + v = nanminabs( x.length, x, 1, 0 ); + t.strictEqual( isnan( v ), true, 'returns expected value' ); - t.end(); + t.end(); }); tape( 'if N <= 0, the function returns NaN', function test( t ) { - var x = [ 1.0, -2.0, -4.0, 5.0, 3.0 ]; + var x = [ 1.0, -2.0, -4.0, 5.0, 3.0 ]; - t.strictEqual( isnan( nanminabs( 0, x, 1, 0 ) ), true, 'returns NaN' ); - t.strictEqual( isnan( nanminabs( -1, x, 1, 0 ) ), true, 'returns NaN' ); + t.strictEqual( isnan( nanminabs( 0, x, 1, 0 ) ), true, 'returns NaN' ); + t.strictEqual( isnan( nanminabs( -1, x, 1, 0 ) ), true, 'returns NaN' ); - t.end(); + t.end(); }); tape( 'if N = 1, the function returns the first indexed element', function test( t ) { - var x = [ 1.0, -2.0, -4.0, 5.0, 3.0 ]; - t.strictEqual( nanminabs( 1, x, 1, 0 ), 1.0, 'returns expected value' ); - t.end(); + var x = [ 1.0, -2.0, -4.0, 5.0, 3.0 ]; + t.strictEqual( nanminabs( 1, x, 1, 0 ), 1.0, 'returns expected value' ); + t.end(); }); tape( 'the function supports a stride parameter', function test( t ) { - var x = [ 1.0, 2.0, 2.0, -7.0, -2.0, 3.0, 4.0, 2.0, NaN, NaN ]; - var N = floor( x.length / 2 ); - var v = nanminabs( N, x, 2, 0 ); - t.strictEqual( v, 1.0, 'returns expected value' ); - t.end(); + var x = [ 1.0, 2.0, 2.0, -7.0, -2.0, 3.0, 4.0, 2.0, NaN, NaN ]; + var N = floor( x.length / 2 ); + var v = nanminabs( N, x, 2, 0 ); + t.strictEqual( v, 1.0, 'returns expected value' ); + t.end(); }); tape( 'the function supports a negative stride parameter', function test( t ) { - var x = [ NaN, NaN, 1.0, 2.0, 2.0, -7.0, -2.0, 3.0, 4.0, 2.0 ]; - var N = floor( x.length / 2 ); - var v = nanminabs( N, x, -2, 8 ); - t.strictEqual( v, 1.0, 'returns expected value' ); - t.end(); + var x = [ NaN, NaN, 1.0, 2.0, 2.0, -7.0, -2.0, 3.0, 4.0, 2.0 ]; + var N = floor( x.length / 2 ); + var v = nanminabs( N, x, -2, 8 ); + t.strictEqual( v, 1.0, 'returns expected value' ); + t.end(); }); tape( 'if stride = 0, the function returns the first indexed element', function test( t ) { - var x = [ 1.0, -2.0, -4.0, 5.0, 3.0 ]; - t.strictEqual( nanminabs( x.length, x, 0, 0 ), 1.0, 'returns expected value' ); - t.end(); + var x = [ 1.0, -2.0, -4.0, 5.0, 3.0 ]; + t.strictEqual( nanminabs( x.length, x, 0, 0 ), 1.0, 'returns expected value' ); + t.end(); }); tape( 'the function supports an offset parameter', function test( t ) { - var x = [ 2.0, 1.0, 2.0, -2.0, -2.0, 2.0, 3.0, 4.0, NaN, NaN ]; - var N = floor( x.length / 2 ); - var v = nanminabs( N, x, 2, 1 ); - t.strictEqual( v, 1.0, 'returns expected value' ); - t.end(); + var x = [ 2.0, 1.0, 2.0, -2.0, -2.0, 2.0, 3.0, 4.0, NaN, NaN ]; + var N = floor( x.length / 2 ); + var v = nanminabs( N, x, 2, 1 ); + t.strictEqual( v, 1.0, 'returns expected value' ); + t.end(); }); tape( 'the function handles large arrays efficiently', function test( t ) { - var x = new Array( 1e6 ).fill( NaN ); - x[500] = -3.0; - x[750000] = 2.0; - var v = nanminabs( x.length, x, 1, 0 ); - t.strictEqual( v, 2.0, 'returns expected value' ); - t.end(); + var x = new Array( 1e6 ).fill( NaN ); + x[500] = -3.0; + x[750000] = 2.0; + var v = nanminabs( x.length, x, 1, 0 ); + t.strictEqual( v, 2.0, 'returns expected value' ); + t.end(); });