Skip to content

Commit a019508

Browse files
committed
feat: add C ndarray interface and refactor implementation for stats/base/dnanmskrange
--- 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: na - 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: missing_dependencies - task: lint_c_examples status: missing_dependencies - 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 ---
1 parent bef362e commit a019508

File tree

19 files changed

+238
-240
lines changed

19 files changed

+238
-240
lines changed

lib/node_modules/@stdlib/stats/base/dnanmskrange/benchmark/benchmark.js

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,38 @@
2121
// MODULES //
2222

2323
var bench = require( '@stdlib/bench' );
24-
var randu = require( '@stdlib/random/base/randu' );
24+
var uniform = require( '@stdlib/random/base/uniform' );
25+
var bernoulli = require( '@stdlib/random/base/bernoulli' );
26+
var uint8Array = require( '@stdlib/random/array/bernoulli' );
27+
var filledarrayBy = require( '@stdlib/array/filled-by' );
2528
var isnan = require( '@stdlib/math/base/assert/is-nan' );
2629
var pow = require( '@stdlib/math/base/special/pow' );
27-
var Float64Array = require( '@stdlib/array/float64' );
28-
var Uint8Array = require( '@stdlib/array/uint8' );
2930
var pkg = require( './../package.json' ).name;
3031
var dnanmskrange = require( './../lib/dnanmskrange.js' );
3132

3233

34+
// VARIABLES //
35+
36+
var options = {
37+
'dtype': 'uint8'
38+
};
39+
40+
3341
// FUNCTIONS //
3442

