@stdlib/blas-ext-base-gfill-by 0.0.6 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/NOTICE CHANGED
@@ -1 +1 @@
1
- Copyright (c) 2016-2021 The Stdlib Authors.
1
+ Copyright (c) 2016-2022 The Stdlib Authors.
package/README.md CHANGED
@@ -20,7 +20,7 @@ limitations under the License.
20
20
 
21
21
  # gfillBy
22
22
 
23
- [![NPM version][npm-image]][npm-url] [![Build Status][test-image]][test-url] [![Coverage Status][coverage-image]][coverage-url] [![dependencies][dependencies-image]][dependencies-url]
23
+ [![NPM version][npm-image]][npm-url] [![Build Status][test-image]][test-url] [![Coverage Status][coverage-image]][coverage-url] <!-- [![dependencies][dependencies-image]][dependencies-url] -->
24
24
 
25
25
  > Fill a strided array according to a provided callback function.
26
26
 
@@ -60,7 +60,7 @@ gfillBy( x.length, x, 1, fill );
60
60
  The function has the following parameters:
61
61
 
62
62
  - **N**: number of indexed elements.
63
- - **x**: input [`Array`][mdn-array], [`typed array`][mdn-typed-array], or an array-like object (excluding strings and functions).
63
+ - **x**: input array.
64
64
  - **stride**: index increment.
65
65
  - **clbk**: callback function.
66
66
  - **thisArg**: execution context (_optional_).
@@ -172,6 +172,7 @@ gfillBy.ndarray( 3, x, 1, x.length-3, fill );
172
172
  ## Notes
173
173
 
174
174
  - If `N <= 0`, both functions return `x` unchanged.
175
+ - Both functions support array-like objects having getter and setter accessors for array element access (e.g., [`@stdlib/array/complex64`][@stdlib/array/complex64]).
175
176
  - When filling a strided array with a scalar constant, prefer using [`dfill`][@stdlib/blas/ext/base/dfill], [`sfill`][@stdlib/blas/ext/base/sfill], and/or [`gfill`][@stdlib/blas/ext/base/gfill], as, depending on the environment, these interfaces are likely to be significantly more performant.
176
177
 
177
178
  </section>
@@ -212,6 +213,22 @@ console.log( x );
212
213
 
213
214
  <!-- /.examples -->
214
215
 
216
+ <!-- Section for related `stdlib` packages. Do not manually edit this section, as it is automatically populated. -->
217
+
218
+ <section class="related">
219
+
220
+ * * *
221
+
222
+ ## See Also
223
+
224
+ - <span class="package-name">[`@stdlib/blas/ext/base/gfill`][@stdlib/blas/ext/base/gfill]</span><span class="delimiter">: </span><span class="description">fill a strided array with a specified scalar constant.</span>
225
+
226
+ </section>
227
+
228
+ <!-- /.related -->
229
+
230
+ <!-- Section for all links. Make sure to keep an empty line after the `section` element and another before the `/section` close. -->
231
+
215
232
 
216
233
  <section class="main-repo" >
217
234
 
@@ -236,7 +253,7 @@ See [LICENSE][stdlib-license].
236
253
 
237
254
  ## Copyright
238
255
 
239
- Copyright &copy; 2016-2021. The Stdlib [Authors][stdlib-authors].
256
+ Copyright &copy; 2016-2022. The Stdlib [Authors][stdlib-authors].
240
257
 
241
258
  </section>
242
259
 
@@ -255,9 +272,20 @@ Copyright &copy; 2016-2021. The Stdlib [Authors][stdlib-authors].
255
272
  [coverage-image]: https://img.shields.io/codecov/c/github/stdlib-js/blas-ext-base-gfill-by/main.svg
256
273
  [coverage-url]: https://codecov.io/github/stdlib-js/blas-ext-base-gfill-by?branch=main
257
274
 
275
+ <!--
276
+
258
277
  [dependencies-image]: https://img.shields.io/david/stdlib-js/blas-ext-base-gfill-by.svg
259
278
  [dependencies-url]: https://david-dm.org/stdlib-js/blas-ext-base-gfill-by/main
