diff --git a/lib/node_modules/@stdlib/blas/ext/base/scusumors/README.md b/lib/node_modules/@stdlib/blas/ext/base/scusumors/README.md
index bc247cf7aae6..6f1e31e5b9c1 100644
--- a/lib/node_modules/@stdlib/blas/ext/base/scusumors/README.md
+++ b/lib/node_modules/@stdlib/blas/ext/base/scusumors/README.md
@@ -61,11 +61,11 @@ The function has the following parameters:
- **N**: number of indexed elements.
- **sum**: initial sum.
- **x**: input [`Float32Array`][@stdlib/array/float32].
-- **strideX**: index increment for `x`.
+- **strideX**: stride length for `x`.
- **y**: output [`Float32Array`][@stdlib/array/float32].
-- **strideY**: index increment for `y`.
+- **strideY**: stride length for `y`.
-The `N` and stride parameters determine which elements in the strided arrays are accessed at runtime. For example, to compute the cumulative sum of every other element in `x`,
+The `N` and stride parameters determine which elements in the strided arrays are accessed at runtime. For example, to compute the cumulative sum of every other element:
```javascript
var Float32Array = require( '@stdlib/array/float32' );
@@ -115,7 +115,7 @@ The function has the following additional parameters:
- **offsetX**: starting index for `x`.
- **offsetY**: starting index for `y`.
-While [`typed array`][mdn-typed-array] views mandate a view offset based on the underlying `buffer`, offset parameters support indexing semantics based on a starting indices. For example, to calculate the cumulative sum of every other value in `x` starting from the second value and to store in the last `N` elements of `y` starting from the last element
+While [`typed array`][mdn-typed-array] views mandate a view offset based on the underlying buffer, the offset parameters support indexing semantics based on starting indices. For example, to calculate the cumulative sum of every other element starting from the second element and to store in the last `N` elements of `y` starting from the last element:
```javascript
var Float32Array = require( '@stdlib/array/float32' );
@@ -149,15 +149,17 @@ scusumors.ndarray( 4, 0.0, x, 2, 1, y, -1, y.length-1 );
```javascript
-var discreteUniform = require( '@stdlib/random/base/discrete-uniform' ).factory;
-var filledarrayBy = require( '@stdlib/array/filled-by' );
-var Float32Array = require( '@stdlib/array/float32' );
+var discreteUniform = require( '@stdlib/random/array/discrete-uniform' );
var scusumors = require( '@stdlib/blas/ext/base/scusumors' );
-var x = filledarrayBy( 10, 'float32', discreteUniform( 0, 100 ) );
-var y = new Float32Array( x.length );
-
+var x = discreteUniform( 10, -100, 100, {
+ 'dtype': 'float32'
+});
console.log( x );
+
+var y = discreteUniform( 10, -100, 100, {
+ 'dtype': 'float32'
+});
console.log( y );
scusumors( x.length, 0.0, x, 1, y, -1 );
@@ -168,6 +170,138 @@ console.log( y );
+
+
+* * *
+
+
+
+## C APIs
+
+
+
+
+
+
+
+
+
+
+
+### Usage
+
+```c
+#include "stdlib/blas/ext/base/scusumors.h"
+```
+
+#### stdlib_strided_scusumors( N, sum, \*X, strideX, \*Y, strideY )
+
+Computes the cumulative sum of single-precision floating-point strided array elements using ordinary recursive summation.
+
+```c
+const float x[] = { 1.0f, 2.0f, 3.0f, 4.0f }
+float y[] = { 0.0f, 0.0f, 0.0f, 0.0f }
+
+stdlib_strided_scusumors( 4, 0.0f, x, 1, y, 1 );
+```
+
+The function accepts the following arguments:
+
+- **N**: `[in] CBLAS_INT` number of indexed elements.
+- **sum**: `[in] float` initial sum.
+- **X**: `[in] float*` input array.
+- **strideX**: `[in] CBLAS_INT` stride length for `X`.
+- **Y**: `[out] float*` output array.
+- **strideY**: `[in] CBLAS_INT` stride length for `Y`.
+
+```c
+void stdlib_strided_scusumors( const CBLAS_INT N, const float sum, const float *X, const CBLAS_INT strideX, float *Y, const CBLAS_INT strideY );
+```
+
+
+
+#### stdlib_strided_scusumors_ndarray( N, sum, \*X, strideX, offsetX, \*Y, strideY, offsetY )
+
+
+
+Computes the cumulative sum of single-precision floating-point strided array elements using ordinary recursive summation and alternative indexing semantics.
+
+```c
+const float x[] = { 1.0f, 2.0f, 3.0f, 4.0f }
+float y[] = { 0.0f, 0.0f, 0.0f, 0.0f }
+
+stdlib_strided_scusumors_ndarray( 4, 0.0f, x, 1, 0, y, 1, 0 );
+```
+
+The function accepts the following arguments:
+
+- **N**: `[in] CBLAS_INT` number of indexed elements.
+- **sum**: `[in] float` initial sum.
+- **X**: `[in] float*` input array.
+- **strideX**: `[in] CBLAS_INT` stride length for `X`.
+- **offsetX**: `[in] CBLAS_INT` starting index for `X`.
+- **Y**: `[out] float*` output array.
+- **strideY**: `[in] CBLAS_INT` stride length for `Y`.
+- **offsetY**: `[in] CBLAS_INT` starting index for `Y`.
+
+```c
+void stdlib_strided_scusumors_ndarray( const CBLAS_INT N, const float sum, const float *X, const CBLAS_INT strideX, const CBLAS_INT offsetX, float *Y, const CBLAS_INT strideY, const CBLAS_INT offsetY );
+```
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+### Examples
+
+```c
+#include "stdlib/blas/ext/base/scusumors.h"
+#include
+
+int main( void ) {
+ // Create strided arrays:
+ const float x[] = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f };
+ float y[] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f };
+
+ // Specify the number of elements:
+ const int N = 4;
+
+ // Specify stride lengths:
+ const int strideX = 2;
+ const int strideY = -2;
+
+ // Compute the cumulative sum:
+ stdlib_strided_scusumors( N, 0.0f, x, strideX, y, strideY );
+
+ // Print the result:
+ for ( int i = 0; i < 8; i++ ) {
+ printf( "y[ %d ] = %f\n", i, y[ i ] );
+ }
+}
+```
+
+
+
+
+
+
+
+
+
diff --git a/lib/node_modules/@stdlib/blas/ext/base/scusumors/benchmark/benchmark.js b/lib/node_modules/@stdlib/blas/ext/base/scusumors/benchmark/benchmark.js
index 2f42a28b2db3..e041274ef8f5 100644
--- a/lib/node_modules/@stdlib/blas/ext/base/scusumors/benchmark/benchmark.js
+++ b/lib/node_modules/@stdlib/blas/ext/base/scusumors/benchmark/benchmark.js
@@ -21,15 +21,20 @@
// MODULES //
var bench = require( '@stdlib/bench' );
-var uniform = require( '@stdlib/random/base/uniform' ).factory;
-var filledarrayBy = require( '@stdlib/array/filled-by' );
+var uniform = require( '@stdlib/random/array/uniform' );
var isnanf = require( '@stdlib/math/base/assert/is-nanf' );
var pow = require( '@stdlib/math/base/special/pow' );
-var Float32Array = require( '@stdlib/array/float32' );
var pkg = require( './../package.json' ).name;
var scusumors = require( './../lib/scusumors.js' );
+// VARIABLES //
+
+var options = {
+ 'dtype': 'float32'
+};
+
+
// FUNCTIONS //
/**
@@ -40,11 +45,8 @@ var scusumors = require( './../lib/scusumors.js' );
* @returns {Function} benchmark function
*/
function createBenchmark( len ) {
- var y;
- var x;
-
- x = filledarrayBy( len, 'float32', uniform( -10.0, 10.0 ) );
- y = new Float32Array( len );
+ var x = uniform( len, -100, 100, options );
+ var y = uniform( len, -100, 100, options );
return benchmark;
diff --git a/lib/node_modules/@stdlib/blas/ext/base/scusumors/benchmark/benchmark.native.js b/lib/node_modules/@stdlib/blas/ext/base/scusumors/benchmark/benchmark.native.js
index 4256c5fc0c77..fe4f0b2a358d 100644
--- a/lib/node_modules/@stdlib/blas/ext/base/scusumors/benchmark/benchmark.native.js
+++ b/lib/node_modules/@stdlib/blas/ext/base/scusumors/benchmark/benchmark.native.js
@@ -22,11 +22,9 @@
var resolve = require( 'path' ).resolve;
var bench = require( '@stdlib/bench' );
-var uniform = require( '@stdlib/random/base/uniform' ).factory;
-var filledarrayBy = require( '@stdlib/array/filled-by' );
+var uniform = require( '@stdlib/random/array/uniform' );
var isnanf = require( '@stdlib/math/base/assert/is-nanf' );
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;
@@ -37,6 +35,9 @@ var scusumors = tryRequire( resolve( __dirname, './../lib/scusumors.native.js' )
var opts = {
'skip': ( scusumors instanceof Error )
};
+var options = {
+ 'dtype': 'float32'
+};
// FUNCTIONS //
@@ -49,11 +50,8 @@ var opts = {
* @returns {Function} benchmark function
*/
function createBenchmark( len ) {
- var x;
- var y;
-
- x = filledarrayBy( len, 'float32', uniform( -10.0, 10.0 ) );
- y = new Float32Array( len );
+ var x = uniform( len, -100, 100, options );
+ var y = uniform( len, -100, 100, options );
return benchmark;
diff --git a/lib/node_modules/@stdlib/blas/ext/base/scusumors/benchmark/benchmark.ndarray.js b/lib/node_modules/@stdlib/blas/ext/base/scusumors/benchmark/benchmark.ndarray.js
index 2c987c262a8a..3138c25ebade 100644
--- a/lib/node_modules/@stdlib/blas/ext/base/scusumors/benchmark/benchmark.ndarray.js
+++ b/lib/node_modules/@stdlib/blas/ext/base/scusumors/benchmark/benchmark.ndarray.js
@@ -21,15 +21,20 @@
// MODULES //
var bench = require( '@stdlib/bench' );
-var uniform = require( '@stdlib/random/base/uniform' ).factory;
-var filledarrayBy = require( '@stdlib/array/filled-by' );
+var uniform = require( '@stdlib/random/array/uniform' );
var isnanf = require( '@stdlib/math/base/assert/is-nanf' );
var pow = require( '@stdlib/math/base/special/pow' );
-var Float32Array = require( '@stdlib/array/float32' );
var pkg = require( './../package.json' ).name;
var scusumors = require( './../lib/ndarray.js' );
+// VARIABLES //
+
+var options = {
+ 'dtype': 'float32'
+};
+
+
// FUNCTIONS //
/**
@@ -40,11 +45,8 @@ var scusumors = require( './../lib/ndarray.js' );
* @returns {Function} benchmark function
*/
function createBenchmark( len ) {
- var x;
- var y;
-
- x = filledarrayBy( len, 'float32', uniform( -10.0, 10.0 ) );
- y = new Float32Array( len );
+ var x = uniform( len, -100, 100, options );
+ var y = uniform( len, -100, 100, options );
return benchmark;
diff --git a/lib/node_modules/@stdlib/blas/ext/base/scusumors/benchmark/benchmark.ndarray.native.js b/lib/node_modules/@stdlib/blas/ext/base/scusumors/benchmark/benchmark.ndarray.native.js
index 37cc520539ab..7dd82e9de393 100644
--- a/lib/node_modules/@stdlib/blas/ext/base/scusumors/benchmark/benchmark.ndarray.native.js
+++ b/lib/node_modules/@stdlib/blas/ext/base/scusumors/benchmark/benchmark.ndarray.native.js
@@ -22,11 +22,9 @@
var resolve = require( 'path' ).resolve;
var bench = require( '@stdlib/bench' );
-var uniform = require( '@stdlib/random/base/uniform' ).factory;
-var filledarrayBy = require( '@stdlib/array/filled-by' );
+var uniform = require( '@stdlib/random/array/uniform' );
var isnanf = require( '@stdlib/math/base/assert/is-nanf' );
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;
@@ -37,6 +35,9 @@ var scusumors = tryRequire( resolve( __dirname, './../lib/ndarray.native.js' ) )
var opts = {
'skip': ( scusumors instanceof Error )
};
+var options = {
+ 'dtype': 'float32'
+};
// FUNCTIONS //
@@ -49,11 +50,8 @@ var opts = {
* @returns {Function} benchmark function
*/
function createBenchmark( len ) {
- var x;
- var y;
-
- x = filledarrayBy( len, 'float32', uniform( -10.0, 10.0 ) );
- y = new Float32Array( len );
+ var x = uniform( len, -100, 100, options );
+ var y = uniform( len, -100, 100, options );
return benchmark;
diff --git a/lib/node_modules/@stdlib/blas/ext/base/scusumors/benchmark/c/benchmark.length.c b/lib/node_modules/@stdlib/blas/ext/base/scusumors/benchmark/c/benchmark.length.c
index 5e3dbe434046..fcb6ef19ea91 100644
--- a/lib/node_modules/@stdlib/blas/ext/base/scusumors/benchmark/c/benchmark.length.c
+++ b/lib/node_modules/@stdlib/blas/ext/base/scusumors/benchmark/c/benchmark.length.c
@@ -94,7 +94,7 @@ static float rand_float( void ) {
* @param len array length
* @return elapsed time in seconds
*/
-static double benchmark( int iterations, int len ) {
+static double benchmark1( int iterations, int len ) {
double elapsed;
float x[ len ];
float y[ len ];
@@ -121,6 +121,40 @@ static double benchmark( int iterations, int len ) {
return elapsed;
}
+/**
+* Runs a benchmark.
+*
+* @param iterations number of iterations
+* @param len array length
+* @return elapsed time in seconds
+*/
+static double benchmark2( int iterations, int len ) {
+ double elapsed;
+ float x[ len ];
+ float y[ len ];
+ double t;
+ int i;
+
+ for ( i = 0; i < len; i++ ) {
+ x[ i ] = ( rand_float() * 20000.0f ) - 10000.0f;
+ y[ i ] = 0.0f;
+ }
+ t = tic();
+ for ( i = 0; i < iterations; i++ ) {
+ x[ 0 ] += 1.0f;
+ stdlib_strided_scusumors_ndarray( len, 0.0f, x, 1, 0, y, 1, 0 );
+ if ( y[ 0 ] != y[ 0 ] ) {
+ printf( "should not return NaN\n" );
+ break;
+ }
+ }
+ elapsed = tic() - t;
+ if ( y[ len-1 ] != y[ len-1 ] ) {
+ printf( "should not return NaN\n" );
+ }
+ return elapsed;
+}
+
/**
* Main execution sequence.
*/
@@ -143,7 +177,18 @@ int main( void ) {
for ( j = 0; j < REPEATS; j++ ) {
count += 1;
printf( "# c::%s:len=%d\n", NAME, len );
- elapsed = benchmark( iter, len );
+ elapsed = benchmark1( iter, len );
+ print_results( iter, elapsed );
+ printf( "ok %d benchmark finished\n", count );
+ }
+ }
+ for ( i = MIN; i <= MAX; i++ ) {
+ len = pow( 10, i );
+ iter = ITERATIONS / pow( 10, i-1 );
+ for ( j = 0; j < REPEATS; j++ ) {
+ count += 1;
+ printf( "# c::%s:ndarray:len=%d\n", NAME, len );
+ elapsed = benchmark2( iter, len );
print_results( iter, elapsed );
printf( "ok %d benchmark finished\n", count );
}
diff --git a/lib/node_modules/@stdlib/blas/ext/base/scusumors/docs/repl.txt b/lib/node_modules/@stdlib/blas/ext/base/scusumors/docs/repl.txt
index c16d450b275c..81cc057e0a3b 100644
--- a/lib/node_modules/@stdlib/blas/ext/base/scusumors/docs/repl.txt
+++ b/lib/node_modules/@stdlib/blas/ext/base/scusumors/docs/repl.txt
@@ -4,7 +4,7 @@
elements using ordinary recursive summation.
The `N` and stride parameters determine which elements in the strided arrays
- are accessed at runtime.
+ are accessed at runtime.
Indexing is relative to the first index. To introduce an offset, use a typed
array view.
@@ -23,13 +23,13 @@
Input array.
strideX: integer
- Index increment for `x`.
+ Stride length for `x`.
y: Float32Array
Output array.
strideY: integer
- Index increment for `y`.
+ Stride length for `y`.
Returns
-------
@@ -67,8 +67,8 @@
semantics.
While typed array views mandate a view offset based on the underlying
- buffer, the `offset` parameter supports indexing semantics based on a
- starting index.
+ buffer, the offset parameters support indexing semantics based on starting
+ indices.
Parameters
----------
@@ -82,7 +82,7 @@
Input array.
strideX: integer
- Index increment for `x`.
+ Stride length for `x`.
offsetX: integer
Starting index for `x`.
@@ -91,7 +91,7 @@
Output array.
strideY: integer
- Index increment for `y`.
+ Stride length for `y`.
offsetY: integer
Starting index for `y`.
diff --git a/lib/node_modules/@stdlib/blas/ext/base/scusumors/docs/types/index.d.ts b/lib/node_modules/@stdlib/blas/ext/base/scusumors/docs/types/index.d.ts
index 8a0cf6dd1ec4..ccc29eed81a4 100644
--- a/lib/node_modules/@stdlib/blas/ext/base/scusumors/docs/types/index.d.ts
+++ b/lib/node_modules/@stdlib/blas/ext/base/scusumors/docs/types/index.d.ts
@@ -28,9 +28,9 @@ interface Routine {
* @param N - number of indexed elements
* @param sum - initial sum
* @param x - input array
- * @param strideX - `x` stride length
+ * @param strideX - stride length for `x`
* @param y - output array
- * @param strideY - `y` stride length
+ * @param strideY - stride length for `y`
* @returns output array
*
* @example
@@ -50,10 +50,10 @@ interface Routine {
* @param N - number of indexed elements
* @param sum - initial sum
* @param x - input array
- * @param strideX - `x` stride length
+ * @param strideX - stride length for `x`
* @param offsetX - starting index for `x`
* @param y - output array
- * @param strideY - `y` stride length
+ * @param strideY - stride length for `y`
* @param offsetY - starting index for `y`
* @returns output array
*
@@ -75,9 +75,9 @@ interface Routine {
* @param N - number of indexed elements
* @param sum - initial sum
* @param x - input array
-* @param strideX - `x` stride length
+* @param strideX - stride length for `x`
* @param y - output array
-* @param strideY - `y` stride length
+* @param strideY - stride length for `y`
* @returns output array
*
* @example
diff --git a/lib/node_modules/@stdlib/blas/ext/base/scusumors/examples/c/example.c b/lib/node_modules/@stdlib/blas/ext/base/scusumors/examples/c/example.c
index 6414a73d6183..b5e8371f22da 100644
--- a/lib/node_modules/@stdlib/blas/ext/base/scusumors/examples/c/example.c
+++ b/lib/node_modules/@stdlib/blas/ext/base/scusumors/examples/c/example.c
@@ -17,27 +17,25 @@
*/
#include "stdlib/blas/ext/base/scusumors.h"
-#include
#include
-#include
int main( void ) {
// Create strided arrays:
- const float x[] = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 };
- float y[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
+ const float x[] = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f };
+ float y[] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f };
// Specify the number of elements:
- const int64_t N = 4;
+ const int N = 4;
// Specify stride lengths:
- const int64_t strideX = 2;
- const int64_t strideY = -2;
+ const int strideX = 2;
+ const int strideY = -2;
// Compute the cumulative sum:
stdlib_strided_scusumors( N, 0.0f, x, strideX, y, strideY );
// Print the result:
- for ( int64_t i = 0; i < 8; i++ ) {
- printf( "y[ %"PRId64" ] = %f\n", i, y[ i ] );
+ for ( int i = 0; i < 8; i++ ) {
+ printf( "y[ %d ] = %f\n", i, y[ i ] );
}
}
diff --git a/lib/node_modules/@stdlib/blas/ext/base/scusumors/examples/index.js b/lib/node_modules/@stdlib/blas/ext/base/scusumors/examples/index.js
index 7bb9a381a349..2d80bb5d1af9 100644
--- a/lib/node_modules/@stdlib/blas/ext/base/scusumors/examples/index.js
+++ b/lib/node_modules/@stdlib/blas/ext/base/scusumors/examples/index.js
@@ -18,15 +18,17 @@
'use strict';
-var Float32Array = require( '@stdlib/array/float32' );
-var discreteUniform = require( '@stdlib/random/base/discrete-uniform' ).factory;
-var filledarrayBy = require( '@stdlib/array/filled-by' );
+var discreteUniform = require( '@stdlib/random/array/discrete-uniform' );
var scusumors = require( './../lib' );
-var x = filledarrayBy( 10, 'float32', discreteUniform( 0, 100 ) );
-var y = new Float32Array( x.length );
-
+var x = discreteUniform( 10, -100, 100, {
+ 'dtype': 'float32'
+});
console.log( x );
+
+var y = discreteUniform( 10, -100, 100, {
+ 'dtype': 'float32'
+});
console.log( y );
scusumors( x.length, 0.0, x, 1, y, -1 );
diff --git a/lib/node_modules/@stdlib/blas/ext/base/scusumors/include/stdlib/blas/ext/base/scusumors.h b/lib/node_modules/@stdlib/blas/ext/base/scusumors/include/stdlib/blas/ext/base/scusumors.h
index 48771eef6d1d..5e78c9d78ce2 100644
--- a/lib/node_modules/@stdlib/blas/ext/base/scusumors/include/stdlib/blas/ext/base/scusumors.h
+++ b/lib/node_modules/@stdlib/blas/ext/base/scusumors/include/stdlib/blas/ext/base/scusumors.h
@@ -19,7 +19,7 @@
#ifndef STDLIB_BLAS_EXT_BASE_SCUSUMORS_H
#define STDLIB_BLAS_EXT_BASE_SCUSUMORS_H
-#include
+#include "stdlib/blas/base/shared.h"
/*
* If C++, prevent name mangling so that the compiler emits a binary file having undecorated names, thus mirroring the behavior of a C compiler.
@@ -31,7 +31,12 @@ extern "C" {
/**
* Computes the cumulative sum of single-precision floating-point strided array elements using ordinary recursive summation.
*/
-void stdlib_strided_scusumors( const int64_t N, const float sum, const float *X, const int64_t strideX, float *Y, const int64_t strideY );
+void API_SUFFIX(stdlib_strided_scusumors)( const CBLAS_INT N, const float sum, const float *X, const CBLAS_INT strideX, float *Y, const CBLAS_INT strideY );
+
+/**
+* Computes the cumulative sum of single-precision floating-point strided array elements using ordinary recursive summation and alternative indexing semantics.
+*/
+void API_SUFFIX(stdlib_strided_scusumors_ndarray)( const CBLAS_INT N, const float sum, const float *X, const CBLAS_INT strideX, const CBLAS_INT offsetX, float *Y, const CBLAS_INT strideY, const CBLAS_INT offsetY );
#ifdef __cplusplus
}
diff --git a/lib/node_modules/@stdlib/blas/ext/base/scusumors/lib/index.js b/lib/node_modules/@stdlib/blas/ext/base/scusumors/lib/index.js
index baed5c2f0ff4..fd7469158844 100644
--- a/lib/node_modules/@stdlib/blas/ext/base/scusumors/lib/index.js
+++ b/lib/node_modules/@stdlib/blas/ext/base/scusumors/lib/index.js
@@ -29,9 +29,8 @@
*
* var x = new Float32Array( [ 1.0, -2.0, 2.0 ] );
* var y = new Float32Array( x.length );
-* var N = x.length;
*
-* scusumors( N, 0.0, x, 1, y, 1 );
+* scusumors( x.length, 0.0, x, 1, y, 1 );
* // y => [ 1.0, -1.0, 1.0 ]
*
* @example
diff --git a/lib/node_modules/@stdlib/blas/ext/base/scusumors/lib/ndarray.js b/lib/node_modules/@stdlib/blas/ext/base/scusumors/lib/ndarray.js
index 210f8a30aa55..a7a8240c86aa 100644
--- a/lib/node_modules/@stdlib/blas/ext/base/scusumors/lib/ndarray.js
+++ b/lib/node_modules/@stdlib/blas/ext/base/scusumors/lib/ndarray.js
@@ -31,10 +31,10 @@ var float64ToFloat32 = require( '@stdlib/number/float64/base/to-float32' );
* @param {PositiveInteger} N - number of indexed elements
* @param {number} sum - initial sum
* @param {Float32Array} x - input array
-* @param {integer} strideX - `x` stride length
+* @param {integer} strideX - stride length for `x`
* @param {NonNegativeInteger} offsetX - starting index for `x`
* @param {Float32Array} y - output array
-* @param {integer} strideY - `y` stride length
+* @param {integer} strideY - stride length for `y`
* @param {NonNegativeInteger} offsetY - starting index for `y`
* @returns {Float32Array} output array
*
diff --git a/lib/node_modules/@stdlib/blas/ext/base/scusumors/lib/ndarray.native.js b/lib/node_modules/@stdlib/blas/ext/base/scusumors/lib/ndarray.native.js
index 1e5087b5aa64..674ecc746cd0 100644
--- a/lib/node_modules/@stdlib/blas/ext/base/scusumors/lib/ndarray.native.js
+++ b/lib/node_modules/@stdlib/blas/ext/base/scusumors/lib/ndarray.native.js
@@ -20,9 +20,7 @@
// MODULES //
-var minViewBufferIndex = require( '@stdlib/strided/base/min-view-buffer-index' );
-var offsetView = require( '@stdlib/strided/base/offset-view' );
-var addon = require( './scusumors.native.js' );
+var addon = require( './../src/addon.node' );
// MAIN //
@@ -33,10 +31,10 @@ var addon = require( './scusumors.native.js' );
* @param {PositiveInteger} N - number of indexed elements
* @param {number} sum - initial sum
* @param {Float32Array} x - input array
-* @param {integer} strideX - `x` stride length
+* @param {integer} strideX - stride length for `x`
* @param {NonNegativeInteger} offsetX - starting index for `x`
* @param {Float32Array} y - output array
-* @param {integer} strideY - `y` stride length
+* @param {integer} strideY - stride length for `y`
* @param {NonNegativeInteger} offsetY - starting index for `y`
* @returns {Float32Array} output array
*
@@ -50,16 +48,7 @@ var addon = require( './scusumors.native.js' );
* // returns [ 1.0, -1.0, 1.0, 5.0, 0.0, 0.0, 0.0, 0.0 ]
*/
function scusumors( N, sum, x, strideX, offsetX, y, strideY, offsetY ) {
- var viewX;
- var viewY;
-
- offsetX = minViewBufferIndex( N, strideX, offsetX );
- offsetY = minViewBufferIndex( N, strideY, offsetY );
-
- viewX = offsetView( x, offsetX );
- viewY = offsetView( y, offsetY );
-
- addon( N, sum, viewX, strideX, viewY, strideY );
+ addon.ndarray( N, sum, x, strideX, offsetX, y, strideY, offsetY );
return y;
}
diff --git a/lib/node_modules/@stdlib/blas/ext/base/scusumors/lib/scusumors.js b/lib/node_modules/@stdlib/blas/ext/base/scusumors/lib/scusumors.js
index 45ebaecf7bf3..8510cc98bb01 100644
--- a/lib/node_modules/@stdlib/blas/ext/base/scusumors/lib/scusumors.js
+++ b/lib/node_modules/@stdlib/blas/ext/base/scusumors/lib/scusumors.js
@@ -20,7 +20,8 @@
// MODULES //
-var float64ToFloat32 = require( '@stdlib/number/float64/base/to-float32' );
+var stride2offset = require( '@stdlib/strided/base/stride2offset' );
+var ndarray = require( './ndarray.js' );
// MAIN //
@@ -31,9 +32,9 @@ var float64ToFloat32 = require( '@stdlib/number/float64/base/to-float32' );
* @param {PositiveInteger} N - number of indexed elements
* @param {number} sum - initial sum
* @param {Float32Array} x - input array
-* @param {integer} strideX - `x` stride length
+* @param {integer} strideX - stride length for `x`
* @param {Float32Array} y - output array
-* @param {integer} strideY - `y` stride length
+* @param {integer} strideY - stride length for `y`
* @returns {Float32Array} output array
*
* @example
@@ -41,35 +42,12 @@ var float64ToFloat32 = require( '@stdlib/number/float64/base/to-float32' );
*
* var x = new Float32Array( [ 1.0, -2.0, 2.0 ] );
* var y = new Float32Array( x.length );
-* var N = x.length;
*
-* var v = scusumors( N, 0.0, x, 1, y, 1 );
+* var v = scusumors( x.length, 0.0, x, 1, y, 1 );
* // returns [ 1.0, -1.0, 1.0 ]
*/
function scusumors( N, sum, x, strideX, y, strideY ) {
- var ix;
- var iy;
- var i;
-
- if ( N <= 0 ) {
- return y;
- }
- if ( strideX < 0 ) {
- ix = (1-N) * strideX;
- } else {
- ix = 0;
- }
- if ( strideY < 0 ) {
- iy = (1-N) * strideY;
- } else {
- iy = 0;
- }
- for ( i = 0; i < N; i++ ) {
- sum = float64ToFloat32( sum + x[ ix ] );
- y[ iy ] = sum;
- ix += strideX;
- iy += strideY;
- }
+ ndarray( N, sum, x, strideX, stride2offset( N, strideX ), y, strideY, stride2offset( N, strideY ) ); // eslint-disable-line max-len
return y;
}
diff --git a/lib/node_modules/@stdlib/blas/ext/base/scusumors/lib/scusumors.native.js b/lib/node_modules/@stdlib/blas/ext/base/scusumors/lib/scusumors.native.js
index 7daf20a31f99..4050ada398f4 100644
--- a/lib/node_modules/@stdlib/blas/ext/base/scusumors/lib/scusumors.native.js
+++ b/lib/node_modules/@stdlib/blas/ext/base/scusumors/lib/scusumors.native.js
@@ -31,9 +31,9 @@ var addon = require( './../src/addon.node' );
* @param {PositiveInteger} N - number of indexed elements
* @param {number} sum - initial sum
* @param {Float32Array} x - input array
-* @param {integer} strideX - `x` stride length
+* @param {integer} strideX - stride length for `x`
* @param {Float32Array} y - output array
-* @param {integer} strideY - `y` stride length
+* @param {integer} strideY - stride length for `y`
* @returns {Float32Array} output array
*
* @example
@@ -41,9 +41,8 @@ var addon = require( './../src/addon.node' );
*
* var x = new Float32Array( [ 1.0, -2.0, 2.0 ] );
* var y = new Float32Array( x.length );
-* var N = x.length;
*
-* var v = scusumors( N, 0.0, x, 1, y, 1 );
+* var v = scusumors( x.length, 0.0, x, 1, y, 1 );
* // returns [ 1.0, -1.0, 1.0 ]
*/
function scusumors( N, sum, x, strideX, y, strideY ) {
diff --git a/lib/node_modules/@stdlib/blas/ext/base/scusumors/manifest.json b/lib/node_modules/@stdlib/blas/ext/base/scusumors/manifest.json
index 17c6d6c978f5..c8928576cc34 100644
--- a/lib/node_modules/@stdlib/blas/ext/base/scusumors/manifest.json
+++ b/lib/node_modules/@stdlib/blas/ext/base/scusumors/manifest.json
@@ -28,50 +28,52 @@
{
"task": "build",
"src": [
- "./src/scusumors.c"
+ "./src/main.c"
],
"include": [
"./include"
],
- "libraries": [
- "-lm"
- ],
+ "libraries": [],
"libpath": [],
"dependencies": [
"@stdlib/napi/export",
"@stdlib/napi/argv",
"@stdlib/napi/argv-float",
"@stdlib/napi/argv-int64",
- "@stdlib/napi/argv-strided-float32array"
+ "@stdlib/napi/argv-strided-float32array",
+ "@stdlib/strided/base/stride2offset",
+ "@stdlib/blas/base/shared"
]
},
{
"task": "benchmark",
"src": [
- "./src/scusumors.c"
+ "./src/main.c"
],
"include": [
"./include"
],
- "libraries": [
- "-lm"
- ],
+ "libraries": [],
"libpath": [],
- "dependencies": []
+ "dependencies": [
+ "@stdlib/strided/base/stride2offset",
+ "@stdlib/blas/base/shared"
+ ]
},
{
"task": "examples",
"src": [
- "./src/scusumors.c"
+ "./src/main.c"
],
"include": [
"./include"
],
- "libraries": [
- "-lm"
- ],
+ "libraries": [],
"libpath": [],
- "dependencies": []
+ "dependencies": [
+ "@stdlib/strided/base/stride2offset",
+ "@stdlib/blas/base/shared"
+ ]
}
]
}
diff --git a/lib/node_modules/@stdlib/blas/ext/base/scusumors/src/addon.c b/lib/node_modules/@stdlib/blas/ext/base/scusumors/src/addon.c
index 61230aba23f2..40f323dd2997 100644
--- a/lib/node_modules/@stdlib/blas/ext/base/scusumors/src/addon.c
+++ b/lib/node_modules/@stdlib/blas/ext/base/scusumors/src/addon.c
@@ -17,6 +17,7 @@
*/
#include "stdlib/blas/ext/base/scusumors.h"
+#include "stdlib/blas/base/shared.h"
#include "stdlib/napi/export.h"
#include "stdlib/napi/argv.h"
#include "stdlib/napi/argv_float.h"
@@ -39,12 +40,29 @@ static napi_value addon( napi_env env, napi_callback_info info ) {
STDLIB_NAPI_ARGV_INT64( env, strideY, argv, 5 );
STDLIB_NAPI_ARGV_STRIDED_FLOAT32ARRAY( env, X, N, strideX, argv, 2 );
STDLIB_NAPI_ARGV_STRIDED_FLOAT32ARRAY( env, Y, N, strideY, argv, 4 );
-
- stdlib_strided_scusumors( N, sum, X, strideX, Y, strideY );
-
+ API_SUFFIX(stdlib_strided_scusumors)( N, sum, X, strideX, Y, strideY );
return NULL;
}
+/**
+* Receives JavaScript callback invocation data.
+*
+* @param env environment under which the function is invoked
+* @param info callback data
+* @return Node-API value
+*/
+static napi_value addon_method( napi_env env, napi_callback_info info ) {
+ STDLIB_NAPI_ARGV( env, info, argv, argc, 8 );
+ STDLIB_NAPI_ARGV_INT64( env, N, argv, 0 );
+ STDLIB_NAPI_ARGV_FLOAT( env, sum, argv, 1 );
+ STDLIB_NAPI_ARGV_INT64( env, strideX, argv, 3 );
+ STDLIB_NAPI_ARGV_INT64( env, offsetX, argv, 4 );
+ STDLIB_NAPI_ARGV_INT64( env, strideY, argv, 6 );
+ STDLIB_NAPI_ARGV_INT64( env, offsetY, argv, 7 );
+ STDLIB_NAPI_ARGV_STRIDED_FLOAT32ARRAY( env, X, N, strideX, argv, 2 );
+ STDLIB_NAPI_ARGV_STRIDED_FLOAT32ARRAY( env, Y, N, strideY, argv, 5 );
+ API_SUFFIX(stdlib_strided_scusumors_ndarray)( N, sum, X, strideX, offsetX, Y, strideY, offsetY );
+ return NULL;
+}
-STDLIB_NAPI_MODULE_EXPORT_FCN( addon )
-
+STDLIB_NAPI_MODULE_EXPORT_FCN_WITH_METHOD( addon, "ndarray", addon_method );
diff --git a/lib/node_modules/@stdlib/blas/ext/base/scusumors/src/main.c b/lib/node_modules/@stdlib/blas/ext/base/scusumors/src/main.c
new file mode 100644
index 000000000000..be4515a4925d
--- /dev/null
+++ b/lib/node_modules/@stdlib/blas/ext/base/scusumors/src/main.c
@@ -0,0 +1,70 @@
+/**
+* @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.
+*/
+
+#include "stdlib/blas/ext/base/scusumors.h"
+#include "stdlib/blas/base/shared.h"
+#include "stdlib/strided/base/stride2offset.h"
+
+/**
+* Computes the cumulative sum of single-precision floating-point strided array elements using ordinary recursive summation.
+*
+* @param N number of indexed elements
+* @param sum initial sum
+* @param X input array
+* @param strideX stride length for X
+* @param Y output array
+* @param strideY stride length for Y
+*/
+void API_SUFFIX(stdlib_strided_scusumors)( const CBLAS_INT N, const float sum, const float *X, const CBLAS_INT strideX, float *Y, const CBLAS_INT strideY ) {
+ const CBLAS_INT ox = stdlib_strided_stride2offset( N, strideX );
+ const CBLAS_INT oy = stdlib_strided_stride2offset( N, strideY );
+ API_SUFFIX(stdlib_strided_scusumors_ndarray)( N, sum, X, strideX, ox, Y, strideY, oy );
+}
+
+/**
+* Computes the cumulative sum of single-precision floating-point strided array elements using ordinary recursive summation and alternative indexing semantics.
+*
+* @param N number of indexed elements
+* @param sum initial sum
+* @param X input array
+* @param strideX stride length for X
+* @param offsetX starting index for X
+* @param Y output array
+* @param strideY stride length for Y
+* @param offsetY starting index for Y
+*/
+void API_SUFFIX(stdlib_strided_scusumors_ndarray)( const CBLAS_INT N, const float sum, const float *X, const CBLAS_INT strideX, const CBLAS_INT offsetX, float *Y, const CBLAS_INT strideY, const CBLAS_INT offsetY ) {
+ CBLAS_INT ix;
+ CBLAS_INT iy;
+ CBLAS_INT i;
+ float s;
+
+ if ( N <= 0 ) {
+ return;
+ }
+ ix = offsetX;
+ iy = offsetY;
+ s = sum;
+ for ( i = 0; i < N; i++ ) {
+ s += X[ ix ];
+ Y[ iy ] = s;
+ ix += strideX;
+ iy += strideY;
+ }
+ return;
+}
diff --git a/lib/node_modules/@stdlib/blas/ext/base/scusumors/src/scusumors.c b/lib/node_modules/@stdlib/blas/ext/base/scusumors/src/scusumors.c
deleted file mode 100644
index b755aab74a1b..000000000000
--- a/lib/node_modules/@stdlib/blas/ext/base/scusumors/src/scusumors.c
+++ /dev/null
@@ -1,59 +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/scusumors.h"
-#include
-
-/**
-* Computes the cumulative sum of single-precision floating-point strided array elements using ordinary recursive summation.
-*
-* @param N number of indexed elements
-* @param sum initial sum
-* @param X input array
-* @param strideX X stride length
-* @param Y output array
-* @param strideY Y stride length
-*/
-void stdlib_strided_scusumors( const int64_t N, const float sum, const float *X, const int64_t strideX, float *Y, const int64_t strideY ) {
- int64_t ix;
- int64_t iy;
- int64_t i;
- float s;
-
- if ( N <= 0 ) {
- return;
- }
- if ( strideX < 0 ) {
- ix = (1-N) * strideX;
- } else {
- ix = 0;
- }
- if ( strideY < 0 ) {
- iy = (1-N) * strideY;
- } else {
- iy = 0;
- }
- s = sum;
- for ( i = 0; i < N; i++ ) {
- s += X[ ix ];
- Y[ iy ] = s;
- ix += strideX;
- iy += strideY;
- }
- return;
-}