Skip to content

Commit

Permalink
Auto-generated commit
Browse files Browse the repository at this point in the history
  • Loading branch information
stdlib-bot committed Feb 1, 2024
1 parent f73c2e7 commit b325d4d
Show file tree
Hide file tree
Showing 6 changed files with 214 additions and 30 deletions.
1 change: 1 addition & 0 deletions .github/.keepalive
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
2024-02-01T05:54:41.704Z
2 changes: 1 addition & 1 deletion NOTICE
Original file line number Diff line number Diff line change
@@ -1 +1 @@
Copyright (c) 2016-2023 The Stdlib Authors.
Copyright (c) 2016-2024 The Stdlib Authors.
22 changes: 10 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,12 +55,14 @@ npm install @stdlib/ndarray-base-maybe-broadcast-arrays

Alternatively,

- To load the package in a website via a `script` tag without installation and bundlers, use the [ES Module][es-module] available on the [`esm` branch][esm-url].
- If you are using Deno, visit the [`deno` branch][deno-url].
- For use in Observable, or in browser/node environments, use the [Universal Module Definition (UMD)][umd] build available on the [`umd` branch][umd-url].
- To load the package in a website via a `script` tag without installation and bundlers, use the [ES Module][es-module] available on the [`esm`][esm-url] branch (see [README][esm-readme]).
- If you are using Deno, visit the [`deno`][deno-url] branch (see [README][deno-readme] for usage intructions).
- For use in Observable, or in browser/node environments, use the [Universal Module Definition (UMD)][umd] build available on the [`umd`][umd-url] branch (see [README][umd-readme]).

The [branches.md][branches-url] file summarizes the available branches and displays a diagram illustrating their relationships.

To view installation and usage instructions specific to each branch build, be sure to explicitly navigate to the respective README files on each branch, as linked to above.

</section>

<section class="usage">
Expand Down Expand Up @@ -191,11 +193,6 @@ For more information on the project, filing bug reports and feature requests, an

---

## License

See [LICENSE][stdlib-license].


## Copyright

Copyright &copy; 2016-2024. The Stdlib [Authors][stdlib-authors].
Expand All @@ -211,8 +208,8 @@ Copyright &copy; 2016-2024. The Stdlib [Authors][stdlib-authors].
[npm-image]: http://img.shields.io/npm/v/@stdlib/ndarray-base-maybe-broadcast-arrays.svg
[npm-url]: https://npmjs.org/package/@stdlib/ndarray-base-maybe-broadcast-arrays

[test-image]: https://github.com/stdlib-js/ndarray-base-maybe-broadcast-arrays/actions/workflows/test.yml/badge.svg?branch=v0.1.0
[test-url]: https://github.com/stdlib-js/ndarray-base-maybe-broadcast-arrays/actions/workflows/test.yml?query=branch:v0.1.0
[test-image]: https://github.com/stdlib-js/ndarray-base-maybe-broadcast-arrays/actions/workflows/test.yml/badge.svg?branch=main
[test-url]: https://github.com/stdlib-js/ndarray-base-maybe-broadcast-arrays/actions/workflows/test.yml?query=branch:main

[coverage-image]: https://img.shields.io/codecov/c/github/stdlib-js/ndarray-base-maybe-broadcast-arrays/main.svg
[coverage-url]: https://codecov.io/github/stdlib-js/ndarray-base-maybe-broadcast-arrays?branch=main
Expand All @@ -235,12 +232,13 @@ Copyright &copy; 2016-2024. The Stdlib [Authors][stdlib-authors].
[es-module]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules

[deno-url]: https://github.com/stdlib-js/ndarray-base-maybe-broadcast-arrays/tree/deno
[deno-readme]: https://github.com/stdlib-js/ndarray-base-maybe-broadcast-arrays/blob/deno/README.md
[umd-url]: https://github.com/stdlib-js/ndarray-base-maybe-broadcast-arrays/tree/umd
[umd-readme]: https://github.com/stdlib-js/ndarray-base-maybe-broadcast-arrays/blob/umd/README.md
[esm-url]: https://github.com/stdlib-js/ndarray-base-maybe-broadcast-arrays/tree/esm
[esm-readme]: https://github.com/stdlib-js/ndarray-base-maybe-broadcast-arrays/blob/esm/README.md
[branches-url]: https://github.com/stdlib-js/ndarray-base-maybe-broadcast-arrays/blob/main/branches.md

