Skip to content

Commit 1f899fe

Browse files
committed
refactor: refactor stats/base/nanmskmin
--- 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: 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: 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 ---
1 parent 35ccdc2 commit 1f899fe

File tree

14 files changed

+481
-296
lines changed

14 files changed

+481
-296
lines changed

lib/node_modules/@stdlib/stats/base/nanmskmin/README.md

Lines changed: 85 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
33
@license Apache-2.0
44
5-
Copyright (c) 2025 The Stdlib Authors.
5+
Copyright (c) 2020 The Stdlib Authors.
66
77
Licensed under the Apache License, Version 2.0 (the "License");
88
you may not use this file except in compliance with the License.
@@ -33,52 +33,81 @@ limitations under the License.
3333
## Usage
3434

3535
```javascript
36-
var nanmskmin = require("@stdlib/stats/base/nanmskmin");
36+
var nanmskmin = require( '@stdlib/stats/base/nanmskmin' );
3737
```
3838

3939
#### nanmskmin( N, x, strideX, mask, strideMask )
4040

41-
Computes the minimum value of a strided array `x` according to a `mask`, ignoring `NaN` values.
41+
Computes the minimum value of a strided array according to a `mask`, ignoring `NaN` values.
4242

4343
```javascript
44-
var x = [1.0, -2.0, -4.0, 2.0, NaN];
45-
var mask = [0, 0, 1, 0, 0];
44+
var x = [ 1.0, -2.0, -4.0, 2.0, NaN ];
45+
var mask = [ 0, 0, 1, 0, 0 ];
4646

47-
var v = nanmskmin(x.length, x, 1, mask, 1);
47+
var v = nanmskmin( x.length, x, 1, mask, 1 );
4848
// returns -2.0
4949
```
5050

5151
The function has the following parameters:
5252

