Skip to content

Commit d7c1e9c

Browse files
committed
fix: refactor sapx to use arrays API pattern
1 parent 051ebdc commit d7c1e9c

10 files changed

Lines changed: 165 additions & 167 deletions

File tree

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

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

2121
# sapx
2222

23-
> Add a scalar constant to each element in a single-precision floating-point ndarray.
23+
> Add a scalar constant to each element in a one-dimensional single-precision floating-point ndarray.
2424
2525
<section class="usage">
2626

@@ -30,56 +30,58 @@ limitations under the License.
3030
var sapx = require( '@stdlib/blas/ext/base/ndarray/sapx' );
3131
```
3232

33-
#### sapx( x, alpha )
33+
#### sapx( arrays )
3434

35-
Adds a scalar constant to each element in a single-precision floating-point ndarray.
35+
Adds a scalar constant to each element in a one-dimensional single-precision floating-point ndarray.
3636

3737
```javascript
3838
var Float32Array = require( '@stdlib/array/float32' );
3939
var ndarray = require( '@stdlib/ndarray/ctor' );
40+
var scalar2ndarray = require( '@stdlib/ndarray/from-scalar' );
41+
var ndarray2array = require( '@stdlib/ndarray/to-array' );
4042

4143
var xbuf = new Float32Array( [ 1.0, 2.0, 3.0, 4.0 ] );
4244
var x = new ndarray( 'float32', xbuf, [ 4 ], [ 1 ], 0, 'row-major' );
4345

44-
var out = sapx( x, 5.0 );
46+
var alpha = scalar2ndarray( 5.0, {
47+
'dtype': 'float32'
48+
});
49+
50+
var out = sapx( [ x, alpha ] );
4551
// returns <ndarray>[ 6.0, 7.0, 8.0, 9.0 ]
52+
53+
var bool = ( out === x );
54+
// returns true
55+
56+
var arr = ndarray2array( out );
57+
// returns [ 6.0, 7.0, 8.0, 9.0 ]
4658
```
4759

4860
The function has the following parameters:
4961

50-
- **x**: input ndarray.
51-
- **alpha**: scalar constant.
52-
53-
Note that indexing is relative to the first index. To introduce an offset, use [`ndarray`][@stdlib/ndarray/ctor] view creation.
62+
- **arrays**: array-like object containing a one-dimensional input ndarray and a zero-dimensional ndarray containing a scalar constant.
5463

5564
```javascript
5665
var Float32Array = require( '@stdlib/array/float32' );
5766
var ndarray = require( '@stdlib/ndarray/ctor' );
67+
var scalar2ndarray = require( '@stdlib/ndarray/from-scalar' );
5868

5969
// Initial array:
6070
var xbuf = new Float32Array( [ 1.0, 2.0, 3.0, 4.0, 5.0 ] );
6171

6272
// Create an ndarray view:
6373
var x = new ndarray( 'float32', xbuf, [ 3 ], [ 1 ], 2, 'row-major' );
64-
65-
var out = sapx( x, 5.0 );
74+
var alpha = scalar2ndarray( 5.0, {
75+
'dtype': 'float32'
76+
});
77+
var out = sapx( [ x, alpha ] );
6678
// returns <ndarray>[ 8.0, 9.0, 10.0 ]
6779
```
6880

6981
</section>
7082

7183
<!-- /.usage -->
7284

73-
<section class="notes">
74-
75-
## Notes
76-
77-
- The function **mutates** the input ndarray.
78-
79-
</section>
80-
81-
<!-- /.notes -->
82-
8385
<section class="examples">
8486

8587
## Examples
@@ -89,18 +91,22 @@ var out = sapx( x, 5.0 );
8991
```javascript
9092
var discreteUniform = require( '@stdlib/random/array/discrete-uniform' );
9193
var ndarray = require( '@stdlib/ndarray/ctor' );
94+
var scalar2ndarray = require( '@stdlib/ndarray/from-scalar' );
95+
var ndarray2array = require( '@stdlib/ndarray/to-array' );
9296
var sapx = require( '@stdlib/blas/ext/base/ndarray/sapx' );
9397

