Skip to content

Commit ccde5cb

Browse files
committed
fix: refactor sfill to arrays API
1 parent 9805220 commit ccde5cb

10 files changed

Lines changed: 232 additions & 185 deletions

File tree

lib/node_modules/@stdlib/blas/ext/base/ndarray/sfill/README.md

Lines changed: 34 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,7 @@ limitations under the License.
2020

2121
# sfill
2222

23-
> Fill a single-precision floating-point ndarray with a specified value.
24-
25-
<section class="intro">
26-
27-
</section>
28-
29-
<!-- /.intro -->
23+
> Fill a one-dimensional single-precision floating-point ndarray with a specified value.
3024
3125
<section class="usage">
3226

@@ -36,59 +30,66 @@ limitations under the License.
3630
var sfill = require( '@stdlib/blas/ext/base/ndarray/sfill' );
3731
```
3832

39-
#### sfill( x, alpha )
33+
#### sfill( arrays )
4034

41-
Fills a single-precision floating-point ndarray `x` with a specified value `alpha`.
35+
Fills a one-dimensional single-precision floating-point ndarray `x` with a specified value `alpha`.
4236

4337
```javascript
4438
var Float32Array = require( '@stdlib/array/float32' );
45-
var array = require( '@stdlib/ndarray/array' );
39+
var scalar2ndarray = require( '@stdlib/ndarray/from-scalar' );
40+
var ndarray2array = require( '@stdlib/ndarray/to-array' );
41+
var ndarray = require( '@stdlib/ndarray/base/ctor' );
42+
43+
var xbuf = new Float32Array( [ 1.0, 2.0, 3.0 ] );
44+
var x = new ndarray( 'float32', xbuf, [ 3 ], [ 1 ], 0, 'row-major' );
4645

47-
var x = array( new Float32Array( [ 1.0, 2.0, 3.0 ] ) );
46+
var alpha = scalar2ndarray( 5.0, {
47+
'dtype': 'float32'
48+
});
49+
50+
var out = sfill( [ x, alpha ] );
51+
// returns <ndarray>
4852

49-
var out = sfill( x, 5.0 );
50-
// returns <ndarray>[ 5.0, 5.0, 5.0 ]
53+
var arr = ndarray2array( out );
54+
// returns [ 5.0, 5.0, 5.0 ]
5155
```
5256

5357
The function has the following parameters:
5458

55-
- **x**: input ndarray.
56-
- **alpha**: fill value.
59+
- **arrays**: array-like object containing a single one-dimensional input ndarray and a zero-dimensional ndarray containing a scalar constant.
5760

5861
</section>
5962

6063
<!-- /.usage -->
6164

62-
<section class="notes">
63-
64-
## Notes
65-
66-
- If provided an ndarray with a length of `0`, the function returns the ndarray unchanged.
67-
68-
</section>
69-
70-
<!-- /.notes -->
71-
7265
<section class="examples">
7366

7467
## Examples
7568

76-
<!-- eslint no-undef: "error" -->
77-
7869
```javascript
7970
var discreteUniform = require( '@stdlib/random/array/discrete-uniform' );
8071
var Float32Array = require( '@stdlib/array/float32' );
81-
var array = require( '@stdlib/ndarray/array' );
72+
var scalar2ndarray = require( '@stdlib/ndarray/from-scalar' );
73+
var ndarray2array = require( '@stdlib/ndarray/to-array' );
74+
var ndarray = require( '@stdlib/ndarray/base/ctor' );
8275
var sfill = require( '@stdlib/blas/ext/base/ndarray/sfill' );
8376