260
279
 
280
+ -->
281
+
282
+ [umd]: https://github.com/umdjs/umd
283
+ [es-module]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules
284
+
285
+ [deno-url]: https://github.com/stdlib-js/blas-ext-base-gfill-by/tree/deno
286
+ [umd-url]: https://github.com/stdlib-js/blas-ext-base-gfill-by/tree/umd
287
+ [esm-url]: https://github.com/stdlib-js/blas-ext-base-gfill-by/tree/esm
288
+
261
289
  [chat-image]: https://img.shields.io/gitter/room/stdlib-js/stdlib.svg
262
290
  [chat-url]: https://gitter.im/stdlib-js/stdlib/
263
291
 
@@ -267,15 +295,19 @@ Copyright &copy; 2016-2021. The Stdlib [Authors][stdlib-authors].
267
295
 
268
296
  [stdlib-license]: https://raw.githubusercontent.com/stdlib-js/blas-ext-base-gfill-by/main/LICENSE
269
297
 
270
- [mdn-array]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array
271
-
272
298
  [mdn-typed-array]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray
273
299
 
300
+ [@stdlib/array/complex64]: https://www.npmjs.com/package/@stdlib/array-complex64
301
+
274
302
  [@stdlib/blas/ext/base/dfill]: https://www.npmjs.com/package/@stdlib/blas-ext-base-dfill
275
303
 
304
+ [@stdlib/blas/ext/base/sfill]: https://www.npmjs.com/package/@stdlib/blas-ext-base-sfill
305
+
306
+ <!-- <related-links> -->
307
+
276
308
  [@stdlib/blas/ext/base/gfill]: https://www.npmjs.com/package/@stdlib/blas-ext-base-gfill
277
309
 
278
- [@stdlib/blas/ext/base/sfill]: https://www.npmjs.com/package/@stdlib/blas-ext-base-sfill
310
+ <!-- </related-links> -->
279
311
 
280
312
  </section>
281
313
 
package/docs/repl.txt CHANGED
@@ -25,9 +25,8 @@
25
25
  N: integer
26
26
  Number of indexed elements.
27
27
 
28
- x: Array|TypedArray|Object
29
- Input array/collection. If provided an object, the object must be array-
30
- like (excluding strings and functions).
28
+ x: ArrayLikeObject
29
+ Input array.
31
30
 
32
31
  stride: integer
33
32
  Index increment for `x`.
@@ -40,8 +39,8 @@
40
39
 
41
40
  Returns
42
41
  -------
43
- x: Array|TypedArray|Object
44
- Input array/collection `x`.
42
+ x: ArrayLikeObject
43
+ Input array `x`.
45
44
 
46
45
  Examples
47
46
  --------
@@ -66,6 +65,7 @@
66
65
  > x0
67
66
  <Float64Array>[ 1.0, 5.0, 3.0, 5.0, 5.0, 5.0 ]
68
67
 
68
+
69
69
  {{alias}}.ndarray( N, x, stride, offset, clbk[, thisArg] )
70
70
  Fills a strided array according to a provided callback function and using
71
71
  alternative indexing semantics.
@@ -79,9 +79,8 @@
79
79
  N: integer
80
80
  Number of indexed elements.
81
81
 
82
- x: Array|TypedArray|Object
83
- Input array/collection. If provided an object, the object must be array-
84
- like (excluding strings and functions).
82
+ x: ArrayLikeObject
83
+ Input array.
85
84
 
86
85
  stride: integer
87
86
  Index increment for `x`.
@@ -97,8 +96,8 @@
97
96
 
98
97
  Returns
99
98
  -------
100
- x: Array|TypedArray|Object
101
- Input array/collection `x`.
99
+ x: ArrayLikeObject
100
+ Input array `x`.
102
101
 
103
102
  Examples
104
103
  --------
@@ -54,7 +54,7 @@ type Binary = ( value: any, aidx: number ) => any;
54
54
  * @param sidx - strided index (offset + aidx*stride)
55
55
  * @returns fill value
56
56
  */
