Skip to content

Commit 0f07a02

Browse files
refactor: update blas/ext/base/dnannsumkbn2 to follow current project conventions
PR-URL: #2063 Closes: #1480 Ref: #1152 --------- Signed-off-by: Philipp Burckhardt <[email protected]> Co-authored-by: Philipp Burckhardt <[email protected]> Reviewed-by: Athan Reines <[email protected]> Reviewed-by: Philipp Burckhardt <[email protected]>
1 parent 58cc765 commit 0f07a02

19 files changed

+230
-339
lines changed

lib/node_modules/@stdlib/blas/ext/base/dnannsumkbn2/README.md

+13-22
Original file line numberDiff line numberDiff line change
@@ -58,17 +58,15 @@ The function has the following parameters:
5858
- **out**: output [`Float64Array`][@stdlib/array/float64] whose first element is the sum and whose second element is the number of non-NaN elements.
5959
- **strideOut**: index increment for `out`.
6060

61-
The `N` and `stride` parameters determine which elements are accessed at runtime. For example, to compute the sum of every other element in `x`,
61+
The `N` and stride parameters determine which elements are accessed at runtime. For example, to compute the sum of every other element in `x`,
6262

6363
```javascript
6464
var Float64Array = require( '@stdlib/array/float64' );
65-
var floor = require( '@stdlib/math/base/special/floor' );
6665

6766
var x = new Float64Array( [ 1.0, 2.0, NaN, -7.0, NaN, 3.0, 4.0, 2.0 ] );
6867
var out = new Float64Array( 2 );
69-
var N = floor( x.length / 2 );
7068

71-
var v = dnannsumkbn2( N, x, 2, out, 1 );
69+
var v = dnannsumkbn2( 4, x, 2, out, 1 );
7270
// returns <Float64Array>[ 5.0, 2 ]
7371
```
7472

