diff --git a/lib/node_modules/@stdlib/stats/base/snanmskrange/README.md b/lib/node_modules/@stdlib/stats/base/snanmskrange/README.md index 015e40ce3bc4..ddf2b3a01e71 100644 --- a/lib/node_modules/@stdlib/stats/base/snanmskrange/README.md +++ b/lib/node_modules/@stdlib/stats/base/snanmskrange/README.md @@ -18,6 +18,8 @@ limitations under the License. --> +<!-- lint disable maximum-heading-length --> + # snanmskrange > Calculate the [range][range] of a single-precision floating-point strided array according to a mask, ignoring `NaN` values. @@ -40,7 +42,7 @@ var snanmskrange = require( '@stdlib/stats/base/snanmskrange' ); #### snanmskrange( N, x, strideX, mask, strideMask ) -Computes the [range][range] of a single-precision floating-point strided array `x` according to a `mask`, ignoring `NaN` values. +Computes the [range][range] of a single-precision floating-point strided array according to a `mask`, ignoring `NaN` values. ```javascript var Float32Array = require( '@stdlib/array/float32' ); @@ -57,22 +59,20 @@ The function has the following parameters: - **N**: number of indexed elements. - **x**: input [`Float32Array`][@stdlib/array/float32]. -- **strideX**: index increment for `x`. +- **strideX**: stride length for `x`. - **mask**: mask [`Uint8Array`][@stdlib/array/uint8]. If a `mask` array element is `0`, the corresponding element in `x` is considered valid and **included** in computation. If a `mask` array element is `1`, the corresponding element in `x` is considered invalid/missing and **excluded** from computation. -- **strideMask**: index increment for `mask`. +- **strideMask**: stride length for `mask`. -The `N` and `stride` parameters determine which elements are accessed at runtime. For example, to compute the [range][range] of every other element in `x`, +The `N` and stride parameters determine which elements in the strided arrays are accessed at runtime. For example, to compute the [range][range] of every other element in `x`, ```javascript var Float32Array = require( '@stdlib/array/float32' ); var Uint8Array = require( '@stdlib/array/uint8' ); -var floor = require( '@stdlib/math/base/special/floor' ); var x = new Float32Array( [ 1.0, 2.0, -7.0, -2.0, 4.0, 3.0, 5.0, 6.0 ] ); var mask = new Uint8Array( [ 0, 0, 0, 0, 0, 0, 1, 1 ] ); -var N = floor( x.length / 2 ); -var v = snanmskrange( N, x, 2, mask, 2 ); +var v = snanmskrange( 4, x, 2, mask, 2 ); // returns 11.0 ``` @@ -83,7 +83,6 @@ Note that indexing is relative to the first index. To introduce offsets, use [`t ```javascript var Float32Array = require( '@stdlib/array/float32' ); var Uint8Array = require( '@stdlib/array/uint8' ); -var floor = require( '@stdlib/math/base/special/floor' ); var x0 = new Float32Array( [ 2.0, 1.0, -2.0, -2.0, 3.0, 4.0, 5.0, 6.0 ] ); var x1 = new Float32Array( x0.buffer, x0.BYTES_PER_ELEMENT*1 ); // start at 2nd element @@ -91,9 +90,7 @@ var x1 = new Float32Array( x0.buffer, x0.BYTES_PER_ELEMENT*1 ); // start at 2nd var mask0 = new Uint8Array( [ 0, 0, 0, 0, 0, 0, 1, 1 ] ); var mask1 = new Uint8Array( mask0.buffer, mask0.BYTES_PER_ELEMENT*1 ); // start at 2nd element -var N = floor( x0.length / 2 ); - -var v = snanmskrange( N, x1, 2, mask1, 2 ); +var v = snanmskrange( 4, x1, 2, mask1, 2 ); // returns 6.0 ``` @@ -117,18 +114,16 @@ The function has the following additional parameters: - **offsetX**: starting index for `x`. - **offsetMask**: starting index for `mask`. -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 [range][range] for every other value in `x` starting from the second value +While [`typed array`][mdn-typed-array] views mandate a view offset based on the underlying buffer, offset parameters support indexing semantics based on starting indices. For example, to calculate the [range][range] for every other element in `x` starting from the second element ```javascript var Float32Array = require( '@stdlib/array/float32' ); var Uint8Array = require( '@stdlib/array/uint8' ); -var floor = require( '@stdlib/math/base/special/floor' ); var x = new Float32Array( [ 2.0, 1.0, -2.0, -2.0, 3.0, 4.0, 5.0, 6.0 ] ); var mask = new Uint8Array( [ 0, 0, 0, 0, 0, 0, 1, 1 ] ); -var N = floor( x.length / 2 ); -var v = snanmskrange.ndarray( N, x, 2, 1, mask, 2, 1 ); +var v = snanmskrange.ndarray( 4, x, 2, 1, mask, 2, 1 ); // returns 6.0 ``` @@ -153,31 +148,22 @@ var v = snanmskrange.ndarray( N, x, 2, 1, mask, 2, 1 ); <!-- eslint no-undef: "error" --> ```javascript -var randu = require( '@stdlib/random/base/randu' ); -var round = require( '@stdlib/math/base/special/round' ); -var Float32Array = require( '@stdlib/array/float32' ); -var Uint8Array = require( '@stdlib/array/uint8' ); +var uniform = require( '@stdlib/random/base/uniform' ); +var bernoulli = require( '@stdlib/random/base/bernoulli' ); +var filledarrayBy = require( '@stdlib/array/filled-by' ); var snanmskrange = require( '@stdlib/stats/base/snanmskrange' ); -var mask; -var x; -var i; - -x = new Float32Array( 10 ); -mask = new Uint8Array( x.length ); -for ( i = 0; i < x.length; i++ ) { - if ( randu() < 0.2 ) { - mask[ i ] = 1; - } else { - mask[ i ] = 0; - } - if ( randu() < 0.1 ) { - x[ i ] = NaN; - } else { - x[ i ] = round( (randu()*100.0) - 50.0 ); +function rand() { + if ( bernoulli( 0.8 ) < 1 ) { + return NaN; } + return uniform( -50.0, 50.0 ); } + +var x = filledarrayBy( 10, 'float32', rand ); console.log( x ); + +var mask = filledarrayBy( x.length, 'uint8', bernoulli.factory( 0.2 ) ); console.log( mask ); var v = snanmskrange( x.length, x, 1, mask, 1 ); @@ -188,6 +174,145 @@ console.log( v ); <!-- /.examples --> +<!-- C interface documentation. --> + +* * * + +<section class="c"> + +## C APIs + +<!-- Section to include introductory text. Make sure to keep an empty line after the intro `section` element and another before the `/section` close. --> + +<section class="intro"> + +</section> + +<!-- /.intro --> + +<!-- C usage documentation. --> + +<section class="usage"> + +### Usage + +```c +#include "stdlib/stats/base/snanmskrange.h" +``` + +#### stdlib_strided_snanmskrange( N, \*X, strideX, \*Mask, strideMask ) + +Computes the [range][range] of a single-precision floating-point strided array according to a `mask`, ignoring `NaN` values. + +```c +#include <stdint.h> + +const float x[] = { 1.0f, -2.0f, 4.0f, 2.0f, 0.0f/0.0f }; +const uint8_t mask[] = { 0, 0, 1, 0, 0 }; + +float v = stdlib_strided_snanmskrange( 5, x, 1, mask, 1 ); +// returns 4.0f +``` + +The function accepts the following arguments: + +- **N**: `[in] CBLAS_INT` number of indexed elements. +- **X**: `[in] float*` input array. +- **strideX**: `[in] CBLAS_INT` stride length for `X`. +- **Mask**: `[in] uint8_t*` mask array. If a `Mask` array element is `0`, the corresponding element in `X` is considered valid and included in computation. If a `Mask` array element is `1`, the corresponding element in `X` is considered invalid/missing and excluded from computation. +- **strideMask**: `[in] CBLAS_INT` stride length for `Mask`. + +```c +float stdlib_strided_snanmskrange( const CBLAS_INT N, const float *X, const CBLAS_INT strideX, const uint8_t *Mask, const CBLAS_INT strideMask ); +``` + +#### stdlib_strided_snanmskrange_ndarray( N, \*X, strideX, offsetX, \*Mask, strideMask, offsetMask ) + +Computes the [range][range] of a single-precision floating-point strided array according to a `mask`, ignoring `NaN` values and using alternative indexing semantics. + +```c +#include <stdint.h> + +const float x[] = { 1.0f, -2.0f, 4.0f, 2.0f, 0.0f/0.0f }; +const uint8_t mask[] = { 0, 0, 1, 0, 0 }; + +float v = stdlib_strided_snanmskrange_ndarray( 5, x, 1, 0, mask, 1, 0 ); +// returns 4.0f +``` + +The function accepts the following arguments: + +- **N**: `[in] CBLAS_INT` number of indexed elements. +- **X**: `[in] float*` input array. +- **strideX**: `[in] CBLAS_INT` stride length for `X`. +- **offsetX**: `[in] CBLAS_INT` starting index for `X`. +- **Mask**: `[in] uint8_t*` mask array. If a `Mask` array element is `0`, the corresponding element in `X` is considered valid and included in computation. If a `Mask` array element is `1`, the corresponding element in `X` is considered invalid/missing and excluded from computation. +- **strideMask**: `[in] CBLAS_INT` stride length for `Mask`. +- **offsetMask**: `[in] CBLAS_INT` starting index for `Mask`. + +```c +float stdlib_strided_snanmskrange_ndarray( const CBLAS_INT N, const float *X, const CBLAS_INT strideX, const CBLAS_INT offsetX, const uint8_t *Mask, const CBLAS_INT strideMask, const CBLAS_INT offsetMask ); +``` + +</section> + +<!-- /.usage --> + +<!-- C API usage notes. Make sure to keep an empty line after the `section` element and another before the `/section` close. --> + +<section class="notes"> + +</section> + +<!-- /.notes --> + +<!-- C API usage examples. --> + +<section class="examples"> + +### Examples + +```c +#include "stdlib/stats/base/snanmskrange.h" +#include <stdint.h> +#include <stdio.h> + +int main( void ) { + // Create a strided array: + const float x[] = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 0.0f/0.0f, 0.0f/0.0f }; + + // Create a mask array: + const uint8_t mask[] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1 }; + + // Specify the number of elements: + const int N = 5; + + // Specify the stride lengths: + const int strideX = 2; + const int strideMask = 2; + + // Compute the range: + float v = stdlib_strided_snanmskrange( N, x, strideX, mask, strideMask ); + + // Print the result: + printf( "range: %f\n", v ); +} +``` + +</section> + +<!-- /.examples --> + +</section> + +<!-- /.c --> + +<section class="references"> + +</section> + +<!-- /.references --> + <!-- Section for related `stdlib` packages. Do not manually edit this section, as it is automatically populated. --> <section class="related"> diff --git a/lib/node_modules/@stdlib/stats/base/snanmskrange/benchmark/benchmark.js b/lib/node_modules/@stdlib/stats/base/snanmskrange/benchmark/benchmark.js index bc5fb63918a4..5fa177f7364f 100644 --- a/lib/node_modules/@stdlib/stats/base/snanmskrange/benchmark/benchmark.js +++ b/lib/node_modules/@stdlib/stats/base/snanmskrange/benchmark/benchmark.js @@ -21,17 +21,30 @@ // MODULES // var bench = require( '@stdlib/bench' ); -var randu = require( '@stdlib/random/base/randu' ); +var uniform = require( '@stdlib/random/base/uniform' ); +var bernoulli = require( '@stdlib/random/base/bernoulli' ); +var filledarrayBy = require( '@stdlib/array/filled-by' ); var isnanf = require( '@stdlib/math/base/assert/is-nanf' ); var pow = require( '@stdlib/math/base/special/pow' ); -var Float32Array = require( '@stdlib/array/float32' ); -var Uint8Array = require( '@stdlib/array/uint8' ); var pkg = require( './../package.json' ).name; var snanmskrange = require( './../lib/snanmskrange.js' ); // FUNCTIONS // +/** +* Returns a random value or `NaN`. +* +* @private +* @returns {number} random number or `NaN` +*/ +function rand() { + if ( bernoulli( 0.8 ) < 1 ) { + return NaN; + } + return uniform( -10.0, 10.0 ); +} + /** * Creates a benchmark function. * @@ -42,18 +55,9 @@ var snanmskrange = require( './../lib/snanmskrange.js' ); function createBenchmark( len ) { var mask; var x; - var i; - x = new Float32Array( len ); - mask = new Uint8Array( len ); - for ( i = 0; i < x.length; i++ ) { - if ( randu() < 0.2 ) { - mask[ i ] = 1; - } else { - mask[ i ] = 0; - } - x[ i ] = ( randu()*20.0 ) - 10.0; - } + x = filledarrayBy( len, 'float32', rand ); + mask = filledarrayBy( len, 'uint8', bernoulli.factory( 0.2 ) ); return benchmark; function benchmark( b ) { diff --git a/lib/node_modules/@stdlib/stats/base/snanmskrange/benchmark/benchmark.native.js b/lib/node_modules/@stdlib/stats/base/snanmskrange/benchmark/benchmark.native.js index 380b5fccddd1..42ae14ee7cbc 100644 --- a/lib/node_modules/@stdlib/stats/base/snanmskrange/benchmark/benchmark.native.js +++ b/lib/node_modules/@stdlib/stats/base/snanmskrange/benchmark/benchmark.native.js @@ -22,11 +22,11 @@ var resolve = require( 'path' ).resolve; var bench = require( '@stdlib/bench' ); -var randu = require( '@stdlib/random/base/randu' ); +var uniform = require( '@stdlib/random/base/uniform' ); +var bernoulli = require( '@stdlib/random/base/bernoulli' ); +var filledarrayBy = require( '@stdlib/array/filled-by' ); var isnanf = require( '@stdlib/math/base/assert/is-nanf' ); var pow = require( '@stdlib/math/base/special/pow' ); -var Float32Array = require( '@stdlib/array/float32' ); -var Uint8Array = require( '@stdlib/array/uint8' ); var tryRequire = require( '@stdlib/utils/try-require' ); var pkg = require( './../package.json' ).name; @@ -41,6 +41,19 @@ var opts = { // FUNCTIONS // +/** +* Returns a random value or `NaN`. +* +* @private +* @returns {number} random number or `NaN` +*/ +function rand() { + if ( bernoulli( 0.8 ) < 1 ) { + return NaN; + } + return uniform( -10.0, 10.0 ); +} + /** * Creates a benchmark function. * @@ -51,18 +64,9 @@ var opts = { function createBenchmark( len ) { var mask; var x; - var i; - x = new Float32Array( len ); - mask = new Uint8Array( len ); - for ( i = 0; i < x.length; i++ ) { - if ( randu() < 0.2 ) { - mask[ i ] = 1; - } else { - mask[ i ] = 0; - } - x[ i ] = ( randu()*20.0 ) - 10.0; - } + x = filledarrayBy( len, 'float32', rand ); + mask = filledarrayBy( len, 'uint8', bernoulli.factory( 0.2 ) ); return benchmark; function benchmark( b ) { diff --git a/lib/node_modules/@stdlib/stats/base/snanmskrange/benchmark/benchmark.ndarray.js b/lib/node_modules/@stdlib/stats/base/snanmskrange/benchmark/benchmark.ndarray.js index 8de6638fbef2..42f929f00511 100644 --- a/lib/node_modules/@stdlib/stats/base/snanmskrange/benchmark/benchmark.ndarray.js +++ b/lib/node_modules/@stdlib/stats/base/snanmskrange/benchmark/benchmark.ndarray.js @@ -21,17 +21,30 @@ // MODULES // var bench = require( '@stdlib/bench' ); -var randu = require( '@stdlib/random/base/randu' ); +var uniform = require( '@stdlib/random/base/uniform' ); +var bernoulli = require( '@stdlib/random/base/bernoulli' ); +var filledarrayBy = require( '@stdlib/array/filled-by' ); var isnanf = require( '@stdlib/math/base/assert/is-nanf' ); var pow = require( '@stdlib/math/base/special/pow' ); -var Float32Array = require( '@stdlib/array/float32' ); -var Uint8Array = require( '@stdlib/array/uint8' ); var pkg = require( './../package.json' ).name; var snanmskrange = require( './../lib/ndarray.js' ); // FUNCTIONS // +/** +* Returns a random value or `NaN`. +* +* @private +* @returns {number} random number or `NaN` +*/ +function rand() { + if ( bernoulli( 0.8 ) < 1 ) { + return NaN; + } + return uniform( -10.0, 10.0 ); +} + /** * Creates a benchmark function. * @@ -42,18 +55,9 @@ var snanmskrange = require( './../lib/ndarray.js' ); function createBenchmark( len ) { var mask; var x; - var i; - x = new Float32Array( len ); - mask = new Uint8Array( len ); - for ( i = 0; i < x.length; i++ ) { - if ( randu() < 0.2 ) { - mask[ i ] = 1; - } else { - mask[ i ] = 0; - } - x[ i ] = ( randu()*20.0 ) - 10.0; - } + x = filledarrayBy( len, 'float32', rand ); + mask = filledarrayBy( len, 'uint8', bernoulli.factory( 0.2 ) ); return benchmark; function benchmark( b ) { diff --git a/lib/node_modules/@stdlib/stats/base/snanmskrange/benchmark/benchmark.ndarray.native.js b/lib/node_modules/@stdlib/stats/base/snanmskrange/benchmark/benchmark.ndarray.native.js index b0a26ca11c86..32e0e54c0710 100644 --- a/lib/node_modules/@stdlib/stats/base/snanmskrange/benchmark/benchmark.ndarray.native.js +++ b/lib/node_modules/@stdlib/stats/base/snanmskrange/benchmark/benchmark.ndarray.native.js @@ -22,11 +22,11 @@ var resolve = require( 'path' ).resolve; var bench = require( '@stdlib/bench' ); -var randu = require( '@stdlib/random/base/randu' ); +var uniform = require( '@stdlib/random/base/uniform' ); +var bernoulli = require( '@stdlib/random/base/bernoulli' ); +var filledarrayBy = require( '@stdlib/array/filled-by' ); var isnanf = require( '@stdlib/math/base/assert/is-nanf' ); var pow = require( '@stdlib/math/base/special/pow' ); -var Float32Array = require( '@stdlib/array/float32' ); -var Uint8Array = require( '@stdlib/array/uint8' ); var tryRequire = require( '@stdlib/utils/try-require' ); var pkg = require( './../package.json' ).name; @@ -41,6 +41,19 @@ var opts = { // FUNCTIONS // +/** +* Returns a random value or `NaN`. +* +* @private +* @returns {number} random number or `NaN` +*/ +function rand() { + if ( bernoulli( 0.8 ) < 1 ) { + return NaN; + } + return uniform( -10.0, 10.0 ); +} + /** * Creates a benchmark function. * @@ -51,18 +64,9 @@ var opts = { function createBenchmark( len ) { var mask; var x; - var i; - x = new Float32Array( len ); - mask = new Uint8Array( len ); - for ( i = 0; i < x.length; i++ ) { - if ( randu() < 0.2 ) { - mask[ i ] = 1; - } else { - mask[ i ] = 0; - } - x[ i ] = ( randu()*20.0 ) - 10.0; - } + x = filledarrayBy( len, 'float32', rand ); + mask = filledarrayBy( len, 'uint8', bernoulli.factory( 0.2 ) ); return benchmark; function benchmark( b ) { diff --git a/lib/node_modules/@stdlib/stats/base/snanmskrange/docs/repl.txt b/lib/node_modules/@stdlib/stats/base/snanmskrange/docs/repl.txt index eba615d16a45..de99c0651336 100644 --- a/lib/node_modules/@stdlib/stats/base/snanmskrange/docs/repl.txt +++ b/lib/node_modules/@stdlib/stats/base/snanmskrange/docs/repl.txt @@ -3,8 +3,8 @@ Computes the range of a single-precision floating-point strided array according to a mask, ignoring `NaN` values. - The `N` and `stride` parameters determine which elements are accessed at - runtime. + 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 offsets, use a typed array views. @@ -26,13 +26,13 @@ Input array. strideX: integer - Index increment for `x`. + Stride length for `x`. mask: Uint8Array Mask array. strideMask: integer - Index increment for `mask`. + Stride length for `mask`. Returns ------- @@ -47,11 +47,10 @@ > {{alias}}( x.length, x, 1, mask, 1 ) 4.0 - // Using `N` and `stride` parameters: + // Using `N` and stride parameters: > x = new {{alias:@stdlib/array/float32}}( [ -2.0, 1.0, 1.0, -5.0, 2.0, -1.0, 4.0 ] ); > mask = new {{alias:@stdlib/array/uint8}}( [ 0, 0, 0, 0, 0, 0, 1 ] ); - > var N = {{alias:@stdlib/math/base/special/floor}}( x.length / 2 ); - > {{alias}}( N, x, 2, mask, 2 ) + > {{alias}}( 3, x, 2, mask, 2 ) 4.0 // Using view offsets: @@ -59,10 +58,10 @@ > var x1 = new {{alias:@stdlib/array/float32}}( x0.buffer, x0.BYTES_PER_ELEMENT*1 ); > var mask0 = new {{alias:@stdlib/array/uint8}}( [ 0, 0, 0, 0, 0, 0, 1 ] ); > var mask1 = new {{alias:@stdlib/array/uint8}}( mask0.buffer, mask0.BYTES_PER_ELEMENT*1 ); - > N = {{alias:@stdlib/math/base/special/floor}}( x0.length / 2 ); - > {{alias}}( N, x1, 2, mask1, 2 ) + > {{alias}}( 3, x1, 2, mask1, 2 ) 4.0 + {{alias}}.ndarray( N, x, strideX, offsetX, mask, strideMask, offsetMask ) Computes the range of a single-precision floating-point strided array according to a mask, ignoring `NaN` values and using alternative indexing @@ -81,7 +80,7 @@ Input array. strideX: integer - Index increment for `x`. + Stride length for `x`. offsetX: integer Starting index for `x`. @@ -93,7 +92,7 @@ Index increment for `mask`. offsetMask: integer - Starting index for `mask`. + Stride length for `mask`. Returns ------- @@ -111,8 +110,7 @@ // Using offset parameter: > x = new {{alias:@stdlib/array/float32}}( [ 1.0, -2.0, 3.0, 2.0, 5.0, -1.0, 4.0 ] ); > mask = new {{alias:@stdlib/array/uint8}}( [ 0, 0, 0, 0, 0, 0, 1 ] ); - > var N = {{alias:@stdlib/math/base/special/floor}}( x.length / 2 ); - > {{alias}}.ndarray( N, x, 2, 1, mask, 2, 1 ) + > {{alias}}.ndarray( 3, x, 2, 1, mask, 2, 1 ) 4.0 See Also diff --git a/lib/node_modules/@stdlib/stats/base/snanmskrange/examples/c/example.c b/lib/node_modules/@stdlib/stats/base/snanmskrange/examples/c/example.c index 604faf9ed938..d0059c237905 100644 --- a/lib/node_modules/@stdlib/stats/base/snanmskrange/examples/c/example.c +++ b/lib/node_modules/@stdlib/stats/base/snanmskrange/examples/c/example.c @@ -22,17 +22,17 @@ int main( void ) { // Create a strided array: - float x[] = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0 }; + const float x[] = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 0.0f/0.0f, 0.0f/0.0f }; // Create a mask array: - uint8_t mask[] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1 }; + const uint8_t mask[] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1 }; // Specify the number of elements: - int64_t N = 5; + const int N = 5; // Specify the stride lengths: - int64_t strideX = 2; - int64_t strideMask = 2; + const int strideX = 2; + const int strideMask = 2; // Compute the range: float v = stdlib_strided_snanmskrange( N, x, strideX, mask, strideMask ); diff --git a/lib/node_modules/@stdlib/stats/base/snanmskrange/examples/index.js b/lib/node_modules/@stdlib/stats/base/snanmskrange/examples/index.js index 2ac9bcb2cbf0..fa585783ead3 100644 --- a/lib/node_modules/@stdlib/stats/base/snanmskrange/examples/index.js +++ b/lib/node_modules/@stdlib/stats/base/snanmskrange/examples/index.js @@ -18,31 +18,22 @@ 'use strict'; -var randu = require( '@stdlib/random/base/randu' ); -var round = require( '@stdlib/math/base/special/round' ); -var Float32Array = require( '@stdlib/array/float32' ); -var Uint8Array = require( '@stdlib/array/uint8' ); +var uniform = require( '@stdlib/random/base/uniform' ); +var bernoulli = require( '@stdlib/random/base/bernoulli' ); +var filledarrayBy = require( '@stdlib/array/filled-by' ); var snanmskrange = require( './../lib' ); -var mask; -var x; -var i; - -x = new Float32Array( 10 ); -mask = new Uint8Array( x.length ); -for ( i = 0; i < x.length; i++ ) { - if ( randu() < 0.2 ) { - mask[ i ] = 1; - } else { - mask[ i ] = 0; - } - if ( randu() < 0.1 ) { - x[ i ] = NaN; - } else { - x[ i ] = round( (randu()*100.0) - 50.0 ); +function rand() { + if ( bernoulli( 0.8 ) < 1 ) { + return NaN; } + return uniform( -50.0, 50.0 ); } + +var x = filledarrayBy( 10, 'float32', rand ); console.log( x ); + +var mask = filledarrayBy( x.length, 'uint8', bernoulli.factory( 0.2 ) ); console.log( mask ); var v = snanmskrange( x.length, x, 1, mask, 1 ); diff --git a/lib/node_modules/@stdlib/stats/base/snanmskrange/include.gypi b/lib/node_modules/@stdlib/stats/base/snanmskrange/include.gypi index 868c5c12e852..26476a8c2655 100644 --- a/lib/node_modules/@stdlib/stats/base/snanmskrange/include.gypi +++ b/lib/node_modules/@stdlib/stats/base/snanmskrange/include.gypi @@ -36,7 +36,7 @@ # Source files: 'src_files': [ - '<(src_dir)/addon.cpp', + '<(src_dir)/addon.c', '<!@(node -e "var arr = require(\'@stdlib/utils/library-manifest\')(\'./manifest.json\',{},{\'basedir\':process.cwd(),\'paths\':\'posix\'}).src; for ( var i = 0; i < arr.length; i++ ) { console.log( arr[ i ] ); }")', ], diff --git a/lib/node_modules/@stdlib/stats/base/snanmskrange/include/stdlib/stats/base/snanmskrange.h b/lib/node_modules/@stdlib/stats/base/snanmskrange/include/stdlib/stats/base/snanmskrange.h index 053d3cced4f0..6338e6a6e4f4 100644 --- a/lib/node_modules/@stdlib/stats/base/snanmskrange/include/stdlib/stats/base/snanmskrange.h +++ b/lib/node_modules/@stdlib/stats/base/snanmskrange/include/stdlib/stats/base/snanmskrange.h @@ -19,6 +19,7 @@ #ifndef STDLIB_STATS_BASE_SNANMSKRANGE_H #define STDLIB_STATS_BASE_SNANMSKRANGE_H +#include "stdlib/blas/base/shared.h" #include <stdint.h> /* @@ -31,7 +32,12 @@ extern "C" { /** * Computes the range of a single-precision floating-point strided array according to a mask, ignoring `NaN` values. */ -float stdlib_strided_snanmskrange( const int64_t N, const float *X, const int64_t strideX, const uint8_t *Mask, const int64_t strideMask ); +float API_SUFFIX(stdlib_strided_snanmskrange)( const CBLAS_INT N, const float *X, const CBLAS_INT strideX, const uint8_t *Mask, const CBLAS_INT strideMask ); + +/** +* Computes the range of a single-precision floating-point strided array according to a mask, ignoring `NaN` values and using alternative indexing semantics. +*/ +float API_SUFFIX(stdlib_strided_snanmskrange_ndarray)( const CBLAS_INT N, const float *X, const CBLAS_INT strideX, const CBLAS_INT offsetX, const uint8_t *Mask, const CBLAS_INT strideMask, const CBLAS_INT offsetMask ); #ifdef __cplusplus } diff --git a/lib/node_modules/@stdlib/stats/base/snanmskrange/lib/index.js b/lib/node_modules/@stdlib/stats/base/snanmskrange/lib/index.js index d72972075b79..e2b40767ac1c 100644 --- a/lib/node_modules/@stdlib/stats/base/snanmskrange/lib/index.js +++ b/lib/node_modules/@stdlib/stats/base/snanmskrange/lib/index.js @@ -37,14 +37,12 @@ * @example * var Float32Array = require( '@stdlib/array/float32' ); * var Uint8Array = require( '@stdlib/array/uint8' ); -* var floor = require( '@stdlib/math/base/special/floor' ); * var snanmskrange = require( '@stdlib/stats/base/snanmskrange' ); * * var x = new Float32Array( [ 2.0, 1.0, 2.0, -2.0, -2.0, 2.0, 3.0, 4.0, 5.0, 6.0 ] ); * var mask = new Uint8Array( [ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1 ] ); -* var N = floor( x.length / 2 ); * -* var v = snanmskrange.ndarray( N, x, 2, 1, mask, 2, 1 ); +* var v = snanmskrange.ndarray( 5, x, 2, 1, mask, 2, 1 ); * // returns 6.0 */ diff --git a/lib/node_modules/@stdlib/stats/base/snanmskrange/lib/ndarray.js b/lib/node_modules/@stdlib/stats/base/snanmskrange/lib/ndarray.js index 5469fdcb1378..26595ac27dbe 100644 --- a/lib/node_modules/@stdlib/stats/base/snanmskrange/lib/ndarray.js +++ b/lib/node_modules/@stdlib/stats/base/snanmskrange/lib/ndarray.js @@ -41,13 +41,11 @@ var isnanf = require( '@stdlib/math/base/assert/is-nanf' ); * @example * var Float32Array = require( '@stdlib/array/float32' ); * var Uint8Array = require( '@stdlib/array/uint8' ); -* var floor = require( '@stdlib/math/base/special/floor' ); * * var x = new Float32Array( [ 2.0, 1.0, 2.0, -2.0, -2.0, 2.0, 3.0, 4.0, 5.0, 6.0 ] ); * var mask = new Uint8Array( [ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1 ] ); -* var N = floor( x.length / 2 ); * -* var v = snanmskrange( N, x, 2, 1, mask, 2, 1 ); +* var v = snanmskrange( 5, x, 2, 1, mask, 2, 1 ); * // returns 6.0 */ function snanmskrange( N, x, strideX, offsetX, mask, strideMask, offsetMask ) { diff --git a/lib/node_modules/@stdlib/stats/base/snanmskrange/lib/ndarray.native.js b/lib/node_modules/@stdlib/stats/base/snanmskrange/lib/ndarray.native.js index 3f548b62e6d7..c6d2ea77c2e8 100644 --- a/lib/node_modules/@stdlib/stats/base/snanmskrange/lib/ndarray.native.js +++ b/lib/node_modules/@stdlib/stats/base/snanmskrange/lib/ndarray.native.js @@ -20,9 +20,7 @@ // MODULES // -var Float32Array = require( '@stdlib/array/float32' ); -var Uint8Array = require( '@stdlib/array/uint8' ); -var addon = require( './snanmskrange.native.js' ); +var addon = require( './../src/addon.node' ); // MAIN // @@ -42,27 +40,15 @@ var addon = require( './snanmskrange.native.js' ); * @example * var Float32Array = require( '@stdlib/array/float32' ); * var Uint8Array = require( '@stdlib/array/uint8' ); -* var floor = require( '@stdlib/math/base/special/floor' ); * * var x = new Float32Array( [ 2.0, 1.0, 2.0, -2.0, -2.0, 2.0, 3.0, 4.0, 5.0, 6.0 ] ); * var mask = new Uint8Array( [ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1 ] ); -* var N = floor( x.length / 2 ); * -* var v = snanmskrange( N, x, 2, 1, mask, 2, 1 ); +* var v = snanmskrange( 5, x, 2, 1, mask, 2, 1 ); * // returns 6.0 */ function snanmskrange( N, x, strideX, offsetX, mask, strideMask, offsetMask ) { - var viewX; - var viewM; - if ( strideX < 0 ) { - offsetX += (N-1) * strideX; - } - if ( strideMask < 0 ) { - offsetMask += (N-1) * strideMask; - } - viewX = new Float32Array( x.buffer, x.byteOffset+(x.BYTES_PER_ELEMENT*offsetX), x.length-offsetX ); // eslint-disable-line max-len - viewM = new Uint8Array( mask.buffer, mask.byteOffset+(mask.BYTES_PER_ELEMENT*offsetMask), mask.length-offsetMask ); // eslint-disable-line max-len - return addon( N, viewX, strideX, viewM, strideMask ); + return addon.ndarray( N, x, strideX, offsetX, mask, strideMask, offsetMask ); // eslint-disable-line max-len } diff --git a/lib/node_modules/@stdlib/stats/base/snanmskrange/lib/snanmskrange.js b/lib/node_modules/@stdlib/stats/base/snanmskrange/lib/snanmskrange.js index acfc2e1877db..7243afb462ec 100644 --- a/lib/node_modules/@stdlib/stats/base/snanmskrange/lib/snanmskrange.js +++ b/lib/node_modules/@stdlib/stats/base/snanmskrange/lib/snanmskrange.js @@ -20,8 +20,8 @@ // MODULES // -var float64ToFloat32 = require( '@stdlib/number/float64/base/to-float32' ); -var isnanf = require( '@stdlib/math/base/assert/is-nanf' ); +var stride2offset = require( '@stdlib/strided/base/stride2offset' ); +var ndarray = require( './ndarray.js' ); // MAIN // @@ -47,57 +47,7 @@ var isnanf = require( '@stdlib/math/base/assert/is-nanf' ); * // returns 4.0 */ function snanmskrange( N, x, strideX, mask, strideMask ) { - var max; - var min; - var ix; - var im; - var v; - var i; - - if ( N <= 0 ) { - return NaN; - } - if ( strideX < 0 ) { - ix = (1-N) * strideX; - } else { - ix = 0; - } - if ( strideMask < 0 ) { - im = (1-N) * strideMask; - } else { - im = 0; - } - for ( i = 0; i < N; i++ ) { - v = x[ ix ]; - if ( v === v && mask[ im ] === 0 ) { - break; - } - ix += strideX; - im += strideMask; - } - if ( i === N ) { - return NaN; - } - min = v; - max = min; - i += 1; - for ( i; i < N; i++ ) { - ix += strideX; - im += strideMask; - if ( mask[ im ] ) { - continue; - } - v = x[ ix ]; - if ( isnanf( v ) ) { - continue; - } - if ( v < min ) { - min = v; - } else if ( v > max ) { - max = v; - } - } - return float64ToFloat32( max - min ); + return ndarray( N, x, strideX, stride2offset( N, strideX ), mask, strideMask, stride2offset( N, strideMask ) ); // eslint-disable-line max-len } diff --git a/lib/node_modules/@stdlib/stats/base/snanmskrange/manifest.json b/lib/node_modules/@stdlib/stats/base/snanmskrange/manifest.json index 6926f292322f..97d8938bc8a9 100644 --- a/lib/node_modules/@stdlib/stats/base/snanmskrange/manifest.json +++ b/lib/node_modules/@stdlib/stats/base/snanmskrange/manifest.json @@ -1,5 +1,8 @@ { - "options": {}, + "options": { + "task": "build", + "wasm": false + }, "fields": [ { "field": "src", @@ -24,18 +27,77 @@ ], "confs": [ { + "task": "build", + "wasm": false, "src": [ - "./src/snanmskrange.c" + "./src/main.c" ], "include": [ "./include" ], - "libraries": [ - "-lm" + "libraries": [], + "libpath": [], + "dependencies": [ + "@stdlib/blas/base/shared", + "@stdlib/math/base/assert/is-nanf", + "@stdlib/strided/base/stride2offset", + "@stdlib/napi/export", + "@stdlib/napi/argv", + "@stdlib/napi/argv-int64", + "@stdlib/napi/argv-strided-float32array", + "@stdlib/napi/argv-strided-uint8array", + "@stdlib/napi/create-double" + ] + }, + { + "task": "benchmark", + "wasm": false, + "src": [ + "./src/main.c" + ], + "include": [ + "./include" + ], + "libraries": [], + "libpath": [], + "dependencies": [ + "@stdlib/blas/base/shared", + "@stdlib/math/base/assert/is-nanf", + "@stdlib/strided/base/stride2offset" + ] + }, + { + "task": "examples", + "wasm": false, + "src": [ + "./src/main.c" + ], + "include": [ + "./include" + ], + "libraries": [], + "libpath": [], + "dependencies": [ + "@stdlib/blas/base/shared", + "@stdlib/math/base/assert/is-nanf", + "@stdlib/strided/base/stride2offset" + ] + }, + { + "task": "", + "wasm": true, + "src": [ + "./src/main.c" + ], + "include": [ + "./include" ], + "libraries": [], "libpath": [], "dependencies": [ - "@stdlib/math/base/assert/is-nanf" + "@stdlib/blas/base/shared", + "@stdlib/math/base/assert/is-nanf", + "@stdlib/strided/base/stride2offset" ] } ] diff --git a/lib/node_modules/@stdlib/stats/base/snanmskrange/src/addon.c b/lib/node_modules/@stdlib/stats/base/snanmskrange/src/addon.c new file mode 100644 index 000000000000..c84180a184e6 --- /dev/null +++ b/lib/node_modules/@stdlib/stats/base/snanmskrange/src/addon.c @@ -0,0 +1,67 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2025 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#include "stdlib/stats/base/snanmskrange.h" +#include "stdlib/napi/export.h" +#include "stdlib/napi/argv.h" +#include "stdlib/napi/argv_int64.h" +#include "stdlib/napi/argv_strided_float32array.h" +#include "stdlib/napi/argv_strided_uint8array.h" +#include "stdlib/napi/create_double.h" +#include "stdlib/blas/base/shared.h" +#include <node_api.h> + +/** +* Receives JavaScript callback invocation data. +* +* @param env environment under which the function is invoked +* @param info callback data +* @return Node-API value +*/ +static napi_value addon( napi_env env, napi_callback_info info ) { + STDLIB_NAPI_ARGV( env, info, argv, argc, 5 ); + STDLIB_NAPI_ARGV_INT64( env, N, argv, 0 ); + STDLIB_NAPI_ARGV_INT64( env, strideX, argv, 2 ); + STDLIB_NAPI_ARGV_INT64( env, strideMask, argv, 4 ); + STDLIB_NAPI_ARGV_STRIDED_FLOAT32ARRAY( env, X, N, strideX, argv, 1 ); + STDLIB_NAPI_ARGV_STRIDED_UINT8ARRAY( env, Mask, N, strideMask, argv, 3 ); + STDLIB_NAPI_CREATE_DOUBLE( env, (double)API_SUFFIX(stdlib_strided_snanmskrange)( N, X, strideX, Mask, strideMask ), v ); + return v; +} + +/** +* Receives JavaScript callback invocation data. +* +* @param env environment under which the function is invoked +* @param info callback data +* @return Node-API value +*/ +static napi_value addon_method( napi_env env, napi_callback_info info ) { + STDLIB_NAPI_ARGV( env, info, argv, argc, 7 ); + STDLIB_NAPI_ARGV_INT64( env, N, argv, 0 ); + STDLIB_NAPI_ARGV_INT64( env, strideX, argv, 2 ); + STDLIB_NAPI_ARGV_INT64( env, offsetX, argv, 3 ); + STDLIB_NAPI_ARGV_INT64( env, strideMask, argv, 5 ); + STDLIB_NAPI_ARGV_INT64( env, offsetMask, argv, 6 ); + STDLIB_NAPI_ARGV_STRIDED_FLOAT32ARRAY( env, X, N, strideX, argv, 1 ); + STDLIB_NAPI_ARGV_STRIDED_UINT8ARRAY( env, Mask, N, strideMask, argv, 4 ); + STDLIB_NAPI_CREATE_DOUBLE( env, (double)API_SUFFIX(stdlib_strided_snanmskrange_ndarray)( N, X, strideX, offsetX, Mask, strideMask, offsetMask ), v ); + return v; +} + +STDLIB_NAPI_MODULE_EXPORT_FCN_WITH_METHOD( addon, "ndarray", addon_method ) diff --git a/lib/node_modules/@stdlib/stats/base/snanmskrange/src/addon.cpp b/lib/node_modules/@stdlib/stats/base/snanmskrange/src/addon.cpp deleted file mode 100644 index a2482f4e91fa..000000000000 --- a/lib/node_modules/@stdlib/stats/base/snanmskrange/src/addon.cpp +++ /dev/null @@ -1,153 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2020 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -#include "stdlib/stats/base/snanmskrange.h" -#include <node_api.h> -#include <stdint.h> -#include <stdlib.h> -#include <stdbool.h> -#include <assert.h> - -/** -* Add-on namespace. -*/ -namespace stdlib_stats_base_snanmskrange { - - /** - * Computes the range of a single-precision floating-point strided array according to a mask, ignoring `NaN` values. - * - * ## Notes - * - * - When called from JavaScript, the function expects five arguments: - * - * - `N`: number of indexed elements - * - `X`: input array - * - `strideX`: `X` stride length - * - `Mask`: mask array - * - `strideMask`: `Mask` stride length - */ - napi_value node_snanmskrange( napi_env env, napi_callback_info info ) { - napi_status status; - - size_t argc = 5; - napi_value argv[ 5 ]; - status = napi_get_cb_info( env, info, &argc, argv, nullptr, nullptr ); - assert( status == napi_ok ); - - if ( argc < 5 ) { - napi_throw_error( env, nullptr, "invalid invocation. Must provide 5 arguments." ); - return nullptr; - } - - napi_valuetype vtype0; - status = napi_typeof( env, argv[ 0 ], &vtype0 ); - assert( status == napi_ok ); - if ( vtype0 != napi_number ) { - napi_throw_type_error( env, nullptr, "invalid argument. First argument must be a number." ); - return nullptr; - } - - bool res1; - status = napi_is_typedarray( env, argv[ 1 ], &res1 ); - assert( status == napi_ok ); - if ( res1 == false ) { - napi_throw_type_error( env, nullptr, "invalid argument. Second argument must be a Float32Array." ); - return nullptr; - } - - napi_valuetype vtype2; - status = napi_typeof( env, argv[ 2 ], &vtype2 ); - assert( status == napi_ok ); - if ( vtype2 != napi_number ) { - napi_throw_type_error( env, nullptr, "invalid argument. Third argument must be a number." ); - return nullptr; - } - - bool res3; - status = napi_is_typedarray( env, argv[ 3 ], &res3 ); - assert( status == napi_ok ); - if ( res3 == false ) { - napi_throw_type_error( env, nullptr, "invalid argument. Fourth argument must be a Uint8Array." ); - return nullptr; - } - - napi_valuetype vtype4; - status = napi_typeof( env, argv[ 4 ], &vtype4 ); - assert( status == napi_ok ); - if ( vtype4 != napi_number ) { - napi_throw_type_error( env, nullptr, "invalid argument. Fifth argument must be a number." ); - return nullptr; - } - - int64_t N; - status = napi_get_value_int64( env, argv[ 0 ], &N ); - assert( status == napi_ok ); - - int64_t strideX; - status = napi_get_value_int64( env, argv[ 2 ], &strideX ); - assert( status == napi_ok ); - - int64_t strideMask; - status = napi_get_value_int64( env, argv[ 4 ], &strideMask ); - assert( status == napi_ok ); - - napi_typedarray_type vtype1; - size_t xlen; - void *X; - status = napi_get_typedarray_info( env, argv[ 1 ], &vtype1, &xlen, &X, nullptr, nullptr ); - assert( status == napi_ok ); - if ( vtype1 != napi_float32_array ) { - napi_throw_type_error( env, nullptr, "invalid argument. Second argument must be a Float32Array." ); - return nullptr; - } - if ( (N-1)*llabs(strideX) >= (int64_t)xlen ) { - napi_throw_range_error( env, nullptr, "invalid argument. Second argument has insufficient elements based on the associated stride and the number of indexed elements." ); - return nullptr; - } - - napi_typedarray_type vtype3; - size_t mlen; - void *Mask; - status = napi_get_typedarray_info( env, argv[ 3 ], &vtype3, &mlen, &Mask, nullptr, nullptr ); - assert( status == napi_ok ); - if ( vtype3 != napi_uint8_array ) { - napi_throw_type_error( env, nullptr, "invalid argument. Fourth argument must be a Uint8Array." ); - return nullptr; - } - if ( (N-1)*llabs(strideMask) >= (int64_t)mlen ) { - napi_throw_range_error( env, nullptr, "invalid argument. Fourth argument has insufficient elements based on the associated stride and the number of indexed elements." ); - return nullptr; - } - - napi_value v; - status = napi_create_double( env, (double)stdlib_strided_snanmskrange( N, (float *)X, strideX, (uint8_t *)Mask, strideMask ), &v ); - assert( status == napi_ok ); - - return v; - } - - napi_value Init( napi_env env, napi_value exports ) { - napi_status status; - napi_value fcn; - status = napi_create_function( env, "exports", NAPI_AUTO_LENGTH, node_snanmskrange, NULL, &fcn ); - assert( status == napi_ok ); - return fcn; - } - - NAPI_MODULE( NODE_GYP_MODULE_NAME, Init ) -} // end namespace stdlib_stats_base_snanmskrange diff --git a/lib/node_modules/@stdlib/stats/base/snanmskrange/src/snanmskrange.c b/lib/node_modules/@stdlib/stats/base/snanmskrange/src/main.c similarity index 56% rename from lib/node_modules/@stdlib/stats/base/snanmskrange/src/snanmskrange.c rename to lib/node_modules/@stdlib/stats/base/snanmskrange/src/main.c index 7aa5036dd09e..15caaa4c2a3a 100644 --- a/lib/node_modules/@stdlib/stats/base/snanmskrange/src/snanmskrange.c +++ b/lib/node_modules/@stdlib/stats/base/snanmskrange/src/main.c @@ -18,6 +18,8 @@ #include "stdlib/stats/base/snanmskrange.h" #include "stdlib/math/base/assert/is_nanf.h" +#include "stdlib/strided/base/stride2offset.h" +#include "stdlib/blas/base/shared.h" #include <stdint.h> /** @@ -30,10 +32,28 @@ * @param strideMask Mask stride length * @return output value */ -float stdlib_strided_snanmskrange( const int64_t N, const float *X, const int64_t strideX, const uint8_t *Mask, const int64_t strideMask ) { - int64_t ix; - int64_t im; - int64_t i; +float API_SUFFIX(stdlib_strided_snanmskrange)( const CBLAS_INT N, const float *X, const CBLAS_INT strideX, const uint8_t *Mask, const CBLAS_INT strideMask ) { + const CBLAS_INT ox = stdlib_strided_stride2offset( N, strideX ); + const CBLAS_INT om = stdlib_strided_stride2offset( N, strideMask ); + return API_SUFFIX(stdlib_strided_snanmskrange_ndarray)( N, X, strideX, ox, Mask, strideMask, om ); +} + +/** +* Computes the range of a single-precision floating-point strided array according to a mask, ignoring `NaN` values and using alternative indexing semantics. +* +* @param N number of indexed elements +* @param X input array +* @param strideX X stride length +* @param offsetX starting index for X +* @param Mask mask array +* @param strideMask Mask stride length +* @param offsetMask starting index for Mask +* @return output value +*/ +float API_SUFFIX(stdlib_strided_snanmskrange_ndarray)( const CBLAS_INT N, const float *X, const CBLAS_INT strideX, const CBLAS_INT offsetX, const uint8_t *Mask, const CBLAS_INT strideMask, const CBLAS_INT offsetMask ) { + CBLAS_INT ix; + CBLAS_INT im; + CBLAS_INT i; float max; float min; float v; @@ -41,16 +61,8 @@ float stdlib_strided_snanmskrange( const int64_t N, const float *X, const int64_ if ( N <= 0 ) { return 0.0f / 0.0f; // NaN } - if ( strideX < 0 ) { - ix = (1-N) * strideX; - } else { - ix = 0; - } - if ( strideMask < 0 ) { - im = (1-N) * strideMask; - } else { - im = 0; - } + ix = offsetX; + im = offsetMask; for ( i = 0; i < N; i++ ) { v = X[ ix ]; if ( v == v && Mask[ im ] == 0 ) { diff --git a/lib/node_modules/@stdlib/stats/base/snanmskrange/test/test.ndarray.js b/lib/node_modules/@stdlib/stats/base/snanmskrange/test/test.ndarray.js index 442887e3562f..35513df25f93 100644 --- a/lib/node_modules/@stdlib/stats/base/snanmskrange/test/test.ndarray.js +++ b/lib/node_modules/@stdlib/stats/base/snanmskrange/test/test.ndarray.js @@ -21,7 +21,6 @@ // MODULES // var tape = require( 'tape' ); -var floor = require( '@stdlib/math/base/special/floor' ); var isnanf = require( '@stdlib/math/base/assert/is-nanf' ); var isPositiveZerof = require( '@stdlib/math/base/assert/is-positive-zerof' ); var Float32Array = require( '@stdlib/array/float32' ); @@ -116,7 +115,7 @@ tape( 'if provided an `N` parameter less than or equal to `0`, the function retu v = snanmskrange( 0, x, 1, 0, mask, 1, 0 ); t.strictEqual( isnanf( v ), true, 'returns expected value' ); - v = snanmskrange( -1, x, 1, 0, mask, 1 ); + v = snanmskrange( -1, x, 1, 0, mask, 1, 0 ); t.strictEqual( isnanf( v ), true, 'returns expected value' ); t.end(); @@ -138,7 +137,6 @@ tape( 'if provided an `N` parameter equal to `1`, the function returns `0`', fun tape( 'the function supports `stride` parameters', function test( t ) { var mask; - var N; var x; var v; @@ -171,8 +169,7 @@ tape( 'the function supports `stride` parameters', function test( t ) { 0 ]); - N = floor( x.length / 2 ); - v = snanmskrange( N, x, 2, 0, mask, 2, 0 ); + v = snanmskrange( 6, x, 2, 0, mask, 2, 0 ); t.strictEqual( v, 6.0, 'returns expected value' ); t.end(); @@ -180,7 +177,6 @@ tape( 'the function supports `stride` parameters', function test( t ) { tape( 'the function supports negative `stride` parameters', function test( t ) { var mask; - var N; var x; var v; @@ -212,9 +208,7 @@ tape( 'the function supports negative `stride` parameters', function test( t ) { 0, // 0 0 ]); - - N = floor( x.length / 2 ); - v = snanmskrange( N, x, -2, 10, mask, -2, 10 ); + v = snanmskrange( 6, x, -2, 10, mask, -2, 10 ); t.strictEqual( v, 6.0, 'returns expected value' ); t.end(); @@ -222,7 +216,6 @@ tape( 'the function supports negative `stride` parameters', function test( t ) { tape( 'the function supports `offset` parameters', function test( t ) { var mask; - var N; var x; var v; @@ -254,9 +247,8 @@ tape( 'the function supports `offset` parameters', function test( t ) { 0, 0 // 5 ]); - N = floor( x.length / 2 ); - v = snanmskrange( N, x, 2, 1, mask, 2, 1 ); + v = snanmskrange( 6, x, 2, 1, mask, 2, 1 ); t.strictEqual( v, 6.0, 'returns expected value' ); t.end(); diff --git a/lib/node_modules/@stdlib/stats/base/snanmskrange/test/test.ndarray.native.js b/lib/node_modules/@stdlib/stats/base/snanmskrange/test/test.ndarray.native.js index b00e9ac0f626..2a610b89c084 100644 --- a/lib/node_modules/@stdlib/stats/base/snanmskrange/test/test.ndarray.native.js +++ b/lib/node_modules/@stdlib/stats/base/snanmskrange/test/test.ndarray.native.js @@ -22,7 +22,6 @@ var resolve = require( 'path' ).resolve; var tape = require( 'tape' ); -var floor = require( '@stdlib/math/base/special/floor' ); var isnanf = require( '@stdlib/math/base/assert/is-nanf' ); var isPositiveZerof = require( '@stdlib/math/base/assert/is-positive-zerof' ); var Float32Array = require( '@stdlib/array/float32' ); @@ -125,7 +124,7 @@ tape( 'if provided an `N` parameter less than or equal to `0`, the function retu v = snanmskrange( 0, x, 1, 0, mask, 1, 0 ); t.strictEqual( isnanf( v ), true, 'returns expected value' ); - v = snanmskrange( -1, x, 1, 0, mask, 1 ); + v = snanmskrange( -1, x, 1, 0, mask, 1, 0 ); t.strictEqual( isnanf( v ), true, 'returns expected value' ); t.end(); @@ -147,7 +146,6 @@ tape( 'if provided an `N` parameter equal to `1`, the function returns `0`', opt tape( 'the function supports `stride` parameters', opts, function test( t ) { var mask; - var N; var x; var v; @@ -180,8 +178,7 @@ tape( 'the function supports `stride` parameters', opts, function test( t ) { 0 ]); - N = floor( x.length / 2 ); - v = snanmskrange( N, x, 2, 0, mask, 2, 0 ); + v = snanmskrange( 6, x, 2, 0, mask, 2, 0 ); t.strictEqual( v, 6.0, 'returns expected value' ); t.end(); @@ -189,7 +186,6 @@ tape( 'the function supports `stride` parameters', opts, function test( t ) { tape( 'the function supports negative `stride` parameters', opts, function test( t ) { var mask; - var N; var x; var v; @@ -222,8 +218,7 @@ tape( 'the function supports negative `stride` parameters', opts, function test( 0 ]); - N = floor( x.length / 2 ); - v = snanmskrange( N, x, -2, 10, mask, -2, 10 ); + v = snanmskrange( 6, x, -2, 10, mask, -2, 10 ); t.strictEqual( v, 6.0, 'returns expected value' ); t.end(); @@ -231,7 +226,6 @@ tape( 'the function supports negative `stride` parameters', opts, function test( tape( 'the function supports `offset` parameters', opts, function test( t ) { var mask; - var N; var x; var v; @@ -263,9 +257,8 @@ tape( 'the function supports `offset` parameters', opts, function test( t ) { 0, 0 // 5 ]); - N = floor( x.length / 2 ); - v = snanmskrange( N, x, 2, 1, mask, 2, 1 ); + v = snanmskrange( 6, x, 2, 1, mask, 2, 1 ); t.strictEqual( v, 6.0, 'returns expected value' ); t.end(); diff --git a/lib/node_modules/@stdlib/stats/base/snanmskrange/test/test.snanmskrange.js b/lib/node_modules/@stdlib/stats/base/snanmskrange/test/test.snanmskrange.js index bf11be1c6bd3..20efe2743650 100644 --- a/lib/node_modules/@stdlib/stats/base/snanmskrange/test/test.snanmskrange.js +++ b/lib/node_modules/@stdlib/stats/base/snanmskrange/test/test.snanmskrange.js @@ -21,7 +21,6 @@ // MODULES // var tape = require( 'tape' ); -var floor = require( '@stdlib/math/base/special/floor' ); var isnanf = require( '@stdlib/math/base/assert/is-nanf' ); var isPositiveZerof = require( '@stdlib/math/base/assert/is-positive-zerof' ); var Float32Array = require( '@stdlib/array/float32' ); @@ -138,7 +137,6 @@ tape( 'if provided an `N` parameter equal to `1`, the function returns `0`', fun tape( 'the function supports `stride` parameters', function test( t ) { var mask; - var N; var x; var v; @@ -171,8 +169,7 @@ tape( 'the function supports `stride` parameters', function test( t ) { 0 ]); - N = floor( x.length / 2 ); - v = snanmskrange( N, x, 2, mask, 2 ); + v = snanmskrange( 6, x, 2, mask, 2 ); t.strictEqual( v, 6.0, 'returns expected value' ); t.end(); @@ -180,7 +177,6 @@ tape( 'the function supports `stride` parameters', function test( t ) { tape( 'the function supports negative `stride` parameters', function test( t ) { var mask; - var N; var x; var v; @@ -213,8 +209,7 @@ tape( 'the function supports negative `stride` parameters', function test( t ) { 0 ]); - N = floor( x.length / 2 ); - v = snanmskrange( N, x, -2, mask, -2 ); + v = snanmskrange( 6, x, -2, mask, -2 ); t.strictEqual( v, 6.0, 'returns expected value' ); t.end(); @@ -225,7 +220,6 @@ tape( 'the function supports view offsets', function test( t ) { var mask1; var x0; var x1; - var N; var v; x0 = new Float32Array([ @@ -261,9 +255,8 @@ tape( 'the function supports view offsets', function test( t ) { x1 = new Float32Array( x0.buffer, x0.BYTES_PER_ELEMENT*1 ); // start at 2nd element mask1 = new Uint8Array( mask0.buffer, mask0.BYTES_PER_ELEMENT*1 ); // start at 2nd element - N = floor( x1.length/2 ); - v = snanmskrange( N, x1, 2, mask1, 2 ); + v = snanmskrange( 6, x1, 2, mask1, 2 ); t.strictEqual( v, 6.0, 'returns expected value' ); t.end(); diff --git a/lib/node_modules/@stdlib/stats/base/snanmskrange/test/test.snanmskrange.native.js b/lib/node_modules/@stdlib/stats/base/snanmskrange/test/test.snanmskrange.native.js index 8b95d0c1452a..d415886a6d59 100644 --- a/lib/node_modules/@stdlib/stats/base/snanmskrange/test/test.snanmskrange.native.js +++ b/lib/node_modules/@stdlib/stats/base/snanmskrange/test/test.snanmskrange.native.js @@ -22,7 +22,6 @@ var resolve = require( 'path' ).resolve; var tape = require( 'tape' ); -var floor = require( '@stdlib/math/base/special/floor' ); var isnanf = require( '@stdlib/math/base/assert/is-nanf' ); var isPositiveZerof = require( '@stdlib/math/base/assert/is-positive-zerof' ); var Float32Array = require( '@stdlib/array/float32' ); @@ -147,7 +146,6 @@ tape( 'if provided an `N` parameter equal to `1`, the function returns `0`', opt tape( 'the function supports `stride` parameters', opts, function test( t ) { var mask; - var N; var x; var v; @@ -180,8 +178,7 @@ tape( 'the function supports `stride` parameters', opts, function test( t ) { 0 ]); - N = floor( x.length / 2 ); - v = snanmskrange( N, x, 2, mask, 2 ); + v = snanmskrange( 6, x, 2, mask, 2 ); t.strictEqual( v, 6.0, 'returns expected value' ); t.end(); @@ -189,7 +186,6 @@ tape( 'the function supports `stride` parameters', opts, function test( t ) { tape( 'the function supports negative `stride` parameters', opts, function test( t ) { var mask; - var N; var x; var v; @@ -222,8 +218,7 @@ tape( 'the function supports negative `stride` parameters', opts, function test( 0 ]); - N = floor( x.length / 2 ); - v = snanmskrange( N, x, -2, mask, -2 ); + v = snanmskrange( 6, x, -2, mask, -2 ); t.strictEqual( v, 6.0, 'returns expected value' ); t.end(); @@ -234,7 +229,6 @@ tape( 'the function supports view offsets', opts, function test( t ) { var mask1; var x0; var x1; - var N; var v; x0 = new Float32Array([ @@ -270,9 +264,8 @@ tape( 'the function supports view offsets', opts, function test( t ) { x1 = new Float32Array( x0.buffer, x0.BYTES_PER_ELEMENT*1 ); // start at 2nd element mask1 = new Uint8Array( mask0.buffer, mask0.BYTES_PER_ELEMENT*1 ); // start at 2nd element - N = floor( x1.length/2 ); - v = snanmskrange( N, x1, 2, mask1, 2 ); + v = snanmskrange( 6, x1, 2, mask1, 2 ); t.strictEqual( v, 6.0, 'returns expected value' ); t.end();