57
- type Tertiary = ( value: any, aidx: number, sidx: number ) => any;
57
+ type Ternary = ( value: any, aidx: number, sidx: number ) => any;
58
58
 
59
59
  /**
60
60
  * Returns a fill value.
@@ -76,7 +76,7 @@ type Quaternary = ( value: any, aidx: number, sidx: number, array: Collection )
76
76
  * @param array - input array
77
77
  * @returns fill value
78
78
  */
79
- type Callback = Nullary | Unary | Binary | Tertiary | Quaternary;
79
+ type Callback = Nullary | Unary | Binary | Ternary | Quaternary;
80
80
 
81
81
  /**
82
82
  * Interface describing `gfillBy`.
@@ -0,0 +1,93 @@
1
+ /**
2
+ * @license Apache-2.0
3
+ *
4
+ * Copyright (c) 2022 The Stdlib Authors.
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */
18
+
19
+ 'use strict';
20
+
21
+ // MAIN //
22
+
23
+ /**
24
+ * Fills a strided array according to a provided callback function.
25
+ *
26
+ * @private
27
+ * @param {PositiveInteger} N - number of indexed elements
28
+ * @param {Object} x - input array object
29
+ * @param {Collection} x.data - input array data
30
+ * @param {Function} x.set - setter
31
+ * @param {Function} x.get - getter
32
+ * @param {integer} stride - index increment
33
+ * @param {NonNegativeInteger} offset - starting index
34
+ * @param {Callback} clbk - callback
35
+ * @param {*} thisArg - execution context
36
+ * @returns {Object} input array object
37
+ *
38
+ * @example
39
+ * var Complex64Array = require( '@stdlib/array-complex64' );
40
+ * var Complex64 = require( '@stdlib/complex-float32' );
41
+ * var reinterpret64 = require( '@stdlib/strided-base-reinterpret-complex64' );
42
+ *
43
+ * function setter( data, idx, value ) {
44
+ * data.set( value, idx );
45
+ * }
46
+ *
47
+ * function getter( data, idx ) {
48
+ * return data.get( idx );
49
+ * }
50
+ *
51
+ * var data = new Complex64Array( [ -2.0, 1.0, 3.0, -5.0, 4.0, 0.0, -1.0, -3.0 ] );
52
+ *
53
+ * var x = {
54
+ * 'data': data,
55
+ * 'setter': setter,
56
+ * 'getter': getter
57
+ * };
58
+ *
59
+ * function clbk() {
60
+ * return new Complex64( 5.0, 5.0 );
61
+ * }
62
+ *
63
+ * gfillBy( data.length, x, 1, 0, clbk, void 0 );
64
+ *
65
+ * var view = reinterpret64( x.data, 0 );
66
+ * // view => <Float32Array>[ 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0 ]
67
+ */
68
+ function gfillBy( N, x, stride, offset, clbk, thisArg ) {
69
+ var xbuf;
70
+ var set;
71
+ var get;
72
+ var ix;
73
+ var i;
74
+
75
+ // Cache reference to array data:
76
+ xbuf = x.data;
77
+
78
+ // Cache a reference to the element accessors:
79
+ get = x.getter;
80
+ set = x.setter;
81
+
82
+ ix = offset;
83
+ for ( i = 0; i < N; i++ ) {
84
+ set( xbuf, ix, clbk.call( thisArg, get( xbuf, ix ), i, ix, x ) );
85
+ ix += stride;
86
+ }
87
+ return x;
88
+ }
89
+
90
+
91
+ // EXPORTS //
92
+
93
+ module.exports = gfillBy;
package/lib/index.js CHANGED
@@ -50,9 +50,16 @@
50
50
 
51
51
  // MODULES //
52
52
 
53
- var gfillBy = require( './main.js' );
53
+ var setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' );
54
+ var main = require( './main.js' );
55
+ var ndarray = require( './ndarray.js' );
56
+
57
+
58
+ // MAIN //
59
+
60
+ setReadOnly( main, 'ndarray', ndarray );
54
61
 
55
62
 
56
63
  // EXPORTS //
57
64
 
