diff --git a/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/README.md b/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/README.md
index 6eaaac62ab77..e7143da00c09 100644
--- a/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/README.md
+++ b/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/README.md
@@ -2,7 +2,7 @@
 
 @license Apache-2.0
 
-Copyright (c) 2020 The Stdlib Authors.
+Copyright (c) 2024 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.
@@ -44,9 +44,8 @@ Computes the sum of single-precision floating-point strided array elements, igno
 var Float32Array = require( '@stdlib/array/float32' );
 
 var x = new Float32Array( [ 1.0, -2.0, NaN, 2.0 ] );
-var N = x.length;
 
-var v = sdsnansum( N, x, 1 );
+var v = sdsnansum( 4, x, 1 );
 // returns 1.0
 ```
 
@@ -54,18 +53,16 @@ The function has the following parameters:
 
 -   **N**: number of indexed elements.
 -   **x**: input [`Float32Array`][@stdlib/array/float32].
--   **stride**: index increment for `x`.
+-   **stride**: index increment for the strided array.
 
-The `N` and `stride` parameters determine which elements in `x` are accessed at runtime. For example, to compute the sum of every other element in `x`,
+The `N` and `stride` parameters determine which elements in the strided array are accessed at runtime. For example, to compute the sum of every other element in the strided array,
 
 ```javascript
 var Float32Array = require( '@stdlib/array/float32' );
-var floor = require( '@stdlib/math/base/special/floor' );
 
 var x = new Float32Array( [ 1.0, 2.0, NaN, -7.0, NaN, 3.0, 4.0, 2.0 ] );
-var N = floor( x.length / 2 );
 
-var v = sdsnansum( N, x, 2 );
+var v = sdsnansum( 4, x, 2 );
 // returns 5.0
 ```
 
@@ -75,14 +72,11 @@ Note that indexing is relative to the first index. To introduce an offset, use [
 
 ```javascript
 var Float32Array = require( '@stdlib/array/float32' );
-var floor = require( '@stdlib/math/base/special/floor' );
 
 var x0 = new Float32Array( [ 2.0, 1.0, NaN, -2.0, -2.0, 2.0, 3.0, 4.0 ] );
 var x1 = new Float32Array( x0.buffer, x0.BYTES_PER_ELEMENT*1 ); // start at 2nd element
 
-var N = floor( x0.length / 2 );
-
-var v = sdsnansum( N, x1, 2 );
+var v = sdsnansum( 4, x1, 2 );
 // returns 5.0
 ```
 
@@ -102,18 +96,16 @@ var v = sdsnansum.ndarray( N, x, 1, 0 );
 
 The function has the following additional parameters:
 
--   **offset**: starting index for `x`.
+-   **offset**: starting index for the strided array.
 
-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 sum of 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 `offset` parameter supports indexing semantics based on a starting index. For example, to calculate the sum of every other value in the strided array starting from the second value
 
 ```javascript
 var Float32Array = require( '@stdlib/array/float32' );
-var floor = require( '@stdlib/math/base/special/floor' );
 
 var x = new Float32Array( [ 2.0, 1.0, NaN, -2.0, -2.0, 2.0, 3.0, 4.0 ] );
-var N = floor( x.length / 2 );
 
-var v = sdsnansum.ndarray( N, x, 2, 1 );
+var v = sdsnansum.ndarray( 4, x, 2, 1 );
 // returns 5.0
 ```
 
@@ -139,22 +131,19 @@ var v = sdsnansum.ndarray( N, x, 2, 1 );
 <!-- eslint no-undef: "error" -->
 
 ```javascript
-var randu = require( '@stdlib/random/base/randu' );
-var round = require( '@stdlib/math/base/special/round' );
-var Float32Array = require( '@stdlib/array/float32' );
+var discreteUniform = require( '@stdlib/random/base/discrete-uniform' );
+var bernoulli = require( '@stdlib/random/base/bernoulli' );
+var filledarrayBy = require( '@stdlib/array/filled-by' );
 var sdsnansum = require( '@stdlib/blas/ext/base/sdsnansum' );
 