43+
/**
44+
* Returns a random value or `NaN`.
45+
*
46+
* @private
47+
* @returns {number} random number or `NaN`
48+
*/
49+
function rand() {
50+
if ( bernoulli( 0.8 ) < 1 ) {
51+
return NaN;
52+
}
53+
return uniform( -10.0, 10.0 );
54+
}
55+
3556
/**
3657
* Creates a benchmark function.
3758
*
@@ -42,18 +63,9 @@ var dnanmskrange = require( './../lib/dnanmskrange.js' );
4263
function createBenchmark( len ) {
4364
var mask;
4465
var x;
45-
var i;
4666

47-
x = new Float64Array( len );
48-
mask = new Uint8Array( len );
49-
for ( i = 0; i < x.length; i++ ) {
50-
if ( randu() < 0.2 ) {
51-
mask[ i ] = 1;
52-
} else {
53-
mask[ i ] = 0;
54-
}
55-
x[ i ] = ( randu()*20.0 ) - 10.0;
56-
}
67+
x = filledarrayBy( len, 'float64', rand );
68+
mask = uint8Array( len, 0.2, options );
5769
return benchmark;
5870

5971
function benchmark( b ) {

lib/node_modules/@stdlib/stats/base/dnanmskrange/benchmark/benchmark.native.js

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,12 @@
2222

2323
var resolve = require( 'path' ).resolve;
2424
var bench = require( '@stdlib/bench' );
25-
var randu = require( '@stdlib/random/base/randu' );
25+
var uniform = require( '@stdlib/random/base/uniform' );
26+
var bernoulli = require( '@stdlib/random/base/bernoulli' );
27+
var uint8Array = require( '@stdlib/random/array/bernoulli' );
28+
var filledarrayBy = require( '@stdlib/array/filled-by' );
2629
var isnan = require( '@stdlib/math/base/assert/is-nan' );
2730
var pow = require( '@stdlib/math/base/special/pow' );
28-
var Float64Array = require( '@stdlib/array/float64' );
29-
var Uint8Array = require( '@stdlib/array/uint8' );
3031
var tryRequire = require( '@stdlib/utils/try-require' );
3132
var pkg = require( './../package.json' ).name;
3233

@@ -37,10 +38,26 @@ var dnanmskrange = tryRequire( resolve( __dirname, './../lib/dnanmskrange.native
3738
var opts = {
3839
'skip': ( dnanmskrange instanceof Error )
3940
};
41+
var options = {
42+
'dtype': 'uint8'
43+
};
4044

4145

4246
// FUNCTIONS //
4347

48+
/**
49+
* Returns a random value or `NaN`.
50+
*
51+
* @private
52+
* @returns {number} random number or `NaN`
53+
*/
54+
function rand() {
55+
if ( bernoulli( 0.8 ) < 1 ) {
56+
return NaN;
57+
}
58+
return uniform( -10.0, 10.0 );
59+
}
60+
4461
/**
4562
* Creates a benchmark function.
4663
*
@@ -51,18 +68,9 @@ var opts = {
5168
function createBenchmark( len ) {
5269
var mask;
5370
var x;
54-
var i;
5571

56-
x = new Float64Array( len );
57-
mask = new Uint8Array( len );
58-
for ( i = 0; i < x.length; i++ ) {
59-
if ( randu() < 0.2 ) {
60-
mask[ i ] = 1;
61-
} else {
62-
mask[ i ] = 0;
63-
}
64-
x[ i ] = ( randu()*20.0 ) - 10.0;
65-
}
72+
x = filledarrayBy( len, 'float64', rand );
73+
mask = uint8Array( len, 0.2, options );
6674
return benchmark;
6775

6876
function benchmark( b ) {

lib/node_modules/@stdlib/stats/base/dnanmskrange/benchmark/benchmark.ndarray.js

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,38 @@
2121
// MODULES //
2222

2323
var bench = require( '@stdlib/bench' );
24-
var randu = require( '@stdlib/random/base/randu' );
24+
var uniform = require( '@stdlib/random/base/uniform' );
25+
var bernoulli = require( '@stdlib/random/base/bernoulli' );
26+
var uint8Array = require( '@stdlib/random/array/bernoulli' );
27+
var filledarrayBy = require( '@stdlib/array/filled-by' );
2528
var isnan = require( '@stdlib/math/base/assert/is-nan' );
2629
var pow = require( '@stdlib/math/base/special/pow' );
27-
var Float64Array = require( '@stdlib/array/float64' );
28-
var Uint8Array = require( '@stdlib/array/uint8' );
2930
var pkg = require( './../package.json' ).name;
3031
var dnanmskrange = require( './../lib/ndarray.js' );
3132

3233

34+
// VARIABLES //
35+
36+
var options = {
37+
'dtype': 'uint8'
38+
};
39+
40+
3341
// FUNCTIONS //
3442

43+
/**
44+
* Returns a random value or `NaN`.
45+
*
46+
* @private
47+
* @returns {number} random number or `NaN`
48+
*/
49+
function rand() {
50+
if ( bernoulli( 0.8 ) < 1 ) {
51+
return NaN;
52+
}
53+
return uniform( -10.0, 10.0 );
54+
}
55+
3556
/**
3657
* Creates a benchmark function.
3758
*
@@ -42,18 +63,9 @@ var dnanmskrange = require( './../lib/ndarray.js' );
4263
function createBenchmark( len ) {
4364
var mask;
4465
var x;
45-
var i;
4666

47-
x = new Float64Array( len );
48-
mask = new Uint8Array( len );
49-
for ( i = 0; i < x.length; i++ ) {
50-
if ( randu() < 0.2 ) {
51-
mask[ i ] = 1;
52-
} else {
53-
mask[ i ] = 0;
54-
}
55-
x[ i ] = ( randu()*20.0 ) - 10.0;
56-
}
67+
x = filledarrayBy( len, 'float64', rand );
68+
mask = uint8Array( len, 0.2, options );
5769
return benchmark;
5870

5971
function benchmark( b ) {

lib/node_modules/@stdlib/stats/base/dnanmskrange/benchmark/benchmark.ndarray.native.js

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,12 @@
2222

2323
var resolve = require( 'path' ).resolve;
2424
var bench = require( '@stdlib/bench' );
25-
var randu = require( '@stdlib/random/base/randu' );
25+
var uniform = require( '@stdlib/random/base/uniform' );
26+
var bernoulli = require( '@stdlib/random/base/bernoulli' );
27+
var uint8Array = require( '@stdlib/random/array/bernoulli' );
28+
var filledarrayBy = require( '@stdlib/array/filled-by' );
2629
var isnan = require( '@stdlib/math/base/assert/is-nan' );
2730
var pow = require( '@stdlib/math/base/special/pow' );
28-
var Float64Array = require( '@stdlib/array/float64' );
29-
var Uint8Array = require( '@stdlib/array/uint8' );
3031
var tryRequire = require( '@stdlib/utils/try-require' );
3132
var pkg = require( './../package.json' ).name;
3233

@@ -37,10 +38,26 @@ var dnanmskrange = tryRequire( resolve( __dirname, './../lib/ndarray.native.js'
3738
var opts = {
3839
'skip': ( dnanmskrange instanceof Error )
3940
};
41+
var options = {
42+
'dtype': 'uint8'
43+
};
4044

4145

4246
// FUNCTIONS //
4347

48+
/**
49+
* Returns a random value or `NaN`.
50+
*
51+
* @private
52+
* @returns {number} random number or `NaN`
53+
*/
54+
function rand() {
55+
if ( bernoulli( 0.8 ) < 1 ) {
56+
return NaN;
57+
}
58+
return uniform( -10.0, 10.0 );
59+
}
60+
4461
/**
4562
* Creates a benchmark function.
4663
*
@@ -51,18 +68,9 @@ var opts = {
5168
function createBenchmark( len ) {
5269
var mask;
5370
var x;
54-
var i;
5571

56-
x = new Float64Array( len );
57-
mask = new Uint8Array( len );
58-
for ( i = 0; i < x.length; i++ ) {
59-
if ( randu() < 0.2 ) {
60-
mask[ i ] = 1;
61-
} else {
62-
mask[ i ] = 0;
63-
}
64-
x[ i ] = ( randu()*20.0 ) - 10.0;
65-
}
72+
x = filledarrayBy( len, 'float64', rand );
73+
mask = uint8Array( len, 0.2, options );
6674
return benchmark;
6775

6876
function benchmark( b ) {

lib/node_modules/@stdlib/stats/base/dnanmskrange/docs/repl.txt

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
Computes the range of a double-precision floating-point strided array
44
according to a mask, ignoring `NaN` values.
55

6-
The `N` and `stride` parameters determine which elements are accessed at
7-
runtime.
6+
The `N` and stride parameters determine which elements in the strided array
7+
are accessed at runtime.
88

99
Indexing is relative to the first index. To introduce offsets, use a typed
1010
array views.
@@ -26,13 +26,13 @@
2626
Input array.
2727

2828
strideX: integer
29-
Index increment for `x`.
29+
Stride length for `x`.
3030

3131
mask: Uint8Array
3232
Mask array.
3333

3434
strideMask: integer
35-
Index increment for `mask`.
35+
Stride length for `mask`.
3636

3737
Returns
3838
-------
@@ -47,22 +47,21 @@
4747
> {{alias}}( x.length, x, 1, mask, 1 )
4848
4.0
4949

50-
// Using `N` and `stride` parameters:
50+
// Using `N` and stride parameters:
5151
> x = new {{alias:@stdlib/array/float64}}( [ -2.0, 1.0, 1.0, -5.0, 2.0, -1.0, 4.0 ] );
5252
> mask = new {{alias:@stdlib/array/uint8}}( [ 0, 0, 0, 0, 0, 0, 1 ] );
53-
> var N = {{alias:@stdlib/math/base/special/floor}}( x.length / 2 );
54-
> {{alias}}( N, x, 2, mask, 2 )
53+
> {{alias}}( 3, x, 2, mask, 2 )
5554
4.0
5655

5756
// Using view offsets:
5857
> var x0 = new {{alias:@stdlib/array/float64}}( [ 1.0, -2.0, 3.0, 2.0, 5.0, -1.0, 4.0 ] );
5958
> var x1 = new {{alias:@stdlib/array/float64}}( x0.buffer, x0.BYTES_PER_ELEMENT*1 );
6059
> var mask0 = new {{alias:@stdlib/array/uint8}}( [ 0, 0, 0, 0, 0, 0, 1 ] );
6160
> var mask1 = new {{alias:@stdlib/array/uint8}}( mask0.buffer, mask0.BYTES_PER_ELEMENT*1 );
62-
> N = {{alias:@stdlib/math/base/special/floor}}( x0.length / 2 );
63-
> {{alias}}( N, x1, 2, mask1, 2 )
61+
> {{alias}}( 3, x1, 2, mask1, 2 )
6462
4.0
6563

64+
6665
{{alias}}.ndarray( N, x, strideX, offsetX, mask, strideMask, offsetMask )
6766
Computes the range of a double-precision floating-point strided array
6867
according to a mask, ignoring `NaN` values and using alternative indexing
@@ -81,7 +80,7 @@
8180
Input array.
8281

8382
strideX: integer
84-
Index increment for `x`.
83+
Stride length for `x`.
8584

8685
offsetX: integer
8786
Starting index for `x`.
@@ -90,7 +89,7 @@
9089
Mask array.
9190

9291
strideMask: integer
93-
Index increment for `mask`.
92+
Stride length for `mask`.
9493

9594
offsetMask: integer
9695
Starting index for `mask`.
@@ -111,8 +110,7 @@
111110
// Using offset parameter:
112111
> x = new {{alias:@stdlib/array/float64}}( [ 1.0, -2.0, 3.0, 2.0, 5.0, -1.0, 4.0 ] );
113112
> mask = new {{alias:@stdlib/array/uint8}}( [ 0, 0, 0, 0, 0, 0, 1 ] );
114-
> var N = {{alias:@stdlib/math/base/special/floor}}( x.length / 2 );
115-
> {{alias}}.ndarray( N, x, 2, 1, mask, 2, 1 )
113+
> {{alias}}.ndarray( 3, x, 2, 1, mask, 2, 1 )
116114
4.0
117115

118116
See Also

lib/node_modules/@stdlib/stats/base/dnanmskrange/examples/c/example.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,17 @@
2222

2323
int main( void ) {
2424
// Create a strided array:
25-
double x[] = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0 };
25+
const double x[] = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 0.0/0.0, 0.0/0.0 };
2626

2727
// Create a mask array:
28-
uint8_t mask[] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1 };
28+
const uint8_t mask[] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1 };
2929

3030
// Specify the number of elements:
31-
int64_t N = 5;
31+
const int N = 5;
3232

3333
// Specify the stride lengths:
34-
int64_t strideX = 2;
35-
int64_t strideMask = 2;
34+
const int strideX = 2;
35+
const int strideMask = 2;
3636

3737
// Compute the range:
3838
double v = stdlib_strided_dnanmskrange( N, x, strideX, mask, strideMask );

0 commit comments

Comments
 (0)