58
- module.exports = gfillBy;
65
+ module.exports = main;
package/lib/main.js CHANGED
@@ -20,14 +20,56 @@
20
20
 
21
21
  // MODULES //
22
22
 
23
- var setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' );
24
- var gfillBy = require( './gfill_by.js' );
25
- var ndarray = require( './ndarray.js' );
23
+ var arraylike2object = require( '@stdlib/array-base-arraylike2object' );
24
+ var accessors = require( './accessors.js' );
26
25
 
27
26
 
28
27
  // MAIN //
29
28
 
30
- setReadOnly( gfillBy, 'ndarray', ndarray );
29
+ /**
30
+ * Fills a strided array according to a provided callback function.
31
+ *
32
+ * @param {PositiveInteger} N - number of indexed elements
33
+ * @param {Collection} x - input array
34
+ * @param {integer} stride - index increment
35
+ * @param {Callback} clbk - callback
36
+ * @param {*} [thisArg] - execution context
37
+ * @returns {Collection} input array
38
+ *
39
+ * @example
40
+ * var x = [ -2.0, 1.0, 3.0, -5.0, 4.0, 0.0, -1.0, -3.0 ];
41
+ *
42
+ * function fill() {
43
+ * return 5.0;
44
+ * }
45
+ *
46
+ * gfillBy( x.length, x, 1, fill );
47
+ * // x => [ 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0 ]
48
+ */
49
+ function gfillBy( N, x, stride, clbk, thisArg ) {
50
+ var ix;
51
+ var o;
52
+ var i;
53
+
54
+ if ( N <= 0 ) {
55
+ return x;
56
+ }
57
+ if ( stride < 0 ) {
58
+ ix = (1-N) * stride;
59
+ } else {
60
+ ix = 0;
61
+ }
62
+ o = arraylike2object( x );
63
+ if ( o.accessors ) {
64
+ accessors( N, o, stride, ix, clbk, thisArg );
65
+ return o.data;
66
+ }
67
+ for ( i = 0; i < N; i++ ) {
68
+ x[ ix ] = clbk.call( thisArg, x[ ix ], i, ix, x );
69
+ ix += stride;
70
+ }
71
+ return x;
72
+ }
31
73
 
32
74
 
33
75
  // EXPORTS //
package/lib/ndarray.js CHANGED
@@ -18,18 +18,24 @@
18
18
 
19
19
  'use strict';
20
20
 
21
+ // MODULES //
22
+
23
+ var arraylike2object = require( '@stdlib/array-base-arraylike2object' );
24
+ var accessors = require( './accessors.js' );
25
+
26
+
21
27
  // MAIN //
22
28
 
23
29
  /**
24
30
  * Fills a strided array according to a provided callback function.
25
31
  *
26
32
  * @param {PositiveInteger} N - number of indexed elements
27
- * @param {Collection} x - input array/collection
33
+ * @param {Collection} x - input array
28
34
  * @param {integer} stride - index increment
29
35
  * @param {NonNegativeInteger} offset - starting index
30
36
  * @param {Callback} clbk - callback
31
37
  * @param {*} [thisArg] - execution context
32
- * @returns {Collection} input array/collection
38
+ * @returns {Collection} input array
33
39
  *
34
40
  * @example
35
41
  * var x = [ 1.0, -2.0, 3.0, -4.0, 5.0, -6.0 ];
@@ -38,16 +44,22 @@
38
44
  * return 5.0;
39
45
  * }
40
46
  *
41
- * gfillBy( 3, 5.0, x, 1, x.length-3 );
47
+ * gfillBy( 3, x, 1, x.length-3, fill );
42
48
  * // x => [ 1.0, -2.0, 3.0, 5.0, 5.0, 5.0 ]
43
49
  */