84-
var xbuf = discreteUniform( 10, -100, 100, {
77+
var xbuf = new Float32Array( discreteUniform( 10, -50, 50, {
78+
'dtype': 'float32'
79+
}));
80+
var x = new ndarray( 'float32', xbuf, [ xbuf.length ], [ 1 ], 0, 'row-major' );
81+
82+
console.log( 'Before:' );
83+
console.log( ndarray2array( x ) );
84+
85+
var alpha = scalar2ndarray( 5.0, {
8586
'dtype': 'float32'
8687
});
87-
var x = array( xbuf );
88-
console.log( x.data );
8988

90-
sfill( x, 5.0 );
91-
console.log( x.data );
89+
sfill( [ x, alpha ] );
90+
91+
console.log( 'After:' );
92+
console.log( ndarray2array( x ) );
9293
```
9394

9495
</section>

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

Lines changed: 63 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -21,95 +21,88 @@
2121
// MODULES //
2222

2323
var bench = require( '@stdlib/bench' );
24+
var uniform = require( '@stdlib/random/array/uniform' );
25+
var pow = require( '@stdlib/math/base/special/pow' );
2426
var Float32Array = require( '@stdlib/array/float32' );
25-
var array = require( '@stdlib/ndarray/array' );
26-
var isFloat32Array = require( '@stdlib/assert/is-float32array' );
27+
var scalar2ndarray = require( '@stdlib/ndarray/from-scalar' );
28+
var ndarray = require( '@stdlib/ndarray/ctor' );
2729
var pkg = require( './../package.json' ).name;
2830
var sfill = require( './../lib' );
2931

3032

31-
// MAIN //
33+
// VARIABLES //
3234

33-
bench( pkg, function benchmark( b ) {
34-
var x;
35-
var i;
35+
var options = {
36+
'dtype': 'float32'
37+
};
3638

37-
x = array( new Float32Array( 10 ) );
3839

39-
b.tic();
40-
for ( i = 0; i < b.iterations; i++ ) {
41-
sfill( x, 5.0 );
42-
if ( x.data[ 0 ] !== 5.0 ) {
43-
b.fail( 'should fill ndarray' );
44-
}
45-
}
46-
b.toc();
47-
if ( !isFloat32Array( x.data ) ) {
48-
b.fail( 'should return an ndarray' );
49-
}
50-
b.pass( 'benchmark finished' );
51-
b.end();
52-
});
40+
// FUNCTIONS //
5341

54-
bench( pkg+'::ndarray,len=10', function benchmark( b ) {
42+
/**
43+
* Creates a benchmark function.
44+
*
45+
* @private
46+
* @param {PositiveInteger} len - array length
47+
* @returns {Function} benchmark function
48+
*/
49+
function createBenchmark( len ) {
50+
var alpha;
51+
var xbuf;
52+
var buf;
5553
var x;
56-
var i;
5754

58-
x = array( new Float32Array( 10 ) );
55+
buf = uniform( len, 0.0, 100.0, options );
56+
xbuf = new Float32Array( buf );
57+
x = new ndarray( options.dtype, xbuf, [ len ], [ 1 ], 0, 'row-major' );
5958

60-
b.tic();
61-
for ( i = 0; i < b.iterations; i++ ) {
62-
sfill( x, 5.0 );
63-
if ( x.data[ 0 ] !== 5.0 ) {
64-
b.fail( 'should fill ndarray' );
65-
}
66-
}
67-
b.toc();
68-
if ( !isFloat32Array( x.data ) ) {
69-
b.fail( 'should return an ndarray' );
70-
}
71-
b.pass( 'benchmark finished' );
72-
b.end();
73-
});
59+
alpha = scalar2ndarray( 5.0, options );
7460

75-
bench( pkg+'::ndarray,len=100', function benchmark( b ) {
76-
var x;
77-
var i;
61+
return benchmark;
7862

79-
x = array( new Float32Array( 100 ) );
63+
function benchmark( b ) {
64+
var out;
65+
var i;
8066

81-
b.tic();
82-
for ( i = 0; i < b.iterations; i++ ) {
83-
sfill( x, 5.0 );
84-
if ( x.data[ 0 ] !== 5.0 ) {
85-
b.fail( 'should fill ndarray' );
67+
b.tic();
68+
for ( i = 0; i < b.iterations; i++ ) {
69+
out = sfill( [ x, alpha ] );
70+
if ( out !== out ) {
71+
b.fail( 'should not return NaN' );
72+
}
8673
}
74+
b.toc();
75+
if ( out !== out ) {
76+
b.fail( 'should not return NaN' );
77+
}
78+
b.pass( 'benchmark finished' );
79+
b.end();
8780
}
88-
b.toc();
89-
if ( !isFloat32Array( x.data ) ) {
90-
b.fail( 'should return an ndarray' );
91-
}
92-
b.pass( 'benchmark finished' );
93-
b.end();
94-
});
81+
}
9582

96-
bench( pkg+'::ndarray,len=1000', function benchmark( b ) {
97-
var x;
83+
84+
// MAIN //
85+
86+
/**
87+
* Main execution sequence.
88+
*
89+
* @private
90+
*/
91+
function main() {
92+
var len;
93+
var min;
94+
var max;
95+
var f;
9896
var i;
9997

100-
x = array( new Float32Array( 1000 ) );
98+
min = 1; // 10^min
99+
max = 6; // 10^max
101100

102-
b.tic();
103-
for ( i = 0; i < b.iterations; i++ ) {
104-
sfill( x, 5.0 );
105-
if ( x.data[ 0 ] !== 5.0 ) {
106-
b.fail( 'should fill ndarray' );
107-
}
108-
}
109-
b.toc();
110-
if ( !isFloat32Array( x.data ) ) {
111-
b.fail( 'should return an ndarray' );
101+
for ( i = min; i <= max; i++ ) {
102+
len = pow( 10, i );
103+
f = createBenchmark( len );
104+
bench( pkg+':len='+len, f );
112105
}
113-
b.pass( 'benchmark finished' );
114-
b.end();
115-
});
106+
}
107+
108+
main();

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

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11

2-
{{alias}}( x, alpha )
3-
Fills a single-precision floating-point ndarray with a specified value.
2+
{{alias}}( arrays )
3+
Fills a one-dimensional single-precision floating-point ndarray with a
4+
specified value.
45

56
Parameters
67
----------
7-
x: float32ndarray
8-
Input ndarray.
9-
10-
alpha: number
11-
Fill value.
8+
arrays: ArrayLikeObject<ndarray>
9+
Array-like object containing a single one-dimensional input ndarray
10+
and a zero-dimensional ndarray containing a scalar constant.
1211

1312
Returns
1413
-------
@@ -17,10 +16,12 @@
1716

1817
Examples
1918
--------
20-
> var x = {{alias:@stdlib/ndarray/array}}( new {{alias:@stdlib/array/float32}}( [ 1.0, 2.0, 3.0 ] ) );
21-
> {{alias}}( x, 5.0 )
19+
> var xbuf = new {{alias:@stdlib/array/float32}}( [ 1.0, 2.0, 3.0 ] );
20+
> var x = {{alias:@stdlib/ndarray/ctor}}( 'float32', xbuf, [ 3 ], [ 1 ], 0, 'row-major' );
21+
> var s2n = {{alias:@stdlib/ndarray/from-scalar}};
22+
> var alpha = s2n( 5.0, { 'dtype': 'float32' } );
23+
> {{alias}}( [ x, alpha ] )
2224
<ndarray>[ 5.0, 5.0, 5.0 ]
2325

2426
See Also
2527
--------
26-

lib/node_modules/@stdlib/blas/ext/base/ndarray/sfill/docs/types/index.d.ts

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,20 +25,29 @@ import { float32ndarray } from '@stdlib/types/ndarray';
2525
/**
2626
* Fills a single-precision floating-point ndarray with a specified value.
2727
*
28-
* @param x - input ndarray
29-
* @param alpha - fill value
28+
* @param arrays - array-like object containing a single one-dimensional input ndarray and a zero-dimensional ndarray containing a scalar constant
3029
* @returns input ndarray
3130
*
3231
* @example
3332
* var Float32Array = require( '@stdlib/array/float32' );
34-
* var array = require( '@stdlib/ndarray/array' );
33+
* var scalar2ndarray = require( '@stdlib/ndarray/from-scalar' );
34+
* var ndarray2array = require( '@stdlib/ndarray/to-array' );
35+
* var ndarray = require( '@stdlib/ndarray/base/ctor' );
3536
*
36-
* var x = array( new Float32Array( [ 1.0, 2.0, 3.0 ] ) );
37+
* var xbuf = new Float32Array( [ 1.0, 2.0, 3.0 ] );
38+
* var x = new ndarray( 'float32', xbuf, [ 3 ], [ 1 ], 0, 'row-major' );
3739
*
38-
* var out = sfill( x, 5.0 );
39-
* // returns <ndarray>[ 5.0, 5.0, 5.0 ]
40+
* var alpha = scalar2ndarray( 5.0, {
41+
* 'dtype': 'float32'
42+
* });
43+
*
44+
* var out = sfill( [ x, alpha ] );
45+
* // returns <ndarray>
46+
*
47+
* var arr = ndarray2array( out );
48+
* // returns [ 5.0, 5.0, 5.0 ]
4049
*/
41-
declare function sfill( x: float32ndarray, alpha: number ): float32ndarray;
50+
declare function sfill( arrays: [ float32ndarray, float32ndarray ] ): float32ndarray;
4251

4352

4453
// EXPORTS //

0 commit comments

Comments
 (0)