[stdlib-license]: https://raw.githubusercontent.com/stdlib-js/ndarray-base-maybe-broadcast-arrays/main/LICENSE

[@stdlib/ndarray/ctor]: https://github.com/stdlib-js/ndarray-ctor

[@stdlib/ndarray/base/ctor]: https://github.com/stdlib-js/ndarray-base-ctor
Expand Down
11 changes: 7 additions & 4 deletions branches.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@ This repository has the following branches:

- **main**: default branch generated from the [stdlib project][stdlib-url], where all development takes place.
- **production**: [production build][production-url] of the package (e.g., reformatted error messages to reduce bundle sizes and thus the number of bytes transmitted over a network).
- **esm**: [ES Module][esm-url] branch for use via a `script` tag without the need for installation and bundlers.
- **deno**: [Deno][deno-url] branch for use in Deno.
- **umd**: [UMD][umd-url] branch for use in Observable, or in dual browser/Node.js environments.
- **esm**: [ES Module][esm-url] branch for use via a `script` tag without the need for installation and bundlers (see [README][esm-readme]).
- **deno**: [Deno][deno-url] branch for use in Deno (see [README][deno-readme]).
- **umd**: [UMD][umd-url] branch for use in Observable, or in dual browser/Node.js environments (see [README][umd-readme]).

The following diagram illustrates the relationships among the above branches:

Expand All @@ -49,5 +49,8 @@ C -->|bundle| F[umd];
[stdlib-url]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/ndarray/base/maybe-broadcast-arrays
[production-url]: https://github.com/stdlib-js/ndarray-base-maybe-broadcast-arrays/tree/production
[deno-url]: https://github.com/stdlib-js/ndarray-base-maybe-broadcast-arrays/tree/deno
[deno-readme]: https://github.com/stdlib-js/ndarray-base-maybe-broadcast-arrays/blob/deno/README.md
[umd-url]: https://github.com/stdlib-js/ndarray-base-maybe-broadcast-arrays/tree/umd
[esm-url]: https://github.com/stdlib-js/ndarray-base-maybe-broadcast-arrays/tree/esm
[umd-readme]: https://github.com/stdlib-js/ndarray-base-maybe-broadcast-arrays/blob/umd/README.md
[esm-url]: https://github.com/stdlib-js/ndarray-base-maybe-broadcast-arrays/tree/esm
[esm-readme]: https://github.com/stdlib-js/ndarray-base-maybe-broadcast-arrays/blob/esm/README.md
75 changes: 62 additions & 13 deletions dist/index.js
Original file line number Diff line number Diff line change
@@ -1,19 +1,68 @@
"use strict";var n=function(e,r){return function(){return r||e((r={exports:{}}).exports,r),r.exports}};var o=n(function(m,i){"use strict";var v=require("@stdlib/ndarray-base-broadcast-shapes"),p=require("@stdlib/ndarray-base-maybe-broadcast-array"),c=require("@stdlib/ndarray-base-shape");function h(e){var r,t,s,u,a;for(u=e.length,r=[],a=0;a<u;a++)r.push(c(e[a],!1));if(s=v(r),s===null)throw new Error("invalid arguments. Input arrays must be broadcast compatible.");for(t=[],a=0;a<u;a++)t.push(p(e[a],s));return t}i.exports=h});var b=o();module.exports=b;
/** @license Apache-2.0 */

'use strict';

/**
* @license Apache-2.0
* Broadcast ndarrays to a common shape.
*
* Copyright (c) 2023 The Stdlib Authors.
* @module @stdlib/ndarray-base-maybe-broadcast-arrays
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* @example
* var array = require( '@stdlib/ndarray-array' );
* var zeros = require( '@stdlib/ndarray-zeros' );
* var maybeBroadcastArrays = require( '@stdlib/ndarray-base-maybe-broadcast-arrays' );
*
* http://www.apache.org/licenses/LICENSE-2.0
* var x = array( [ [ 1, 2 ], [ 3, 4 ] ] );
* // returns <ndarray>
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* var shx = x.shape;
* // returns [ 2, 2 ]
*
* var y1 = zeros( [ 3, 2, 2 ] );
* // returns <ndarray>
*
* var shy = y1.shape;
* // returns [ 3, 2, 2 ]
*
* var out = maybeBroadcastArrays( [ x1, y1 ] );
* // returns [ <ndarray>, <ndarray> ]
*
* var x2 = out[ 0 ];
* // returns <ndarray>
*
* var y2 = out[ 1 ];
* // returns <ndarray>
*
* shx = x2.shape;
* // returns [ 3, 2, 2 ]
*
* shy = y2.shape;
* // returns [ 3, 2, 2 ]
*
* var v = x2.get( 0, 0, 0 );
* // returns 1
*
* v = x2.get( 0, 0, 1 );
* // returns 2
*
* v = x2.get( 1, 0, 0 );
* // returns 1
*
* v = x2.get( 1, 1, 0 );
* // returns 3
*
* v = x2.get( 2, 0, 0 );
* // returns 1
*
* v = x2.get( 2, 1, 1 );
* // returns 4
*/
//# sourceMappingURL=index.js.map

