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 Jan 1, 2024
1 parent cba2074 commit 1c7935a
Show file tree
Hide file tree
Showing 4 changed files with 202 additions and 12 deletions.
1 change: 1 addition & 0 deletions .github/.keepalive
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
2024-01-01T05:05:55.742Z
9 changes: 1 addition & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -191,14 +191,9 @@ For more information on the project, filing bug reports and feature requests, an

---

## License

See [LICENSE][stdlib-license].


## Copyright

Copyright © 2016-2023. The Stdlib [Authors][stdlib-authors].
Copyright © 2016-2024. The Stdlib [Authors][stdlib-authors].

</section>

Expand Down Expand Up @@ -239,8 +234,6 @@ Copyright &copy; 2016-2023. The Stdlib [Authors][stdlib-authors].
[esm-url]: https://github.com/stdlib-js/ndarray-base-maybe-broadcast-arrays/tree/esm
[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
71 changes: 67 additions & 4 deletions dist/index.js
Original file line number Diff line number Diff line change
@@ -1,5 +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){
var v=require('@stdlib/ndarray-base-broadcast-shapes/dist'),p=require('@stdlib/ndarray-base-maybe-broadcast-array/dist'),c=require('@stdlib/ndarray-base-shape/dist');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 */
//# sourceMappingURL=index.js.map

'use strict';

/**
* Broadcast ndarrays to a common shape.
*
* @module @stdlib/ndarray-base-maybe-broadcast-arrays
*
* @example
* var array = require( '@stdlib/ndarray-array' );
* var zeros = require( '@stdlib/ndarray-zeros' );
* var maybeBroadcastArrays = require( '@stdlib/ndarray-base-maybe-broadcast-arrays' );
*
* var x = array( [ [ 1, 2 ], [ 3, 4 ] ] );
* // returns <ndarray>
*
* 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
*/

// 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 1c7935a

Please sign in to comment.