44
50
  function gfillBy( N, x, stride, offset, clbk, thisArg ) {
45
51
  var ix;
52
+ var o;
46
53
  var i;
47
54
 
48
55
  if ( N <= 0 ) {
49
56
  return x;
50
57
  }
58
+ o = arraylike2object( x );
59
+ if ( o.accessors ) {
60
+ accessors( N, o, stride, offset, clbk, thisArg );
61
+ return o.data;
62
+ }
51
63
  ix = offset;
52
64
  for ( i = 0; i < N; i++ ) {
53
65
  x[ ix ] = clbk.call( thisArg, x[ ix ], i, ix, x );
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stdlib/blas-ext-base-gfill-by",
3
- "version": "0.0.6",
3
+ "version": "0.0.7",
4
4
  "description": "Fill a strided array according to a provided callback function.",
5
5
  "license": "Apache-2.0",
6
6
  "author": {
@@ -37,16 +37,22 @@
37
37
  "url": "https://github.com/stdlib-js/stdlib/issues"
38
38
  },
39
39
  "dependencies": {
40
+ "@stdlib/array-base-arraylike2object": "^0.0.x",
40
41
  "@stdlib/types": "^0.0.x",
41
42
  "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.x"
42
43
  },
43
44
  "devDependencies": {
45
+ "@stdlib/array-base-filled-by": "^0.0.x",
46
+ "@stdlib/array-complex128": "^0.0.x",
44
47
  "@stdlib/array-float64": "^0.0.x",
45
48
  "@stdlib/bench": "^0.0.x",
49
+ "@stdlib/complex-float64": "^0.0.x",
46
50
  "@stdlib/math-base-assert-is-nan": "^0.0.x",
47
51
  "@stdlib/math-base-special-pow": "^0.0.x",
48
52
  "@stdlib/math-base-special-round": "^0.0.x",
49
53
  "@stdlib/random-base-randu": "^0.0.x",
54
+ "@stdlib/random-base-uniform": "^0.0.x",
55
+ "@stdlib/strided-base-reinterpret-complex128": "^0.0.x",
50
56
  "tape": "git+https://github.com/kgryte/tape.git#fix/globby",
51
57
  "istanbul": "^0.4.1",
52
58
  "tap-spec": "5.x.x"
package/lib/gfill_by.js DELETED
@@ -1,65 +0,0 @@
1
- /**
2
- * @license Apache-2.0
3
- *
4
- * Copyright (c) 2020 The Stdlib Authors.
5
- *
6
- * Licensed under the Apache License, Version 2.0 (the "License");
7
- * you may not use this file except in compliance with the License.
8
- * You may obtain a copy of the License at
9
- *
10
- * http://www.apache.org/licenses/LICENSE-2.0
11
- *
12
- * Unless required by applicable law or agreed to in writing, software
13
- * distributed under the License is distributed on an "AS IS" BASIS,
14
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- * See the License for the specific language governing permissions and
16
- * limitations under the License.
17
- */
18
-
19
- 'use strict';
20
-
21
- // MAIN //
22
-
23
- /**
24
- * Fills a strided array according to a provided callback function.
25
- *
26
- * @param {PositiveInteger} N - number of indexed elements
27
- * @param {Collection} x - input array/collection
28
- * @param {integer} stride - index increment
29
- * @param {Callback} clbk - callback
30
- * @param {*} [thisArg] - execution context
31
- * @returns {Collection} input array/collection
32
- *
33
- * @example
34
- * var x = [ -2.0, 1.0, 3.0, -5.0, 4.0, 0.0, -1.0, -3.0 ];
35
- *
36
- * function fill() {
37
- * return 5.0;
38
- * }
39
- *
40
- * gfillBy( x.length, x, 1, fill );
41
- * // x => [ 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0 ]
42
- */
43
- function gfillBy( N, x, stride, clbk, thisArg ) {
44
- var ix;
45
- var i;
46
-
47
- if ( N <= 0 ) {
48
- return x;
49
- }
50
- if ( stride < 0 ) {
51
- ix = (1-N) * stride;
52
- } else {
53
- ix = 0;
54
- }
55
- for ( i = 0; i < N; i++ ) {
56
- x[ ix ] = clbk.call( thisArg, x[ ix ], i, ix, x );
57
- ix += stride;
58
- }
59
- return x;
60
- }
61
-
62
-
63
- // EXPORTS //
64
-
65
- module.exports = gfillBy;