// MODULES //

var main = require( './main.js' );


// EXPORTS //

module.exports = main;
133 changes: 133 additions & 0 deletions dist/main.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
/**
* @license Apache-2.0
*
* Copyright (c) 2023 The Stdlib Authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

'use strict';

// MODULES //

var broadcastShapes = require( '@stdlib/ndarray-base-broadcast-shapes' );
var maybeBroadcastArray = require( '@stdlib/ndarray-base-maybe-broadcast-array' );
var getShape = require( '@stdlib/ndarray-base-shape' );


// MAIN //

/**
* Broadcasts an ndarrays to a common shape.
*
* ## Notes
*
* - If a provided ndarray has a shape matching the common shape, the function returns the provided ndarray.
* - If a provided ndarray has a different (broadcast compatible) shape than the common shape, the function returns a new (base) ndarray view of the provided ndarray's data. The view is typically **not** contiguous. As more than one element of a returned view may refer to the same memory location, writing to a view may affect multiple elements. If you need to write to a returned array, copy the array before performing operations which may mutate elements.
*
* @param {ArrayLikeObject<ndarray>} arrays - list of input arrays
* @throws {Error} input arrays must be broadcast compatible
* @returns {Array<ndarray>} broadcasted arrays
*
* @example
* var array = require( '@stdlib/ndarray-array' );
* var zeros = require( '@stdlib/ndarray-zeros' );
*
* var x1 = array( [ [ 1, 2 ], [ 3, 4 ] ] );
* // returns <ndarray>
*
* var shx = x1.shape;
* // returns [ 2, 2 ]
*
* var y1 = zeros( [ 3, 2, 2 ] );
* // returns <ndarray>
*
* var shy = y1.shape;
* // returns [ 3, 2, 2 ]
*
* var out = maybeBroadcastArrays( [ x1, y1 ] );
* // returns <ndarray>
*
* var x2 = out[ 0 ];
* // returns <ndarray>
*
* var y2 = out[ 1 ];
* // returns <ndarray>
*
* shx = x2.shape;
* // returns [ 3, 2, 2 ]
*
* shy = y2.shape;
* // returns [ 3, 2, 2 ]
*
* var v = x2.get( 0, 0, 0 );
* // returns 1
*
* v = x2.get( 0, 0, 1 );
* // returns 2
*
* v = x2.get( 1, 0, 0 );
* // returns 1
*
* v = x2.get( 1, 1, 0 );
* // returns 3
*
* v = x2.get( 2, 0, 0 );
* // returns 1
*
* v = x2.get( 2, 1, 1 );
* // returns 4
*
* @example
* var zeros = require( '@stdlib/ndarray-zeros' );
*
* var x = zeros( [ 2, 2 ] );
* // returns <ndarray>
*
* var y = zeros( [ 4, 2 ] );
* // returns <ndarray>
*
* var out = maybeBroadcastArrays( [ x, y ] );
* // throws <Error>
*/
function maybeBroadcastArrays( arrays ) {
var shapes;
var out;
var sh;
var N;
var i;

N = arrays.length;

// Resolve the list of shapes...
shapes = [];
for ( i = 0; i < N; i++ ) {
shapes.push( getShape( arrays[ i ], false ) );
}
// Broadcast the shapes to a common shape:
sh = broadcastShapes( shapes );
if ( sh === null ) {
throw new Error( 'invalid arguments. Input arrays must be broadcast compatible.' );
}
// Broadcast each array to the common shape...
out = [];
for ( i = 0; i < N; i++ ) {
out.push( maybeBroadcastArray( arrays[ i ], sh ) );
}
return out;
}


// EXPORTS //

module.exports = maybeBroadcastArrays;

0 comments on commit b325d4d

Please sign in to comment.