From 3be4a41d9ff16153dca1c633db428cdcef25e9e8 Mon Sep 17 00:00:00 2001 From: JoyBoy <144602492+0PrashantYadav0@users.noreply.github.com> Date: Tue, 11 Mar 2025 13:24:46 +0530 Subject: [PATCH 1/6] feat: add blas/ext/base/wasm/dnansum --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown status: passed - task: lint_package_json status: passed - task: lint_repl_help status: passed - task: lint_javascript_src status: passed - task: lint_javascript_cli status: na - task: lint_javascript_examples status: passed - task: lint_javascript_tests status: passed - task: lint_javascript_benchmarks status: passed - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: passed - task: lint_typescript_tests status: passed - task: lint_license_headers status: passed --- --- .../blas/ext/base/dnansum/manifest.json | 23 +- .../blas/ext/base/dnansumkbn/manifest.json | 24 +- .../blas/ext/base/wasm/dnansum/README.md | 291 ++++++++++ .../base/wasm/dnansum/benchmark/benchmark.js | 106 ++++ .../dnansum/benchmark/benchmark.module.js | 66 +++ .../benchmark/benchmark.module.main.js | 130 +++++ .../benchmark/benchmark.module.ndarray.js | 130 +++++ .../dnansum/benchmark/benchmark.ndarray.js | 106 ++++ .../blas/ext/base/wasm/dnansum/docs/repl.txt | 498 ++++++++++++++++++ .../base/wasm/dnansum/docs/types/index.d.ts | 316 +++++++++++ .../ext/base/wasm/dnansum/docs/types/test.ts | 347 ++++++++++++ .../ext/base/wasm/dnansum/examples/index.js | 43 ++ .../dnansum/examples/little_endian_arrays.js | 65 +++ .../ext/base/wasm/dnansum/examples/module.js | 63 +++ .../base/wasm/dnansum/lib/binary.browser.js | 33 ++ .../blas/ext/base/wasm/dnansum/lib/binary.js | 34 ++ .../blas/ext/base/wasm/dnansum/lib/index.js | 100 ++++ .../blas/ext/base/wasm/dnansum/lib/main.js | 60 +++ .../blas/ext/base/wasm/dnansum/lib/module.js | 198 +++++++ .../blas/ext/base/wasm/dnansum/lib/routine.js | 166 ++++++ .../blas/ext/base/wasm/dnansum/manifest.json | 36 ++ .../blas/ext/base/wasm/dnansum/package.json | 81 +++ .../ext/base/wasm/dnansum/scripts/build.js | 66 +++ .../base/wasm/dnansum/scripts/template.txt | 33 ++ .../blas/ext/base/wasm/dnansum/src/Makefile | 243 +++++++++ .../ext/base/wasm/dnansum/src/exports.json | 4 + .../blas/ext/base/wasm/dnansum/src/main.wasm | Bin 0 -> 349 bytes .../blas/ext/base/wasm/dnansum/src/main.wat | 131 +++++ .../blas/ext/base/wasm/dnansum/test/test.js | 53 ++ .../ext/base/wasm/dnansum/test/test.main.js | 202 +++++++ .../ext/base/wasm/dnansum/test/test.module.js | 154 ++++++ .../wasm/dnansum/test/test.module.main.js | 236 +++++++++ .../wasm/dnansum/test/test.module.ndarray.js | 271 ++++++++++ .../base/wasm/dnansum/test/test.ndarray.js | 202 +++++++ .../base/wasm/dnansum/test/test.routine.js | 71 +++ 35 files changed, 4580 insertions(+), 2 deletions(-) create mode 100644 lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/README.md create mode 100644 lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/benchmark/benchmark.js create mode 100644 lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/benchmark/benchmark.module.js create mode 100644 lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/benchmark/benchmark.module.main.js create mode 100644 lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/benchmark/benchmark.module.ndarray.js create mode 100644 lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/benchmark/benchmark.ndarray.js create mode 100644 lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/docs/repl.txt create mode 100644 lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/docs/types/index.d.ts create mode 100644 lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/docs/types/test.ts create mode 100644 lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/examples/index.js create mode 100644 lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/examples/little_endian_arrays.js create mode 100644 lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/examples/module.js create mode 100644 lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/binary.browser.js create mode 100644 lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/binary.js create mode 100644 lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/index.js create mode 100644 lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/main.js create mode 100644 lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/module.js create mode 100644 lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/routine.js create mode 100644 lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/manifest.json create mode 100644 lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/package.json create mode 100644 lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/scripts/build.js create mode 100644 lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/scripts/template.txt create mode 100644 lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/src/Makefile create mode 100644 lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/src/exports.json create mode 100755 lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/src/main.wasm create mode 100644 lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/src/main.wat create mode 100644 lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.js create mode 100644 lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.main.js create mode 100644 lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.module.js create mode 100644 lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.module.main.js create mode 100644 lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.module.ndarray.js create mode 100644 lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.ndarray.js create mode 100644 lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.routine.js diff --git a/lib/node_modules/@stdlib/blas/ext/base/dnansum/manifest.json b/lib/node_modules/@stdlib/blas/ext/base/dnansum/manifest.json index f77dd65aa66d..61c0a02e3ac6 100644 --- a/lib/node_modules/@stdlib/blas/ext/base/dnansum/manifest.json +++ b/lib/node_modules/@stdlib/blas/ext/base/dnansum/manifest.json @@ -1,6 +1,7 @@ { "options": { - "task": "build" + "task": "build", + "wasm": false }, "fields": [ { @@ -27,6 +28,7 @@ "confs": [ { "task": "build", + "wasm": false, "src": [ "./src/main.c" ], @@ -48,6 +50,7 @@ }, { "task": "benchmark", + "wasm": false, "src": [ "./src/main.c" ], @@ -64,6 +67,24 @@ }, { "task": "examples", + "wasm": false, + "src": [ + "./src/main.c" + ], + "include": [ + "./include" + ], + "libraries": [], + "libpath": [], + "dependencies": [ + "@stdlib/blas/ext/base/dnansumkbn", + "@stdlib/strided/base/stride2offset", + "@stdlib/blas/base/shared" + ] + }, + { + "task": "build", + "wasm": true, "src": [ "./src/main.c" ], diff --git a/lib/node_modules/@stdlib/blas/ext/base/dnansumkbn/manifest.json b/lib/node_modules/@stdlib/blas/ext/base/dnansumkbn/manifest.json index 57e9af5c51e3..8f502b747310 100644 --- a/lib/node_modules/@stdlib/blas/ext/base/dnansumkbn/manifest.json +++ b/lib/node_modules/@stdlib/blas/ext/base/dnansumkbn/manifest.json @@ -1,6 +1,7 @@ { "options": { - "task": "build" + "task": "build", + "wasm": false }, "fields": [ { @@ -27,6 +28,7 @@ "confs": [ { "task": "build", + "wasm": false, "src": [ "./src/main.c" ], @@ -49,6 +51,7 @@ }, { "task": "benchmark", + "wasm": false, "src": [ "./src/main.c" ], @@ -66,6 +69,25 @@ }, { "task": "examples", + "wasm": false, + "src": [ + "./src/main.c" + ], + "include": [ + "./include" + ], + "libraries": [], + "libpath": [], + "dependencies": [ + "@stdlib/math/base/assert/is-nan", + "@stdlib/math/base/special/abs", + "@stdlib/blas/base/shared", + "@stdlib/strided/base/stride2offset" + ] + }, + { + "task": "build", + "wasm": true, "src": [ "./src/main.c" ], diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/README.md b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/README.md new file mode 100644 index 000000000000..9064732a1ba9 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/README.md @@ -0,0 +1,291 @@ + + +# dnansum + +> Calculate the sum of double-precision floating-point strided array elements, ignoring `NaN` values. + +
+ +## Usage + +```javascript +var dnansum = require( '@stdlib/blas/ext/base/wasm/dnansum' ); +``` + +#### dnansum.main( N, x, strideX ) + +Computes the sum of double-precision floating-point strided array elements, ignoring `NaN` values. + +```javascript +var Float64Array = require( '@stdlib/array/float64' ); + +var x = new Float64Array( [ 1.0, -2.0, NaN, 2.0 ] ); + +var v = dnansum.main( x.length, x, 1 ); +// returns 1.0 +``` + +The function has the following parameters: + +- **N**: number of indexed elements. +- **x**: input [`Float64Array`][@stdlib/array/float64]. +- **strideX**: stride length for `x`. + +The `N` and stride parameters determine which elements in the strided arrays are accessed at runtime. For example, to compute the sum of every other element in `x`, + +```javascript +var Float64Array = require( '@stdlib/array/float64' ); + +var x = new Float64Array( [ 1.0, 2.0, NaN, -7.0, NaN, 3.0, 4.0, 2.0 ] ); + +var sum = dnansum.main( 4, x, 2 ); +// returns 5.0 +``` + +Note that indexing is relative to the first index. To introduce an offset, use [`typed array`][mdn-typed-array] views. + + + +```javascript +var Float64Array = require( '@stdlib/array/float64' ); + +var x0 = new Float64Array( [ 2.0, 1.0, NaN, -2.0, -2.0, 2.0, 3.0, 4.0 ] ); +var x1 = new Float64Array( x0.buffer, x0.BYTES_PER_ELEMENT*1 ); // start at 2nd element + +var v = dnansum.main( 4, x1, 2 ); +// returns 5.0 +``` + +#### dnansum.ndarray( N, x, strideX, offsetX ) + +Computes the sum of double-precision floating-point strided array elements, ignoring `NaN` values and alternative indexing semantics. + +```javascript +var Float64Array = require( '@stdlib/array/float64' ); + +var x = new Float64Array( [ 1.0, -2.0, NaN, 2.0 ] ); + +var v = dnansum.ndarray( x.length, x, 1, 0 ); +// returns 1.0 +``` + +The function has the following additional parameters: + +- **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 sum of every other element starting from the second element: + +```javascript +var Float64Array = require( '@stdlib/array/float64' ); + +var x = new Float64Array( [ 2.0, 1.0, NaN, -2.0, -2.0, 2.0, 3.0, 4.0 ] ); + +var v = dnansum.ndarray( 4, x, 2, 1 ); +// returns 5.0 +``` + +* * * + +### Module + +#### dnansum.Module( memory ) + +Returns a new WebAssembly [module wrapper][@stdlib/wasm/module-wrapper] instance which uses the provided WebAssembly [memory][@stdlib/wasm/memory] instance as its underlying memory. + + + +```javascript +var Memory = require( '@stdlib/wasm/memory' ); + +// Create a new memory instance with an initial size of 10 pages (640KiB) and a maximum size of 100 pages (6.4MiB): +var mem = new Memory({ + 'initial': 10, + 'maximum': 100 +}); + +// Create a BLAS routine: +var mod = new dnansum.Module( mem ); +// returns + +// Initialize the routine: +mod.initializeSync(); +``` + +#### dnansum.Module.prototype.main( N, xp, sx ) + +Computes the sum of double-precision floating-point strided array elements, ignoring `NaN` values. + + + +```javascript +var Memory = require( '@stdlib/wasm/memory' ); +var oneTo = require( '@stdlib/array/one-to' ); +var zeros = require( '@stdlib/array/zeros' ); + +// Create a new memory instance with an initial size of 10 pages (640KiB) and a maximum size of 100 pages (6.4MiB): +var mem = new Memory({ + 'initial': 10, + 'maximum': 100 +}); + +// Create a BLAS routine: +var mod = new dnansum.Module( mem ); +// returns + +// Initialize the routine: +mod.initializeSync(); + +// Define a vector data type: +var dtype = 'float64'; + +// Specify a vector length: +var N = 3; + +// Define a pointer (i.e., byte offset) for storing the input vector: +var xptr = 0; + +// Write vector values to module memory: +mod.write( xptr, oneTo( N, dtype ) ); + +// Perform computation: +var v = mod.main( N, xptr, 1 ); +// returns 6.0 +``` + +The function has the following parameters: + +- **N**: number of indexed elements. +- **xp**: input [`Float64Array`][@stdlib/array/float64] pointer (i.e., byte offset). +- **sx**: stride length for `x`. + +#### dnansum.Module.prototype.ndarray( N, xp, sx, ox ) + +Computes the sum of double-precision floating-point strided array elements, ignoring `NaN` values and alternative indexing semantics. + + + +```javascript +var Memory = require( '@stdlib/wasm/memory' ); +var oneTo = require( '@stdlib/array/one-to' ); +var zeros = require( '@stdlib/array/zeros' ); + +// Create a new memory instance with an initial size of 10 pages (640KiB) and a maximum size of 100 pages (6.4MiB): +var mem = new Memory({ + 'initial': 10, + 'maximum': 100 +}); + +// Create a BLAS routine: +var mod = new dnansum.Module( mem ); +// returns + +// Initialize the routine: +mod.initializeSync(); + +// Define a vector data type: +var dtype = 'float64'; + +// Specify a vector length: +var N = 3; + +// Define a pointer (i.e., byte offset) for storing the input vector: +var xptr = 0; + +// Write vector values to module memory: +mod.write( xptr, oneTo( N, dtype ) ); + +// Perform computation: +var v = mod.ndarray( N, xptr, 1, 0 ); +// returns 6.0 +``` + +The function has the following additional parameters: + +- **ox**: starting index for `x`. + +
+ + + +
+ +* * * + +## Notes + +- If `N <= 0`, both `main` and `ndarray` methods return `0.0`. +- This package implements routines using WebAssembly. When provided arrays which are not allocated on a `dnansum` module memory instance, data must be explicitly copied to module memory prior to computation. Data movement may entail a performance cost, and, thus, if you are using arrays external to module memory, you should prefer using [`@stdlib/blas/base/dnansum`][@stdlib/blas/ext/base/dnansum]. However, if working with arrays which are allocated and explicitly managed on module memory, you can achieve better performance when compared to the pure JavaScript implementations found in [`@stdlib/blas/base/dnansum`][@stdlib/blas/ext/base/dnansum]. Beware that such performance gains may come at the cost of additional complexity when having to perform manual memory management. Choosing between implementations depends heavily on the particular needs and constraints of your application, with no one choice universally better than the other. + +
+ + + +
+ +* * * + +## Examples + + + +```javascript +var discreteUniform = require( '@stdlib/random/array/discrete-uniform' ); +var dnansum = require( '@stdlib/blas/ext/base/wasm/dnansum' ); + +var opts = { + 'dtype': 'float64' +}; +var x = discreteUniform( 10, 0, 100, opts ); +console.log( x ); + +var v = dnansum.ndarray( x.length, x, 1, 0 ); +console.log( v ); +``` + +
+ + + + + + + + + + + + + + diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/benchmark/benchmark.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/benchmark/benchmark.js new file mode 100644 index 000000000000..41a9492dd3f5 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/benchmark/benchmark.js @@ -0,0 +1,106 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2025 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var bench = require( '@stdlib/bench' ); +var hasWebAssemblySupport = require( '@stdlib/assert/has-wasm-support' ); +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 dnansum = require( './../lib' ); + + +// VARIABLES // + +var opts = { + 'skip': !hasWebAssemblySupport() +}; +var options = { + 'dtype': 'float64' +}; + + +// FUNCTIONS // + +/** +* Creates a benchmark function. +* +* @private +* @param {PositiveInteger} len - array length +* @returns {Function} benchmark function +*/ +function createBenchmark( len ) { + var x = uniform( len, -10.0, 10.0, options ); + return benchmark; + + /** + * Benchmark function. + * + * @private + * @param {Benchmark} b - benchmark instance + */ + function benchmark( b ) { + var sum; + var i; + + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + sum = dnansum.main( x.length, x, 1 ); + if ( isnan( sum ) ) { + b.fail( 'should not return NaN' ); + } + } + b.toc(); + if ( isnan( sum ) ) { + b.fail( 'should not return NaN' ); + } + b.pass( 'benchmark finished' ); + b.end(); + } +} + + +// MAIN // + +/** +* Main execution sequence. +* +* @private +*/ +function main() { + var len; + var min; + var max; + var f; + var i; + + min = 1; // 10^min + max = 6; // 10^max + + for ( i = min; i <= max; i++ ) { + len = pow( 10, i ); + f = createBenchmark( len ); + bench( pkg+':len='+len, opts, f ); + } +} + +main(); diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/benchmark/benchmark.module.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/benchmark/benchmark.module.js new file mode 100644 index 000000000000..3ecd1a038bdd --- /dev/null +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/benchmark/benchmark.module.js @@ -0,0 +1,66 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2025 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var bench = require( '@stdlib/bench' ); +var hasWebAssemblySupport = require( '@stdlib/assert/has-wasm-support' ); +var Memory = require( '@stdlib/wasm/memory' ); +var pkg = require( './../package.json' ).name; +var dnansum = require( './../lib' ); + + +// VARIABLES // + +var opts = { + 'skip': !hasWebAssemblySupport() +}; + + +// MAIN // + +bench( pkg+':Module:constructor', opts, function benchmark( b ) { + var values; + var o; + var v; + var i; + + o = { + 'initial': 0 + }; + values = [ + new Memory( o ), + new Memory( o ) + ]; + + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + v = new dnansum.Module( values[ i%values.length ] ); + if ( typeof v !== 'object' ) { + b.fail( 'should return an object' ); + } + } + b.toc(); + if ( typeof v !== 'object' ) { + b.fail( 'should return an object' ); + } + b.pass( 'benchmark finished' ); + b.end(); +}); diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/benchmark/benchmark.module.main.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/benchmark/benchmark.module.main.js new file mode 100644 index 000000000000..84bb0c50ba59 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/benchmark/benchmark.module.main.js @@ -0,0 +1,130 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2025 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var bench = require( '@stdlib/bench' ); +var hasWebAssemblySupport = require( '@stdlib/assert/has-wasm-support' ); +var Memory = require( '@stdlib/wasm/memory' ); +var bytesPerElement = require( '@stdlib/ndarray/base/bytes-per-element' ); +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 dnansum = require( './../lib' ); + + +// VARIABLES // + +var opts = { + 'skip': !hasWebAssemblySupport() +}; +var options = { + 'dtype': 'float64' +}; + + +// FUNCTIONS // + +/** +* Creates a benchmark function. +* +* @private +* @param {PositiveInteger} len - array length +* @returns {Function} benchmark function +*/ +function createBenchmark( len ) { + return benchmark; + + /** + * Benchmark function. + * + * @private + * @param {Benchmark} b - benchmark instance + */ + function benchmark( b ) { + var xptr; + var mod; + var mem; + var sum; + var nb; + var i; + + // Create a new BLAS routine interface: + mem = new Memory({ + 'initial': 0 + }); + mod = new dnansum.Module( mem ); + + // Initialize the module: + mod.initializeSync(); // eslint-disable-line node/no-sync + + // Reallocate the underlying memory to allow storing a vector: + nb = bytesPerElement( options.dtype ); + mod.realloc( len*nb ); + + // Define a pointer (i.e., byte offset) to the first vector element: + xptr = 0; + + // Write random values to module memory: + mod.write( xptr, uniform( len, -10.0, 10.0, options ) ); + + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + sum = mod.main( len, xptr, 1 ); + if ( isnan( sum ) ) { + b.fail( 'should not return NaN' ); + } + } + b.toc(); + if ( isnan( sum ) ) { + b.fail( 'should not return NaN' ); + } + b.pass( 'benchmark finished' ); + b.end(); + } +} + + +// MAIN // + +/** +* Main execution sequence. +* +* @private +*/ +function main() { + var len; + var min; + var max; + var f; + var i; + + min = 1; // 10^min + max = 6; // 10^max + + for ( i = min; i <= max; i++ ) { + len = pow( 10, i ); + f = createBenchmark( len ); + bench( pkg+'::module,pointers:len='+len, opts, f ); + } +} + +main(); diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/benchmark/benchmark.module.ndarray.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/benchmark/benchmark.module.ndarray.js new file mode 100644 index 000000000000..e8bafcb7c1e0 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/benchmark/benchmark.module.ndarray.js @@ -0,0 +1,130 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2025 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var bench = require( '@stdlib/bench' ); +var hasWebAssemblySupport = require( '@stdlib/assert/has-wasm-support' ); +var Memory = require( '@stdlib/wasm/memory' ); +var bytesPerElement = require( '@stdlib/ndarray/base/bytes-per-element' ); +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 dnansum = require( './../lib' ); + + +// VARIABLES // + +var opts = { + 'skip': !hasWebAssemblySupport() +}; +var options = { + 'dtype': 'float64' +}; + + +// FUNCTIONS // + +/** +* Creates a benchmark function. +* +* @private +* @param {PositiveInteger} len - array length +* @returns {Function} benchmark function +*/ +function createBenchmark( len ) { + return benchmark; + + /** + * Benchmark function. + * + * @private + * @param {Benchmark} b - benchmark instance + */ + function benchmark( b ) { + var xptr; + var mod; + var mem; + var sum; + var nb; + var i; + + // Create a new BLAS routine interface: + mem = new Memory({ + 'initial': 0 + }); + mod = new dnansum.Module( mem ); + + // Initialize the module: + mod.initializeSync(); // eslint-disable-line node/no-sync + + // Reallocate the underlying memory to allow storing a vector: + nb = bytesPerElement( options.dtype ); + mod.realloc( len*nb ); + + // Define a pointer (i.e., byte offset) to the first vector element: + xptr = 0; + + // Write random values to module memory: + mod.write( xptr, uniform( len, -10.0, 10.0, options ) ); + + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + sum = mod.ndarray( len, xptr, 1, 0 ); + if ( isnan( sum ) ) { + b.fail( 'should not return NaN' ); + } + } + b.toc(); + if ( isnan( sum ) ) { + b.fail( 'should not return NaN' ); + } + b.pass( 'benchmark finished' ); + b.end(); + } +} + + +// MAIN // + +/** +* Main execution sequence. +* +* @private +*/ +function main() { + var len; + var min; + var max; + var f; + var i; + + min = 1; // 10^min + max = 6; // 10^max + + for ( i = min; i <= max; i++ ) { + len = pow( 10, i ); + f = createBenchmark( len ); + bench( pkg+'::module,pointers:ndarray:len='+len, opts, f ); + } +} + +main(); diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/benchmark/benchmark.ndarray.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/benchmark/benchmark.ndarray.js new file mode 100644 index 000000000000..7f767facafca --- /dev/null +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/benchmark/benchmark.ndarray.js @@ -0,0 +1,106 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2025 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var bench = require( '@stdlib/bench' ); +var hasWebAssemblySupport = require( '@stdlib/assert/has-wasm-support' ); +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 dnansum = require( './../lib' ); + + +// VARIABLES // + +var opts = { + 'skip': !hasWebAssemblySupport() +}; +var options = { + 'dtype': 'float64' +}; + + +// FUNCTIONS // + +/** +* Creates a benchmark function. +* +* @private +* @param {PositiveInteger} len - array length +* @returns {Function} benchmark function +*/ +function createBenchmark( len ) { + var x = uniform( len, -10.0, 10.0, options ); + return benchmark; + + /** + * Benchmark function. + * + * @private + * @param {Benchmark} b - benchmark instance + */ + function benchmark( b ) { + var sum; + var i; + + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + sum = dnansum.ndarray( x.length, x, 1, 0 ); + if ( isnan( sum ) ) { + b.fail( 'should not return NaN' ); + } + } + b.toc(); + if ( isnan( sum ) ) { + b.fail( 'should not return NaN' ); + } + b.pass( 'benchmark finished' ); + b.end(); + } +} + + +// MAIN // + +/** +* Main execution sequence. +* +* @private +*/ +function main() { + var len; + var min; + var max; + var f; + var i; + + min = 1; // 10^min + max = 6; // 10^max + + for ( i = min; i <= max; i++ ) { + len = pow( 10, i ); + f = createBenchmark( len ); + bench( pkg+':ndarray:len='+len, opts, f ); + } +} + +main(); diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/docs/repl.txt b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/docs/repl.txt new file mode 100644 index 000000000000..342cd8f8cbe8 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/docs/repl.txt @@ -0,0 +1,498 @@ + +{{alias}}.main( N, x, strideX ) + Computes the sum of double-precision floating-point strided array elements, + ignoring `NaN` values. + + 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 + array view. + + If `N <= 0`, the function returns `0.0`. + + Parameters + ---------- + N: integer + Number of indexed elements. + + x: Float64Array + Input array. + + strideX: integer + Stride length. + + Returns + ------- + out: number + Sum. + + Examples + -------- + // Standard Usage: + > var x = new {{alias:@stdlib/array/float64}}( [ 1.0, -2.0, NaN, 2.0 ] ); + > {{alias}}.main( x.length, x, 1 ) + 1.0 + + // Using `N` and stride parameters: + > x = new {{alias:@stdlib/array/float64}}( [ -2.0, 1.0, 1.0, -5.0, 2.0, -1.0, NaN, NaN ] ); + > {{alias}}.main( 4, x, 2 ) + 1.0 + + // Using view offsets: + > var x0 = new {{alias:@stdlib/array/float64}}( [ 1.0, -2.0, 3.0, 2.0, 5.0, -1.0, NaN, NaN ] ); + > var x1 = new {{alias:@stdlib/array/float64}}( x0.buffer, x0.BYTES_PER_ELEMENT*1 ); + > {{alias}}.main( 4, x1, 2 ) + -1.0 + + +{{alias}}.ndarray( N, x, strideX, offsetX ) + Computes the sum of double-precision floating-point strided array elements, + ignoring `NaN` values and alternative indexing 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. + + Parameters + ---------- + N: integer + Number of indexed elements. + + x: Float64Array + Input array. + + strideX: integer + Stride length. + + offsetX: integer + Starting index. + + Returns + ------- + out: number + Sum. + + Examples + -------- + // Standard Usage: + > var x = new {{alias:@stdlib/array/float64}}( [ 1.0, -2.0, NaN, 2.0 ] ); + > {{alias}}.ndarray( x.length, x, 1, 0 ) + 1.0 + + // Using offset parameter: + > var x = new {{alias:@stdlib/array/float64}}( [ 1.0, -2.0, 3.0, 2.0, 5.0, -1.0, NaN, NaN ] ); + > {{alias}}.ndarray( 4, x, 2, 1 ) + -1.0 + + +{{alias}}.Module( memory ) + Returns a new WebAssembly module wrapper which uses the provided WebAssembly + memory instance as its underlying memory. + + Parameters + ---------- + memory: Memory + WebAssembly memory instance. + + Returns + ------- + mod: Module + WebAssembly module wrapper. + + Examples + -------- + // Create a new memory instance: + > var mem = new {{alias:@stdlib/wasm/memory}}( { 'initial': 0 } ); + + // Create a new routine: + > var mod = new {{alias}}.Module( mem ); + + // Initialize the routine: + > mod.initializeSync(); + + +{{alias}}.Module.prototype.binary + Read-only property which returns WebAssembly binary code. + + Returns + ------- + out: Uint8Array + WebAssembly binary code. + + Examples + -------- + > var mem = new {{alias:@stdlib/wasm/memory}}( { 'initial': 0 } ); + > var mod = new {{alias}}.Module( mem ); + > mod.initializeSync(); + > mod.binary + + + +{{alias}}.Module.prototype.memory + Read-only property which returns WebAssembly memory. + + Returns + ------- + mem: Memory|null + WebAssembly memory. + + Examples + -------- + > var mem = new {{alias:@stdlib/wasm/memory}}( { 'initial': 0 } ); + > var mod = new {{alias}}.Module( mem ); + > mod.initializeSync(); + > mod.memory + + + +{{alias}}.Module.prototype.buffer + Read-only property which returns a WebAssembly memory buffer as a + Uint8Array. + + Returns + ------- + buf: Uint8Array|null + WebAssembly memory buffer. + + Examples + -------- + > var mem = new {{alias:@stdlib/wasm/memory}}( { 'initial': 0 } ); + > var mod = new {{alias}}.Module( mem ); + > mod.initializeSync(); + > mod.buffer + + + +{{alias}}.Module.prototype.view + Read-only property which returns a WebAsssembly memory buffer as a DataView. + + Returns + ------- + view: DataView|null + WebAssembly memory view. + + Examples + -------- + > var mem = new {{alias:@stdlib/wasm/memory}}( { 'initial': 0 } ); + > var mod = new {{alias}}.Module( mem ); + > mod.initializeSync(); + > mod.view + + + +{{alias}}.Module.prototype.exports + Read-only property which returns "raw" WebAssembly module exports. + + Returns + ------- + out: Object|null + WebAssembly module exports. + + Examples + -------- + > var mem = new {{alias:@stdlib/wasm/memory}}( { 'initial': 0 } ); + > var mod = new {{alias}}.Module( mem ); + > mod.initializeSync(); + > mod.exports + {...} + + +{{alias}}.Module.prototype.initialize() + Asynchronously initializes a WebAssembly module instance. + + Returns + ------- + p: Promise + Promise which resolves upon initializing a WebAssembly module instance. + + Examples + -------- + > var mem = new {{alias:@stdlib/wasm/memory}}( { 'initial': 0 } ); + > var mod = new {{alias}}.Module( mem ); + > mod.initialize(); + + +{{alias}}.Module.prototype.initializeAsync( clbk ) + Asynchronously initializes a WebAssembly module instance. + + Parameters + ---------- + clbk: Function + Callback to invoke upon initializing a WebAssembly module instance. + + Examples + -------- + > var mem = new {{alias:@stdlib/wasm/memory}}( { 'initial': 0 } ); + > var mod = new {{alias}}.Module( mem ); + > function clbk() { console.log( 'done' ) }; + > mod.initializeAsync( clbk ); + + +{{alias}}.Module.prototype.initializeSync() + Synchronously initializes a WebAssembly module instance. + + In web browsers, JavaScript engines may raise an exception when attempting + to synchronously compile large WebAssembly binaries due to concerns about + blocking the main thread. Hence, to initialize WebAssembly modules having + large binaries (e.g., >4KiB), consider using asynchronous initialization + methods in browser contexts. + + Returns + ------- + mod: Module + Module wrapper instance. + + Examples + -------- + > var mem = new {{alias:@stdlib/wasm/memory}}( { 'initial': 0 } ); + > var mod = new {{alias}}.Module( mem ); + > mod.initializeSync(); + + +{{alias}}.Module.prototype.realloc( nbytes ) + Reallocates the underlying WebAssembly memory instance to a specified number + of bytes. + + WebAssembly memory can only *grow*, not shrink. Hence, if provided a number + of bytes which is less than or equal to the size of the current memory, the + function does nothing. + + When non-shared memory is resized, the underlying the `ArrayBuffer` is + detached, consequently invalidating any associated typed array views. Before + resizing non-shared memory, ensure that associated typed array views no + longer need byte access and can be garbage collected. + + Parameters + ---------- + nbytes: integer + Memory size (in bytes). + + Returns + ------- + bool: boolean + Boolean indicating whether the resize operation was successful. + + Examples + -------- + > var mem = new {{alias:@stdlib/wasm/memory}}( { 'initial': 0 } ); + > var mod = new {{alias}}.Module( mem ); + > mod.initializeSync(); + > mod.realloc( 100 ) + + + +{{alias}}.Module.prototype.hasCapacity( byteOffset, values ) + Returns a boolean indicating whether the underlying WebAssembly memory + instance has the capacity to store a provided list of values starting from a + specified byte offset. + + Parameters + ---------- + byteOffset: integer + Byte offset at which to start writing values. + + values: ArrayLikeObject + Input array containing values to write. + + Returns + ------- + bool: boolean + Boolean indicating whether the underlying WebAssembly memory instance + has enough capacity. + + Examples + -------- + > var mem = new {{alias:@stdlib/wasm/memory}}( { 'initial': 0 } ); + > var mod = new {{alias}}.Module( mem ); + > mod.initializeSync(); + > mod.realloc( 100 ); + > mod.hasCapacity( 0, [ 1, 2, 3, 4 ] ) + true + + +{{alias}}.Module.prototype.isView( values ) + Returns a boolean indicating whether a provided list of values is a view of + the underlying memory of the WebAssembly module. + + Parameters + ---------- + values: ArrayLikeObject + Input array. + + Returns + ------- + bool: boolean + Boolean indicating whether the list is a memory view. + + Examples + -------- + > var mem = new {{alias:@stdlib/wasm/memory}}( { 'initial': 0 } ); + > var mod = new {{alias}}.Module( mem ); + > mod.initializeSync(); + > mod.realloc( 100 ); + > mod.isView( [ 1, 2, 3, 4 ] ) + false + + +{{alias}}.Module.prototype.write( byteOffset, values ) + Writes values to the underlying WebAssembly memory instance. + + The function infers element size (i.e., number of bytes per element) from + the data type of the input array. For example, if provided a Float32Array, + the function writes each element as a single-precision floating-point number + to the underlying WebAssembly memory instance. + + In order to write elements as a different data type, you need to perform an + explicit cast *before* calling this method. For example, in order to write + single-precision floating-point numbers contained in a Float32Array as + signed 32-bit integers, you must first convert the Float32Array to an + Int32Array before passing the values to this method. + + If provided an array having an unknown or "generic" data type, elements are + written as double-precision floating-point numbers. + + Parameters + ---------- + byteOffset: integer + Byte offset at which to start writing values. + + values: ArrayLikeObject + Input array containing values to write. + + Returns + ------- + mod: Module + Module wrapper instance. + + Examples + -------- + > var mem = new {{alias:@stdlib/wasm/memory}}( { 'initial': 0 } ); + > var mod = new {{alias}}.Module( mem ); + > mod.initializeSync(); + > mod.realloc( 100 ); + > mod.write( 0, [ 1, 2, 3, 4 ] ); + + +{{alias}}.Module.prototype.read( byteOffset, out ) + Reads values from the underlying WebAssembly memory instance. + + The function infers element size (i.e., number of bytes per element) from + the data type of the output array. For example, if provided a Float32Array, + the function reads each element as a single-precision floating-point number + from the underlying WebAssembly memory instance. + + In order to read elements as a different data type, you need to perform an + explicit cast *after* calling this method. For example, in order to read + single-precision floating-point numbers contained in a Float32Array as + signed 32-bit integers, you must convert the Float32Array to an Int32Array + after reading memory values using this method. + + If provided an output array having an unknown or "generic" data type, + elements are read as double-precision floating-point numbers. + + Parameters + ---------- + byteOffset: integer + Byte offset at which to start reading values. + + out: ArrayLikeObject + Output array for storing read values. + + Returns + ------- + mod: Module + Module wrapper instance. + + Examples + -------- + > var mem = new {{alias:@stdlib/wasm/memory}}( { 'initial': 0 } ); + > var mod = new {{alias}}.Module( mem ); + > mod.initializeSync(); + > mod.realloc( 100 ); + > mod.write( 0, [ 1, 2, 3, 4 ] ); + > var out = [ 0, 0, 0, 0 ]; + > mod.read( 0, out ); + > out + [ 1, 2, 3, 4 ] + + +{{alias}}.Module.prototype.main( N, xp, sx ) + Computes the sum of double-precision floating-point strided array elements, + ignoring `NaN` values. + + Parameters + ---------- + N: integer + Number of indexed elements. + + xp: integer + Input array pointer (i.e., byte offset). + + sx: integer + Stride length. + + Returns + ------- + sum: number + Sum. + + Examples + -------- + > var mem = new {{alias:@stdlib/wasm/memory}}( { 'initial': 1 } ); + > var mod = new {{alias}}.Module( mem ); + > mod.initializeSync(); + + // Define a "pointer" (i.e., byte offset) into module memory: + > var xptr = 0; + + // Write data to module memory: + > mod.write( xptr, {{alias:@stdlib/array/one-to}}( 3, 'float64' ) ); + + // Perform computation: + > var s = mod.main( 3, xptr, 1 ) + 6.0 + + +{{alias}}.Module.prototype.ndarray( N, xp, sx, ox ) + Computes the sum of double-precision floating-point strided array elements, + ignoring `NaN` values and alternative indexing semantics. + + Parameters + ---------- + N: integer + Number of indexed elements. + + xp: integer + Input array pointer (i.e., byte offset). + + sx: integer + Stride length. + + ox: integer + Starting index. + + Returns + ------- + sum: number + Sum. + + Examples + -------- + > var mem = new {{alias:@stdlib/wasm/memory}}( { 'initial': 1 } ); + > var mod = new {{alias}}.Module( mem ); + > mod.initializeSync(); + + // Define a "pointer" (i.e., byte offset) into module memory: + > var xptr = 0; + + // Write data to module memory: + > mod.write( xptr, {{alias:@stdlib/array/one-to}}( 3, 'float64' ) ); + + // Perform computation: + > var s = mod.ndarray( 3, xptr, 1, 0 ) + 6.0 + + See Also + -------- + diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/docs/types/index.d.ts b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/docs/types/index.d.ts new file mode 100644 index 000000000000..8d4b8dbbea12 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/docs/types/index.d.ts @@ -0,0 +1,316 @@ +/* +* @license Apache-2.0 +* +* Copyright (c) 2025 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +// TypeScript Version: 4.1 + +/// + +import { ModuleWrapper, Memory } from '@stdlib/types/wasm'; + +/** +* Interface defining a module constructor which is both "newable" and "callable". +*/ +interface ModuleConstructor { + /** + * Returns a new WebAssembly module wrapper instance which uses the provided WebAssembly memory instance as its underlying memory. + * + * @param mem - WebAssembly memory instance + * @returns module wrapper instance + * + * @example + * var Memory = require( '@stdlib/wasm/memory' ); + * var oneTo = require( '@stdlib/array/one-to' ); + * + * // Create a new memory instance with an initial size of 10 pages (640KiB) and a maximum size of 100 pages (6.4MiB): + * var mem = new Memory({ + * 'initial': 10, + * 'maximum': 100 + * }); + * + * // Create a BLAS routine: + * var mod = new dapxsumkbn.Module( mem ); + * // returns + * + * // Initialize the routine: + * mod.initializeSync(); + * + * // Define a vector data type: + * var dtype = 'float64'; + * + * // Specify a vector length: + * var N = 3; + * + * // Define a pointer (i.e., byte offset) to the first vector element: + * var xptr = 0; + * + * // Write vector values to module memory: + * mod.write( xptr, oneTo( N, dtype ) ); + * + * // Perform computation: + * var out = mod.main( N, xptr, 1 ); + * // returns 6.0 + */ + new( mem: Memory ): Module; // newable + + /** + * Returns a new WebAssembly module wrapper instance which uses the provided WebAssembly memory instance as its underlying memory. + * + * @param mem - WebAssembly memory instance + * @returns module wrapper instance + * + * @example + * var Memory = require( '@stdlib/wasm/memory' ); + * var oneTo = require( '@stdlib/array/one-to' ); + * + * // Create a new memory instance with an initial size of 10 pages (640KiB) and a maximum size of 100 pages (6.4MiB): + * var mem = new Memory({ + * 'initial': 10, + * 'maximum': 100 + * }); + * + * // Create a BLAS routine: + * var mod = dapxsumkbn.Module( mem ); + * // returns + * + * // Initialize the routine: + * mod.initializeSync(); + * + * // Define a vector data type: + * var dtype = 'float64'; + * + * // Specify a vector length: + * var N = 3; + * + * // Define a pointer (i.e., byte offset) to the first vector element: + * var xptr = 0; + * + * // Write vector values to module memory: + * mod.write( xptr, oneTo( N, dtype ) ); + * + * // Perform computation: + * var out = mod.main( N, xptr, 1 ); + * // returns 6.0 + */ + ( mem: Memory ): Module; // callable +} + +/** +* Interface describing a `dapxsumkbn` WebAssembly module. +*/ +interface Module extends ModuleWrapper { + /** + * Computes the sum of double-precision floating-point strided array elements, ignoring `NaN` values. + * + * @param N - number of indexed elements + * @param xptr - input array pointer (i.e., byte offset) + * @param strideX - stride length + * @returns sum + * + * @example + * var Memory = require( '@stdlib/wasm/memory' ); + * var oneTo = require( '@stdlib/array/one-to' ); + * + * // Create a new memory instance with an initial size of 10 pages (640KiB) and a maximum size of 100 pages (6.4MiB): + * var mem = new Memory({ + * 'initial': 10, + * 'maximum': 100 + * }); + * + * // Create a BLAS routine: + * var mod = new dapxsumkbn.Module( mem ); + * // returns + * + * // Initialize the routine: + * mod.initializeSync(); + * + * // Define a vector data type: + * var dtype = 'float64'; + * + * // Specify a vector length: + * var N = 3; + * + * // Define a pointer (i.e., byte offset) to the first vector element: + * var xptr = 0; + * + * // Write vector values to module memory: + * mod.write( xptr, oneTo( N, dtype ) ); + * + * // Perform computation: + * var out = mod.main( N, xptr, 1 ); + * // returns 6.0 + */ + main( N: number, xptr: number, strideX: number ): number; + + /** + * Computes the sum of double-precision floating-point strided array elements, ignoring `NaN` values and alternative indexing semantics. + * + * @param N - number of indexed elements + * @param xptr - input array pointer (i.e., byte offset) + * @param strideX - stride length + * @param offsetX - starting index + * @returns sum + * + * @example + * var Memory = require( '@stdlib/wasm/memory' ); + * var oneTo = require( '@stdlib/array/one-to' ); + * + * // Create a new memory instance with an initial size of 10 pages (640KiB) and a maximum size of 100 pages (6.4MiB): + * var mem = new Memory({ + * 'initial': 10, + * 'maximum': 100 + * }); + * + * // Create a BLAS routine: + * var mod = new dapxsumkbn.Module( mem ); + * // returns + * + * // Initialize the routine: + * mod.initializeSync(); + * + * // Define a vector data type: + * var dtype = 'float64'; + * + * // Specify a vector length: + * var N = 3; + * + * // Define a pointer (i.e., byte offset) to the first vector element: + * var xptr = 0; + * + * // Write vector values to module memory: + * mod.write( xptr, oneTo( N, dtype ) ); + * + * // Perform computation: + * var out = mod.ndarray( N, xptr, 1, 0 ); + * // returns 6.0 + */ + ndarray( N: number, xptr: number, strideX: number, offsetX: number ): number; +} + +/** +* Interface describing `dapxsumkbn`. +*/ +interface Routine extends ModuleWrapper { + /** + * Computes the sum of double-precision floating-point strided array elements, ignoring `NaN` values. + * + * @param N - number of indexed elements + * @param x - input array + * @param strideX - stride length + * @returns sum + * + * @example + * var Float64Array = require( '@stdlib/array/float64' ); + * + * var x = new Float64Array( [ 1.0, -2.0, NaN 2.0 ] ); + * + * var out = dapxsumkbn.main( 4, x, 1 ); + * // returns 1.0 + */ + main( N: number, x: Float64Array, strideX: number ): number; + + /** + * Computes the sum of double-precision floating-point strided array elements, ignoring `NaN` values and alternative indexing semantics. + * + * @param N - number of indexed elements + * @param x - input array + * @param strideX - stride length + * @param offsetX - starting index + * @returns sum + * + * @example + * var Float64Array = require( '@stdlib/array/float64' ); + * + * var x = new Float64Array( [ 2.0, 1.0, NaN, -2.0, -2.0, 2.0, 3.0, 4.0 ] ); + * + * var out = dapxsumkbn.ndarray( 4, x, 2, 1 ); + * // returns 5.0 + */ + ndarray( N: number, x: Float64Array, strideX: number, offsetX: number ): number; + + /** + * Returns a new WebAssembly module wrapper instance which uses the provided WebAssembly memory instance as its underlying memory. + * + * @param mem - WebAssembly memory instance + * @returns module wrapper instance + * + * @example + * var Memory = require( '@stdlib/wasm/memory' ); + * var oneTo = require( '@stdlib/array/one-to' ); + * + * // Create a new memory instance with an initial size of 10 pages (640KiB) and a maximum size of 100 pages (6.4MiB): + * var mem = new Memory({ + * 'initial': 10, + * 'maximum': 100 + * }); + * + * // Create a BLAS routine: + * var mod = new dapxsumkbn.Module( mem ); + * // returns + * + * // Initialize the routine: + * mod.initializeSync(); + * + * // Define a vector data type: + * var dtype = 'float64'; + * + * // Specify a vector length: + * var N = 3; + * + * // Define a pointer (i.e., byte offset) to the first vector element: + * var xptr = 0; + * + * // Write vector values to module memory: + * mod.write( xptr, oneTo( N, dtype ) ); + * + * // Perform computation: + * var out = mod.main( N, xptr, 1 ); + * // returns 6.0 + */ + Module: ModuleConstructor; +} + +/** +* Computes the sum of double-precision floating-point strided array elements, ignoring `NaN` values. +* +* @param N - number of indexed elements +* @param x - input array +* @param strideX - stride length +* @returns sum +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* +* var x = new Float64Array( [ 1.0, -2.0, NaN, 2.0 ] ); +* +* var out = dapxsumkbn.main( 4, x, 1 ); +* // returns 1.0 +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* +* var x = new Float64Array( [ 2.0, 1.0, NaN, -2.0, -2.0, 2.0, 3.0, 4.0 ] ); +* +* var out = dapxsumkbn.ndarray( 4, x, 2, 1 ); +* // returns 25.0 +*/ +declare var dapxsumkbn: Routine; + + +// EXPORTS // + +export = dapxsumkbn; diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/docs/types/test.ts b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/docs/types/test.ts new file mode 100644 index 000000000000..60c976b98ae5 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/docs/types/test.ts @@ -0,0 +1,347 @@ +/* +* @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. +*/ + +/* eslint-disable space-in-parens */ + +import Memory = require( '@stdlib/wasm/memory' ); +import dnansum = require( './index' ); + + +// TESTS // + +// Attached to the main export is a `main` method which returns a number... +{ + const x = new Float64Array( 10 ); + + dnansum.main( x.length, x, 1 ); // $ExpectType number +} + +// The compiler throws an error if the `main` method is provided a first argument which is not a number... +{ + const x = new Float64Array( 10 ); + + dnansum.main( '10', x, 1 ); // $ExpectError + dnansum.main( true, x, 1 ); // $ExpectError + dnansum.main( false, x, 1 ); // $ExpectError + dnansum.main( null, x, 1 ); // $ExpectError + dnansum.main( undefined, x, 1 ); // $ExpectError + dnansum.main( [], x, 1 ); // $ExpectError + dnansum.main( {}, x, 1 ); // $ExpectError + dnansum.main( ( x: number ): number => x, x, 1 ); // $ExpectError +} + +// The compiler throws an error if the `main` method is provided a second argument which is not a Float64Array... +{ + const x = new Float64Array( 10 ); + + dnansum.main( x.length, 10, 1 ); // $ExpectError + dnansum.main( x.length, '10', 1 ); // $ExpectError + dnansum.main( x.length, true, 1 ); // $ExpectError + dnansum.main( x.length, false, 1 ); // $ExpectError + dnansum.main( x.length, null, 1 ); // $ExpectError + dnansum.main( x.length, undefined, 1 ); // $ExpectError + dnansum.main( x.length, [], 1 ); // $ExpectError + dnansum.main( x.length, {}, 1 ); // $ExpectError + dnansum.main( x.length, ( x: number ): number => x, 1 ); // $ExpectError +} + +// The compiler throws an error if the `main` method is provided a third argument which is not a number... +{ + const x = new Float64Array( 10 ); + + dnansum.main( x.length, x, '10' ); // $ExpectError + dnansum.main( x.length, x, true ); // $ExpectError + dnansum.main( x.length, x, false ); // $ExpectError + dnansum.main( x.length, x, null ); // $ExpectError + dnansum.main( x.length, x, undefined ); // $ExpectError + dnansum.main( x.length, x, [] ); // $ExpectError + dnansum.main( x.length, x, {} ); // $ExpectError + dnansum.main( x.length, x, ( x: number ): number => x ); // $ExpectError +} + +// The compiler throws an error if the `main` method is provided an unsupported number of arguments... +{ + const x = new Float64Array( 10 ); + + dnansum.main(); // $ExpectError + dnansum.main( x.length ); // $ExpectError + dnansum.main( x.length, x ); // $ExpectError + dnansum.main( x.length, x, 1, 10 ); // $ExpectError +} + +// Attached to main export is an `ndarray` method which returns a number... +{ + const x = new Float64Array( 10 ); + + dnansum.ndarray( x.length, x, 1, 0 ); // $ExpectType number +} + +// The compiler throws an error if the `ndarray` method is provided a first argument which is not a number... +{ + const x = new Float64Array( 10 ); + + dnansum.ndarray( '10', x, 1, 0 ); // $ExpectError + dnansum.ndarray( true, x, 1, 0 ); // $ExpectError + dnansum.ndarray( false, x, 1, 0 ); // $ExpectError + dnansum.ndarray( null, x, 1, 0 ); // $ExpectError + dnansum.ndarray( undefined, x, 1, 0 ); // $ExpectError + dnansum.ndarray( [], x, 1, 0 ); // $ExpectError + dnansum.ndarray( {}, x, 1, 0 ); // $ExpectError + dnansum.ndarray( ( x: number ): number => x, x, 1, 0 ); // $ExpectError +} + +// The compiler throws an error if the `ndarray` method is provided a second argument which is not a Float64Array... +{ + const x = new Float64Array( 10 ); + + dnansum.ndarray( x.length, 10, 1, 0 ); // $ExpectError + dnansum.ndarray( x.length, '10', 1, 0 ); // $ExpectError + dnansum.ndarray( x.length, true, 1, 0 ); // $ExpectError + dnansum.ndarray( x.length, false, 1, 0 ); // $ExpectError + dnansum.ndarray( x.length, null, 1, 0 ); // $ExpectError + dnansum.ndarray( x.length, undefined, 1, 0 ); // $ExpectError + dnansum.ndarray( x.length, [], 1, 0 ); // $ExpectError + dnansum.ndarray( x.length, {}, 1, 0 ); // $ExpectError + dnansum.ndarray( x.length, ( x: number ): number => x, 1, 0 ); // $ExpectError +} + +// The compiler throws an error if the `ndarray` method is provided a third argument which is not a number... +{ + const x = new Float64Array( 10 ); + + dnansum.ndarray( x.length, x, '10', 0 ); // $ExpectError + dnansum.ndarray( x.length, x, true, 0 ); // $ExpectError + dnansum.ndarray( x.length, x, false, 0 ); // $ExpectError + dnansum.ndarray( x.length, x, null, 0 ); // $ExpectError + dnansum.ndarray( x.length, x, undefined, 0 ); // $ExpectError + dnansum.ndarray( x.length, x, [], 0 ); // $ExpectError + dnansum.ndarray( x.length, x, {}, 0 ); // $ExpectError + dnansum.ndarray( x.length, x, ( x: number ): number => x, 0 ); // $ExpectError +} + +// The compiler throws an error if the `ndarray` method is provided a fourth argument which is not a number... +{ + const x = new Float64Array( 10 ); + + dnansum.ndarray( x.length, x, 1, '10' ); // $ExpectError + dnansum.ndarray( x.length, x, 1, true ); // $ExpectError + dnansum.ndarray( x.length, x, 1, false ); // $ExpectError + dnansum.ndarray( x.length, x, 1, null ); // $ExpectError + dnansum.ndarray( x.length, x, 1, undefined ); // $ExpectError + dnansum.ndarray( x.length, x, 1, [] ); // $ExpectError + dnansum.ndarray( x.length, x, 1, {} ); // $ExpectError + dnansum.ndarray( x.length, x, 1, ( x: number ): number => x ); // $ExpectError +} + +// The compiler throws an error if the `ndarray` method is provided an unsupported number of arguments... +{ + const x = new Float64Array( 10 ); + + dnansum.ndarray(); // $ExpectError + dnansum.ndarray( x.length ); // $ExpectError + dnansum.ndarray( x.length, x ); // $ExpectError + dnansum.ndarray( x.length, x, 1 ); // $ExpectError + dnansum.ndarray( x.length, x, 1, 0, 10 ); // $ExpectError +} + +// Attached to the main export is a `Module` constructor which returns a module... +{ + const mem = new Memory({ + 'initial': 0 + }); + + dnansum.Module( mem ); // $ExpectType Module +} + +// The compiler throws an error if the `Module` constructor is not provided a WebAssembly memory instance... +{ + dnansum.Module( '10' ); // $ExpectError + dnansum.Module( true ); // $ExpectError + dnansum.Module( false ); // $ExpectError + dnansum.Module( null ); // $ExpectError + dnansum.Module( undefined ); // $ExpectError + dnansum.Module( [] ); // $ExpectError + dnansum.Module( {} ); // $ExpectError + dnansum.Module( ( x: number ): number => x ); // $ExpectError +} + +// The `Module` constructor returns a module instance having a `main` method which returns a number... +{ + const mem = new Memory({ + 'initial': 1 + }); + const mod = dnansum.Module( mem ); + + mod.main( 10, 0, 1 ); // $ExpectType number +} + +// The compiler throws an error if the `main` method of a module instance is provided a first argument which is not a number... +{ + const mem = new Memory({ + 'initial': 1 + }); + const mod = dnansum.Module( mem ); + + mod.main( '10', 0, 1 ); // $ExpectError + mod.main( true, 0, 1 ); // $ExpectError + mod.main( false, 0, 1 ); // $ExpectError + mod.main( null, 0, 1 ); // $ExpectError + mod.main( undefined, 0, 1 ); // $ExpectError + mod.main( [], 0, 1 ); // $ExpectError + mod.main( {}, 0, 1 ); // $ExpectError + mod.main( ( x: number ): number => x, 0, 1 ); // $ExpectError +} + +// The compiler throws an error if the `main` method of a module instance is provided a second argument which is not a number... +{ + const mem = new Memory({ + 'initial': 1 + }); + const mod = dnansum.Module( mem ); + + mod.main( 10, '10', 1 ); // $ExpectError + mod.main( 10, true, 1 ); // $ExpectError + mod.main( 10, false, 1 ); // $ExpectError + mod.main( 10, null, 1 ); // $ExpectError + mod.main( 10, undefined, 1 ); // $ExpectError + mod.main( 10, [], 1 ); // $ExpectError + mod.main( 10, {}, 1 ); // $ExpectError + mod.main( 10, ( x: number ): number => x, 1 ); // $ExpectError +} + +// The compiler throws an error if the `main` method of a module instance is provided a third argument which is not a number... +{ + const mem = new Memory({ + 'initial': 1 + }); + const mod = dnansum.Module( mem ); + + mod.main( 10, 0, '10' ); // $ExpectError + mod.main( 10, 0, true ); // $ExpectError + mod.main( 10, 0, false ); // $ExpectError + mod.main( 10, 0, null ); // $ExpectError + mod.main( 10, 0, undefined ); // $ExpectError + mod.main( 10, 0, [] ); // $ExpectError + mod.main( 10, 0, {} ); // $ExpectError + mod.main( 10, 0, ( x: number ): number => x ); // $ExpectError +} + +// The compiler throws an error if the `main` method of a module instance is provided an unsupported number of arguments... +{ + const mem = new Memory({ + 'initial': 1 + }); + const mod = dnansum.Module( mem ); + + mod.main(); // $ExpectError + mod.main( 10 ); // $ExpectError + mod.main( 10, 0 ); // $ExpectError + mod.main( 10, 0, 1, 2 ); // $ExpectError +} + +// The `Module` constructor returns a module instance having an `ndarray` method which returns a number... +{ + const mem = new Memory({ + 'initial': 1 + }); + const mod = dnansum.Module( mem ); + + mod.ndarray( 10, 0, 1, 0 ); // $ExpectType number +} + +// The compiler throws an error if the `ndarray` method of a module instance is provided a first argument which is not a number... +{ + const mem = new Memory({ + 'initial': 1 + }); + const mod = dnansum.Module( mem ); + + mod.ndarray( '10', 0, 1, 0 ); // $ExpectError + mod.ndarray( true, 0, 1, 0 ); // $ExpectError + mod.ndarray( false, 0, 1, 0 ); // $ExpectError + mod.ndarray( null, 0, 1, 0 ); // $ExpectError + mod.ndarray( undefined, 0, 1, 0 ); // $ExpectError + mod.ndarray( [], 0, 1, 0 ); // $ExpectError + mod.ndarray( {}, 0, 1, 0 ); // $ExpectError + mod.ndarray( ( x: number ): number => x, 0, 1, 0 ); // $ExpectError +} + +// The compiler throws an error if the `ndarray` method of a module instance is provided a second argument which is not a number... +{ + const mem = new Memory({ + 'initial': 1 + }); + const mod = dnansum.Module( mem ); + + mod.ndarray( 10, '10', 1, 0 ); // $ExpectError + mod.ndarray( 10, true, 1, 0 ); // $ExpectError + mod.ndarray( 10, false, 1, 0 ); // $ExpectError + mod.ndarray( 10, null, 1, 0 ); // $ExpectError + mod.ndarray( 10, undefined, 1, 0 ); // $ExpectError + mod.ndarray( 10, [], 1, 0 ); // $ExpectError + mod.ndarray( 10, {}, 1, 0 ); // $ExpectError + mod.ndarray( 10, ( x: number ): number => x, 1, 0 ); // $ExpectError +} + +// The compiler throws an error if the `ndarray` method of a module instance is provided a third argument which is not a number... +{ + const mem = new Memory({ + 'initial': 1 + }); + const mod = dnansum.Module( mem ); + + mod.ndarray( 10, 0, '10', 0 ); // $ExpectError + mod.ndarray( 10, 0, true, 0 ); // $ExpectError + mod.ndarray( 10, 0, false, 0 ); // $ExpectError + mod.ndarray( 10, 0, null, 0 ); // $ExpectError + mod.ndarray( 10, 0, undefined, 0 ); // $ExpectError + mod.ndarray( 10, 0, [], 0 ); // $ExpectError + mod.ndarray( 10, 0, {}, 0 ); // $ExpectError + mod.ndarray( 10, 0, ( x: number ): number => x, 0 ); // $ExpectError +} + +// The compiler throws an error if the `ndarray` method of a module instance is provided a fourth argument which is not a number... +{ + const mem = new Memory({ + 'initial': 1 + }); + const mod = dnansum.Module( mem ); + + mod.ndarray( 10, 0, 1, '10' ); // $ExpectError + mod.ndarray( 10, 0, 1, true ); // $ExpectError + mod.ndarray( 10, 0, 1, false ); // $ExpectError + mod.ndarray( 10, 0, 1, null ); // $ExpectError + mod.ndarray( 10, 0, 1, undefined ); // $ExpectError + mod.ndarray( 10, 0, 1, [] ); // $ExpectError + mod.ndarray( 10, 0, 1, {} ); // $ExpectError + mod.ndarray( 10, 0, 1, ( x: number ): number => x ); // $ExpectError +} + +// The compiler throws an error if the `ndarray` method of a module instance is provided an unsupported number of arguments... +{ + const mem = new Memory({ + 'initial': 1 + }); + const mod = dnansum.Module( mem ); + + mod.ndarray(); // $ExpectError + mod.ndarray( 10 ); // $ExpectError + mod.ndarray( 10, 0 ); // $ExpectError + mod.ndarray( 10, 0, 1 ); // $ExpectError + mod.ndarray( 10, 0, 1, 0, 3 ); // $ExpectError +} diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/examples/index.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/examples/index.js new file mode 100644 index 000000000000..56122c11a813 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/examples/index.js @@ -0,0 +1,43 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2025 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +var hasWebAssemblySupport = require( '@stdlib/assert/has-wasm-support' ); +var oneTo = require( '@stdlib/array/one-to' ); +var dnansum = require( './../lib' ); + +function main() { + if ( !hasWebAssemblySupport() ) { + console.error( 'Environment does not support WebAssembly.' ); + return; + } + // Specify a vector length: + var N = 3; + + // Create an input array: + var x = oneTo( N, 'float64' ); + + // Perform computation: + var v = dnansum.ndarray( N, x, 1, 0 ); + + // Print the result: + console.log( v ); +} + +main(); diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/examples/little_endian_arrays.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/examples/little_endian_arrays.js new file mode 100644 index 000000000000..25a62dd0fe2b --- /dev/null +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/examples/little_endian_arrays.js @@ -0,0 +1,65 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2025 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +var hasWebAssemblySupport = require( '@stdlib/assert/has-wasm-support' ); +var Memory = require( '@stdlib/wasm/memory' ); +var discreteUniform = require( '@stdlib/random/base/discrete-uniform' ).factory; +var gfillBy = require( '@stdlib/blas/ext/base/gfill-by' ); +var Float64ArrayLE = require( '@stdlib/array/little-endian-float64' ); +var dnansum = require( './../lib' ); + +function main() { + if ( !hasWebAssemblySupport() ) { + console.error( 'Environment does not support WebAssembly.' ); + return; + } + // Create a new memory instance with an initial size of 10 pages (640KiB) and a maximum size of 100 pages (6.4MiB): + var mem = new Memory({ + 'initial': 10, + 'maximum': 100 + }); + + // Create a BLAS routine: + var mod = new dnansum.Module( mem ); + // returns + + // Initialize the routine: + mod.initializeSync(); // eslint-disable-line node/no-sync + + // Specify a vector length: + var N = 3; + + // Define a pointer (i.e., byte offset) for storing the input vector: + var xptr = 0; + + // Create a typed array view over module memory: + var x = new Float64ArrayLE( mod.memory.buffer, xptr, N ); + + // Write values to module memory: + gfillBy( N, x, 1, discreteUniform( -10.0, 10.0 ) ); + + // Perform computation: + var v = mod.ndarray( N, xptr, 1, 0 ); + + // Print the result: + console.log( v ); +} + +main(); diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/examples/module.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/examples/module.js new file mode 100644 index 000000000000..7fdbbaab60a5 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/examples/module.js @@ -0,0 +1,63 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2025 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +var hasWebAssemblySupport = require( '@stdlib/assert/has-wasm-support' ); +var Memory = require( '@stdlib/wasm/memory' ); +var oneTo = require( '@stdlib/array/one-to' ); +var dnansum = require( './../lib' ); + +function main() { + if ( !hasWebAssemblySupport() ) { + console.error( 'Environment does not support WebAssembly.' ); + return; + } + // Create a new memory instance with an initial size of 10 pages (640KiB) and a maximum size of 100 pages (6.4MiB): + var mem = new Memory({ + 'initial': 10, + 'maximum': 100 + }); + + // Create a BLAS routine: + var mod = new dnansum.Module( mem ); + // returns + + // Initialize the routine: + mod.initializeSync(); // eslint-disable-line node/no-sync + + // Define a vector data type: + var dtype = 'float64'; + + // Specify a vector length: + var N = 3; + + // Define a pointer (i.e., byte offset) for storing the input vector: + var xptr = 0; + + // Write vector values to module memory: + mod.write( xptr, oneTo( N, dtype ) ); + + // Perform computation: + var v = mod.ndarray( N, xptr, 1, 0 ); + + // Print the result: + console.log( v ); +} + +main(); diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/binary.browser.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/binary.browser.js new file mode 100644 index 000000000000..e1f09857be69 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/binary.browser.js @@ -0,0 +1,33 @@ +/** +* @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 base64ToUint8Array = require( '@stdlib/string/base/base64-to-uint8array' ); + + +// MAIN // + +var wasm = base64ToUint8Array( 'AGFzbQEAAAAADwhkeWxpbmsuMAEEAAAAAAETA2AEf39/fwF8YAAAYAN/f38BfAIPAQNlbnYGbWVtb3J5AgAAAwUEAQIAAAdPAxFfX3dhc21fY2FsbF9jdG9ycwAAFnN0ZGxpYl9zdHJpZGVkX2RuYW5zdW0AAR5zdGRsaWJfc3RyaWRlZF9kbmFuc3VtX25kYXJyYXkAAwrDAQQDAAELGgAgACABIAJBASAAayACbEEAIAJBAEwbEAILlAECBHwBfwJAIABBAEwNAAJAIAIEQANAIAAgCEYNAiABIANBA3RqKwMAIgUgBWEEQCAHIAUgBCAEIAWgIgahoCAEIAUgBqGgIASZIAWZZhugIQcgBiEECyAIQQFqIQggAiADaiEDDAALAAsgASADQQN0aisDACIGIAZiDQEgBiAAuKIPCyAEIAegDwtEAAAAAAAAAAALDAAgACABIAIgAxACCw==' ); + + +// EXPORTS // + +module.exports = wasm; diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/binary.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/binary.js new file mode 100644 index 000000000000..2b83fe651780 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/binary.js @@ -0,0 +1,34 @@ +/** +* @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 resolve = require( 'path' ).resolve; +var readWASM = require( '@stdlib/fs/read-wasm' ).sync; + + +// MAIN // + +var wasm = readWASM( resolve( __dirname, '..', 'src', 'main.wasm' ) ); + + +// EXPORTS // + +module.exports = wasm; diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/index.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/index.js new file mode 100644 index 000000000000..b4072115446d --- /dev/null +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/index.js @@ -0,0 +1,100 @@ +/** +* @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'; + +/** +* WebAssembly routine to compute the sum of double-precision floating-point strided array elements, ignoring `NaN` values. +* +* @module @stdlib/blas/ext/base/wasm/dnansum +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* var dnansum = require( '@stdlib/blas/ext/base/wasm/dnansum' ); +* +* // Define a strided array: +* var x = new Float64Array( [ 1.0, -2.0, NaN, 2.0 ] ); +* +* // Perform operation: +* var v = dnansum.main( x.length, x, 1 ); +* // returns 1.0 +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* var dnansum = require( '@stdlib/blas/ext/base/wasm/dnansum' ); +* +* // Define a strided array: +* var x = new Float64Array( [ 2.0, 1.0, NaN, -2.0, -2.0, 2.0, 3.0, 4.0 ] ); +* +* // Perform operation: +* var v = dnansum.ndarray( 4, x, 2, 1 ); +* // returns 5.0 +* +* @example +* var Memory = require( '@stdlib/wasm/memory' ); +* var oneTo = require( '@stdlib/array/one-to' ); +* var zeros = require( '@stdlib/array/zeros' ); +* var dnansum = require( '@stdlib/blas/ext/base/wasm/dnansum' ); +* +* // Create a new memory instance with an initial size of 10 pages (640KiB) and a maximum size of 100 pages (6.4MiB): +* var mem = new Memory({ +* 'initial': 10, +* 'maximum': 100 +* }); +* +* // Create a BLAS routine: +* var mod = new dnansum.Module( mem ); +* // returns +* +* // Initialize the routine: +* mod.initializeSync(); +* +* // Define a vector data type: +* var dtype = 'float64'; +* +* // Specify a vector length: +* var N = 3; +* +* // Define a pointer (i.e., byte offset) for storing the input vector: +* var xptr = 0; +* +* // Write vector values to module memory: +* mod.write( xptr, oneTo( N, dtype ) ); +* +* // Perform computation: +* var v = mod.main( N, xptr, 1 ); +* // returns 6.0 +*/ + +// MODULES // + +var setReadOnly = require( '@stdlib/utils/define-nonenumerable-read-only-property' ); +var main = require( './main.js' ); +var Module = require( './module.js' ); + + +// MAIN // + +setReadOnly( main, 'Module', Module ); + + +// EXPORTS // + +module.exports = main; + +// exports: { "Module": "main.Module" } diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/main.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/main.js new file mode 100644 index 000000000000..e920ad2add9b --- /dev/null +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/main.js @@ -0,0 +1,60 @@ +/** +* @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 Routine = require( './routine.js' ); + + +// MAIN // + +/** +* WebAssembly routine to compute the sum of double-precision floating-point strided array elements, ignoring `NaN` values. +* +* @name dnansum +* @type {Routine} +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* +* // Define a strided array: +* var x = new Float64Array( [ 1.0, -2.0, NaN, 2.0 ] ); +* +* // Perform operation: +* var v = dnansum.main( 4, x, 1 ); +* // returns 1.0 +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* +* // Define a strided array: +* var x = new Float64Array( [ 2.0, 1.0, NaN, -2.0, -2.0, 2.0, 3.0, 4.0 ] ); +* +* // Perform operation: +* var v = dnansum.ndarray( 4, x, 2, 1 ); +* // returns 5.0 +*/ +var dnansum = new Routine(); +dnansum.initializeSync(); // eslint-disable-line node/no-sync + + +// EXPORTS // + +module.exports = dnansum; diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/module.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/module.js new file mode 100644 index 000000000000..6f10718b6084 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/module.js @@ -0,0 +1,198 @@ +/** +* @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. +*/ + +/* eslint-disable no-restricted-syntax, no-invalid-this */ + +'use strict'; + +// MODULES // + +var isWebAssemblyMemory = require( '@stdlib/assert/is-wasm-memory' ); +var setReadOnly = require( '@stdlib/utils/define-nonenumerable-read-only-property' ); +var inherits = require( '@stdlib/utils/inherit' ); +var WasmModule = require( '@stdlib/wasm/module-wrapper' ); +var format = require( '@stdlib/string/format' ); +var wasmBinary = require( './binary.js' ); + + +// MAIN // + +/** +* BLAS routine WebAssembly module wrapper constructor. +* +* @constructor +* @param {Object} memory - WebAssembly memory instance +* @throws {TypeError} must provide a WebAssembly memory instance +* @returns {Module} module instance +* +* @example +* var Memory = require( '@stdlib/wasm/memory' ); +* var oneTo = require( '@stdlib/array/one-to' ); +* +* // Create a new memory instance with an initial size of 10 pages (640KiB) and a maximum size of 100 pages (6.4MiB): +* var mem = new Memory({ +* 'initial': 10, +* 'maximum': 100 +* }); +* +* // Create a BLAS routine: +* var dnansum = new Module( mem ); +* // returns +* +* // Initialize the routine: +* dnansum.initializeSync(); +* +* // Define a vector data type: +* var dtype = 'float64'; +* +* // Specify a vector length: +* var N = 3; +* +* // Define a pointer (i.e., byte offset) for storing the input vector: +* var xptr = 0; +* +* // Write vector values to module memory: +* dnansum.write( xptr, oneTo( N, dtype ) ); +* +* // Perform computation: +* var v = dnansum.main( N, xptr, 1 ); +* // returns 6.0 +*/ +function Module( memory ) { + if ( !( this instanceof Module ) ) { + return new Module( memory ); + } + if ( !isWebAssemblyMemory( memory ) ) { + throw new TypeError( format( 'invalid argument. Must provide a WebAssembly memory instance. Value: `%s`.', memory ) ); + } + // Call the parent constructor: + WasmModule.call( this, wasmBinary, memory, { + 'env': { + 'memory': memory + } + }); + + return this; +} + +// Inherit from the parent constructor: +inherits( Module, WasmModule ); + +/** +* Computes the sum of double-precision floating-point strided array elements, ignoring `NaN` values. +* +* @name main +* @memberof Module.prototype +* @readonly +* @type {Function} +* @param {PositiveInteger} N - number of indexed elements +* @param {NonNegativeInteger} xptr - input array pointer (i.e., byte offset) +* @param {integer} strideX - stride length +* @returns {number} sum +* +* @example +* var Memory = require( '@stdlib/wasm/memory' ); +* var oneTo = require( '@stdlib/array/one-to' ); +* +* // Create a new memory instance with an initial size of 10 pages (640KiB) and a maximum size of 100 pages (6.4MiB): +* var mem = new Memory({ +* 'initial': 10, +* 'maximum': 100 +* }); +* +* // Create a BLAS routine: +* var dnansum = new Module( mem ); +* // returns +* +* // Initialize the routine: +* dnansum.initializeSync(); +* +* // Define a vector data type: +* var dtype = 'float64'; +* +* // Specify a vector length: +* var N = 3; +* +* // Define a pointer (i.e., byte offset) for storing the input vector: +* var xptr = 0; +* +* // Write vector values to module memory: +* dnansum.write( xptr, oneTo( N, dtype ) ); +* +* // Perform computation: +* var v = dnansum.main( N, xptr, 1 ); +* // returns 6.0 +*/ +setReadOnly( Module.prototype, 'main', function dnansum( N, xptr, strideX ) { + return this._instance.exports.stdlib_strided_dnansum( N, xptr, strideX ); +}); + +/** +* Computes the sum of double-precision floating-point strided array elements, ignoring `NaN` values and alternative indexing semantics. +* +* @name ndarray +* @memberof Module.prototype +* @readonly +* @type {Function} +* @param {PositiveInteger} N - number of indexed elements +* @param {NonNegativeInteger} xptr - input array pointer (i.e., byte offset) +* @param {integer} strideX - stride length +* @param {NonNegativeInteger} offsetX - starting index +* @returns {number} sum +* +* @example +* var Memory = require( '@stdlib/wasm/memory' ); +* var oneTo = require( '@stdlib/array/one-to' ); +* +* // Create a new memory instance with an initial size of 10 pages (640KiB) and a maximum size of 100 pages (6.4MiB): +* var mem = new Memory({ +* 'initial': 10, +* 'maximum': 100 +* }); +* +* // Create a BLAS routine: +* var dnansum = new Module( mem ); +* // returns +* +* // Initialize the routine: +* dnansum.initializeSync(); +* +* // Define a vector data type: +* var dtype = 'float64'; +* +* // Specify a vector length: +* var N = 3; +* +* // Define a pointer (i.e., byte offset) for storing the input vector: +* var xptr = 0; +* +* // Write vector values to module memory: +* dnansum.write( xptr, oneTo( N, dtype ) ); +* +* // Perform computation: +* var v = dnansum.ndarray( N, xptr, 1, 0 ); +* // returns 6.0 +*/ +setReadOnly( Module.prototype, 'ndarray', function dnansum( N, xptr, strideX, offsetX ) { + return this._instance.exports.stdlib_strided_dnansum_ndarray( N, xptr, strideX, offsetX ); // eslint-disable-line max-len +}); + + +// EXPORTS // + +module.exports = Module; diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/routine.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/routine.js new file mode 100644 index 000000000000..e487bb09c5ae --- /dev/null +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/routine.js @@ -0,0 +1,166 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2025 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +/* eslint-disable max-len, no-restricted-syntax, no-invalid-this */ + +'use strict'; + +// MODULES // + +var setReadOnly = require( '@stdlib/utils/define-nonenumerable-read-only-property' ); +var inherits = require( '@stdlib/utils/inherit' ); +var stride2offset = require( '@stdlib/strided/base/stride2offset' ); +var Memory = require( '@stdlib/wasm/memory' ); +var arrays2ptrs = require( '@stdlib/wasm/base/arrays2ptrs' ); +var strided2object = require( '@stdlib/wasm/base/strided2object' ); +var Module = require( './module.js' ); + + +// MAIN // + +/** +* Routine constructor. +* +* @private +* @constructor +* @returns {Routine} routine instance +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* +* // Create a new routine: +* var dnansum = new Routine(); +* +* // Initialize the module: +* dnansum.initializeSync(); +* +* // Define a strided array: +* var x = new Float64Array( [ 1.0, -2.0, NaN, 2.0 ] ); +* +* // Perform operation: +* var v = dnansum.main( 4, x, 1 ); +* // returns 1.0 +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* +* // Create a new routine: +* var dnansum = new Routine(); +* +* // Initialize the module: +* dnansum.initializeSync(); +* +* // Define a strided array: +* var x = new Float64Array( [ 2.0, 1.0, NaN, -2.0, -2.0, 2.0, 3.0, 4.0 ] ); +* +* // Perform operation: +* var v = dnansum.ndarray( 4, x, 2, 1 ); +* // returns 5.0 +*/ +function Routine() { + if ( !( this instanceof Routine ) ) { + return new Routine(); + } + Module.call( this, new Memory({ + 'initial': 0 + })); + return this; +} + +// Inherit from the parent constructor: +inherits( Routine, Module ); + +/** +* Computes the sum of double-precision floating-point strided array elements, ignoring `NaN` values. +* +* @name main +* @memberof Routine.prototype +* @readonly +* @type {Function} +* @param {PositiveInteger} N - number of indexed elements +* @param {Float64Array} x - input array +* @param {integer} strideX - stride length +* @returns {number} sum +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* +* // Create a new routine: +* var dnansum = new Routine(); +* +* // Initialize the module: +* dnansum.initializeSync(); +* +* // Define a strided array: +* var x = new Float64Array( [ 1.0, NaN, -2.0, 2.0 ] ); +* +* // Perform operation: +* var v = dnansum.main( 4, x, 1 ); +* // returns 1.0 +*/ +setReadOnly( Routine.prototype, 'main', function dnansum( N, x, strideX ) { + return this.ndarray( N, x, strideX, stride2offset( N, strideX ) ); +}); + +/** +* Computes the sum of double-precision floating-point strided array elements, ignoring `NaN` values and alternative indexing semantics. +* +* @name ndarray +* @memberof Routine.prototype +* @readonly +* @type {Function} +* @param {PositiveInteger} N - number of indexed elements +* @param {Float64Array} x - input array +* @param {integer} strideX - stride length +* @param {NonNegativeInteger} offsetX - starting index +* @returns {number} sum +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* +* // Create a new routine: +* var dnansum = new Routine(); +* +* // Initialize the module: +* dnansum.initializeSync(); +* +* // Define a strided array: +* var x = new Float64Array( [ 2.0, 1.0, NaN, -2.0, -2.0, 2.0, 3.0, 4.0 ] ); +* +* // Perform operation: +* var v = dnansum.ndarray( 4, x, 2, 1 ); +* // returns 5.0 +*/ +setReadOnly( Routine.prototype, 'ndarray', function dnansum( N, x, strideX, offsetX ) { + var ptrs; + var p0; + + // Convert the input arrays to "pointers" in the module's memory: + ptrs = arrays2ptrs( this, [ + strided2object( N, x, strideX, offsetX ) + ]); + p0 = ptrs[ 0 ]; + + // Perform computation by calling the corresponding parent method: + return Module.prototype.ndarray.call( this, N, p0.ptr, p0.stride, p0.offset ); +}); + + +// EXPORTS // + +module.exports = Routine; diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/manifest.json b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/manifest.json new file mode 100644 index 000000000000..1e999ae10bd4 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/manifest.json @@ -0,0 +1,36 @@ +{ + "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": [], + "include": [], + "libraries": [], + "libpath": [], + "dependencies": [ + "@stdlib/blas/ext/base/dnansum" + ] + } + ] +} diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/package.json b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/package.json new file mode 100644 index 000000000000..dad581238a21 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/package.json @@ -0,0 +1,81 @@ +{ + "name": "@stdlib/blas/base/ext/wasm/dnansum", + "version": "0.0.0", + "description": "Calculate the sum of double-precision floating-point strided array elements, ignoring NaN values", + "license": "Apache-2.0", + "author": { + "name": "The Stdlib Authors", + "url": "https://github.com/stdlib-js/stdlib/graphs/contributors" + }, + "contributors": [ + { + "name": "The Stdlib Authors", + "url": "https://github.com/stdlib-js/stdlib/graphs/contributors" + } + ], + "main": "./lib", + "browser": { + "./lib/binary.js": "./lib/binary.browser.js" + }, + "directories": { + "benchmark": "./benchmark", + "doc": "./docs", + "example": "./examples", + "lib": "./lib", + "scripts": "./scripts", + "src": "./src", + "test": "./test" + }, + "types": "./docs/types", + "scripts": {}, + "homepage": "https://github.com/stdlib-js/stdlib", + "repository": { + "type": "git", + "url": "git://github.com/stdlib-js/stdlib.git" + }, + "bugs": { + "url": "https://github.com/stdlib-js/stdlib/issues" + }, + "dependencies": {}, + "devDependencies": {}, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "keywords": [ + "stdlib", + "stdmath", + "statistics", + "stats", + "mathematics", + "math", + "blas", + "extended", + "sum", + "total", + "summation", + "strided", + "strided array", + "typed", + "array", + "float64", + "double", + "float64array", + "webassembly", + "wasm" + ], + "__stdlib__": { + "wasm": true + } +} diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/scripts/build.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/scripts/build.js new file mode 100644 index 000000000000..66bf9650b6d6 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/scripts/build.js @@ -0,0 +1,66 @@ +#!/usr/bin/env node + +/** +* @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 resolve = require( 'path' ).resolve; +var readFile = require( '@stdlib/fs/read-file' ).sync; +var writeFile = require( '@stdlib/fs/write-file' ).sync; +var replace = require( '@stdlib/string/replace' ); +var currentYear = require( '@stdlib/time/current-year' ); + + +// VARIABLES // + +var wpath = resolve( __dirname, '..', 'src', 'main.wasm' ); +var tpath = resolve( __dirname, 'template.txt' ); +var opath = resolve( __dirname, '..', 'lib', 'binary.browser.js' ); + +var opts = { + 'encoding': 'utf8' +}; + +var PLACEHOLDER = '{{WASM_BASE64}}'; +var YEAR = '{{YEAR}}'; + + +// MAIN // + +/** +* Main execution sequence. +* +* @private +*/ +function main() { + var wasm; + var tmpl; + + wasm = readFile( wpath ); + tmpl = readFile( tpath, opts ); + + tmpl = replace( tmpl, YEAR, currentYear().toString() ); + tmpl = replace( tmpl, PLACEHOLDER, wasm.toString( 'base64' ) ); + + writeFile( opath, tmpl, opts ); +} + +main(); diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/scripts/template.txt b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/scripts/template.txt new file mode 100644 index 000000000000..f66cdb9735b1 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/scripts/template.txt @@ -0,0 +1,33 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) {{YEAR}} 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 base64ToUint8Array = require( '@stdlib/string/base/base64-to-uint8array' ); + + +// MAIN // + +var wasm = base64ToUint8Array( '{{WASM_BASE64}}' ); + + +// EXPORTS // + +module.exports = wasm; diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/src/Makefile b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/src/Makefile new file mode 100644 index 000000000000..1b1f35347760 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/src/Makefile @@ -0,0 +1,243 @@ +#/ +# @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. +#/ + +#/ +# To compile targets listed in this Makefile, use top-level project `make` +# commands rather than commands listed in this Makefile. The top-level project +# `make` commands will ensure that various environment variables and flags are +# appropriately set. +#/ + +# VARIABLES # + +ifndef VERBOSE + QUIET := @ +else + QUIET := +endif + +# Determine the OS ([1][1], [2][2]). +# +# [1]: https://en.wikipedia.org/wiki/Uname#Examples +# [2]: http://stackoverflow.com/a/27776822/2225624 +OS ?= $(shell uname) +ifneq (, $(findstring MINGW,$(OS))) + OS := WINNT +else +ifneq (, $(findstring MSYS,$(OS))) + OS := WINNT +else +ifneq (, $(findstring CYGWIN,$(OS))) + OS := WINNT +else +ifneq (, $(findstring Windows_NT,$(OS))) + OS := WINNT +endif +endif +endif +endif + +# Define the program used for compiling C source files to WebAssembly: +ifdef EMCC_COMPILER + EMCC := $(EMCC_COMPILER) +else + EMCC := emcc +endif + +# Define the program used for compiling WebAssembly files to the WebAssembly text format: +ifdef WASM2WAT + WASM_TO_WAT := $(WASM2WAT) +else + WASM_TO_WAT := wasm2wat +endif + +# Define the program used for compiling WebAssembly files to JavaScript: +ifdef WASM2JS + WASM_TO_JS := $(WASM2JS) +else + WASM_TO_JS := wasm2js +endif + +# Define the path to the Node.js executable: +ifdef NODE + NODEJS := $(NODE) +else + NODEJS := node +endif + +# Define the integer size: +ifdef CBLAS_INT + INT_TYPE := $(CBLAS_INT) +else + INT_TYPE := int32_t +endif + +# Define the command-line options when compiling C files: +CFLAGS ?= \ + -std=c99 \ + -O3 \ + -flto \ + -Wall \ + -pedantic \ + -D CBLAS_INT=$(INT_TYPE) + +# Define the command-line options when compiling C files to WebAssembly and asm.js: +EMCCFLAGS ?= $(CFLAGS) + +# Define shared `emcc` flags: +EMCC_SHARED_FLAGS := \ + -Oz \ + -fwasm-exceptions \ + -s SUPPORT_LONGJMP=1 \ + -s SIDE_MODULE=2 \ + -s EXPORTED_FUNCTIONS="$(shell cat exports.json | tr -d ' \t\n' | sed s/\"/\'/g)" + +# Define WebAssembly `emcc` flags: +EMCC_WASM_FLAGS := $(EMCC_SHARED_FLAGS) \ + -s WASM=1 \ + -s WASM_BIGINT=0 + +# List of includes (e.g., `-I /foo/bar -I /beep/boop/include`): +INCLUDE ?= + +# List of source files: +SOURCE_FILES ?= + +# List of libraries (e.g., `-lopenblas -lpthread`): +LIBRARIES ?= + +# List of library paths (e.g., `-L /foo/bar -L /beep/boop`): +LIBPATH ?= + +# List of WebAssembly targets: +wasm_targets := main.wasm + +# List of WebAssembly WAT targets: +wat_targets := main.wat + +# List of WebAssembly JavaScript targets: +wasm_js_targets := main.wasm.js + +# List of other JavaScript targets: +browser_js_targets := ./../lib/binary.browser.js + + +# RULES # + +#/ +# Compiles source files. +# +# @param {string} [EMCC_COMPILER] - EMCC compiler (e.g., `emcc`) +# @param {string} [EMCCFLAGS] - EMCC compiler options +# @param {string} [WASM2WAT] - WebAssembly text format compiler (e.g., `wasm2wat`) +# @param {string} [WASM2JS] - WebAssembly JavaScript compiler (e.g., `wasm2js`) +# @param {string} [INCLUDE] - list of includes (e.g., `-I /foo/bar -I /beep/boop/include`) +# @param {string} [SOURCE_FILES] - list of source files +# @param {string} [LIBPATH] - list of library paths (e.g., `-L /foo/bar -L /beep/boop`) +# @param {string} [LIBRARIES] - list of libraries (e.g., `-lopenblas -lpthread`) +# +# @example +# make +# +# @example +# make all +#/ +all: wasm + +.PHONY: all + +#/ +# Compiles source files to WebAssembly. +# +# @param {string} [EMCC_COMPILER] - EMCC compiler (e.g., `emcc`) +# @param {string} [EMCCFLAGS] - EMCC compiler options +# @param {string} [WASM2WAT] - WebAssembly text format compiler (e.g., `wasm2wat`) +# @param {string} [WASM2JS] - WebAssembly JavaScript compiler (e.g., `wasm2js`) +# @param {string} [INCLUDE] - list of includes (e.g., `-I /foo/bar -I /beep/boop/include`) +# @param {string} [SOURCE_FILES] - list of source files +# @param {string} [LIBPATH] - list of library paths (e.g., `-L /foo/bar -L /beep/boop`) +# @param {string} [LIBRARIES] - list of libraries (e.g., `-lopenblas -lpthread`) +# +# @example +# make wasm +#/ +wasm: $(wasm_targets) $(wat_targets) $(browser_js_targets) + +.PHONY: wasm + +#/ +# Compiles C source files to WebAssembly binaries. +# +# @private +# @param {string} EMCC - EMCC compiler (e.g., `emcc`) +# @param {string} EMCCFLAGS - EMCC compiler options +# @param {string} INCLUDE - list of includes (e.g., `-I /foo/bar`) +# @param {string} SOURCE_FILES - list of source files +# @param {string} LIBPATH - list of library paths (e.g., `-L /foo/bar`) +# @param {string} LIBRARIES - list of libraries (e.g., `-lopenblas`) +#/ +$(wasm_targets): + $(QUIET) $(EMCC) $(EMCCFLAGS) $(EMCC_WASM_FLAGS) $(INCLUDE) -o $@ $(SOURCE_FILES) $< $(LIBPATH) $(LIBRARIES) + +#/ +# Compiles WebAssembly binary files to the WebAssembly text format. +# +# @private +# @param {string} WASM2WAT - WAT compiler (e.g., `wasm2wat`) +#/ +$(wat_targets): %.wat: %.wasm + $(QUIET) $(WASM_TO_WAT) -o $@ $(wasm_targets) + +#/ +# Compiles WebAssembly binary files to JavaScript. +# +# @private +# @param {string} WASM2JS - JavaScript compiler (e.g., `wasm2js`) +#/ +$(wasm_js_targets): %.wasm.js: %.wasm + $(QUIET) $(WASM_TO_JS) -o $@ $(wasm_targets) + +#/ +# Generates an inline WebAssembly build for use in bundlers. +# +# @private +# @param {string} NODE - Node.js executable +#/ +$(browser_js_targets): $(wasm_targets) + $(QUIET) $(NODEJS) ./../scripts/build.js + +#/ +# Removes generated WebAssembly files. +# +# @example +# make clean-wasm +#/ +clean-wasm: + $(QUIET) -rm -f *.wasm *.wat *.wasm.js $(browser_js_targets) + +.PHONY: clean-wasm + +#/ +# Removes generated files. +# +# @example +# make clean +#/ +clean: clean-wasm + +.PHONY: clean diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/src/exports.json b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/src/exports.json new file mode 100644 index 000000000000..af5b858b5e63 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/src/exports.json @@ -0,0 +1,4 @@ +[ + "_stdlib_strided_dnansum", + "_stdlib_strided_dnansum_ndarray" +] diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/src/main.wasm b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/src/main.wasm new file mode 100755 index 0000000000000000000000000000000000000000..83a8c0b357097d9d3636cba4d1ea324b6cc1cca3 GIT binary patch literal 349 zcmZur!AiqG5S`iC-2}HGir~S5OnMc>Pe?#K34X#RZ6YL1Qb?i_DD)@1^cMXJ@BWzE z(t`)z9Nv2~%;Q1UHwX@)pO1CfuJ7(q9z0%BDt8XJO#xCmDiI z-ZNcT`|h&rDywU|8a7=IaMcfaT`p}ubY))THgB`Ge{BG7{y*3@&$=!ffzEzV5}>&T z21XVMGOStD2{;W;^K)T7P{=LrM9kne0XQLKOwO|Z7zp=82@TaP!9uahWXv8bmTuIv z(4W&m@R9ed_Am1(@>oaGu%BQR`7D^Kh-P5G{LRv=mjSY7`2Grw3-PAVJirNNb}G!| GD*giKmPJee literal 0 HcmV?d00001 diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/src/main.wat b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/src/main.wat new file mode 100644 index 000000000000..ef4c5d482101 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/src/main.wat @@ -0,0 +1,131 @@ +;; @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. + +(module + (type (;0;) (func (param i32 i32 i32 i32) (result f64))) + (type (;1;) (func)) + (type (;2;) (func (param i32 i32 i32) (result f64))) + (import "env" "memory" (memory (;0;) 0)) + (func (;0;) (type 1) + nop) + (func (;1;) (type 2) (param i32 i32 i32) (result f64) + local.get 0 + local.get 1 + local.get 2 + i32.const 1 + local.get 0 + i32.sub + local.get 2 + i32.mul + i32.const 0 + local.get 2 + i32.const 0 + i32.le_s + select + call 2) + (func (;2;) (type 0) (param i32 i32 i32 i32) (result f64) + (local f64 f64 f64 f64 i32) + block ;; label = @1 + local.get 0 + i32.const 0 + i32.le_s + br_if 0 (;@1;) + block ;; label = @2 + local.get 2 + if ;; label = @3 + loop ;; label = @4 + local.get 0 + local.get 8 + i32.eq + br_if 2 (;@2;) + local.get 1 + local.get 3 + i32.const 3 + i32.shl + i32.add + f64.load + local.tee 5 + local.get 5 + f64.eq + if ;; label = @5 + local.get 7 + local.get 5 + local.get 4 + local.get 4 + local.get 5 + f64.add + local.tee 6 + f64.sub + f64.add + local.get 4 + local.get 5 + local.get 6 + f64.sub + f64.add + local.get 4 + f64.abs + local.get 5 + f64.abs + f64.ge + select + f64.add + local.set 7 + local.get 6 + local.set 4 + end + local.get 8 + i32.const 1 + i32.add + local.set 8 + local.get 2 + local.get 3 + i32.add + local.set 3 + br 0 (;@4;) + end + unreachable + end + local.get 1 + local.get 3 + i32.const 3 + i32.shl + i32.add + f64.load + local.tee 6 + local.get 6 + f64.ne + br_if 1 (;@1;) + local.get 6 + local.get 0 + f64.convert_i32_u + f64.mul + return + end + local.get 4 + local.get 7 + f64.add + return + end + f64.const 0x0p+0 (;=0;)) + (func (;3;) (type 0) (param i32 i32 i32 i32) (result f64) + local.get 0 + local.get 1 + local.get 2 + local.get 3 + call 2) + (export "__wasm_call_ctors" (func 0)) + (export "stdlib_strided_dnansum" (func 1)) + (export "stdlib_strided_dnansum_ndarray" (func 3))) diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.js new file mode 100644 index 000000000000..1d4b6f4b33f9 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.js @@ -0,0 +1,53 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2025 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var tape = require( 'tape' ); +var dnansum = require( './../lib' ); + + +// TESTS // + +tape( 'main export is an object', function test( t ) { + t.ok( true, __filename ); + t.strictEqual( typeof dnansum, 'object', 'returns expected value' ); + t.end(); +}); + +tape( 'attached to the main export is a `main` method', function test( t ) { + t.strictEqual( typeof dnansum.main, 'function', 'returns expected value' ); + t.end(); +}); + +tape( 'attached to the main export is an `ndarray` method', function test( t ) { + t.strictEqual( typeof dnansum.ndarray, 'function', 'returns expected value' ); + t.end(); +}); + +tape( 'attached to the main export is a `Module` constructor', function test( t ) { + t.strictEqual( typeof dnansum.Module, 'function', 'returns expected value' ); + t.end(); +}); + +tape( 'the main export is a `Module` instance', function test( t ) { + t.strictEqual( dnansum instanceof dnansum.Module, true, 'returns expected value' ); + t.end(); +}); diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.main.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.main.js new file mode 100644 index 000000000000..8da21da4b8da --- /dev/null +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.main.js @@ -0,0 +1,202 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2025 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var tape = require( 'tape' ); +var Float64Array = require( '@stdlib/array/float64' ); +var dnansum = require( './../lib' ); + + +// TESTS // + +tape( 'main export is a function', function test( t ) { + t.ok( true, __filename ); + t.strictEqual( typeof dnansum.main, 'function', 'main export is a function' ); + t.end(); +}); + +tape( 'the function has an arity of 3', function test( t ) { + t.strictEqual( dnansum.main.length, 3, 'returns expected value' ); + t.end(); +}); + +tape( 'the function calculates the sum of strided array elements (ignoring NaN values)', function test( t ) { + var x; + var v; + + x = new Float64Array( [ 1.0, -2.0, -4.0, 5.0, 0.0, NaN, 3.0, 0.0, -3.0, 3.0, NaN ] ); // eslint-disable-line max-len + v = dnansum.main( x.length, x, 1 ); + t.strictEqual( v, 3.0, 'returns expected value' ); + + x = new Float64Array( [ 1.0, -2.0, -4.0, NaN, 5.0, 0.0, 3.0, NaN ] ); + v = dnansum.main( x.length, x, 1 ); + t.strictEqual( v, 3.0, 'returns expected value' ); + + x = new Float64Array( [ -4.0, NaN, -4.0 ] ); + v = dnansum.main( x.length, x, 1 ); + t.strictEqual( v, -8.0, 'returns expected value' ); + + x = new Float64Array( [ NaN, 4.0 ] ); + v = dnansum.main( x.length, x, 1 ); + t.strictEqual( v, 4.0, 'returns expected value' ); + + x = new Float64Array( [ NaN, NaN ] ); + v = dnansum.main( x.length, x, 1 ); + t.strictEqual( v, 0.0, 'returns expected value' ); + + x = new Float64Array( [ NaN ] ); + v = dnansum.main( x.length, x, 1 ); + t.strictEqual( v, 0.0, 'returns expected value' ); + + x = new Float64Array( [ 4.0 ] ); + v = dnansum.main( x.length, x, 1 ); + t.strictEqual( v, 4.0, 'returns expected value' ); + + x = new Float64Array( [ 1.0, 1.0e100, 1.0, -1.0e100 ] ); + v = dnansum.main( x.length, x, 1 ); + t.strictEqual( v, 2.0, 'returns expected value' ); + + t.end(); +}); + +tape( 'if provided an `N` parameter less than or equal to `0`, the function returns `0.0`', function test( t ) { + var x; + var v; + + x = new Float64Array( [ 1.0, -2.0, -4.0, 5.0, 3.0 ] ); + + v = dnansum.main( 0, x, 1 ); + t.strictEqual( v, 0.0, 'returns expected value' ); + + v = dnansum.main( -1, x, 1 ); + t.strictEqual( v, 0.0, '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 = new Float64Array( [ 1.0, -2.0, -4.0, 5.0, 3.0 ] ); + + v = dnansum.main( 1, x, 1 ); + t.strictEqual( v, 1.0, 'returns expected value' ); + + t.end(); +}); + +tape( 'the function supports a `stride` parameter', function test( t ) { + var x; + var v; + + x = new Float64Array([ + 1.0, // 0 + 2.0, + 2.0, // 1 + -7.0, + -2.0, // 2 + 3.0, + 4.0, // 3 + 2.0, + NaN, // 4 + NaN + ]); + + v = dnansum.main( 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 x; + var v; + + x = new Float64Array([ + NaN, // 4 + NaN, + 1.0, // 3 + 2.0, + 2.0, // 2 + -7.0, + -2.0, // 1 + 3.0, + 4.0, // 0 + 2.0 + ]); + + v = dnansum.main( 5, x, -2 ); + + t.strictEqual( v, 5.0, 'returns expected value' ); + t.end(); +}); + +tape( 'if provided a `stride` parameter equal to `0`, the function returns the sum of the first element repeated N times', function test( t ) { + var x; + var v; + + x = new Float64Array( [ 1.0, -2.0, -4.0, 5.0, 3.0 ] ); + + v = dnansum.main( x.length, x, 0 ); + t.strictEqual( v, 5.0, 'returns expected value' ); + + t.end(); +}); + +tape( 'if provided a `stride` parameter equal to `0` and the first element is NaN, the function returns 0', function test( t ) { + var x; + var v; + + x = new Float64Array( [ NaN, -2.0, -4.0, 5.0, 3.0 ] ); + + v = dnansum.main( x.length, x, 0 ); + t.strictEqual( v, 0.0, 'returns expected value' ); + + t.end(); +}); + +tape( 'the function supports view offsets', function test( t ) { + var x0; + var x1; + var 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 + ]); + + x1 = new Float64Array( x0.buffer, x0.BYTES_PER_ELEMENT*1 ); // start at 2nd element + + v = dnansum.main( 5, x1, 2 ); + t.strictEqual( v, 5.0, 'returns expected value' ); + + t.end(); +}); diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.module.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.module.js new file mode 100644 index 000000000000..0cdcd97ef151 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.module.js @@ -0,0 +1,154 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2025 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var tape = require( 'tape' ); +var Memory = require( '@stdlib/wasm/memory' ); +var ModuleWrapper = require( '@stdlib/wasm/module-wrapper' ); +var Module = require( './../lib' ).Module; + + +// TESTS // + +tape( 'main export is a function', function test( t ) { + t.ok( true, __filename ); + t.strictEqual( typeof Module, 'function', 'returns expected value' ); + t.end(); +}); + +tape( 'the function is a constructor', function test( t ) { + var mem; + var mod; + + mem = new Memory({ + 'initial': 0 + }); + mod = new Module( mem ); + t.strictEqual( mod instanceof Module, true, 'returns expected value' ); + t.end(); +}); + +tape( 'the function is a constructor which does not require `new`', function test( t ) { + var mem; + var mod; + + mem = new Memory({ + 'initial': 0 + }); + mod = Module( mem ); // eslint-disable-line new-cap + t.strictEqual( mod instanceof Module, true, 'returns expected value' ); + t.end(); +}); + +tape( 'the module constructor throws an error if provided a first argument which is not a WebAssembly memory instance (new)', function test( t ) { + var values; + var i; + + values = [ + '5', + 5, + NaN, + true, + false, + null, + void 0, + [], + {}, + function noop() {} + ]; + for ( i = 0; i < values.length; i++ ) { + t.throws( badValue( values[ i ] ), TypeError, 'throws an error when provided ' + values[ i ] ); + } + t.end(); + + function badValue( value ) { + return function badValue() { + return new Module( value ); + }; + } +}); + +tape( 'the module constructor throws an error if provided a first argument which is not a WebAssembly memory instance (no new)', function test( t ) { + var values; + var i; + + values = [ + '5', + 5, + NaN, + true, + false, + null, + void 0, + [], + {}, + function noop() {} + ]; + for ( i = 0; i < values.length; i++ ) { + t.throws( badValue( values[ i ] ), TypeError, 'throws an error when provided ' + values[ i ] ); + } + t.end(); + + function badValue( value ) { + return function badValue() { + return Module( value ); // eslint-disable-line new-cap + }; + } +}); + +tape( 'the module instance returned by the module constructor inherits from a module wrapper', function test( t ) { + var mem; + var mod; + + mem = new Memory({ + 'initial': 0 + }); + mod = new Module( mem ); + + t.strictEqual( mod instanceof ModuleWrapper, true, 'returns expected value' ); + t.end(); +}); + +tape( 'attached to a module instance is a `main` method', function test( t ) { + var mem; + var mod; + + mem = new Memory({ + 'initial': 0 + }); + mod = new Module( mem ); + + t.strictEqual( typeof mod.main, 'function', 'returns expected value' ); + t.end(); +}); + +tape( 'attached to a module instance is an `ndarray` method', function test( t ) { + var mem; + var mod; + + mem = new Memory({ + 'initial': 0 + }); + mod = new Module( mem ); + + t.strictEqual( typeof mod.ndarray, 'function', 'returns expected value' ); + t.end(); +}); diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.module.main.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.module.main.js new file mode 100644 index 000000000000..7c29f954a8cc --- /dev/null +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.module.main.js @@ -0,0 +1,236 @@ +/** +* @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. +*/ + +/* eslint-disable node/no-sync */ + +'use strict'; + +// MODULES // + +var tape = require( 'tape' ); +var Memory = require( '@stdlib/wasm/memory' ); +var Float64Array = require( '@stdlib/array/float64' ); +var Module = require( './../lib' ).Module; + + +// TESTS // + +tape( 'main export is a function', function test( t ) { + t.ok( true, __filename ); + t.strictEqual( typeof Module, 'function', 'main export is a function' ); + t.end(); +}); + +tape( 'a module instance has a `main` method which has an arity of 3', function test( t ) { + var mem; + var mod; + + mem = new Memory({ + 'initial': 0 + }); + mod = new Module( mem ); + t.strictEqual( mod.main.length, 3, 'returns expected value' ); + t.end(); +}); + +tape( 'a module instance has a `main` method calculates the sum of strided array elements (ignoring NaN values)', function test( t ) { + var mem; + var mod; + var xp; + var y; + + mem = new Memory({ + 'initial': 1 + }); + mod = new Module( mem ); + mod.initializeSync(); + + xp = 0; + + mod.write( xp, new Float64Array( [ 1.0, -2.0, -4.0, 5.0, 0.0, NaN, 3.0, 0.0, -3.0, 3.0, NaN ] ) ); // eslint-disable-line max-len + + y = mod.main( 11, xp, 1 ); + t.strictEqual( y, 3.0, 'returns expected value' ); + + t.end(); +}); + +tape( 'if provided an `N` parameter less than or equal to `0`, a module instance has a `main` method which returns `0.0`', function test( t ) { + var mem; + var mod; + var xp; + var y; + + mem = new Memory({ + 'initial': 1 + }); + mod = new Module( mem ); + mod.initializeSync(); + + xp = 0; + + mod.write( xp, new Float64Array( [ 1.0, -2.0, -4.0, 5.0, 3.0 ] ) ); + + y = mod.main( 0, xp, 1 ); + t.strictEqual( y, 0.0, 'returns expected value' ); + + y = mod.main( -1, xp, 1 ); + t.strictEqual( y, 0.0, 'returns expected value' ); + + t.end(); +}); + +tape( 'if provided an `N` parameter equal to `1`, a module instance has a `main` method which returns the first element', function test( t ) { + var mem; + var mod; + var xp; + var y; + + mem = new Memory({ + 'initial': 1 + }); + mod = new Module( mem ); + mod.initializeSync(); + + xp = 0; + + mod.write( xp, new Float64Array( [ 1.0, -2.0, -4.0, 5.0, 3.0 ] ) ); + + y = mod.main( 1, xp, 1 ); + t.strictEqual( y, 1.0, 'returns expected value' ); + + t.end(); +}); + +tape( 'a module instance has a `main` method which supports a `stride` parameter', function test( t ) { + var mem; + var mod; + var xp; + var y; + var N; + + mem = new Memory({ + 'initial': 1 + }); + mod = new Module( mem ); + mod.initializeSync(); + + xp = 0; + + mod.write( xp, new Float64Array([ + 1.0, // 0 + 2.0, + 2.0, // 1 + -7.0, + -2.0, // 2 + 3.0, + 4.0, // 3 + 2.0, + NaN, // 4 + NaN + ])); + N = 5; + + y = mod.main( N, xp, 2 ); + t.strictEqual( y, 5.0, 'returns expected value' ); + + t.end(); +}); + +tape( 'a module instance has a `main` method which supports a negative `stride` parameter', function test( t ) { + var mem; + var mod; + var xp; + var y; + var N; + + mem = new Memory({ + 'initial': 1 + }); + mod = new Module( mem ); + mod.initializeSync(); + + xp = 0; + + mod.write( xp, new Float64Array([ + NaN, // 4 + NaN, + 1.0, // 3 + 2.0, + 2.0, // 2 + -7.0, + -2.0, // 1 + 3.0, + 4.0, // 0 + 2.0 + ])); + N = 5; + + y = mod.main( N, xp, -2 ); + t.strictEqual( y, 5.0, 'returns expected value' ); + + t.end(); +}); + +tape( 'a module instance has a `main` method which returns the sum of the first element repeated N times', function test( t ) { + var mem; + var mod; + var xp; + var y; + var N; + + mem = new Memory({ + 'initial': 1 + }); + mod = new Module( mem ); + mod.initializeSync(); + + xp = 0; + + mod.write( xp, new Float64Array( [ 1.0, -2.0, -4.0, 5.0, 3.0 ] ) ); + N = 5; + + y = mod.main( N, xp, 0 ); + t.strictEqual( y, 5.0, 'returns expected value' ); + + t.end(); +}); + +tape( 'if provided a `stride` parameter equal to `0` and the first element, a module instance has a `main` method which returns 0', function test( t ) { + var mem; + var mod; + var xp; + var y; + var N; + + mem = new Memory({ + 'initial': 1 + }); + mod = new Module( mem ); + mod.initializeSync(); + + xp = 0; + + mod.write( xp, new Float64Array( [ NaN, -2.0, -4.0, 5.0, 3.0 ] )); + N = 5; + + y = mod.main( N, xp, 0 ); + t.strictEqual( y, 0.0, 'returns expected value' ); + + t.end(); +}); diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.module.ndarray.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.module.ndarray.js new file mode 100644 index 000000000000..69a12cf77e05 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.module.ndarray.js @@ -0,0 +1,271 @@ +/** +* @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. +*/ + +/* eslint-disable node/no-sync */ + +'use strict'; + +// MODULES // + +var tape = require( 'tape' ); +var Memory = require( '@stdlib/wasm/memory' ); +var Float64Array = require( '@stdlib/array/float64' ); +var Module = require( './../lib' ).Module; + + +// TESTS // + +tape( 'main export is a function', function test( t ) { + t.ok( true, __filename ); + t.strictEqual( typeof Module, 'function', 'main export is a function' ); + t.end(); +}); + +tape( 'a module instance has an `ndarray` method which has an arity of 4', function test( t ) { + var mem; + var mod; + + mem = new Memory({ + 'initial': 0 + }); + mod = new Module( mem ); + t.strictEqual( mod.ndarray.length, 4, 'returns expected value' ); + t.end(); +}); + +tape( 'a module instance has an `ndarray` method which calculates the sum of strided array elements (ignoring NaN values)', function test( t ) { + var mem; + var mod; + var xp; + var y; + + mem = new Memory({ + 'initial': 1 + }); + mod = new Module( mem ); + mod.initializeSync(); + + xp = 0; + + mod.write( xp, new Float64Array( [ 1.0, -2.0, -4.0, 5.0, NaN, 0.0, 3.0, 0.0, -3.0, 3.0 ] ) ); // eslint-disable-line max-len + + y = mod.ndarray( 10, xp, 1, 0 ); + t.strictEqual( y, 3.0, 'returns expected value' ); + + t.end(); +}); + +tape( 'if provided an `N` parameter less than or equal to `0`, a module instance has an `ndarray` method which returns `0.0`', function test( t ) { + var mem; + var mod; + var xp; + var y; + + mem = new Memory({ + 'initial': 1 + }); + mod = new Module( mem ); + mod.initializeSync(); + + xp = 0; + + mod.write( xp, new Float64Array( [ 1.0, -2.0, -4.0, 5.0, 3.0 ] ) ); + + y = mod.ndarray( 0, xp, 1, 0 ); + t.strictEqual( y, 0.0, 'returns expected value' ); + + y = mod.ndarray( -1, xp, 1, 0 ); + t.strictEqual( y, 0.0, 'returns expected value' ); + + t.end(); +}); + +tape( 'if provided an `N` parameter equal to `1`, a module instance has an `ndarray` method which returns the first indexed element', function test( t ) { + var mem; + var mod; + var xp; + var y; + + mem = new Memory({ + 'initial': 1 + }); + mod = new Module( mem ); + mod.initializeSync(); + + xp = 0; + + mod.write( xp, new Float64Array( [ 1.0, -2.0, -4.0, 5.0, 3.0 ] ) ); + + y = mod.ndarray( 1, xp, 1, 0 ); + t.strictEqual( y, 1.0, 'returns expected value' ); + + t.end(); +}); + +tape( 'a module instance has an `ndarray` method which supports a `stride` parameter', function test( t ) { + var mem; + var mod; + var xp; + var y; + var N; + + mem = new Memory({ + 'initial': 1 + }); + mod = new Module( mem ); + mod.initializeSync(); + + xp = 0; + + mod.write( xp, new Float64Array([ + 1.0, // 0 + 2.0, + 2.0, // 1 + -7.0, + -2.0, // 2 + 3.0, + 4.0, // 3 + 2.0, + NaN, // 4 + NaN + ])); + N = 5; + + y = mod.ndarray( N, xp, 2, 0 ); + t.strictEqual( y, 5.0, 'returns expected value' ); + + t.end(); +}); + +tape( 'a module instance has an `ndarray` method which supports a negative `stride` parameter', function test( t ) { + var mem; + var mod; + var xp; + var y; + var N; + + mem = new Memory({ + 'initial': 1 + }); + mod = new Module( mem ); + mod.initializeSync(); + + xp = 0; + + mod.write( xp, new Float64Array([ + NaN, // 4 + NaN, + 1.0, // 3 + 2.0, + 2.0, // 2 + -7.0, + -2.0, // 1 + 3.0, + 4.0, // 0 + 2.0 + ])); + N = 5; + + y = mod.ndarray( N, xp, -2, 8 ); + t.strictEqual( y, 5.0, 'returns expected value' ); + + t.end(); +}); + +tape( 'if provided a `stride` parameter equal to `0`, a module instance has an `ndarray` method which returns the sum of the first element repeated N times', function test( t ) { + var mem; + var mod; + var xp; + var y; + var N; + + mem = new Memory({ + 'initial': 1 + }); + mod = new Module( mem ); + mod.initializeSync(); + + xp = 0; + + mod.write( xp, new Float64Array( [ 1.0, -2.0, -4.0, 5.0, 3.0 ] ) ); + N = 5; + + y = mod.ndarray( N, xp, 0, 0 ); + t.strictEqual( y, 5.0, 'returns expected value' ); + + t.end(); +}); + +tape( 'if provided a `stride` parameter equal to `0`, a module instance has an `ndarray` method which returns the first element is NaN, the function returns 0', function test( t ) { + var mem; + var mod; + var xp; + var y; + var N; + + mem = new Memory({ + 'initial': 1 + }); + mod = new Module( mem ); + mod.initializeSync(); + + xp = 0; + + mod.write( xp, new Float64Array( [ NaN, -2.0, -4.0, 5.0, 3.0 ] ) ); + N = 5; + + y = mod.ndarray( N, xp, 0, 0 ); + t.strictEqual( y, 0.0, 'returns expected value' ); + + t.end(); +}); + +tape( 'a module instance has an `ndarray` method which supports an `offset` parameter', function test( t ) { + var mem; + var mod; + var xp; + var y; + var N; + + mem = new Memory({ + 'initial': 1 + }); + mod = new Module( mem ); + mod.initializeSync(); + + xp = 0; + + mod.write( xp, new Float64Array([ + 2.0, + 1.0, // 0 + 2.0, + -2.0, // 1 + -2.0, + 2.0, // 2 + 3.0, + 4.0, // 3 + NaN, + NaN // 4 + ])); + N = 5; + + y = mod.ndarray( N, xp, 2, 1 ); + t.strictEqual( y, 5.0, 'returns expected value' ); + + t.end(); +}); diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.ndarray.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.ndarray.js new file mode 100644 index 000000000000..3e48b528d85a --- /dev/null +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.ndarray.js @@ -0,0 +1,202 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2025 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var tape = require( 'tape' ); +var Float64Array = require( '@stdlib/array/float64' ); +var dnansum = require( './../lib' ); + + +// TESTS // + +tape( 'main export is a function', function test( t ) { + t.ok( true, __filename ); + t.strictEqual( typeof dnansum.ndarray, 'function', 'main export is a function' ); + t.end(); +}); + +tape( 'the function has an arity of 4', function test( t ) { + t.strictEqual( dnansum.ndarray.length, 4, 'returns expected value' ); + t.end(); +}); + +tape( 'the function calculates the sum of strided array elements (ignoring NaN values)', function test( t ) { + var x; + var v; + + x = new Float64Array( [ 1.0, -2.0, -4.0, 5.0, NaN, 0.0, 3.0, 0.0, -3.0, 3.0 ] ); // eslint-disable-line max-len + v = dnansum.ndarray( x.length, x, 1, 0 ); + t.strictEqual( v, 3.0, 'returns expected value' ); + + x = new Float64Array( [ 1.0, -2.0, -4.0, NaN, 5.0, 0.0, 3.0 ] ); + v = dnansum.ndarray( x.length, x, 1, 0 ); + t.strictEqual( v, 3.0, 'returns expected value' ); + + x = new Float64Array( [ -4.0, -4.0 ] ); + v = dnansum.ndarray( x.length, x, 1, 0 ); + t.strictEqual( v, -8.0, 'returns expected value' ); + + x = new Float64Array( [ NaN, 4.0 ] ); + v = dnansum.ndarray( x.length, x, 1, 0 ); + t.strictEqual( v, 4.0, 'returns expected value' ); + + x = new Float64Array( [ NaN, NaN ] ); + v = dnansum.ndarray( x.length, x, 1, 0 ); + t.strictEqual( v, 0.0, 'returns expected value' ); + + x = new Float64Array( [ NaN ] ); + v = dnansum.ndarray( x.length, x, 1, 0 ); + t.strictEqual( v, 0.0, 'returns expected value' ); + + x = new Float64Array( [ 4.0 ] ); + v = dnansum.ndarray( x.length, x, 1, 0 ); + t.strictEqual( v, 4.0, 'returns expected value' ); + + x = new Float64Array( [ 1.0, 1.0e100, -1.0, -1.0e100 ] ); + v = dnansum.ndarray( x.length, x, 1, 0 ); + t.strictEqual( v, 0.0, 'returns expected value' ); + + x = new Float64Array( [ NaN, -4.0 ] ); + v = dnansum.ndarray( x.length, x, 0, 0 ); + t.strictEqual( v, 0.0, 'returns expected value' ); + + t.end(); +}); + +tape( 'if provided an `N` parameter less than or equal to `0`, the function returns `0.0`', function test( t ) { + var x; + var v; + + x = new Float64Array( [ 1.0, -2.0, -4.0, 5.0, 3.0 ] ); + + v = dnansum.ndarray( 0, x, 1, 0 ); + t.strictEqual( v, 0.0, 'returns expected value' ); + + v = dnansum.ndarray( -1, x, 1, 0 ); + t.strictEqual( v, 0.0, 'returns expected value' ); + + 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 = new Float64Array( [ 1.0, -2.0, -4.0, 5.0, 3.0 ] ); + + v = dnansum.ndarray( 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 x; + var v; + + x = new Float64Array([ + 1.0, // 0 + 2.0, + 2.0, // 1 + -7.0, + -2.0, // 2 + 3.0, + 4.0, // 3 + 2.0, + NaN, // 4 + NaN + ]); + + v = dnansum.ndarray( 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 x; + var v; + + x = new Float64Array([ + NaN, // 4 + NaN, + 1.0, // 3 + 2.0, + 2.0, // 2 + -7.0, + -2.0, // 1 + 3.0, + 4.0, // 0 + 2.0 + ]); + + v = dnansum.ndarray( 5, x, -2, 8 ); + + t.strictEqual( v, 5.0, 'returns expected value' ); + t.end(); +}); + +tape( 'if provided a `stride` parameter equal to `0`, the function returns the sum of the first element repeated N times', function test( t ) { + var x; + var v; + + x = new Float64Array( [ 1.0, -2.0, -4.0, 5.0, 3.0 ] ); + + v = dnansum.ndarray( x.length, x, 0, 0 ); + t.strictEqual( v, 5.0, 'returns expected value' ); + + t.end(); +}); + +tape( 'if provided a `stride` parameter equal to `0` and the first element is NaN, the function returns 0', function test( t ) { + var x; + var v; + + x = new Float64Array( [ NaN, -2.0, -4.0, 5.0, 3.0 ] ); + + v = dnansum.ndarray( x.length, x, 0, 0 ); + t.strictEqual( v, 0.0, 'returns expected value' ); + + t.end(); +}); + +tape( 'the function supports an `offset` parameter', function test( t ) { + var x; + var v; + + x = new Float64Array([ + 2.0, + 1.0, // 0 + 2.0, + -2.0, // 1 + -2.0, + 2.0, // 2 + 3.0, + 4.0, // 3 + NaN, + NaN // 4 + ]); + + v = dnansum.ndarray( 5, x, 2, 1 ); + t.strictEqual( v, 5.0, 'returns expected value' ); + + t.end(); +}); diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.routine.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.routine.js new file mode 100644 index 000000000000..d90a5804a8e1 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.routine.js @@ -0,0 +1,71 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2025 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var tape = require( 'tape' ); +var ModuleWrapper = require( '@stdlib/wasm/module-wrapper' ); +var Module = require( './../lib/module.js' ); +var Routine = require( './../lib/routine.js' ); + + +// TESTS // + +tape( 'main export is a function', function test( t ) { + t.ok( true, __filename ); + t.strictEqual( typeof Routine, 'function', 'returns expected value' ); + t.end(); +}); + +tape( 'the function is a constructor', function test( t ) { + var mod = new Routine(); + t.strictEqual( mod instanceof Routine, true, 'returns expected value' ); + t.end(); +}); + +tape( 'the function is a constructor which does not require `new`', function test( t ) { + var mod = Routine(); // eslint-disable-line new-cap + t.strictEqual( mod instanceof Routine, true, 'returns expected value' ); + t.end(); +}); + +tape( 'the module instance returned by the constructor inherits from a module wrapper', function test( t ) { + var mod = new Routine(); + t.strictEqual( mod instanceof ModuleWrapper, true, 'returns expected value' ); + t.end(); +}); + +tape( 'the module instance returned by the constructor inherits from a BLAS routine module', function test( t ) { + var mod = new Routine(); + t.strictEqual( mod instanceof Module, true, 'returns expected value' ); + t.end(); +}); + +tape( 'attached to a module instance is a `main` method', function test( t ) { + var mod = new Routine(); + t.strictEqual( typeof mod.main, 'function', 'returns expected value' ); + t.end(); +}); + +tape( 'attached to a module instance is an `ndarray` method', function test( t ) { + var mod = new Routine(); + t.strictEqual( typeof mod.ndarray, 'function', 'returns expected value' ); + t.end(); +}); From b88b642640a0807b2107090ce7c0bf579cc4f5b0 Mon Sep 17 00:00:00 2001 From: JoyBoy <144602492+0PrashantYadav0@users.noreply.github.com> Date: Tue, 11 Mar 2025 13:30:31 +0530 Subject: [PATCH 2/6] chore: added keywords in package --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown status: na - task: lint_package_json status: passed - task: lint_repl_help status: na - task: lint_javascript_src status: na - task: lint_javascript_cli status: na - task: lint_javascript_examples status: na - task: lint_javascript_tests status: na - task: lint_javascript_benchmarks status: na - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: na - task: lint_typescript_tests status: na - task: lint_license_headers status: passed --- --- .../@stdlib/blas/ext/base/wasm/dnansum/package.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/package.json b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/package.json index dad581238a21..177f8f07a45a 100644 --- a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/package.json +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/package.json @@ -65,6 +65,8 @@ "sum", "total", "summation", + "compensated", + "kahan", "strided", "strided array", "typed", From c7511f69a603056232c466464a845a982198d1ff Mon Sep 17 00:00:00 2001 From: JoyBoy <144602492+0PrashantYadav0@users.noreply.github.com> Date: Fri, 14 Mar 2025 10:01:34 +0530 Subject: [PATCH 3/6] chore: changes as per code review --- type: pre_push_report description: Results of running various checks prior to pushing changes. report: - task: run_javascript_examples status: na - task: run_c_examples status: na - task: run_cpp_examples status: na - task: run_javascript_readme_examples status: failed --- --- .../blas/ext/base/wasm/dnansum/README.md | 2 +- .../base/wasm/dnansum/docs/types/index.d.ts | 26 +++++++++---------- .../blas/ext/base/wasm/dnansum/package.json | 2 +- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/README.md b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/README.md index 9064732a1ba9..5f5c49a37dc2 100644 --- a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/README.md +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/README.md @@ -232,7 +232,7 @@ The function has the following additional parameters: ## Notes - If `N <= 0`, both `main` and `ndarray` methods return `0.0`. -- This package implements routines using WebAssembly. When provided arrays which are not allocated on a `dnansum` module memory instance, data must be explicitly copied to module memory prior to computation. Data movement may entail a performance cost, and, thus, if you are using arrays external to module memory, you should prefer using [`@stdlib/blas/base/dnansum`][@stdlib/blas/ext/base/dnansum]. However, if working with arrays which are allocated and explicitly managed on module memory, you can achieve better performance when compared to the pure JavaScript implementations found in [`@stdlib/blas/base/dnansum`][@stdlib/blas/ext/base/dnansum]. Beware that such performance gains may come at the cost of additional complexity when having to perform manual memory management. Choosing between implementations depends heavily on the particular needs and constraints of your application, with no one choice universally better than the other. +- This package implements routines using WebAssembly. When provided arrays which are not allocated on a `dnansum` module memory instance, data must be explicitly copied to module memory prior to computation. Data movement may entail a performance cost, and, thus, if you are using arrays external to module memory, you should prefer using [`@stdlib/blas/ext/base/dnansum`][@stdlib/blas/ext/base/dnansum]. However, if working with arrays which are allocated and explicitly managed on module memory, you can achieve better performance when compared to the pure JavaScript implementations found in [`@stdlib/blas/ext/base/dnansum`][@stdlib/blas/ext/base/dnansum]. Beware that such performance gains may come at the cost of additional complexity when having to perform manual memory management. Choosing between implementations depends heavily on the particular needs and constraints of your application, with no one choice universally better than the other. diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/docs/types/index.d.ts b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/docs/types/index.d.ts index 8d4b8dbbea12..e65d2cc7094b 100644 --- a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/docs/types/index.d.ts +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/docs/types/index.d.ts @@ -43,7 +43,7 @@ interface ModuleConstructor { * }); * * // Create a BLAS routine: - * var mod = new dapxsumkbn.Module( mem ); + * var mod = new dnansum.Module( mem ); * // returns * * // Initialize the routine: @@ -84,7 +84,7 @@ interface ModuleConstructor { * }); * * // Create a BLAS routine: - * var mod = dapxsumkbn.Module( mem ); + * var mod = dnansum.Module( mem ); * // returns * * // Initialize the routine: @@ -110,7 +110,7 @@ interface ModuleConstructor { } /** -* Interface describing a `dapxsumkbn` WebAssembly module. +* Interface describing a `dnansum` WebAssembly module. */ interface Module extends ModuleWrapper { /** @@ -132,7 +132,7 @@ interface Module extends ModuleWrapper { * }); * * // Create a BLAS routine: - * var mod = new dapxsumkbn.Module( mem ); + * var mod = new dnansum.Module( mem ); * // returns * * // Initialize the routine: @@ -176,7 +176,7 @@ interface Module extends ModuleWrapper { * }); * * // Create a BLAS routine: - * var mod = new dapxsumkbn.Module( mem ); + * var mod = new dnansum.Module( mem ); * // returns * * // Initialize the routine: @@ -202,7 +202,7 @@ interface Module extends ModuleWrapper { } /** -* Interface describing `dapxsumkbn`. +* Interface describing `dnansum`. */ interface Routine extends ModuleWrapper { /** @@ -218,7 +218,7 @@ interface Routine extends ModuleWrapper { * * var x = new Float64Array( [ 1.0, -2.0, NaN 2.0 ] ); * - * var out = dapxsumkbn.main( 4, x, 1 ); + * var out = dnansum.main( 4, x, 1 ); * // returns 1.0 */ main( N: number, x: Float64Array, strideX: number ): number; @@ -237,7 +237,7 @@ interface Routine extends ModuleWrapper { * * var x = new Float64Array( [ 2.0, 1.0, NaN, -2.0, -2.0, 2.0, 3.0, 4.0 ] ); * - * var out = dapxsumkbn.ndarray( 4, x, 2, 1 ); + * var out = dnansum.ndarray( 4, x, 2, 1 ); * // returns 5.0 */ ndarray( N: number, x: Float64Array, strideX: number, offsetX: number ): number; @@ -259,7 +259,7 @@ interface Routine extends ModuleWrapper { * }); * * // Create a BLAS routine: - * var mod = new dapxsumkbn.Module( mem ); + * var mod = new dnansum.Module( mem ); * // returns * * // Initialize the routine: @@ -297,7 +297,7 @@ interface Routine extends ModuleWrapper { * * var x = new Float64Array( [ 1.0, -2.0, NaN, 2.0 ] ); * -* var out = dapxsumkbn.main( 4, x, 1 ); +* var out = dnansum.main( 4, x, 1 ); * // returns 1.0 * * @example @@ -305,12 +305,12 @@ interface Routine extends ModuleWrapper { * * var x = new Float64Array( [ 2.0, 1.0, NaN, -2.0, -2.0, 2.0, 3.0, 4.0 ] ); * -* var out = dapxsumkbn.ndarray( 4, x, 2, 1 ); +* var out = dnansum.ndarray( 4, x, 2, 1 ); * // returns 25.0 */ -declare var dapxsumkbn: Routine; +declare var dnansum: Routine; // EXPORTS // -export = dapxsumkbn; +export = dnansum; diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/package.json b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/package.json index 177f8f07a45a..1c20a01ac05f 100644 --- a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/package.json +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/package.json @@ -1,5 +1,5 @@ { - "name": "@stdlib/blas/base/ext/wasm/dnansum", + "name": "@stdlib/blas/ext/base/wasm/dnansum", "version": "0.0.0", "description": "Calculate the sum of double-precision floating-point strided array elements, ignoring NaN values", "license": "Apache-2.0", From 9550e37b3038580b472f7566367756e23367963a Mon Sep 17 00:00:00 2001 From: 0PrashantYadav0 Date: Tue, 4 Aug 2026 14:50:40 +0530 Subject: [PATCH 4/6] fix: update copyright years and improve doc clarity --- .../blas/ext/base/wasm/dnansum/README.md | 12 ++-- .../base/wasm/dnansum/benchmark/benchmark.js | 5 +- .../dnansum/benchmark/benchmark.module.js | 5 +- .../benchmark/benchmark.module.main.js | 7 +- .../benchmark/benchmark.module.ndarray.js | 7 +- .../dnansum/benchmark/benchmark.ndarray.js | 5 +- .../blas/ext/base/wasm/dnansum/docs/repl.txt | 2 +- .../base/wasm/dnansum/docs/types/index.d.ts | 10 +-- .../ext/base/wasm/dnansum/docs/types/test.ts | 2 +- .../ext/base/wasm/dnansum/examples/index.js | 2 +- .../dnansum/examples/little_endian_arrays.js | 4 +- .../ext/base/wasm/dnansum/examples/module.js | 4 +- .../base/wasm/dnansum/lib/binary.browser.js | 2 +- .../blas/ext/base/wasm/dnansum/lib/binary.js | 2 +- .../blas/ext/base/wasm/dnansum/lib/index.js | 9 +-- .../blas/ext/base/wasm/dnansum/lib/main.js | 7 +- .../blas/ext/base/wasm/dnansum/lib/module.js | 4 +- .../blas/ext/base/wasm/dnansum/lib/routine.js | 4 +- .../blas/ext/base/wasm/dnansum/package.json | 5 +- .../ext/base/wasm/dnansum/scripts/build.js | 2 +- .../wasm/dnansum/scripts/postbuild.wat.js | 64 +++++++++++++++++++ .../blas/ext/base/wasm/dnansum/src/Makefile | 3 +- .../blas/ext/base/wasm/dnansum/test/test.js | 2 +- .../ext/base/wasm/dnansum/test/test.main.js | 21 +++++- .../ext/base/wasm/dnansum/test/test.module.js | 2 +- .../wasm/dnansum/test/test.module.main.js | 4 +- .../wasm/dnansum/test/test.module.ndarray.js | 4 +- .../base/wasm/dnansum/test/test.ndarray.js | 2 +- .../base/wasm/dnansum/test/test.routine.js | 2 +- 29 files changed, 144 insertions(+), 60 deletions(-) create mode 100644 lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/scripts/postbuild.wat.js diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/README.md b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/README.md index 5f5c49a37dc2..df1d9d5fbb90 100644 --- a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/README.md +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/README.md @@ -2,7 +2,7 @@ @license Apache-2.0 -Copyright (c) 2025 The Stdlib Authors. +Copyright (c) 2026 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. @@ -76,7 +76,7 @@ var v = dnansum.main( 4, x1, 2 ); #### dnansum.ndarray( N, x, strideX, offsetX ) -Computes the sum of double-precision floating-point strided array elements, ignoring `NaN` values and alternative indexing semantics. +Computes the sum of double-precision floating-point strided array elements, ignoring `NaN` values and using alternative indexing semantics. ```javascript var Float64Array = require( '@stdlib/array/float64' ); @@ -110,7 +110,7 @@ var v = dnansum.ndarray( 4, x, 2, 1 ); Returns a new WebAssembly [module wrapper][@stdlib/wasm/module-wrapper] instance which uses the provided WebAssembly [memory][@stdlib/wasm/memory] instance as its underlying memory. - + ```javascript var Memory = require( '@stdlib/wasm/memory' ); @@ -133,7 +133,7 @@ mod.initializeSync(); Computes the sum of double-precision floating-point strided array elements, ignoring `NaN` values. - + ```javascript var Memory = require( '@stdlib/wasm/memory' ); @@ -178,9 +178,9 @@ The function has the following parameters: #### dnansum.Module.prototype.ndarray( N, xp, sx, ox ) -Computes the sum of double-precision floating-point strided array elements, ignoring `NaN` values and alternative indexing semantics. +Computes the sum of double-precision floating-point strided array elements, ignoring `NaN` values and using alternative indexing semantics. - + ```javascript var Memory = require( '@stdlib/wasm/memory' ); diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/benchmark/benchmark.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/benchmark/benchmark.js index 41a9492dd3f5..c61e50749cc6 100644 --- a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/benchmark/benchmark.js +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/benchmark/benchmark.js @@ -1,7 +1,7 @@ /** * @license Apache-2.0 * -* Copyright (c) 2025 The Stdlib Authors. +* Copyright (c) 2026 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. @@ -25,6 +25,7 @@ var hasWebAssemblySupport = require( '@stdlib/assert/has-wasm-support' ); 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 format = require( '@stdlib/string/format' ); var pkg = require( './../package.json' ).name; var dnansum = require( './../lib' ); @@ -99,7 +100,7 @@ function main() { for ( i = min; i <= max; i++ ) { len = pow( 10, i ); f = createBenchmark( len ); - bench( pkg+':len='+len, opts, f ); + bench( format( '%s:len=%d', pkg, len ), opts, f ); } } diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/benchmark/benchmark.module.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/benchmark/benchmark.module.js index 3ecd1a038bdd..dadf5461b9a3 100644 --- a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/benchmark/benchmark.module.js +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/benchmark/benchmark.module.js @@ -1,7 +1,7 @@ /** * @license Apache-2.0 * -* Copyright (c) 2025 The Stdlib Authors. +* Copyright (c) 2026 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. @@ -23,6 +23,7 @@ var bench = require( '@stdlib/bench' ); var hasWebAssemblySupport = require( '@stdlib/assert/has-wasm-support' ); var Memory = require( '@stdlib/wasm/memory' ); +var format = require( '@stdlib/string/format' ); var pkg = require( './../package.json' ).name; var dnansum = require( './../lib' ); @@ -36,7 +37,7 @@ var opts = { // MAIN // -bench( pkg+':Module:constructor', opts, function benchmark( b ) { +bench( format( '%s:Module:constructor', pkg ), opts, function benchmark( b ) { var values; var o; var v; diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/benchmark/benchmark.module.main.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/benchmark/benchmark.module.main.js index 84bb0c50ba59..5e1b2f3dca8b 100644 --- a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/benchmark/benchmark.module.main.js +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/benchmark/benchmark.module.main.js @@ -1,7 +1,7 @@ /** * @license Apache-2.0 * -* Copyright (c) 2025 The Stdlib Authors. +* Copyright (c) 2026 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. @@ -27,6 +27,7 @@ var bytesPerElement = require( '@stdlib/ndarray/base/bytes-per-element' ); 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 format = require( '@stdlib/string/format' ); var pkg = require( './../package.json' ).name; var dnansum = require( './../lib' ); @@ -74,7 +75,7 @@ function createBenchmark( len ) { mod = new dnansum.Module( mem ); // Initialize the module: - mod.initializeSync(); // eslint-disable-line node/no-sync + mod.initializeSync(); // eslint-disable-line n/no-sync // Reallocate the underlying memory to allow storing a vector: nb = bytesPerElement( options.dtype ); @@ -123,7 +124,7 @@ function main() { for ( i = min; i <= max; i++ ) { len = pow( 10, i ); f = createBenchmark( len ); - bench( pkg+'::module,pointers:len='+len, opts, f ); + bench( format( '%s::module,pointers:len=%d', pkg, len ), opts, f ); } } diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/benchmark/benchmark.module.ndarray.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/benchmark/benchmark.module.ndarray.js index e8bafcb7c1e0..5d62982f0014 100644 --- a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/benchmark/benchmark.module.ndarray.js +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/benchmark/benchmark.module.ndarray.js @@ -1,7 +1,7 @@ /** * @license Apache-2.0 * -* Copyright (c) 2025 The Stdlib Authors. +* Copyright (c) 2026 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. @@ -27,6 +27,7 @@ var bytesPerElement = require( '@stdlib/ndarray/base/bytes-per-element' ); 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 format = require( '@stdlib/string/format' ); var pkg = require( './../package.json' ).name; var dnansum = require( './../lib' ); @@ -74,7 +75,7 @@ function createBenchmark( len ) { mod = new dnansum.Module( mem ); // Initialize the module: - mod.initializeSync(); // eslint-disable-line node/no-sync + mod.initializeSync(); // eslint-disable-line n/no-sync // Reallocate the underlying memory to allow storing a vector: nb = bytesPerElement( options.dtype ); @@ -123,7 +124,7 @@ function main() { for ( i = min; i <= max; i++ ) { len = pow( 10, i ); f = createBenchmark( len ); - bench( pkg+'::module,pointers:ndarray:len='+len, opts, f ); + bench( format( '%s::module,pointers:ndarray:len=%d', pkg, len ), opts, f ); } } diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/benchmark/benchmark.ndarray.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/benchmark/benchmark.ndarray.js index 7f767facafca..fd5a4da9eecd 100644 --- a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/benchmark/benchmark.ndarray.js +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/benchmark/benchmark.ndarray.js @@ -1,7 +1,7 @@ /** * @license Apache-2.0 * -* Copyright (c) 2025 The Stdlib Authors. +* Copyright (c) 2026 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. @@ -25,6 +25,7 @@ var hasWebAssemblySupport = require( '@stdlib/assert/has-wasm-support' ); 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 format = require( '@stdlib/string/format' ); var pkg = require( './../package.json' ).name; var dnansum = require( './../lib' ); @@ -99,7 +100,7 @@ function main() { for ( i = min; i <= max; i++ ) { len = pow( 10, i ); f = createBenchmark( len ); - bench( pkg+':ndarray:len='+len, opts, f ); + bench( format( '%s:ndarray:len=%d', pkg, len ), opts, f ); } } diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/docs/repl.txt b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/docs/repl.txt index 342cd8f8cbe8..8d7f3d4c1922 100644 --- a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/docs/repl.txt +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/docs/repl.txt @@ -165,7 +165,7 @@ {{alias}}.Module.prototype.view - Read-only property which returns a WebAsssembly memory buffer as a DataView. + Read-only property which returns a WebAssembly memory buffer as a DataView. Returns ------- diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/docs/types/index.d.ts b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/docs/types/index.d.ts index e65d2cc7094b..abadde996f5c 100644 --- a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/docs/types/index.d.ts +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/docs/types/index.d.ts @@ -1,7 +1,7 @@ /* * @license Apache-2.0 * -* Copyright (c) 2025 The Stdlib Authors. +* Copyright (c) 2026 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. @@ -157,7 +157,7 @@ interface Module extends ModuleWrapper { main( N: number, xptr: number, strideX: number ): number; /** - * Computes the sum of double-precision floating-point strided array elements, ignoring `NaN` values and alternative indexing semantics. + * Computes the sum of double-precision floating-point strided array elements, ignoring `NaN` values and using alternative indexing semantics. * * @param N - number of indexed elements * @param xptr - input array pointer (i.e., byte offset) @@ -216,7 +216,7 @@ interface Routine extends ModuleWrapper { * @example * var Float64Array = require( '@stdlib/array/float64' ); * - * var x = new Float64Array( [ 1.0, -2.0, NaN 2.0 ] ); + * var x = new Float64Array( [ 1.0, -2.0, NaN, 2.0 ] ); * * var out = dnansum.main( 4, x, 1 ); * // returns 1.0 @@ -224,7 +224,7 @@ interface Routine extends ModuleWrapper { main( N: number, x: Float64Array, strideX: number ): number; /** - * Computes the sum of double-precision floating-point strided array elements, ignoring `NaN` values and alternative indexing semantics. + * Computes the sum of double-precision floating-point strided array elements, ignoring `NaN` values and using alternative indexing semantics. * * @param N - number of indexed elements * @param x - input array @@ -306,7 +306,7 @@ interface Routine extends ModuleWrapper { * var x = new Float64Array( [ 2.0, 1.0, NaN, -2.0, -2.0, 2.0, 3.0, 4.0 ] ); * * var out = dnansum.ndarray( 4, x, 2, 1 ); -* // returns 25.0 +* // returns 5.0 */ declare var dnansum: Routine; diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/docs/types/test.ts b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/docs/types/test.ts index 60c976b98ae5..994a3fbd20e2 100644 --- a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/docs/types/test.ts +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/docs/types/test.ts @@ -1,7 +1,7 @@ /* * @license Apache-2.0 * -* Copyright (c) 2025 The Stdlib Authors. +* Copyright (c) 2026 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. diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/examples/index.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/examples/index.js index 56122c11a813..ff6d33f23a6d 100644 --- a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/examples/index.js +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/examples/index.js @@ -1,7 +1,7 @@ /** * @license Apache-2.0 * -* Copyright (c) 2025 The Stdlib Authors. +* Copyright (c) 2026 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. diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/examples/little_endian_arrays.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/examples/little_endian_arrays.js index 25a62dd0fe2b..42e94ac49222 100644 --- a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/examples/little_endian_arrays.js +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/examples/little_endian_arrays.js @@ -1,7 +1,7 @@ /** * @license Apache-2.0 * -* Copyright (c) 2025 The Stdlib Authors. +* Copyright (c) 2026 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. @@ -41,7 +41,7 @@ function main() { // returns // Initialize the routine: - mod.initializeSync(); // eslint-disable-line node/no-sync + mod.initializeSync(); // eslint-disable-line n/no-sync // Specify a vector length: var N = 3; diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/examples/module.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/examples/module.js index 7fdbbaab60a5..e285e35d17bd 100644 --- a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/examples/module.js +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/examples/module.js @@ -1,7 +1,7 @@ /** * @license Apache-2.0 * -* Copyright (c) 2025 The Stdlib Authors. +* Copyright (c) 2026 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. @@ -39,7 +39,7 @@ function main() { // returns // Initialize the routine: - mod.initializeSync(); // eslint-disable-line node/no-sync + mod.initializeSync(); // eslint-disable-line n/no-sync // Define a vector data type: var dtype = 'float64'; diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/binary.browser.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/binary.browser.js index e1f09857be69..4879b926deee 100644 --- a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/binary.browser.js +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/binary.browser.js @@ -1,7 +1,7 @@ /** * @license Apache-2.0 * -* Copyright (c) 2025 The Stdlib Authors. +* Copyright (c) 2026 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. diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/binary.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/binary.js index 2b83fe651780..b2cc0a347ff9 100644 --- a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/binary.js +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/binary.js @@ -1,7 +1,7 @@ /** * @license Apache-2.0 * -* Copyright (c) 2025 The Stdlib Authors. +* Copyright (c) 2026 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. diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/index.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/index.js index b4072115446d..3c57d223e713 100644 --- a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/index.js +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/index.js @@ -1,7 +1,7 @@ /** * @license Apache-2.0 * -* Copyright (c) 2025 The Stdlib Authors. +* Copyright (c) 2026 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. @@ -83,14 +83,7 @@ // MODULES // -var setReadOnly = require( '@stdlib/utils/define-nonenumerable-read-only-property' ); var main = require( './main.js' ); -var Module = require( './module.js' ); - - -// MAIN // - -setReadOnly( main, 'Module', Module ); // EXPORTS // diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/main.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/main.js index e920ad2add9b..7c9179a24f5b 100644 --- a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/main.js +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/main.js @@ -1,7 +1,7 @@ /** * @license Apache-2.0 * -* Copyright (c) 2025 The Stdlib Authors. +* Copyright (c) 2026 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,7 +20,9 @@ // MODULES // +var setReadOnly = require( '@stdlib/utils/define-nonenumerable-read-only-property' ); var Routine = require( './routine.js' ); +var Module = require( './module.js' ); // MAIN // @@ -52,7 +54,8 @@ var Routine = require( './routine.js' ); * // returns 5.0 */ var dnansum = new Routine(); -dnansum.initializeSync(); // eslint-disable-line node/no-sync +dnansum.initializeSync(); // eslint-disable-line n/no-sync +setReadOnly( dnansum, 'Module', Module.bind( null ) ); // EXPORTS // diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/module.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/module.js index 6f10718b6084..1f6f92449a95 100644 --- a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/module.js +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/module.js @@ -1,7 +1,7 @@ /** * @license Apache-2.0 * -* Copyright (c) 2025 The Stdlib Authors. +* Copyright (c) 2026 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. @@ -143,7 +143,7 @@ setReadOnly( Module.prototype, 'main', function dnansum( N, xptr, strideX ) { }); /** -* Computes the sum of double-precision floating-point strided array elements, ignoring `NaN` values and alternative indexing semantics. +* Computes the sum of double-precision floating-point strided array elements, ignoring `NaN` values and using alternative indexing semantics. * * @name ndarray * @memberof Module.prototype diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/routine.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/routine.js index e487bb09c5ae..2c6b8b26791e 100644 --- a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/routine.js +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/routine.js @@ -1,7 +1,7 @@ /** * @license Apache-2.0 * -* Copyright (c) 2025 The Stdlib Authors. +* Copyright (c) 2026 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. @@ -118,7 +118,7 @@ setReadOnly( Routine.prototype, 'main', function dnansum( N, x, strideX ) { }); /** -* Computes the sum of double-precision floating-point strided array elements, ignoring `NaN` values and alternative indexing semantics. +* Computes the sum of double-precision floating-point strided array elements, ignoring `NaN` values and using alternative indexing semantics. * * @name ndarray * @memberof Routine.prototype diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/package.json b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/package.json index 1c20a01ac05f..67f7335dec38 100644 --- a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/package.json +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/package.json @@ -1,7 +1,7 @@ { "name": "@stdlib/blas/ext/base/wasm/dnansum", "version": "0.0.0", - "description": "Calculate the sum of double-precision floating-point strided array elements, ignoring NaN values", + "description": "Calculate the sum of double-precision floating-point strided array elements, ignoring NaN values.", "license": "Apache-2.0", "author": { "name": "The Stdlib Authors", @@ -65,8 +65,7 @@ "sum", "total", "summation", - "compensated", - "kahan", + "pw", "strided", "strided array", "typed", diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/scripts/build.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/scripts/build.js index 66bf9650b6d6..0e05b3ad6a39 100644 --- a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/scripts/build.js +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/scripts/build.js @@ -3,7 +3,7 @@ /** * @license Apache-2.0 * -* Copyright (c) 2025 The Stdlib Authors. +* Copyright (c) 2026 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. diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/scripts/postbuild.wat.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/scripts/postbuild.wat.js new file mode 100644 index 000000000000..0d8edabe98d0 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/scripts/postbuild.wat.js @@ -0,0 +1,64 @@ +#!/usr/bin/env node + +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 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 resolve = require( 'path' ).resolve; +var licenseHeader = require( '@stdlib/_tools/licenses/header' ); +var insertHeader = require( '@stdlib/_tools/licenses/insert-header-file-list' ).sync; +var currentYear = require( '@stdlib/time/current-year' ); + + +// VARIABLES // + +var wpath = resolve( __dirname, '..', 'src', 'main.wat' ); + + +// MAIN // + +/** +* Main execution sequence. +* +* @private +* @throws {Error} unexpected error +*/ +function main() { + var headers; + var files; + var err; + + files = [ + wpath + ]; + headers = { + 'wat': licenseHeader( 'Apache-2.0', 'wat', { + 'year': currentYear(), + 'copyright': 'The Stdlib Authors' + }) + }; + err = insertHeader( files, headers ); + if ( err ) { + throw err; + } +} + +main(); diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/src/Makefile b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/src/Makefile index 1b1f35347760..fcc028115b77 100644 --- a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/src/Makefile +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/src/Makefile @@ -1,7 +1,7 @@ #/ # @license Apache-2.0 # -# Copyright (c) 2025 The Stdlib Authors. +# Copyright (c) 2026 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. @@ -202,6 +202,7 @@ $(wasm_targets): #/ $(wat_targets): %.wat: %.wasm $(QUIET) $(WASM_TO_WAT) -o $@ $(wasm_targets) + $(QUIET) $(NODEJS) ./../scripts/postbuild.wat.js #/ # Compiles WebAssembly binary files to JavaScript. diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.js index 1d4b6f4b33f9..6d9e77d1e013 100644 --- a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.js +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.js @@ -1,7 +1,7 @@ /** * @license Apache-2.0 * -* Copyright (c) 2025 The Stdlib Authors. +* Copyright (c) 2026 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. diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.main.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.main.js index 8da21da4b8da..6d2d2353e9bd 100644 --- a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.main.js +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.main.js @@ -1,7 +1,7 @@ /** * @license Apache-2.0 * -* Copyright (c) 2025 The Stdlib Authors. +* Copyright (c) 2026 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. @@ -41,6 +41,7 @@ tape( 'the function has an arity of 3', function test( t ) { tape( 'the function calculates the sum of strided array elements (ignoring NaN values)', function test( t ) { var x; var v; + var i; x = new Float64Array( [ 1.0, -2.0, -4.0, 5.0, 0.0, NaN, 3.0, 0.0, -3.0, 3.0, NaN ] ); // eslint-disable-line max-len v = dnansum.main( x.length, x, 1 ); @@ -74,6 +75,24 @@ tape( 'the function calculates the sum of strided array elements (ignoring NaN v v = dnansum.main( x.length, x, 1 ); t.strictEqual( v, 2.0, 'returns expected value' ); + x = new Float64Array( 1e3 ); + for ( i = 0; i < 1e3; i++ ) { + x[ i ] = i + 1; + } + v = dnansum.main( x.length, x, 1 ); + t.strictEqual( v, 500500.0, 'returns expected value' ); + + x = new Float64Array( [ NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN ] ); // eslint-disable-line max-len + v = dnansum.main( x.length, x, 1 ); + t.strictEqual( v, 0.0, 'returns expected value' ); + + x = new Float64Array( 1e3 ); + for ( i = 0; i < 1e3; i++ ) { + x[ i ] = NaN; + } + v = dnansum.main( x.length, x, 1 ); + t.strictEqual( v, 0.0, 'returns expected value' ); + t.end(); }); diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.module.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.module.js index 0cdcd97ef151..b03f8cd3d8d0 100644 --- a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.module.js +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.module.js @@ -1,7 +1,7 @@ /** * @license Apache-2.0 * -* Copyright (c) 2025 The Stdlib Authors. +* Copyright (c) 2026 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. diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.module.main.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.module.main.js index 7c29f954a8cc..a44b610c073d 100644 --- a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.module.main.js +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.module.main.js @@ -1,7 +1,7 @@ /** * @license Apache-2.0 * -* Copyright (c) 2025 The Stdlib Authors. +* Copyright (c) 2026 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. @@ -16,7 +16,7 @@ * limitations under the License. */ -/* eslint-disable node/no-sync */ +/* eslint-disable n/no-sync */ 'use strict'; diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.module.ndarray.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.module.ndarray.js index 69a12cf77e05..8eb08dc2af6d 100644 --- a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.module.ndarray.js +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.module.ndarray.js @@ -1,7 +1,7 @@ /** * @license Apache-2.0 * -* Copyright (c) 2025 The Stdlib Authors. +* Copyright (c) 2026 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. @@ -16,7 +16,7 @@ * limitations under the License. */ -/* eslint-disable node/no-sync */ +/* eslint-disable n/no-sync */ 'use strict'; diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.ndarray.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.ndarray.js index 3e48b528d85a..d73b5464cac8 100644 --- a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.ndarray.js +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.ndarray.js @@ -1,7 +1,7 @@ /** * @license Apache-2.0 * -* Copyright (c) 2025 The Stdlib Authors. +* Copyright (c) 2026 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. diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.routine.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.routine.js index d90a5804a8e1..957b387076ca 100644 --- a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.routine.js +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.routine.js @@ -1,7 +1,7 @@ /** * @license Apache-2.0 * -* Copyright (c) 2025 The Stdlib Authors. +* Copyright (c) 2026 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. From fa3ff7502714d92c620fcc20e7e58fe3dd26d6e7 Mon Sep 17 00:00:00 2001 From: 0PrashantYadav0 Date: Tue, 4 Aug 2026 14:56:11 +0530 Subject: [PATCH 5/6] chore: update wasm binaries --- .../base/wasm/dnansum/lib/binary.browser.js | 2 +- .../blas/ext/base/wasm/dnansum/src/main.wasm | Bin 349 -> 533 bytes .../blas/ext/base/wasm/dnansum/src/main.wat | 233 +++++++++++++----- 3 files changed, 168 insertions(+), 67 deletions(-) diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/binary.browser.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/binary.browser.js index 4879b926deee..47c8ed06ca0f 100644 --- a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/binary.browser.js +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/lib/binary.browser.js @@ -25,7 +25,7 @@ var base64ToUint8Array = require( '@stdlib/string/base/base64-to-uint8array' ); // MAIN // -var wasm = base64ToUint8Array( 'AGFzbQEAAAAADwhkeWxpbmsuMAEEAAAAAAETA2AEf39/fwF8YAAAYAN/f38BfAIPAQNlbnYGbWVtb3J5AgAAAwUEAQIAAAdPAxFfX3dhc21fY2FsbF9jdG9ycwAAFnN0ZGxpYl9zdHJpZGVkX2RuYW5zdW0AAR5zdGRsaWJfc3RyaWRlZF9kbmFuc3VtX25kYXJyYXkAAwrDAQQDAAELGgAgACABIAJBASAAayACbEEAIAJBAEwbEAILlAECBHwBfwJAIABBAEwNAAJAIAIEQANAIAAgCEYNAiABIANBA3RqKwMAIgUgBWEEQCAHIAUgBCAEIAWgIgahoCAEIAUgBqGgIASZIAWZZhugIQcgBiEECyAIQQFqIQggAiADaiEDDAALAAsgASADQQN0aisDACIGIAZiDQEgBiAAuKIPCyAEIAegDwtEAAAAAAAAAAALDAAgACABIAIgAxACCw==' ); +var wasm = base64ToUint8Array( 'AGFzbQEAAAAADwhkeWxpbmsuMAEEAAAAAAETA2AEf39/fwF8YAAAYAN/f38BfAIPAQNlbnYGbWVtb3J5AgAAAwUEAQIAAAdPAxFfX3dhc21fY2FsbF9jdG9ycwAAFnN0ZGxpYl9zdHJpZGVkX2RuYW5zdW0AAR5zdGRsaWJfc3RyaWRlZF9kbmFuc3VtX25kYXJyYXkAAwr7AgQDAAELGgAgACABIAJBASAAayACbEEAIAJBAEwbEAILzAICBHwDfwJAIABBAEwNAAJAAkAgAgRAA0AgACAIRg0EIAhBAWohCCADQQN0IQogAiADaiIJIQMgASAKaisDACIEIARiDQALIAREAAAAAAAAAABhDQEgCCEDQQEhCgwCCyABIANBA3RqKwMAIgQgBGINAiAEIAC4og8LIAAgCCAAIAhKGyEDA0AgACAITARAQQAhCgwCCyABIAlBA3RqKwMAIgUgBWEEQCAFRAAAAAAAAAAAYgRAQQEhCiAIIQMMAwsgBCAFoCEECyAIQQFqIQggAiAJaiEJDAALAAsgAyAAIAAgA0gbIQADQCAAIANGRQRAIAEgCUEDdGorAwAiBiAGYQRAIAcgBiAEIAQgBqAiBaGgIAQgBiAFoaAgBJkgBplmG6AhByAFIQQLIANBAWohAyACIAlqIQkMAQsLIAQgB6AgBCAKGyEFCyAFCwwAIAAgASACIAMQAgs=' ); // EXPORTS // diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/src/main.wasm b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/src/main.wasm index 83a8c0b357097d9d3636cba4d1ea324b6cc1cca3..d61df0275db02b7e65dd8307c542dcf98d71b6b4 100755 GIT binary patch delta 362 zcmYL_Jx;_h5QXiTasHeL`ZRCSa*0HO6+(Ljirs?3H6>E600k0D6*vWl;0m0ChVili z7xrlM-uq_!MbGm1Lf`cCiusdB9(bk^ZgShs(P$;f$ksr$=>*l}lUCq~@3jGe(@-nJ zqe&O+27&B57a^DKbatIbr963UT8bvj)_*NQ;6C2ZVg}6ly6KgFd0QDLx7zB}77%ta zBK#5dCbRTRY1z;Si%MK4CDcjl)}uKW6i!D3KTiKL}59CVj05Q ok_#N)1B%04zi5e&5w=ybV=Vw-tBf73a|AC9{)M*si- delta 177 zcmYjLyA8rX6npR8Cy`#F(9`%LI+jQzM8y(NP^6|r$_haOiBKI(LC+lQ!Ua)a7q$yq zzSy@6S9$U2hW^ZAkK9WGYH3qaGGZH(BJy=9V3^h%x}~Ao!EJ4W3=THY#oFKFWboAy xZrsmf$l!xj Date: Tue, 4 Aug 2026 16:16:35 +0530 Subject: [PATCH 6/6] fix: correct tape description --- .../ext/base/wasm/dnansum/test/test.main.js | 92 +++++++++---------- .../base/wasm/dnansum/test/test.ndarray.js | 84 ++++++++--------- 2 files changed, 88 insertions(+), 88 deletions(-) diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.main.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.main.js index 6d2d2353e9bd..5525e1df1024 100644 --- a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.main.js +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.main.js @@ -39,93 +39,93 @@ tape( 'the function has an arity of 3', function test( t ) { }); tape( 'the function calculates the sum of strided array elements (ignoring NaN values)', function test( t ) { + var sum; var x; - var v; var i; x = new Float64Array( [ 1.0, -2.0, -4.0, 5.0, 0.0, NaN, 3.0, 0.0, -3.0, 3.0, NaN ] ); // eslint-disable-line max-len - v = dnansum.main( x.length, x, 1 ); - t.strictEqual( v, 3.0, 'returns expected value' ); + sum = dnansum.main( x.length, x, 1 ); + t.strictEqual( sum, 3.0, 'returns expected value' ); x = new Float64Array( [ 1.0, -2.0, -4.0, NaN, 5.0, 0.0, 3.0, NaN ] ); - v = dnansum.main( x.length, x, 1 ); - t.strictEqual( v, 3.0, 'returns expected value' ); + sum = dnansum.main( x.length, x, 1 ); + t.strictEqual( sum, 3.0, 'returns expected value' ); x = new Float64Array( [ -4.0, NaN, -4.0 ] ); - v = dnansum.main( x.length, x, 1 ); - t.strictEqual( v, -8.0, 'returns expected value' ); + sum = dnansum.main( x.length, x, 1 ); + t.strictEqual( sum, -8.0, 'returns expected value' ); x = new Float64Array( [ NaN, 4.0 ] ); - v = dnansum.main( x.length, x, 1 ); - t.strictEqual( v, 4.0, 'returns expected value' ); + sum = dnansum.main( x.length, x, 1 ); + t.strictEqual( sum, 4.0, 'returns expected value' ); x = new Float64Array( [ NaN, NaN ] ); - v = dnansum.main( x.length, x, 1 ); - t.strictEqual( v, 0.0, 'returns expected value' ); + sum = dnansum.main( x.length, x, 1 ); + t.strictEqual( sum, 0.0, 'returns expected value' ); x = new Float64Array( [ NaN ] ); - v = dnansum.main( x.length, x, 1 ); - t.strictEqual( v, 0.0, 'returns expected value' ); + sum = dnansum.main( x.length, x, 1 ); + t.strictEqual( sum, 0.0, 'returns expected value' ); x = new Float64Array( [ 4.0 ] ); - v = dnansum.main( x.length, x, 1 ); - t.strictEqual( v, 4.0, 'returns expected value' ); + sum = dnansum.main( x.length, x, 1 ); + t.strictEqual( sum, 4.0, 'returns expected value' ); x = new Float64Array( [ 1.0, 1.0e100, 1.0, -1.0e100 ] ); - v = dnansum.main( x.length, x, 1 ); - t.strictEqual( v, 2.0, 'returns expected value' ); + sum = dnansum.main( x.length, x, 1 ); + t.strictEqual( sum, 2.0, 'returns expected value' ); x = new Float64Array( 1e3 ); for ( i = 0; i < 1e3; i++ ) { x[ i ] = i + 1; } - v = dnansum.main( x.length, x, 1 ); - t.strictEqual( v, 500500.0, 'returns expected value' ); + sum = dnansum.main( x.length, x, 1 ); + t.strictEqual( sum, 500500.0, 'returns expected value' ); x = new Float64Array( [ NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN ] ); // eslint-disable-line max-len - v = dnansum.main( x.length, x, 1 ); - t.strictEqual( v, 0.0, 'returns expected value' ); + sum = dnansum.main( x.length, x, 1 ); + t.strictEqual( sum, 0.0, 'returns expected value' ); x = new Float64Array( 1e3 ); for ( i = 0; i < 1e3; i++ ) { x[ i ] = NaN; } - v = dnansum.main( x.length, x, 1 ); - t.strictEqual( v, 0.0, 'returns expected value' ); + sum = dnansum.main( x.length, x, 1 ); + t.strictEqual( sum, 0.0, 'returns expected value' ); t.end(); }); tape( 'if provided an `N` parameter less than or equal to `0`, the function returns `0.0`', function test( t ) { + var sum; var x; - var v; x = new Float64Array( [ 1.0, -2.0, -4.0, 5.0, 3.0 ] ); - v = dnansum.main( 0, x, 1 ); - t.strictEqual( v, 0.0, 'returns expected value' ); + sum = dnansum.main( 0, x, 1 ); + t.strictEqual( sum, 0.0, 'returns expected value' ); - v = dnansum.main( -1, x, 1 ); - t.strictEqual( v, 0.0, 'returns expected value' ); + sum = dnansum.main( -1, x, 1 ); + t.strictEqual( sum, 0.0, 'returns expected value' ); t.end(); }); tape( 'if provided an `N` parameter equal to `1`, the function returns the first element', function test( t ) { + var sum; var x; - var v; x = new Float64Array( [ 1.0, -2.0, -4.0, 5.0, 3.0 ] ); - v = dnansum.main( 1, x, 1 ); - t.strictEqual( v, 1.0, 'returns expected value' ); + sum = dnansum.main( 1, x, 1 ); + t.strictEqual( sum, 1.0, 'returns expected value' ); t.end(); }); tape( 'the function supports a `stride` parameter', function test( t ) { + var sum; var x; - var v; x = new Float64Array([ 1.0, // 0 @@ -140,15 +140,15 @@ tape( 'the function supports a `stride` parameter', function test( t ) { NaN ]); - v = dnansum.main( 5, x, 2 ); + sum = dnansum.main( 5, x, 2 ); - t.strictEqual( v, 5.0, 'returns expected value' ); + t.strictEqual( sum, 5.0, 'returns expected value' ); t.end(); }); tape( 'the function supports a negative `stride` parameter', function test( t ) { + var sum; var x; - var v; x = new Float64Array([ NaN, // 4 @@ -163,40 +163,40 @@ tape( 'the function supports a negative `stride` parameter', function test( t ) 2.0 ]); - v = dnansum.main( 5, x, -2 ); + sum = dnansum.main( 5, x, -2 ); - t.strictEqual( v, 5.0, 'returns expected value' ); + t.strictEqual( sum, 5.0, 'returns expected value' ); t.end(); }); tape( 'if provided a `stride` parameter equal to `0`, the function returns the sum of the first element repeated N times', function test( t ) { + var sum; var x; - var v; x = new Float64Array( [ 1.0, -2.0, -4.0, 5.0, 3.0 ] ); - v = dnansum.main( x.length, x, 0 ); - t.strictEqual( v, 5.0, 'returns expected value' ); + sum = dnansum.main( x.length, x, 0 ); + t.strictEqual( sum, 5.0, 'returns expected value' ); t.end(); }); tape( 'if provided a `stride` parameter equal to `0` and the first element is NaN, the function returns 0', function test( t ) { + var sum; var x; - var v; x = new Float64Array( [ NaN, -2.0, -4.0, 5.0, 3.0 ] ); - v = dnansum.main( x.length, x, 0 ); - t.strictEqual( v, 0.0, 'returns expected value' ); + sum = dnansum.main( x.length, x, 0 ); + t.strictEqual( sum, 0.0, 'returns expected value' ); t.end(); }); tape( 'the function supports view offsets', function test( t ) { + var sum; var x0; var x1; - var v; x0 = new Float64Array([ 2.0, @@ -214,8 +214,8 @@ tape( 'the function supports view offsets', function test( t ) { x1 = new Float64Array( x0.buffer, x0.BYTES_PER_ELEMENT*1 ); // start at 2nd element - v = dnansum.main( 5, x1, 2 ); - t.strictEqual( v, 5.0, 'returns expected value' ); + sum = dnansum.main( 5, x1, 2 ); + t.strictEqual( sum, 5.0, 'returns expected value' ); t.end(); }); diff --git a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.ndarray.js b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.ndarray.js index d73b5464cac8..4bc27d569312 100644 --- a/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.ndarray.js +++ b/lib/node_modules/@stdlib/blas/ext/base/wasm/dnansum/test/test.ndarray.js @@ -39,78 +39,78 @@ tape( 'the function has an arity of 4', function test( t ) { }); tape( 'the function calculates the sum of strided array elements (ignoring NaN values)', function test( t ) { + var sum; var x; - var v; x = new Float64Array( [ 1.0, -2.0, -4.0, 5.0, NaN, 0.0, 3.0, 0.0, -3.0, 3.0 ] ); // eslint-disable-line max-len - v = dnansum.ndarray( x.length, x, 1, 0 ); - t.strictEqual( v, 3.0, 'returns expected value' ); + sum = dnansum.ndarray( x.length, x, 1, 0 ); + t.strictEqual( sum, 3.0, 'returns expected value' ); x = new Float64Array( [ 1.0, -2.0, -4.0, NaN, 5.0, 0.0, 3.0 ] ); - v = dnansum.ndarray( x.length, x, 1, 0 ); - t.strictEqual( v, 3.0, 'returns expected value' ); + sum = dnansum.ndarray( x.length, x, 1, 0 ); + t.strictEqual( sum, 3.0, 'returns expected value' ); x = new Float64Array( [ -4.0, -4.0 ] ); - v = dnansum.ndarray( x.length, x, 1, 0 ); - t.strictEqual( v, -8.0, 'returns expected value' ); + sum = dnansum.ndarray( x.length, x, 1, 0 ); + t.strictEqual( sum, -8.0, 'returns expected value' ); x = new Float64Array( [ NaN, 4.0 ] ); - v = dnansum.ndarray( x.length, x, 1, 0 ); - t.strictEqual( v, 4.0, 'returns expected value' ); + sum = dnansum.ndarray( x.length, x, 1, 0 ); + t.strictEqual( sum, 4.0, 'returns expected value' ); x = new Float64Array( [ NaN, NaN ] ); - v = dnansum.ndarray( x.length, x, 1, 0 ); - t.strictEqual( v, 0.0, 'returns expected value' ); + sum = dnansum.ndarray( x.length, x, 1, 0 ); + t.strictEqual( sum, 0.0, 'returns expected value' ); x = new Float64Array( [ NaN ] ); - v = dnansum.ndarray( x.length, x, 1, 0 ); - t.strictEqual( v, 0.0, 'returns expected value' ); + sum = dnansum.ndarray( x.length, x, 1, 0 ); + t.strictEqual( sum, 0.0, 'returns expected value' ); x = new Float64Array( [ 4.0 ] ); - v = dnansum.ndarray( x.length, x, 1, 0 ); - t.strictEqual( v, 4.0, 'returns expected value' ); + sum = dnansum.ndarray( x.length, x, 1, 0 ); + t.strictEqual( sum, 4.0, 'returns expected value' ); x = new Float64Array( [ 1.0, 1.0e100, -1.0, -1.0e100 ] ); - v = dnansum.ndarray( x.length, x, 1, 0 ); - t.strictEqual( v, 0.0, 'returns expected value' ); + sum = dnansum.ndarray( x.length, x, 1, 0 ); + t.strictEqual( sum, 0.0, 'returns expected value' ); x = new Float64Array( [ NaN, -4.0 ] ); - v = dnansum.ndarray( x.length, x, 0, 0 ); - t.strictEqual( v, 0.0, 'returns expected value' ); + sum = dnansum.ndarray( x.length, x, 0, 0 ); + t.strictEqual( sum, 0.0, 'returns expected value' ); t.end(); }); tape( 'if provided an `N` parameter less than or equal to `0`, the function returns `0.0`', function test( t ) { + var sum; var x; - var v; x = new Float64Array( [ 1.0, -2.0, -4.0, 5.0, 3.0 ] ); - v = dnansum.ndarray( 0, x, 1, 0 ); - t.strictEqual( v, 0.0, 'returns expected value' ); + sum = dnansum.ndarray( 0, x, 1, 0 ); + t.strictEqual( sum, 0.0, 'returns expected value' ); - v = dnansum.ndarray( -1, x, 1, 0 ); - t.strictEqual( v, 0.0, 'returns expected value' ); + sum = dnansum.ndarray( -1, x, 1, 0 ); + t.strictEqual( sum, 0.0, 'returns expected value' ); t.end(); }); tape( 'if provided an `N` parameter equal to `1`, the function returns the first indexed element', function test( t ) { + var sum; var x; - var v; x = new Float64Array( [ 1.0, -2.0, -4.0, 5.0, 3.0 ] ); - v = dnansum.ndarray( 1, x, 1, 0 ); - t.strictEqual( v, 1.0, 'returns expected value' ); + sum = dnansum.ndarray( 1, x, 1, 0 ); + t.strictEqual( sum, 1.0, 'returns expected value' ); t.end(); }); tape( 'the function supports a `stride` parameter', function test( t ) { + var sum; var x; - var v; x = new Float64Array([ 1.0, // 0 @@ -125,15 +125,15 @@ tape( 'the function supports a `stride` parameter', function test( t ) { NaN ]); - v = dnansum.ndarray( 5, x, 2, 0 ); + sum = dnansum.ndarray( 5, x, 2, 0 ); - t.strictEqual( v, 5.0, 'returns expected value' ); + t.strictEqual( sum, 5.0, 'returns expected value' ); t.end(); }); tape( 'the function supports a negative `stride` parameter', function test( t ) { + var sum; var x; - var v; x = new Float64Array([ NaN, // 4 @@ -148,39 +148,39 @@ tape( 'the function supports a negative `stride` parameter', function test( t ) 2.0 ]); - v = dnansum.ndarray( 5, x, -2, 8 ); + sum = dnansum.ndarray( 5, x, -2, 8 ); - t.strictEqual( v, 5.0, 'returns expected value' ); + t.strictEqual( sum, 5.0, 'returns expected value' ); t.end(); }); tape( 'if provided a `stride` parameter equal to `0`, the function returns the sum of the first element repeated N times', function test( t ) { + var sum; var x; - var v; x = new Float64Array( [ 1.0, -2.0, -4.0, 5.0, 3.0 ] ); - v = dnansum.ndarray( x.length, x, 0, 0 ); - t.strictEqual( v, 5.0, 'returns expected value' ); + sum = dnansum.ndarray( x.length, x, 0, 0 ); + t.strictEqual( sum, 5.0, 'returns expected value' ); t.end(); }); tape( 'if provided a `stride` parameter equal to `0` and the first element is NaN, the function returns 0', function test( t ) { + var sum; var x; - var v; x = new Float64Array( [ NaN, -2.0, -4.0, 5.0, 3.0 ] ); - v = dnansum.ndarray( x.length, x, 0, 0 ); - t.strictEqual( v, 0.0, 'returns expected value' ); + sum = dnansum.ndarray( x.length, x, 0, 0 ); + t.strictEqual( sum, 0.0, 'returns expected value' ); t.end(); }); tape( 'the function supports an `offset` parameter', function test( t ) { + var sum; var x; - var v; x = new Float64Array([ 2.0, @@ -195,8 +195,8 @@ tape( 'the function supports an `offset` parameter', function test( t ) { NaN // 4 ]); - v = dnansum.ndarray( 5, x, 2, 1 ); - t.strictEqual( v, 5.0, 'returns expected value' ); + sum = dnansum.ndarray( 5, x, 2, 1 ); + t.strictEqual( sum, 5.0, 'returns expected value' ); t.end(); });