53-
- **N**: number of indexed elements.
54-
- **x**: input [`Array`][mdn-array] or [`typed array`][mdn-typed-array].
55-
- **strideX**: stride length for `x`.
56-
- **mask**: mask [`Array`][mdn-array] or [`typed array`][mdn-typed-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.
57-
- **strideMask**: stride length for `mask`.
53+
- **N**: number of indexed elements.
54+
- **x**: input [`Array`][mdn-array] or [`typed array`][mdn-typed-array].
55+
- **strideX**: stride length for `x`.
56+
- **mask**: mask [`Array`][mdn-array] or [`typed array`][mdn-typed-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.
57+
- **strideMask**: stride length for `mask`.
5858

59-
The `N` and `stride` parameters determine which elements in the strided arrays are accessed at runtime. For example, to compute the minimum value of every other element in `x`,
59+
The `N` and stride parameters determine which elements in the strided arrays are accessed at runtime. For example, to compute the minimum value of every other element in `x`,
6060

6161
```javascript
62-
var x = [1.0, 2.0, -7.0, -2.0, 4.0, 3.0, -5.0, -6.0];
63-
var mask = [0, 0, 0, 0, 0, 0, 1, 1];
62+
var x = [ 1.0, 2.0, -7.0, -2.0, 4.0, 3.0, -5.0, -6.0, NaN, NaN ];
63+
var mask = [ 0, 0, 0, 0, 0, 0, 1, 1, 0, 0 ];
6464

65-
var v = nanmskmin(4, x, 2, mask, 2);
65+
var v = nanmskmin( 5, x, 2, mask, 2 );
6666
// returns -7.0
6767
```
6868

6969
Note that indexing is relative to the first index. To introduce offsets, use [`typed array`][mdn-typed-array] views.
7070

71+
<!-- eslint-disable stdlib/capitalized-comments, max-len -->
72+
73+
```javascript
74+
var Float64Array = require( '@stdlib/array/float64' );
75+
var Uint8Array = require( '@stdlib/array/uint8' );
76+
77+
var x0 = new Float64Array( [ 2.0, 1.0, -2.0, -2.0, 3.0, 4.0, 5.0, 6.0, NaN, NaN ] );
78+
var x1 = new Float64Array( x0.buffer, x0.BYTES_PER_ELEMENT*1 ); // start at 2nd element
79+
80+
var mask0 = new Uint8Array( [ 0, 0, 0, 0, 0, 0, 1, 1, 0, 0 ] );
81+
var mask1 = new Uint8Array( mask0.buffer, mask0.BYTES_PER_ELEMENT*1 ); // start at 2nd element
82+
83+
var v = nanmskmin( 5, x1, 2, mask1, 2 );
84+
// returns -2.0
85+
```
86+
87+
#### nanmskmin.ndarray( N, x, strideX, offsetX, mask, strideMask, offsetMask )
88+
89+
Computes the minimum value of a strided array according to a `mask`, ignoring `NaN` values and using alternative indexing semantics.
90+
7191
```javascript
72-
var Float64Array = require("@stdlib/array/float64");
73-
var Uint8Array = require("@stdlib/array/uint8");
92+
var x = [ 1.0, -2.0, -4.0, 2.0, NaN ];
93+
var mask = [ 0, 0, 1, 0, 0 ];
94+
95+
var v = nanmskmin.ndarray( x.length, x, 1, 0, mask, 1, 0 );
96+
// returns -2.0
97+
```
98+
99+
The function has the following additional parameters:
100+
101+
- **offsetX**: starting index for `x`.
102+
- **offsetMask**: starting index for `mask`.
74103

75-
var x0 = new Float64Array([2.0, 1.0, -2.0, -2.0, 3.0, 4.0, 5.0, 6.0]);
76-
var x1 = new Float64Array(x0.buffer, x0.BYTES_PER_ELEMENT * 1);
104+
While [`typed array`][mdn-typed-array] views mandate a view offset based on the underlying buffer, the offset parameters support indexing semantics based on starting indices. For example, to calculate the minimum value for every other element in `x` starting from the second element
77105

78-
var mask0 = new Uint8Array([0, 0, 0, 0, 0, 0, 1, 1]);
79-
var mask1 = new Uint8Array(mask0.buffer, mask0.BYTES_PER_ELEMENT * 1);
106+
```javascript
107+
var x = [ 2.0, 1.0, -2.0, -2.0, 3.0, 4.0, -5.0, -6.0, NaN, NaN ];
108+
var mask = [ 0, 0, 0, 0, 0, 0, 1, 1, 0, 0 ];
80109

81-
var v = nanmskmin(4, x1, 2, mask1, 2);
110+
var v = nanmskmin.ndarray( 5, x, 2, 1, mask, 2, 1 );
82111
// returns -2.0
83112
```
84113

@@ -90,9 +119,9 @@ var v = nanmskmin(4, x1, 2, mask1, 2);
90119

91120
## Notes
92121

93-
- If `N <= 0`, both functions return `NaN`.
94-
- Depending on the environment, the typed versions ([`dnanmskmin`][@stdlib/stats/strided/dnanmskmin], [`snanmskmin`][@stdlib/stats/strided/snanmskmin], etc.) are likely to be significantly more performant.
95-
- Both functions support array-like objects having getter and setter accessors for array element access (e.g., [`@stdlib/array/base/accessor`][@stdlib/array/base/accessor]).
122+
- If `N <= 0`, both functions return `NaN`.
123+
- Depending on the environment, the typed versions ([`dnanmskmin`][@stdlib/stats/strided/dnanmskmin], [`snanmskmin`][@stdlib/stats/strided/snanmskmin], etc.) are likely to be significantly more performant.
124+
- Both functions support array-like objects having getter and setter accessors for array element access (e.g., [`@stdlib/array/base/accessor`][@stdlib/array/base/accessor]).
96125

97126
</section>
98127

@@ -102,32 +131,40 @@ var v = nanmskmin(4, x1, 2, mask1, 2);
102131

103132
## Examples
104133

134+
<!-- eslint no-undef: "error" -->
135+
105136
```javascript
106-
var uniform = require("@stdlib/random/array/uniform");
107-
var bernoulli = require("@stdlib/random/array/bernoulli");
108-
var nanmskmin = require("@stdlib/stats/base/nanmskmin");
109-
110-
var x = uniform(10, -50.0, 50.0, {
111-
dtype: "float64",
112-
});
113-
console.log(x);
114-
115-
var mask = bernoulli(x.length, 0.2, {
116-
dtype: "uint8",
117-
});
118-
console.log(mask);
119-
120-
var v = nanmskmin(x.length, x, 1, mask, 1);
121-
console.log(v);
137+
var uniform = require( '@stdlib/random/base/uniform' );
138+
var bernoulli = require( '@stdlib/random/base/bernoulli' );
139+
var filledarrayBy = require( '@stdlib/array/filled-by' );
140+
var nanmskmin = require( '@stdlib/stats/base/nanmskmin' );
141+
142+
function rand() {
143+
if ( bernoulli( 0.8 ) < 1 ) {
144+
return NaN;
145+
}
146+
return uniform( -50.0, 50.0 );
147+
}
148+
149+
var x = filledarrayBy( 10, 'float64', rand );
150+
console.log( x );
151+
152+
var mask = filledarrayBy( x.length, 'uint8', bernoulli.factory( 0.2 ) );
153+
console.log( mask );
154+
155+
var v = nanmskmin( x.length, x, 1, mask, 1 );
156+
console.log( v );
122157
```
123158

124159
</section>
125160

126161
<!-- /.examples -->
127162

163+
<!-- Section for related `stdlib` packages. Do not manually edit this section, as it is automatically populated. -->
164+
128165
<section class="related">
129166

130-
---
167+
* * *
131168

132169
## See Also
133170

@@ -141,14 +178,16 @@ console.log(v);
141178

142179
<!-- /.related -->
143180

181+
<!-- Section for all links. Make sure to keep an empty line after the `section` element and another before the `/section` close. -->
182+
144183
<section class="links">
145184

146185
[mdn-array]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array
147186

148-
[@stdlib/array/base/accessor]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/accessor
149-
150187
[mdn-typed-array]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray
151188

189+
[@stdlib/array/base/accessor]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/base/accessor
190+
152191
<!-- <related-links> -->
153192

154193
[@stdlib/stats/strided/dnanmskmin]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/stats/strided/dnanmskmin
@@ -161,6 +200,8 @@ console.log(v);
161200

162201
[@stdlib/stats/strided/snanmskmin]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/stats/strided/snanmskmin
163202

203+
<!-- </related-links> -->
204+
164205
</section>
165206

166207
<!-- /.links -->

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

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/**
22
* @license Apache-2.0
33
*
4-
* Copyright (c) 2025 The Stdlib Authors.
4+
* Copyright (c) 2020 The Stdlib Authors.
55
*
66
* Licensed under the Apache License, Version 2.0 (the "License");
77
* you may not use this file except in compliance with the License.
@@ -21,23 +21,30 @@
2121
// MODULES //
2222

2323
var bench = require( '@stdlib/bench' );
24+
var uniform = require( '@stdlib/random/base/uniform' );
25+
var bernoulli = require( '@stdlib/random/base/bernoulli' );
26+
var filledarrayBy = require( '@stdlib/array/filled-by' );
2427
var isnan = require( '@stdlib/math/base/assert/is-nan' );
25-
var uniform = require( '@stdlib/random/array/uniform' );
26-
var bernoulli = require( '@stdlib/random/array/bernoulli' );
2728
var pow = require( '@stdlib/math/base/special/pow' );
2829
var pkg = require( './../package.json' ).name;
29-
var nanmskmin = require( './../lib/nanmskmin.js' );
30+
var nanmskmin = require( './../lib/main.js' );
3031

3132

32-
// VARIABLES //
33-
34-
var options = {
35-
'dtype': 'generic'
36-
};
37-
38-
3933
// FUNCTIONS //
4034

35+
/**
36+
* Returns a random value or `NaN`.
37+
*
38+
* @private
39+
* @returns {number} random number or `NaN`
40+
*/
41+
function rand() {
42+
if ( bernoulli( 0.8 ) < 1 ) {
43+
return NaN;
44+
}
45+
return uniform( -10.0, 10.0 );
46+
}
47+
4148
/**
4249
* Creates a benchmark function.
4350
*
@@ -46,8 +53,11 @@ var nanmskmin = require( './../lib/nanmskmin.js' );
4653
* @returns {Function} benchmark function
4754
*/
4855
function createBenchmark( len ) {
49-
var mask = bernoulli( len, 0.2, options );
50-
var x = uniform( len, -10.0, 10.0, options );
56+
var mask;
57+
var x;
58+
59+
x = filledarrayBy( len, 'generic', rand );
60+
mask = filledarrayBy( len, 'uint8', bernoulli.factory( 0.2 ) );
5161
return benchmark;
5262

5363
function benchmark( b ) {

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

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/**
22
* @license Apache-2.0
33
*
4-
* Copyright (c) 2025 The Stdlib Authors.
4+
* Copyright (c) 2020 The Stdlib Authors.
55
*
66
* Licensed under the Apache License, Version 2.0 (the "License");
77
* you may not use this file except in compliance with the License.
@@ -21,23 +21,30 @@
2121
// MODULES //
2222

2323
var bench = require( '@stdlib/bench' );
24+
var uniform = require( '@stdlib/random/base/uniform' );
25+
var bernoulli = require( '@stdlib/random/base/bernoulli' );
26+
var filledarrayBy = require( '@stdlib/array/filled-by' );
2427
var isnan = require( '@stdlib/math/base/assert/is-nan' );
25-
var uniform = require( '@stdlib/random/array/uniform' );
26-
var bernoulli = require( '@stdlib/random/array/bernoulli' );
2728
var pow = require( '@stdlib/math/base/special/pow' );
2829
var pkg = require( './../package.json' ).name;
2930
var nanmskmin = require( './../lib/ndarray.js' );
3031

3132

32-
// VARIABLES //
33-
34-
var options = {
35-
'dtype': 'generic'
36-
};
37-
38-
3933
// FUNCTIONS //
4034

35+
/**
36+
* Returns a random value or `NaN`.
37+
*
38+
* @private
39+
* @returns {number} random number or `NaN`
40+
*/
41+
function rand() {
42+
if ( bernoulli( 0.8 ) < 1 ) {
43+
return NaN;
44+
}
45+
return uniform( -10.0, 10.0 );
46+
}
47+
4148
/**
4249
* Creates a benchmark function.
4350
*
@@ -46,8 +53,11 @@ var options = {
4653
* @returns {Function} benchmark function
4754
*/
4855
function createBenchmark( len ) {
49-
var mask = bernoulli( len, 0.2, options );
50-
var x = uniform( len, -10.0, 10.0, options );
56+
var mask;
57+
var x;
58+
59+
x = filledarrayBy( len, 'generic', rand );
60+
mask = filledarrayBy( len, 'uint8', bernoulli.factory( 0.2 ) );
5161
return benchmark;
5262

5363
function benchmark( b ) {

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

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
Computes the minimum value of a strided array according to a mask and
44
ignoring `NaN` values.
55

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

99
Indexing is relative to the first index. To introduce offsets, use a typed
@@ -48,18 +48,20 @@
4848
-2.0
4949

5050
// Using `N` and stride parameters:
51-
> x = [ -2.0, 1.0, 1.0, -5.0, 2.0, -1.0, -4.0 ];
52-
> {{alias}}( 3, x, 2, mask, 2 )
51+
> x = [ -2.0, 1.0, 1.0, -5.0, 2.0, -1.0, NaN ];
52+
> mask = [ 0, 0, 0, 0, 0, 0, 1 ];
53+
> {{alias}}( 4, x, 2, mask, 2 )
5354
-2.0
5455

5556
// Using view offsets:
56-
> var x0 = new {{alias:@stdlib/array/float64}}( [ 1.0, -2.0, 3.0, 2.0, 5.0, -1.0, -4.0 ] );
57+
> var x0 = new {{alias:@stdlib/array/float64}}( [ 1.0, -2.0, 3.0, 2.0, 5.0, -1.0, NaN, NaN ] );
5758
> var x1 = new {{alias:@stdlib/array/float64}}( x0.buffer, x0.BYTES_PER_ELEMENT*1 );
58-
> var mask0 = new {{alias:@stdlib/array/uint8}}( [ 0, 0, 0, 0, 0, 0, 1 ] );
59+
> var mask0 = new {{alias:@stdlib/array/uint8}}( [ 0, 0, 0, 0, 0, 0, 1, 1 ] );
5960
> var mask1 = new {{alias:@stdlib/array/uint8}}( mask0.buffer, mask0.BYTES_PER_ELEMENT*1 );
60-
>{{alias}}( 3, x1, 2, mask1, 2 )
61+
> {{alias}}( 4, x1, 2, mask1, 2 )
6162
-2.0
6263

64+
6365
{{alias}}.ndarray( N, x, strideX, offsetX, mask, strideMask, offsetMask )
6466
Computes the minimum value of a strided array according to a mask, ignoring
6567
`NaN` values and using alternative indexing semantics.
@@ -105,9 +107,9 @@
105107
-2.0
106108

107109
// Using offset parameter:
108-
> x = [ 1.0, -2.0, 3.0, 2.0, 5.0, -1.0, -4.0 ];
109-
> mask = [ 0, 0, 0, 0, 0, 0, 1 ];
110-
> {{alias}}.ndarray( 3, x, 2, 1, mask, 2, 1 )
110+
> x = [ 1.0, -2.0, 3.0, 2.0, 5.0, -1.0, -4.0, NaN, NaN ];
111+
> mask = [ 0, 0, 0, 0, 0, 0, 1, 0, 0 ];
112+
> {{alias}}.ndarray( 4, x, 2, 1, mask, 2, 1 )
111113
-2.0
112114

113115
See Also

0 commit comments

Comments
 (0)