-var x;
-var i;
-
-x = new Float32Array( 10 );
-for ( i = 0; i < x.length; i++ ) {
-    if ( randu() < 0.2 ) {
-        x[ i ] = NaN;
-    } else {
-        x[ i ] = round( randu()*100.0 );
+function randOrNan() {
+    if ( bernoulli() < 0.2 ) {
+        return NaN;
     }
+    return discreteUniform( 0, 100 );
 }
+
+var x = filledarrayBy( 10, 'float32', randOrNan );
 console.log( x );
 
 var v = sdsnansum( x.length, x, 1 );
diff --git a/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/benchmark/benchmark.js b/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/benchmark/benchmark.js
index df1959714c02..77d0d4a07ee4 100644
--- a/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/benchmark/benchmark.js
+++ b/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/benchmark/benchmark.js
@@ -21,16 +21,24 @@
 // MODULES //
 
 var bench = require( '@stdlib/bench' );
-var randu = require( '@stdlib/random/base/randu' );
+var uniform = require( '@stdlib/random/base/uniform' );
+var bernoulli = require( '@stdlib/random/base/bernoulli' );
+var filledarrayBy = require( '@stdlib/array/filled-by' );
 var isnan = require( '@stdlib/math/base/assert/is-nan' );
 var pow = require( '@stdlib/math/base/special/pow' );
-var Float32Array = require( '@stdlib/array/float32' );
 var pkg = require( './../package.json' ).name;
 var sdsnansum = require( './../lib/sdsnansum.js' );
 
 
 // FUNCTIONS //
 
+function randOrNan() {
+	if ( bernoulli() < 0.2 ) {
+		return NaN;
+	}
+	return uniform( -20.0, -10.0 );
+}
+
 /**
 * Creates a benchmark function.
 *
@@ -39,17 +47,7 @@ var sdsnansum = require( './../lib/sdsnansum.js' );
 * @returns {Function} benchmark function
 */
 function createBenchmark( len ) {
-	var x;
-	var i;
-
-	x = new Float32Array( len );
-	for ( i = 0; i < x.length; i++ ) {
-		if ( randu() < 0.2 ) {
-			x[ i ] = NaN;
-		} else {
-			x[ i ] = ( randu()*10.0 ) - 20.0;
-		}
-	}
+	var x = filledarrayBy( len, 'float32', randOrNan );
 	return benchmark;
 
 	function benchmark( b ) {
diff --git a/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/benchmark/benchmark.native.js b/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/benchmark/benchmark.native.js
index f79c9ad6504a..fa9e2190c25f 100644
--- a/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/benchmark/benchmark.native.js
+++ b/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/benchmark/benchmark.native.js
@@ -22,10 +22,11 @@
 
 var resolve = require( 'path' ).resolve;
 var bench = require( '@stdlib/bench' );
-var randu = require( '@stdlib/random/base/randu' );
+var uniform = require( '@stdlib/random/base/uniform' );
+var bernoulli = require( '@stdlib/random/base/bernoulli' );
+var filledarrayBy = require( '@stdlib/array/filled-by' );
 var isnan = require( '@stdlib/math/base/assert/is-nan' );
 var pow = require( '@stdlib/math/base/special/pow' );
-var Float32Array = require( '@stdlib/array/float32' );
 var tryRequire = require( '@stdlib/utils/try-require' );
 var pkg = require( './../package.json' ).name;
 
@@ -40,6 +41,13 @@ var opts = {
 
 // FUNCTIONS //
 
+function randOrNan() {
+	if ( bernoulli() < 0.2 ) {
+		return NaN;
+	}
+	return uniform( -20.0, -10.0 );
+}
+
 /**
 * Creates a benchmark function.
 *
@@ -48,17 +56,7 @@ var opts = {
 * @returns {Function} benchmark function
 */
 function createBenchmark( len ) {
-	var x;
-	var i;
-
-	x = new Float32Array( len );
-	for ( i = 0; i < x.length; i++ ) {
-		if ( randu() < 0.2 ) {
-			x[ i ] = NaN;
-		} else {
-			x[ i ] = ( randu()*10.0 ) - 20.0;
-		}
-	}
+	var x = filledarrayBy( len, 'float32', randOrNan );
 	return benchmark;
 
 	function benchmark( b ) {
diff --git a/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/benchmark/benchmark.ndarray.js b/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/benchmark/benchmark.ndarray.js
index 1d78e126e725..cc71b88507ee 100644
--- a/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/benchmark/benchmark.ndarray.js
+++ b/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/benchmark/benchmark.ndarray.js
@@ -21,16 +21,24 @@
 // MODULES //
 
 var bench = require( '@stdlib/bench' );
-var randu = require( '@stdlib/random/base/randu' );
+var uniform = require( '@stdlib/random/base/uniform' );
+var bernoulli = require( '@stdlib/random/base/bernoulli' );
+var filledarrayBy = require( '@stdlib/array/filled-by' );
 var isnan = require( '@stdlib/math/base/assert/is-nan' );
 var pow = require( '@stdlib/math/base/special/pow' );
-var Float32Array = require( '@stdlib/array/float32' );
 var pkg = require( './../package.json' ).name;
 var sdsnansum = require( './../lib/ndarray.js' );
 
 
 // FUNCTIONS //
 
+function randOrNan() {
+	if ( bernoulli() < 0.2 ) {
+		return NaN;
+	}
+	return uniform( -20.0, -10.0 );
+}
+
 /**
 * Creates a benchmark function.
 *
@@ -39,17 +47,7 @@ var sdsnansum = require( './../lib/ndarray.js' );
 * @returns {Function} benchmark function
 */
 function createBenchmark( len ) {
-	var x;
-	var i;
-
-	x = new Float32Array( len );
-	for ( i = 0; i < x.length; i++ ) {
-		if ( randu() < 0.2 ) {
-			x[ i ] = NaN;
-		} else {
-			x[ i ] = ( randu()*10.0 ) - 20.0;
-		}
-	}
+	var x = filledarrayBy( len, 'float32', randOrNan );
 	return benchmark;
 
 	function benchmark( b ) {
diff --git a/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/benchmark/benchmark.ndarray.native.js b/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/benchmark/benchmark.ndarray.native.js
index 4a43263d50d7..ddbbacfd5c04 100644
--- a/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/benchmark/benchmark.ndarray.native.js
+++ b/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/benchmark/benchmark.ndarray.native.js
@@ -22,10 +22,11 @@
 
 var resolve = require( 'path' ).resolve;
 var bench = require( '@stdlib/bench' );
-var randu = require( '@stdlib/random/base/randu' );
+var uniform = require( '@stdlib/random/base/uniform' );
+var bernoulli = require( '@stdlib/random/base/bernoulli' );
+var filledarrayBy = require( '@stdlib/array/filled-by' );
 var isnan = require( '@stdlib/math/base/assert/is-nan' );
 var pow = require( '@stdlib/math/base/special/pow' );
-var Float32Array = require( '@stdlib/array/float32' );
 var tryRequire = require( '@stdlib/utils/try-require' );
 var pkg = require( './../package.json' ).name;
 
@@ -40,6 +41,13 @@ var opts = {
 
 // FUNCTIONS //
 
+function randOrNan() {
+	if ( bernoulli() < 0.2 ) {
+		return NaN;
+	}
+	return uniform( -20.0, -10.0 );
+}
+
 /**
 * Creates a benchmark function.
 *
@@ -48,17 +56,7 @@ var opts = {
 * @returns {Function} benchmark function
 */
 function createBenchmark( len ) {
-	var x;
-	var i;
-
-	x = new Float32Array( len );
-	for ( i = 0; i < x.length; i++ ) {
-		if ( randu() < 0.2 ) {
-			x[ i ] = NaN;
-		} else {
-			x[ i ] = ( randu()*10.0 ) - 20.0;
-		}
-	}
+	var x = filledarrayBy( len, 'float32', randOrNan );
 	return benchmark;
 
 	function benchmark( b ) {
diff --git a/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/docs/repl.txt b/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/docs/repl.txt
index f569b88ed579..2a035ced8f64 100644
--- a/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/docs/repl.txt
+++ b/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/docs/repl.txt
@@ -1,9 +1,10 @@
 
 {{alias}}( N, x, stride )
-    Computes the sum of single-precision floating-point strided array elements,
-    ignoring `NaN` values and using extended accumulation.
+    Computes the sum of single-precision floating-point strided array
+    elements, ignore `NaN` values and using extended accumulation.
 
-    The `N` and `stride` parameters determine which elements in `x` are accessed
+    The `N` and `stride` parameters determine which elements in the
+    strided array are accessed
     at runtime.
 
     Indexing is relative to the first index. To introduce an offset, use a typed
@@ -36,19 +37,18 @@
 
     // Using `N` and `stride` parameters:
     > x = new {{alias:@stdlib/array/float32}}( [ -2.0, 1.0, 1.0, -5.0, 2.0, -1.0, NaN, NaN ] );
-    > var N = {{alias:@stdlib/math/base/special/floor}}( x.length / 2 );
     > var stride = 2;
-    > {{alias}}( N, x, stride )
+    > {{alias}}( 4, x, stride )
     1.0
 
     // Using view offsets:
     > var x0 = new {{alias:@stdlib/array/float32}}( [ 1.0, -2.0, 3.0, 2.0, 5.0, -1.0, NaN, NaN ] );
     > var x1 = new {{alias:@stdlib/array/float32}}( x0.buffer, x0.BYTES_PER_ELEMENT*1 );
-    > N = {{alias:@stdlib/math/base/special/floor}}( x0.length / 2 );
     > stride = 2;
-    > {{alias}}( N, x1, stride )
+    > {{alias}}( 4, x1, stride )
     -1.0
 
+
 {{alias}}.ndarray( N, x, stride, offset )
     Computes the sum of single-precision floating-point strided array elements,
     ignoring `NaN` values and using extended accumulation and alternative
@@ -85,9 +85,8 @@
     1.0
 
     // Using offset parameter:
-    > var x = new {{alias:@stdlib/array/float32}}( [ 1.0, -2.0, 3.0, 2.0, 5.0, -1.0, NaN, NaN ] );
-    > var N = {{alias:@stdlib/math/base/special/floor}}( x.length / 2 );
-    > {{alias}}.ndarray( N, x, 2, 1 )
+    > x = new {{alias:@stdlib/array/float32}}( [ 1.0, -2.0, 3.0, 2.0, 5.0, -1.0, NaN, NaN ] );
+    > {{alias}}.ndarray( 4, x, 2, 1 )
     -1.0
 
     See Also
diff --git a/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/examples/index.js b/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/examples/index.js
index 908f830202a2..451d8b341c28 100644
--- a/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/examples/index.js
+++ b/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/examples/index.js
@@ -18,22 +18,19 @@
 
 'use strict';
 
-var randu = require( '@stdlib/random/base/randu' );
-var round = require( '@stdlib/math/base/special/round' );
-var Float32Array = require( '@stdlib/array/float32' );
+var discreteUniform = require( '@stdlib/random/base/discrete-uniform' );
+var bernoulli = require( '@stdlib/random/base/bernoulli' );
+var filledarrayBy = require( '@stdlib/array/filled-by' );
 var sdsnansum = require( './../lib' );
 
-var x;
-var i;
-
-x = new Float32Array( 10 );
-for ( i = 0; i < x.length; i++ ) {
-	if ( randu() < 0.2 ) {
-		x[ i ] = NaN;
-	} else {
-		x[ i ] = round( randu()*100.0 );
+function randOrNan() {
+	if ( bernoulli() < 0.2 ) {
+		return NaN;
 	}
+	return discreteUniform( 0, 100 );
 }
+
+var x = filledarrayBy( 10, 'float32', randOrNan );
 console.log( x );
 
 var v = sdsnansum( x.length, x, 1 );
diff --git a/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/include.gypi b/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/include.gypi
index 868c5c12e852..26476a8c2655 100644
--- a/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/include.gypi
+++ b/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/include.gypi
@@ -36,7 +36,7 @@
 
     # Source files:
     'src_files': [
-      '<(src_dir)/addon.cpp',
+      '<(src_dir)/addon.c',
       '<!@(node -e "var arr = require(\'@stdlib/utils/library-manifest\')(\'./manifest.json\',{},{\'basedir\':process.cwd(),\'paths\':\'posix\'}).src; for ( var i = 0; i < arr.length; i++ ) { console.log( arr[ i ] ); }")',
     ],
 
diff --git a/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/lib/index.js b/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/lib/index.js
index 5612cb8e3eeb..fa822a9988de 100644
--- a/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/lib/index.js
+++ b/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/lib/index.js
@@ -35,13 +35,11 @@
 *
 * @example
 * var Float32Array = require( '@stdlib/array/float32' );
-* var floor = require( '@stdlib/math/base/special/floor' );
 * var sdsnansum = require( '@stdlib/blas/ext/base/sdsnansum' );
 *
 * var x = new Float32Array( [ 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 = sdsnansum.ndarray( N, x, 2, 1 );
+* var v = sdsnansum.ndarray( 5, x, 2, 1 );
 * // returns 5.0
 */
 
diff --git a/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/lib/ndarray.js b/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/lib/ndarray.js
index ed41883a6b7e..10d6a1ffa741 100644
--- a/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/lib/ndarray.js
+++ b/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/lib/ndarray.js
@@ -36,12 +36,10 @@ var sdsnansumpw = require( '@stdlib/blas/ext/base/sdsnansumpw' ).ndarray;
 *
 * @example
 * var Float32Array = require( '@stdlib/array/float32' );
-* var floor = require( '@stdlib/math/base/special/floor' );
 *
 * var x = new Float32Array( [ 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 = sdsnansum( N, x, 2, 1 );
+* var v = sdsnansum( 5, x, 2, 1 );
 * // returns 5.0
 */
 function sdsnansum( N, x, stride, offset ) {
diff --git a/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/lib/ndarray.native.js b/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/lib/ndarray.native.js
index 750a93a3dd09..9fa8b7e91204 100644
--- a/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/lib/ndarray.native.js
+++ b/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/lib/ndarray.native.js
@@ -20,7 +20,8 @@
 
 // MODULES //
 
-var Float32Array = require( '@stdlib/array/float32' );
+var minViewBufferIndex = require( '@stdlib/strided/base/min-view-buffer-index' );
+var offsetView = require( '@stdlib/strided/base/offset-view' );
 var addon = require( './sdsnansum.native.js' );
 
 
@@ -37,20 +38,17 @@ var addon = require( './sdsnansum.native.js' );
 *
 * @example
 * var Float32Array = require( '@stdlib/array/float32' );
-* var floor = require( '@stdlib/math/base/special/floor' );
 *
 * var x = new Float32Array( [ 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 = sdsnansum( N, x, 2, 1 );
+* var v = sdsnansum( 5, x, 2, 1 );
 * // returns 5.0
 */
 function sdsnansum( N, x, stride, offset ) {
 	var view;
-	if ( stride < 0 ) {
-		offset += (N-1) * stride;
-	}
-	view = new Float32Array( x.buffer, x.byteOffset+(x.BYTES_PER_ELEMENT*offset), x.length-offset ); // eslint-disable-line max-len
+	offset = minViewBufferIndex( N, stride, offset );
+	view = offsetView( x, offset );
+
 	return addon( N, view, stride );
 }
 
diff --git a/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/manifest.json b/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/manifest.json
index 4c76a7fa5512..b973b809e1e3 100644
--- a/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/manifest.json
+++ b/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/manifest.json
@@ -1,42 +1,81 @@
 {
-	"options": {},
-	"fields": [
-		{
-			"field": "src",
-			"resolve": true,
-			"relative": true
-		},
-		{
-			"field": "include",
-			"resolve": true,
-			"relative": true
-		},
-		{
-			"field": "libraries",
-			"resolve": false,
-			"relative": false
-		},
-		{
-			"field": "libpath",
-			"resolve": true,
-			"relative": false
-		}
-	],
-	"confs": [
-		{
-			"src": [
-				"./src/sdsnansum.c"
-			],
-			"include": [
-				"./include"
-			],
-			"libraries": [
-				"-lm"
-			],
-			"libpath": [],
-			"dependencies": [
-				"@stdlib/blas/ext/base/sdsnansumpw"
-			]
-		}
-	]
+  "options": {
+    "task": "build"
+  },
+  "fields": [
+    {
+      "field": "src",
+      "resolve": true,
+      "relative": true
+    },
+    {
+      "field": "include",
+      "resolve": true,
+      "relative": true
+    },
+    {
+      "field": "libraries",
+      "resolve": false,
+      "relative": false
+    },
+    {
+      "field": "libpath",
+      "resolve": true,
+      "relative": false
+    }
+  ],
+  "confs": [
+    {
+      "task": "build",
+      "src": [
+        "./src/sdsnansum.c"
+      ],
+      "include": [
+        "./include"
+      ],
+      "libraries": [
+        "-lm"
+      ],
+      "libpath": [],
+      "dependencies": [
+        "@stdlib/blas/ext/base/sdsnansumpw",
+        "@stdlib/napi/export",
+        "@stdlib/napi/argv",
+        "@stdlib/napi/argv-int64",
+        "@stdlib/napi/argv-strided-float32array"
+      ]
+    },
+    {
+      "task": "benchmark",
+      "src": [
+        "./src/sdsnansum.c"
+      ],
+      "include": [
+        "./include"
+      ],
+      "libraries": [
+        "-lm"
+      ],
+      "libpath": [],
+      "dependencies": [
+        "@stdlib/blas/ext/base/sdsnansumpw"
+      ]
+    },
+    {
+      "task": "examples",
+      "src": [
+        "./src/sdsnansum.c"
+      ],
+      "include": [
+        "./include"
+      ],
+      "libraries": [
+        "-lm"
+      ],
+      "libpath": [],
+      "dependencies": [
+        "@stdlib/blas/ext/base/sdsnansumpw"
+      ]
+    }
+  ]
 }
diff --git a/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/package.json b/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/package.json
index 9cabd29234f6..79596d9b1773 100644
--- a/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/package.json
+++ b/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/package.json
@@ -73,5 +73,7 @@
     "float",
     "float32array"
   ],
-  "__stdlib__": {}
+  "__stdlib__": {
+    "wasm": false
+  }
 }
diff --git a/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/src/addon.c b/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/src/addon.c
new file mode 100644
index 000000000000..e414b7dbb25c
--- /dev/null
+++ b/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/src/addon.c
@@ -0,0 +1,48 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2024 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.
+*/
+
+#include "stdlib/blas/ext/base/sdsnansum.h"
+#include "stdlib/napi/export.h"
+#include "stdlib/napi/argv.h"
+#include "stdlib/napi/argv_int64.h"
+#include "stdlib/napi/argv_strided_float32array.h"
+#include <node_api.h>
+#include <assert.h>
+
+/**
+* Receives JavaScript callback invocation data.
+*
+* @private
+* @param env    environment under which the function is invoked
+* @param info   callback data
+* @return       Node-API value
+*/
+static napi_value addon( napi_env env, napi_callback_info info ) {
+	STDLIB_NAPI_ARGV( env, info, argv, argc, 3 );
+	STDLIB_NAPI_ARGV_INT64( env, N, argv, 0 );
+	STDLIB_NAPI_ARGV_INT64( env, stride, argv, 2 );
+	STDLIB_NAPI_ARGV_STRIDED_FLOAT32ARRAY( env, X, N, stride, argv, 1 );
+
+	napi_value v;
+	napi_status status = napi_create_double( env, (double)stdlib_strided_sdsnansum( N, X, stride ), &v );
+	assert( status == napi_ok );
+
+	return v;
+}
+
+STDLIB_NAPI_MODULE_EXPORT_FCN( addon )
diff --git a/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/src/addon.cpp b/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/src/addon.cpp
deleted file mode 100644
index 38fbc24d94cb..000000000000
--- a/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/src/addon.cpp
+++ /dev/null
@@ -1,117 +0,0 @@
-/**
-* @license Apache-2.0
-*
-* Copyright (c) 2020 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.
-*/
-
-#include "stdlib/blas/ext/base/sdsnansum.h"
-#include <node_api.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <stdbool.h>
-#include <assert.h>
-
-/**
-* Add-on namespace.
-*/
-namespace stdlib_blas_ext_base_sdsnansum {
-
-	/**
-	* Computes the sum of single-precision floating-point strided array elements, ignoring `NaN` values and using extended accumulation.
-	*
-	* ## Notes
-	*
-	* -   When called from JavaScript, the function expects three arguments:
-	*
-	*     -   `N`: number of indexed elements
-	*     -   `X`: input array
-	*     -   `stride`: stride length
-	*/
-	napi_value node_sdsnansum( napi_env env, napi_callback_info info ) {
-		napi_status status;
-
-		size_t argc = 3;
-		napi_value argv[ 3 ];
-		status = napi_get_cb_info( env, info, &argc, argv, nullptr, nullptr );
-		assert( status == napi_ok );
-
-		if ( argc < 3 ) {
-			napi_throw_error( env, nullptr, "invalid invocation. Must provide 3 arguments." );
-			return nullptr;
-		}
-
-		napi_valuetype vtype0;
-		status = napi_typeof( env, argv[ 0 ], &vtype0 );
-		assert( status == napi_ok );
-		if ( vtype0 != napi_number ) {
-			napi_throw_type_error( env, nullptr, "invalid argument. First argument must be a number." );
-			return nullptr;
-		}
-
-		bool res;
-		status = napi_is_typedarray( env, argv[ 1 ], &res );
-		assert( status == napi_ok );
-		if ( res == false ) {
-			napi_throw_type_error( env, nullptr, "invalid argument. Second argument must be a Float32Array." );
-			return nullptr;
-		}
-
-		napi_valuetype vtype2;
-		status = napi_typeof( env, argv[ 2 ], &vtype2 );
-		assert( status == napi_ok );
-		if ( vtype2 != napi_number ) {
-			napi_throw_type_error( env, nullptr, "invalid argument. Third argument must be a number." );
-			return nullptr;
-		}
-
-		int64_t N;
-		status = napi_get_value_int64( env, argv[ 0 ], &N );
-		assert( status == napi_ok );
-
-		int64_t stride;
-		status = napi_get_value_int64( env, argv[ 2 ], &stride );
-		assert( status == napi_ok );
-
-		napi_typedarray_type vtype1;
-		size_t xlen;
-		void *X;
-		status = napi_get_typedarray_info( env, argv[ 1 ], &vtype1, &xlen, &X, nullptr, nullptr );
-		assert( status == napi_ok );
-		if ( vtype1 != napi_float32_array ) {
-			napi_throw_type_error( env, nullptr, "invalid argument. Second argument must be a Float32Array." );
-			return nullptr;
-		}
-		if ( (N-1)*llabs(stride) >= (int64_t)xlen ) {
-			napi_throw_range_error( env, nullptr, "invalid argument. Second argument has insufficient elements based on the associated stride and the number of indexed elements." );
-			return nullptr;
-		}
-
-		napi_value v;
-		status = napi_create_double( env, (double)stdlib_strided_sdsnansum( N, (float *)X, stride ), &v );
-		assert( status == napi_ok );
-
-		return v;
-	}
-
-	napi_value Init( napi_env env, napi_value exports ) {
-		napi_status status;
-		napi_value fcn;
-		status = napi_create_function( env, "exports", NAPI_AUTO_LENGTH, node_sdsnansum, NULL, &fcn );
-		assert( status == napi_ok );
-		return fcn;
-	}
-
-	NAPI_MODULE( NODE_GYP_MODULE_NAME, Init )
-} // end namespace stdlib_blas_ext_base_sdsnansum
diff --git a/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/test/test.ndarray.js b/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/test/test.ndarray.js
index 60081afec16f..57e2c434459b 100644
--- a/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/test/test.ndarray.js
+++ b/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/test/test.ndarray.js
@@ -21,7 +21,6 @@
 // MODULES //
 
 var tape = require( 'tape' );
-var floor = require( '@stdlib/math/base/special/floor' );
 var Float32Array = require( '@stdlib/array/float32' );
 var sdsnansum = require( './../lib/ndarray.js' );
 
@@ -125,7 +124,6 @@ tape( 'if provided an `N` parameter equal to `1`, the function returns the first
 });
 
 tape( 'the function supports a `stride` parameter', function test( t ) {
-	var N;
 	var x;
 	var v;
 
@@ -142,15 +140,13 @@ tape( 'the function supports a `stride` parameter', function test( t ) {
 		NaN
 	]);
 
-	N = floor( x.length / 2 );
-	v = sdsnansum( N, x, 2, 0 );
+	v = sdsnansum( 5, x, 2, 0 );
 
 	t.strictEqual( v, 5.0, 'returns expected value' );
 	t.end();
 });
 
 tape( 'the function supports a negative `stride` parameter', function test( t ) {
-	var N;
 	var x;
 	var v;
 	var i;
@@ -168,8 +164,7 @@ tape( 'the function supports a negative `stride` parameter', function test( t )
 		2.0
 	]);
 
-	N = floor( x.length / 2 );
-	v = sdsnansum( N, x, -2, 8 );
+	v = sdsnansum( 5, x, -2, 8 );
 
 	t.strictEqual( v, 5.0, 'returns expected value' );
 
@@ -196,7 +191,6 @@ tape( 'if provided a `stride` parameter equal to `0`, the function returns the f
 });
 
 tape( 'the function supports an `offset` parameter', function test( t ) {
-	var N;
 	var x;
 	var v;
 
@@ -212,9 +206,8 @@ tape( 'the function supports an `offset` parameter', function test( t ) {
 		NaN,
 		NaN   // 4
 	]);
-	N = floor( x.length / 2 );
 
-	v = sdsnansum( N, x, 2, 1 );
+	v = sdsnansum( 5, x, 2, 1 );
 	t.strictEqual( v, 5.0, 'returns expected value' );
 
 	t.end();
diff --git a/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/test/test.ndarray.native.js b/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/test/test.ndarray.native.js
index 5d26671501dd..525be0756be5 100644
--- a/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/test/test.ndarray.native.js
+++ b/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/test/test.ndarray.native.js
@@ -22,7 +22,6 @@
 
 var resolve = require( 'path' ).resolve;
 var tape = require( 'tape' );
-var floor = require( '@stdlib/math/base/special/floor' );
 var Float32Array = require( '@stdlib/array/float32' );
 var tryRequire = require( '@stdlib/utils/try-require' );
 
@@ -134,7 +133,6 @@ tape( 'if provided an `N` parameter equal to `1`, the function returns the first
 });
 
 tape( 'the function supports a `stride` parameter', opts, function test( t ) {
-	var N;
 	var x;
 	var v;
 
@@ -151,15 +149,13 @@ tape( 'the function supports a `stride` parameter', opts, function test( t ) {
 		NaN
 	]);
 
-	N = floor( x.length / 2 );
-	v = sdsnansum( N, x, 2, 0 );
+	v = sdsnansum( 5, x, 2, 0 );
 
 	t.strictEqual( v, 5.0, 'returns expected value' );
 	t.end();
 });
 
 tape( 'the function supports a negative `stride` parameter', opts, function test( t ) {
-	var N;
 	var x;
 	var v;
 	var i;
@@ -177,8 +173,7 @@ tape( 'the function supports a negative `stride` parameter', opts, function test
 		2.0
 	]);
 
-	N = floor( x.length / 2 );
-	v = sdsnansum( N, x, -2, 8 );
+	v = sdsnansum( 5, x, -2, 8 );
 
 	t.strictEqual( v, 5.0, 'returns expected value' );
 
@@ -205,7 +200,6 @@ tape( 'if provided a `stride` parameter equal to `0`, the function returns the f
 });
 
 tape( 'the function supports an `offset` parameter', opts, function test( t ) {
-	var N;
 	var x;
 	var v;
 
@@ -221,9 +215,8 @@ tape( 'the function supports an `offset` parameter', opts, function test( t ) {
 		NaN,
 		NaN   // 4
 	]);
-	N = floor( x.length / 2 );
 
-	v = sdsnansum( N, x, 2, 1 );
+	v = sdsnansum( 5, x, 2, 1 );
 	t.strictEqual( v, 5.0, 'returns expected value' );
 
 	t.end();
diff --git a/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/test/test.sdsnansum.js b/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/test/test.sdsnansum.js
index a0c80602e676..21230435bc4d 100644
--- a/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/test/test.sdsnansum.js
+++ b/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/test/test.sdsnansum.js
@@ -21,7 +21,6 @@
 // MODULES //
 
 var tape = require( 'tape' );
-var floor = require( '@stdlib/math/base/special/floor' );
 var Float32Array = require( '@stdlib/array/float32' );
 var sdsnansum = require( './../lib/sdsnansum.js' );
 
@@ -125,7 +124,6 @@ tape( 'if provided an `N` parameter equal to `1`, the function returns the first
 });
 
 tape( 'the function supports a `stride` parameter', function test( t ) {
-	var N;
 	var x;
 	var v;
 
@@ -142,15 +140,13 @@ tape( 'the function supports a `stride` parameter', function test( t ) {
 		NaN
 	]);
 
-	N = floor( x.length / 2 );
-	v = sdsnansum( N, x, 2 );
+	v = sdsnansum( 5, x, 2 );
 
 	t.strictEqual( v, 5.0, 'returns expected value' );
 	t.end();
 });
 
 tape( 'the function supports a negative `stride` parameter', function test( t ) {
-	var N;
 	var x;
 	var v;
 	var i;
@@ -168,8 +164,7 @@ tape( 'the function supports a negative `stride` parameter', function test( t )
 		2.0
 	]);
 
-	N = floor( x.length / 2 );
-	v = sdsnansum( N, x, -2 );
+	v = sdsnansum( 5, x, -2 );
 
 	t.strictEqual( v, 5.0, 'returns expected value' );
 
@@ -198,7 +193,6 @@ tape( 'if provided a `stride` parameter equal to `0`, the function returns the f
 tape( 'the function supports view offsets', function test( t ) {
 	var x0;
 	var x1;
-	var N;
 	var v;
 
 	x0 = new Float32Array([
@@ -216,9 +210,8 @@ tape( 'the function supports view offsets', function test( t ) {
 	]);
 
 	x1 = new Float32Array( x0.buffer, x0.BYTES_PER_ELEMENT*1 ); // start at 2nd element
-	N = floor(x1.length / 2);
 
-	v = sdsnansum( N, x1, 2 );
+	v = sdsnansum( 5, x1, 2 );
 	t.strictEqual( v, 5.0, 'returns expected value' );
 
 	t.end();
diff --git a/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/test/test.sdsnansum.native.js b/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/test/test.sdsnansum.native.js
index d6dbf2e8344f..ab9d65d948ee 100644
--- a/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/test/test.sdsnansum.native.js
+++ b/lib/node_modules/@stdlib/blas/ext/base/sdsnansum/test/test.sdsnansum.native.js
@@ -22,7 +22,6 @@
 
 var resolve = require( 'path' ).resolve;
 var tape = require( 'tape' );
-var floor = require( '@stdlib/math/base/special/floor' );
 var Float32Array = require( '@stdlib/array/float32' );
 var tryRequire = require( '@stdlib/utils/try-require' );
 
@@ -216,7 +215,6 @@ tape( 'if provided an `N` parameter equal to `1`, the function returns the first
 });
 
 tape( 'the function supports a `stride` parameter', opts, function test( t ) {
-	var N;
 	var x;
 	var v;
 
@@ -233,15 +231,13 @@ tape( 'the function supports a `stride` parameter', opts, function test( t ) {
 		NaN
 	]);
 
-	N = floor( x.length / 2 );
-	v = sdsnansum( N, x, 2 );
+	v = sdsnansum( 5, x, 2 );
 
 	t.strictEqual( v, 5.0, 'returns expected value' );
 	t.end();
 });
 
 tape( 'the function supports a negative `stride` parameter', opts, function test( t ) {
-	var N;
 	var x;
 	var v;
 	var i;
@@ -259,8 +255,7 @@ tape( 'the function supports a negative `stride` parameter', opts, function test
 		2.0
 	]);
 
-	N = floor( x.length / 2 );
-	v = sdsnansum( N, x, -2 );
+	v = sdsnansum( 5, x, -2 );
 
 	t.strictEqual( v, 5.0, 'returns expected value' );
 
@@ -289,7 +284,6 @@ tape( 'if provided a `stride` parameter equal to `0`, the function returns the f
 tape( 'the function supports view offsets', opts, function test( t ) {
 	var x0;
 	var x1;
-	var N;
 	var v;
 
 	x0 = new Float32Array([
@@ -307,9 +301,8 @@ tape( 'the function supports view offsets', opts, function test( t ) {
 	]);
 
 	x1 = new Float32Array( x0.buffer, x0.BYTES_PER_ELEMENT*1 ); // start at 2nd element
-	N = floor(x1.length / 2);
 
-	v = sdsnansum( N, x1, 2 );
+	v = sdsnansum( 5, x1, 2 );
 	t.strictEqual( v, 5.0, 'returns expected value' );
 
 	t.end();