@@ -78,17 +76,14 @@ Note that indexing is relative to the first index. To introduce an offset, use [
7876

7977
```javascript
8078
var Float64Array = require( '@stdlib/array/float64' );
81-
var floor = require( '@stdlib/math/base/special/floor' );
8279

8380
var x0 = new Float64Array( [ 2.0, 1.0, NaN, -2.0, -2.0, 2.0, 3.0, 4.0 ] );
8481
var x1 = new Float64Array( x0.buffer, x0.BYTES_PER_ELEMENT*1 ); // start at 2nd element
8582

8683
var out0 = new Float64Array( 4 );
8784
var out1 = new Float64Array( out0.buffer, out0.BYTES_PER_ELEMENT*2 ); // start at 3rd element
8885

89-
var N = floor( x0.length / 2 );
90-
91-
var v = dnannsumkbn2( N, x1, 2, out1, 1 );
86+
var v = dnannsumkbn2( 4, x1, 2, out1, 1 );
9287
// returns <Float64Array>[ 5.0, 4 ]
9388
```
9489

@@ -115,13 +110,11 @@ While [`typed array`][mdn-typed-array] views mandate a view offset based on the
115110

116111
```javascript
117112
var Float64Array = require( '@stdlib/array/float64' );
118-
var floor = require( '@stdlib/math/base/special/floor' );
119113

120114
var x = new Float64Array( [ 2.0, 1.0, NaN, -2.0, -2.0, 2.0, 3.0, 4.0 ] );
121115
var out = new Float64Array( 4 );
122-
var N = floor( x.length / 2 );
123116

124-
var v = dnannsumkbn2.ndarray( N, x, 2, 1, out, 2, 1 );
117+
var v = dnannsumkbn2.ndarray( 4, x, 2, 1, out, 2, 1 );
125118
// returns <Float64Array>[ 0.0, 5.0, 0.0, 4 ]
126119
```
127120

@@ -146,22 +139,20 @@ var v = dnannsumkbn2.ndarray( N, x, 2, 1, out, 2, 1 );
146139
<!-- eslint no-undef: "error" -->
147140

148141
```javascript
149-
var randu = require( '@stdlib/random/base/randu' );
150-
var round = require( '@stdlib/math/base/special/round' );
142+
var bernoulli = require( '@stdlib/random/base/bernoulli' );
143+
var discreteUniform = require( '@stdlib/random/base/discrete-uniform' );
144+
var filledarrayBy = require( '@stdlib/array/filled-by' );
151145
var Float64Array = require( '@stdlib/array/float64' );
152146
var dnannsumkbn2 = require( '@stdlib/blas/ext/base/dnannsumkbn2' );
153147

154-
var x;
155-
var i;
156-
157-
x = new Float64Array( 10 );
158-
for ( i = 0; i < x.length; i++ ) {
159-
if ( randu() < 0.2 ) {
160-
x[ i ] = NaN;
161-
} else {
162-
x[ i ] = round( randu()*100.0 );
148+
function rand() {
149+
if ( bernoulli( 0.8 ) > 0 ) {
150+
return discreteUniform( 0, 100 );
163151
}
152+
return NaN;
164153
}
154+
155+
var x = filledarrayBy( 10, 'float64', rand );
165156
console.log( x );
166157

167158
var out = new Float64Array( 2 );

lib/node_modules/@stdlib/blas/ext/base/dnannsumkbn2/benchmark/benchmark.js

+9-8
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@
2121
// MODULES //
2222

2323
var bench = require( '@stdlib/bench' );
24-
var randu = require( '@stdlib/random/base/randu' );
24+
var bernoulli = require( '@stdlib/random/base/bernoulli' );
25+
var discreteUniform = require( '@stdlib/random/base/discrete-uniform' );
26+
var filledarrayBy = require( '@stdlib/array/filled-by' );
2527
var isnan = require( '@stdlib/math/base/assert/is-nan' );
2628
var pow = require( '@stdlib/math/base/special/pow' );
2729
var Float64Array = require( '@stdlib/array/float64' );
@@ -41,16 +43,15 @@ var dnannsumkbn2 = require( './../lib/dnannsumkbn2.js' );
4143
function createBenchmark( len ) {
4244
var out;
4345
var x;
44-
var i;
4546

46-
x = new Float64Array( len );
47-
for ( i = 0; i < len; i++ ) {
48-
if ( randu() < 0.2 ) {
49-
x[ i ] = NaN;
50-
} else {
51-
x[ i ] = ( randu()*10.0 ) - 20.0;
47+
function clbk() {
48+
if ( bernoulli( 0.7 ) > 0 ) {
49+
return discreteUniform( -10, 10 );
5250
}
51+
return NaN;
5352
}
53+
54+
x = filledarrayBy( len, 'float64', clbk );
5455
out = new Float64Array( 2 );
5556
return benchmark;
5657

lib/node_modules/@stdlib/blas/ext/base/dnannsumkbn2/benchmark/benchmark.native.js

+9-8
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@
2222

2323
var resolve = require( 'path' ).resolve;
2424
var bench = require( '@stdlib/bench' );
25-
var randu = require( '@stdlib/random/base/randu' );
25+
var bernoulli = require( '@stdlib/random/base/bernoulli' );
26+
var discreteUniform = require( '@stdlib/random/base/discrete-uniform' );
27+
var filledarrayBy = require( '@stdlib/array/filled-by' );
2628
var isnan = require( '@stdlib/math/base/assert/is-nan' );
2729
var pow = require( '@stdlib/math/base/special/pow' );
2830
var Float64Array = require( '@stdlib/array/float64' );
@@ -50,16 +52,15 @@ var opts = {
5052
function createBenchmark( len ) {
5153
var out;
5254
var x;
53-
var i;
5455

55-
x = new Float64Array( len );
56-
for ( i = 0; i < len; i++ ) {
57-
if ( randu() < 0.2 ) {
58-
x[ i ] = NaN;
59-
} else {
60-
x[ i ] = ( randu()*10.0 ) - 20.0;
56+
function clbk() {
57+
if ( bernoulli( 0.7 ) > 0 ) {
58+
return discreteUniform( -10, 10 );
6159
}
60+
return NaN;
6261
}
62+
63+
x = filledarrayBy( len, 'float64', clbk );
6364
out = new Float64Array( 2 );
6465
return benchmark;
6566

lib/node_modules/@stdlib/blas/ext/base/dnannsumkbn2/benchmark/benchmark.ndarray.js

+9-8
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@
2121
// MODULES //
2222

2323
var bench = require( '@stdlib/bench' );
24-
var randu = require( '@stdlib/random/base/randu' );
24+
var bernoulli = require( '@stdlib/random/base/bernoulli' );
25+
var discreteUniform = require( '@stdlib/random/base/discrete-uniform' );
26+
var filledarrayBy = require( '@stdlib/array/filled-by' );
2527
var isnan = require( '@stdlib/math/base/assert/is-nan' );
2628
var pow = require( '@stdlib/math/base/special/pow' );
2729
var Float64Array = require( '@stdlib/array/float64' );
@@ -41,16 +43,15 @@ var dnannsumkbn2 = require( './../lib/ndarray.js' );
4143
function createBenchmark( len ) {
4244
var out;
4345
var x;
44-
var i;
4546

46-
x = new Float64Array( len );
47-
for ( i = 0; i < len; i++ ) {
48-
if ( randu() < 0.2 ) {
49-
x[ i ] = NaN;
50-
} else {
51-
x[ i ] = ( randu()*10.0 ) - 20.0;
47+
function clbk() {
48+
if ( bernoulli( 0.7 ) > 0 ) {
49+
return discreteUniform( -10, 10 );
5250
}
51+
return NaN;
5352
}
53+
54+
x = filledarrayBy( len, 'float64', clbk );
5455
out = new Float64Array( 2 );
5556
return benchmark;
5657

lib/node_modules/@stdlib/blas/ext/base/dnannsumkbn2/benchmark/benchmark.ndarray.native.js

+9-8
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@
2222

2323
var resolve = require( 'path' ).resolve;
2424
var bench = require( '@stdlib/bench' );
25-
var randu = require( '@stdlib/random/base/randu' );
25+
var bernoulli = require( '@stdlib/random/base/bernoulli' );
26+
var discreteUniform = require( '@stdlib/random/base/discrete-uniform' );
27+
var filledarrayBy = require( '@stdlib/array/filled-by' );
2628
var isnan = require( '@stdlib/math/base/assert/is-nan' );
2729
var pow = require( '@stdlib/math/base/special/pow' );
2830
var Float64Array = require( '@stdlib/array/float64' );
@@ -50,16 +52,15 @@ var opts = {
5052
function createBenchmark( len ) {
5153
var out;
5254
var x;
53-
var i;
5455

55-
x = new Float64Array( len );
56-
for ( i = 0; i < len; i++ ) {
57-
if ( randu() < 0.2 ) {
58-
x[ i ] = NaN;
59-
} else {
60-
x[ i ] = ( randu()*10.0 ) - 20.0;
56+
function clbk() {
57+
if ( bernoulli( 0.7 ) > 0 ) {
58+
return discreteUniform( -10, 10 );
6159
}
60+
return NaN;
6261
}
62+
63+
x = filledarrayBy( len, 'float64', clbk );
6364
out = new Float64Array( 2 );
6465
return benchmark;
6566

lib/node_modules/@stdlib/blas/ext/base/dnannsumkbn2/docs/repl.txt

+8-10
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
ignoring `NaN` values and using a second-order iterative Kahan–Babuška
55
algorithm.
66

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

1010
Indexing is relative to the first index. To introduce an offset, use a typed
1111
array view.
@@ -46,26 +46,25 @@
4646
// Using `N` and `stride` parameters:
4747
> x = new {{alias:@stdlib/array/float64}}( [ -2.0, 1.0, 1.0, -5.0, 2.0, -1.0, NaN, NaN ] );
4848
> out = new {{alias:@stdlib/array/float64}}( 2 );
49-
> var N = {{alias:@stdlib/math/base/special/floor}}( x.length / 2 );
50-
> {{alias}}( N, x, 2, out, 1 )
49+
> {{alias}}( 4, x, 2, out, 1 )
5150
<Float64Array>[ 1.0, 3 ]
5251

5352
// Using view offsets:
5453
> var x0 = new {{alias:@stdlib/array/float64}}( [ 1.0, -2.0, 3.0, 2.0, 5.0, 1.0, NaN, NaN ] );
5554
> var x1 = new {{alias:@stdlib/array/float64}}( x0.buffer, x0.BYTES_PER_ELEMENT*1 );
56-
> N = {{alias:@stdlib/math/base/special/floor}}( x0.length / 2 );
5755
> out = new {{alias:@stdlib/array/float64}}( 2 );
58-
> {{alias}}( N, x1, 2, out, 1 )
56+
> {{alias}}( 4, x1, 2, out, 1 )
5957
<Float64Array>[ 1.0, 3 ]
6058

59+
6160
{{alias}}.ndarray( N, x, strideX, offsetX, out, strideOut, offsetOut )
6261
Computes the sum of double-precision floating-point strided array elements,
6362
ignoring `NaN` values and using a second-order iterative Kahan–Babuška
6463
algorithm and alternative indexing semantics.
6564

6665
While typed array views mandate a view offset based on the underlying
67-
buffer, the `offset` parameter supports indexing semantics based on a
68-
starting index.
66+
buffer, the offset parameters supports indexing semantics
67+
based on a starting index.
6968

7069
Parameters
7170
----------
@@ -106,9 +105,8 @@
106105

107106
// Using offset parameter:
108107
> var x = new {{alias:@stdlib/array/float64}}( [ 1.0, -2.0, 3.0, 2.0, 5.0, 1.0, NaN, NaN ] );
109-
> var N = {{alias:@stdlib/math/base/special/floor}}( x.length / 2 );
110108
> out = new {{alias:@stdlib/array/float64}}( 2 );
111-
> {{alias}}.ndarray( N, x, 2, 1, out, 1, 0 )
109+
> {{alias}}.ndarray( 4, x, 2, 1, out, 1, 0 )
112110
<Float64Array>[ 1.0, 3 ]
113111

114112
See Also

lib/node_modules/@stdlib/blas/ext/base/dnannsumkbn2/examples/index.js

+10-13
Original file line numberDiff line numberDiff line change
@@ -18,25 +18,22 @@
1818

1919
'use strict';
2020

21-
var randu = require( '@stdlib/random/base/randu' );
22-
var round = require( '@stdlib/math/base/special/round' );
21+
var bernoulli = require( '@stdlib/random/base/bernoulli' );
22+
var discreteUniform = require( '@stdlib/random/base/discrete-uniform' );
23+
var filledarrayBy = require( '@stdlib/array/filled-by' );
2324
var Float64Array = require( '@stdlib/array/float64' );
2425
var dnannsumkbn2 = require( './../lib' );
2526

26-
var out;
27-
var x;
28-
var i;
29-
30-
x = new Float64Array( 10 );
31-
for ( i = 0; i < x.length; i++ ) {
32-
if ( randu() < 0.2 ) {
33-
x[ i ] = NaN;
34-
} else {
35-
x[ i ] = round( randu()*100.0 );
27+
function rand() {
28+
if ( bernoulli( 0.8 ) > 0 ) {
29+
return discreteUniform( 0, 100 );
3630
}
31+
return NaN;
3732
}
33+
34+
var x = filledarrayBy( 10, 'float64', rand );
3835
console.log( x );
3936

40-
out = new Float64Array( 2 );
37+
var out = new Float64Array( 2 );
4138
dnannsumkbn2( x.length, x, 1, out, 1 );
4239
console.log( out );

lib/node_modules/@stdlib/blas/ext/base/dnannsumkbn2/include.gypi

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636

3737
# Source files:
3838
'src_files': [
39-
'<(src_dir)/addon.cpp',
39+
'<(src_dir)/addon.c',
4040
'<!@(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 ] ); }")',
4141
],
4242

lib/node_modules/@stdlib/blas/ext/base/dnannsumkbn2/lib/index.js

+1-4
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,12 @@
3535
*
3636
* @example
3737
* var Float64Array = require( '@stdlib/array/float64' );
38-
* var floor = require( '@stdlib/math/base/special/floor' );
3938
* var dnannsumkbn2 = require( '@stdlib/blas/ext/base/dnannsumkbn2' );
4039
*
4140
* var x = new Float64Array( [ 2.0, 1.0, 2.0, -2.0, -2.0, 2.0, 3.0, 4.0, NaN, NaN ] );
4241
* var out = new Float64Array( 2 );
4342
*
44-
* var N = floor( x.length / 2 );
45-
*
46-
* var v = dnannsumkbn2.ndarray( N, x, 2, 1, out, 1, 0 );
43+
* var v = dnannsumkbn2.ndarray( 5, x, 2, 1, out, 1, 0 );
4744
* // returns <Float64Array>[ 5.0, 4 ]
4845
*/
4946

lib/node_modules/@stdlib/blas/ext/base/dnannsumkbn2/lib/ndarray.js

+1-4
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,11 @@ var abs = require( '@stdlib/math/base/special/abs' );
4848
*
4949
* @example
5050
* var Float64Array = require( '@stdlib/array/float64' );
51-
* var floor = require( '@stdlib/math/base/special/floor' );
5251
*
5352
* var x = new Float64Array( [ 2.0, 1.0, 2.0, -2.0, -2.0, 2.0, 3.0, 4.0, NaN, NaN ] );
5453
* var out = new Float64Array( 2 );
5554
*
56-
* var N = floor( x.length / 2 );
57-
*
58-
* var v = dnannsumkbn2( N, x, 2, 1, out, 1, 0 );
55+
* var v = dnannsumkbn2( 5, x, 2, 1, out, 1, 0 );
5956
* // returns <Float64Array>[ 5.0, 4 ]
6057
*/
6158
function dnannsumkbn2( N, x, strideX, offsetX, out, strideOut, offsetOut ) {

lib/node_modules/@stdlib/blas/ext/base/dnannsumkbn2/lib/ndarray.native.js

+8-10
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@
2020

2121
// MODULES //
2222

23-
var Float64Array = require( '@stdlib/array/float64' );
23+
var minViewBufferIndex = require( '@stdlib/strided/base/min-view-buffer-index' );
24+
var offsetView = require( '@stdlib/strided/base/offset-view' );
2425
var addon = require( './dnannsumkbn2.native.js' );
2526

2627

@@ -40,27 +41,24 @@ var addon = require( './dnannsumkbn2.native.js' );
4041
*
4142
* @example
4243
* var Float64Array = require( '@stdlib/array/float64' );
43-
* var floor = require( '@stdlib/math/base/special/floor' );
4444
*
4545
* var x = new Float64Array( [ 2.0, 1.0, 2.0, -2.0, -2.0, 2.0, 3.0, 4.0, NaN, NaN ] );
4646
* var out = new Float64Array( 2 );
4747
*
48-
* var N = floor( x.length / 2 );
49-
*
50-
* var v = dnannsumkbn2( N, x, 2, 1, out, 1, 0 );
48+
* var v = dnannsumkbn2( 5, x, 2, 1, out, 1, 0 );
5149
* // returns <Float64Array>[ 5.0, 4 ]
5250
*/
5351
function dnannsumkbn2( N, x, strideX, offsetX, out, strideOut, offsetOut ) {
5452
var viewOut;
5553
var viewX;
56-
if ( strideX < 0 ) {
57-
offsetX += (N-1) * strideX;
58-
}
54+
55+
offsetX = minViewBufferIndex( N, strideX, offsetX );
5956
if ( strideOut < 0 ) {
6057
offsetOut += strideOut;
6158
}
62-
viewX = new Float64Array( x.buffer, x.byteOffset+(x.BYTES_PER_ELEMENT*offsetX), x.length-offsetX ); // eslint-disable-line max-len
63-
viewOut = new Float64Array( out.buffer, out.byteOffset+(out.BYTES_PER_ELEMENT*offsetOut), out.length-offsetOut ); // eslint-disable-line max-len
59+
60+
viewX = offsetView( x, offsetX );
61+
viewOut = offsetView( out, offsetOut );
6462
addon( N, viewX, strideX, viewOut, strideOut );
6563
return out;
6664
}

0 commit comments

Comments
 (0)