9498
var xbuf = discreteUniform( 10, 0, 100, {
9599
'dtype': 'float32'
96100
});
97101
var x = new ndarray( 'float32', xbuf, [ 10 ], [ 1 ], 0, 'row-major' );
102+
console.log( ndarray2array( x ) );
98103

99-
console.log( x.data );
100-
101-
sapx( x, 5.0 );
104+
var alpha = scalar2ndarray( 5.0, {
105+
'dtype': 'float32'
106+
});
102107

103-
console.log( x.data );
108+
sapx( [ x, alpha ] );
109+
console.log( ndarray2array( x ) );
104110
```
105111

106112
</section>
@@ -119,8 +125,6 @@ console.log( x.data );
119125

120126
<section class="links">
121127

122-
[@stdlib/ndarray/ctor]: https://github.com/stdlib-js/ndarray-ctor
123-
124128
</section>
125129

126130
<!-- /.links -->

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

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,18 @@ var discreteUniform = require( '@stdlib/random/array/discrete-uniform' );
2525
var isnanf = require( '@stdlib/math/base/assert/is-nanf' );
2626
var pow = require( '@stdlib/math/base/special/pow' );
2727
var ndarray = require( '@stdlib/ndarray/ctor' );
28+
var scalar2ndarray = require( '@stdlib/ndarray/from-scalar' );
2829
var pkg = require( './../package.json' ).name;
2930
var sapx = require( './../lib' );
3031

3132

33+
// VARIABLES //
34+
35+
var options = {
36+
'dtype': 'float32'
37+
};
38+
39+
3240
// FUNCTIONS //
3341

3442
/**
@@ -39,11 +47,13 @@ var sapx = require( './../lib' );
3947
* @returns {Function} benchmark function
4048
*/
4149
function createBenchmark( len ) {
50+
var alpha;
51+
var xbuf;
4252
var x;
4353

44-
x = new ndarray( 'float32', discreteUniform( len, -100, 100, {
45-
'dtype': 'float32'
46-
}), [ len ], [ 1 ], 0, 'row-major' );
54+
xbuf = discreteUniform( len, -100, 100, options );
55+
x = new ndarray( options.dtype, xbuf, [ len ], [ 1 ], 0, 'row-major' );
56+
alpha = scalar2ndarray( 5.0, options );
4757

4858
return benchmark;
4959

@@ -59,7 +69,7 @@ function createBenchmark( len ) {
5969

6070
b.tic();
6171
for ( i = 0; i < b.iterations; i++ ) {
62-
z = sapx( x, 5.0 );
72+
z = sapx( [ x, alpha ] );
6373
if ( isnanf( z.data[ i % len ] ) ) {
6474
b.fail( 'should not return NaN' );
6575
}

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

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,28 @@
1-
{{alias}}( x, alpha )
2-
Adds a scalar constant to each element in a single-precision floating-
3-
point ndarray.
1+
2+
{{alias}}( arrays )
3+
Adds a scalar constant to each element in a one-dimensional single-
4+
precision floating-point ndarray.
45

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

1312
Returns
1413
-------
15-
out: float32ndarray
14+
out: ndarray
1615
Input ndarray.
1716

1817
Examples
1918
--------
2019
> var xbuf = new {{alias:@stdlib/array/float32}}( [ 1.0, 2.0, 3.0, 4.0 ] );
2120
> var x = {{alias:@stdlib/ndarray/ctor}}( 'float32', xbuf, [ 4 ], [ 1 ], 0, 'row-major' );
22-
> {{alias}}( x, 5.0 )
21+
> var alpha = {{alias:@stdlib/ndarray/from-scalar}}( 5.0, { 'dtype': 'float32' } );
22+
> {{alias}}( [ x, alpha ] )
2323
<ndarray>[ 6.0, 7.0, 8.0, 9.0 ]
24+
> var data = x.data
25+
<Float32Array>[ 6.0, 7.0, 8.0, 9.0 ]
2426

2527
See Also
2628
--------

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

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,23 +23,31 @@
2323
import { float32ndarray } from '@stdlib/types/ndarray';
2424

2525
/**
26-
* Adds a scalar constant to each element in a single-precision floating-point ndarray.
26+
* Adds a scalar constant to each element in a one-dimensional single-precision floating-point ndarray.
2727
*
28-
* @param x - input ndarray
29-
* @param alpha - scalar constant
28+
* @param arrays - array-like object containing a 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' );
3433
* var ndarray = require( '@stdlib/ndarray/ctor' );
34+
* var scalar2ndarray = require( '@stdlib/ndarray/from-scalar' );
35+
* var ndarray2array = require( '@stdlib/ndarray/to-array' );
3536
*
3637
* var xbuf = new Float32Array( [ 1.0, 2.0, 3.0, 4.0 ] );
3738
* var x = new ndarray( 'float32', xbuf, [ 4 ], [ 1 ], 0, 'row-major' );
3839
*
39-
* var out = sapx( x, 5.0 );
40-
* // returns <ndarray>[ 6.0, 7.0, 8.0, 9.0 ]
40+
* var alpha = scalar2ndarray( 5.0, {
41+
* 'dtype': 'float32'
42+
* });
43+
*
44+
* var out = sapx( [ x, alpha ] );
45+
* // returns <ndarray>
46+
*
47+
* var arr = ndarray2array( out );
48+
* // returns [ 6.0, 7.0, 8.0, 9.0 ]
4149
*/
42-
declare function sapx( x: float32ndarray, alpha: number ): float32ndarray;
50+
declare function sapx( arrays: [ float32ndarray, float32ndarray ] ): float32ndarray;
4351

4452

4553
// EXPORTS //

lib/node_modules/@stdlib/blas/ext/base/ndarray/sapx/docs/types/test.ts

Lines changed: 19 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -16,47 +16,38 @@
1616
* limitations under the License.
1717
*/
1818

19+
import zeros = require( '@stdlib/ndarray/base/zeros' );
20+
import scalar2ndarray = require( '@stdlib/ndarray/from-scalar' );
1921
import sapx = require( './index' );
2022

2123

2224
// TESTS //
2325

2426
// The function returns an ndarray...
2527
{
26-
const x: any = null;
27-
sapx( x, 5.0 ); // $ExpectType float32ndarray
28+
const x = zeros( 'float32', [ 3 ], 'row-major' );
29+
const alpha = scalar2ndarray( 5.0, { 'dtype': 'float32' } );
30+
sapx( [ x, alpha ] ); // $ExpectType float32ndarray
2831
}
2932

30-
// The compiler throws an error if the function is provided a first argument which is not an ndarray...
33+
// The compiler throws an error if the function is provided a first argument which is not an array-like object containing ndarrays...
3134
{
32-
sapx( 123, 5.0 ); // $ExpectError
33-
sapx( true, 5.0 ); // $ExpectError
34-
sapx( false, 5.0 ); // $ExpectError
35-
sapx( null, 5.0 ); // $ExpectError
36-
sapx( undefined, 5.0 ); // $ExpectError
37-
sapx( '5', 5.0 ); // $ExpectError
38-
sapx( [ '1', '2' ], 5.0 ); // $ExpectError
39-
sapx( {}, 5.0 ); // $ExpectError
40-
sapx( ( x: number ): number => x, 5.0 ); // $ExpectError
41-
}
42-
43-
// The compiler throws an error if the function is provided a second argument which is not a number...
44-
{
45-
const x: any = null;
46-
sapx( x, '5' ); // $ExpectError
47-
sapx( x, true ); // $ExpectError
48-
sapx( x, false ); // $ExpectError
49-
sapx( x, null ); // $ExpectError
50-
sapx( x, undefined ); // $ExpectError
51-
sapx( x, [ '1' ] ); // $ExpectError
52-
sapx( x, {} ); // $ExpectError
53-
sapx( x, ( x: number ): number => x ); // $ExpectError
35+
const alpha = scalar2ndarray( 5.0, { 'dtype': 'float32' } );
36+
sapx( 123 ); // $ExpectError
37+
sapx( true ); // $ExpectError
38+
sapx( false ); // $ExpectError
39+
sapx( null ); // $ExpectError
40+
sapx( undefined ); // $ExpectError
41+
sapx( '5' ); // $ExpectError
42+
sapx( [ '1', '2' ] ); // $ExpectError
43+
sapx( {} ); // $ExpectError
44+
sapx( ( x: number ): number => x ); // $ExpectError
5445
}
5546

5647
// The compiler throws an error if the function is provided an unsupported number of arguments...
5748
{
58-
const x: any = null;
49+
const x = zeros( 'float32', [ 3 ], 'row-major' );
50+
const alpha = scalar2ndarray( 5.0, { 'dtype': 'float32' } );
5951
sapx(); // $ExpectError
60-
sapx( x ); // $ExpectError
61-
sapx( x, 5.0, 10 ); // $ExpectError
52+
sapx( [ x, alpha ], 10 ); // $ExpectError
6253
}

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

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,26 @@
1818

1919
'use strict';
2020

21+
// MODULES //
22+
2123
var discreteUniform = require( '@stdlib/random/array/discrete-uniform' );
2224
var ndarray = require( '@stdlib/ndarray/ctor' );
25+
var scalar2ndarray = require( '@stdlib/ndarray/from-scalar' );
26+
var ndarray2array = require( '@stdlib/ndarray/to-array' );
2327
var sapx = require( './../lib' );
2428

29+
30+
// MAIN //
31+
2532
var xbuf = discreteUniform( 10, 0, 100, {
2633
'dtype': 'float32'
2734
});
2835
var x = new ndarray( 'float32', xbuf, [ 10 ], [ 1 ], 0, 'row-major' );
36+
console.log( ndarray2array( x ) );
2937

30-
console.log( x.data );
31-
32-
sapx( x, 5.0 );
38+
var alpha = scalar2ndarray( 5.0, {
39+
'dtype': 'float32'
40+
});
3341

34-
console.log( x.data );
42+
sapx( [ x, alpha ] );
43+
console.log( ndarray2array( x ) );

lib/node_modules/@stdlib/blas/ext/base/ndarray/sapx/lib/index.js

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,20 +19,29 @@
1919
'use strict';
2020

2121
/**
22-
* Add a scalar constant to each element in a single-precision floating-point ndarray.
22+
* Add a scalar constant to each element in a one-dimensional single-precision floating-point ndarray.
2323
*
2424
* @module @stdlib/blas/ext/base/ndarray/sapx
2525
*
2626
* @example
2727
* var Float32Array = require( '@stdlib/array/float32' );
2828
* var ndarray = require( '@stdlib/ndarray/ctor' );
29+
* var scalar2ndarray = require( '@stdlib/ndarray/from-scalar' );
30+
* var ndarray2array = require( '@stdlib/ndarray/to-array' );
2931
* var sapx = require( '@stdlib/blas/ext/base/ndarray/sapx' );
3032
*
3133
* var xbuf = new Float32Array( [ 1.0, 2.0, 3.0, 4.0 ] );
3234
* var x = new ndarray( 'float32', xbuf, [ 4 ], [ 1 ], 0, 'row-major' );
3335
*
34-
* var out = sapx( x, 5.0 );
35-
* // returns <ndarray>[ 6.0, 7.0, 8.0, 9.0 ]
36+
* var alpha = scalar2ndarray( 5.0, {
37+
* 'dtype': 'float32'
38+
* });
39+
*
40+
* var out = sapx( [ x, alpha ] );
41+
* // returns <ndarray>
42+
*
43+
* var arr = ndarray2array( out );
44+
* // returns [ 6.0, 7.0, 8.0, 9.0 ]
3645
*/
3746

3847
// MODULES //

0 commit comments

Comments
 (0)