{"version":3,"file":"index.mjs","sources":["../lib/main.js"],"sourcesContent":["/**\n* @license Apache-2.0\n*\n* Copyright (c) 2023 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport isndarrayLike from '@stdlib/assert-is-ndarray-like';\nimport isArrayLikeObject from '@stdlib/assert-is-array-like-object';\nimport broadcastShapes from '@stdlib/ndarray-base-broadcast-shapes';\nimport broadcastArray from '@stdlib/ndarray-broadcast-array';\nimport getShape from '@stdlib/ndarray-shape';\nimport format from '@stdlib/error-tools-fmtprodmsg';\n\n\n// MAIN //\n\n/**\n* Broadcasts ndarrays to a common shape.\n*\n* ## Notes\n*\n* - The returned arrays are **read-only** views on their respective underlying data buffers. The views are 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 one of the input arrays, copy the input array before broadcasting.\n*\n* @param {...ndarray} arrays - ndarray arguments\n* @throws {TypeError} first argument must be an ndarray or an array of ndarrays\n* @throws {TypeError} must provide valid ndarray arguments\n* @throws {Error} input arrays must be broadcast compatible\n* @returns {Array} broadcasted arrays\n*\n* @example\n* import array from '@stdlib/ndarray-array';\n* import zeros from '@stdlib/ndarray-zeros';\n*\n* var x1 = array( [ [ 1, 2 ], [ 3, 4 ] ] );\n* // returns \n*\n* var shx = x1.shape;\n* // returns [ 2, 2 ]\n*\n* var y1 = zeros( [ 3, 2, 2 ] );\n* // returns \n*\n* var shy = y1.shape;\n* // returns [ 3, 2, 2 ]\n*\n* var out = broadcastArrays( [ x1, y1 ] );\n* // returns \n*\n* var x2 = out[ 0 ];\n* // returns \n*\n* var y2 = out[ 1 ];\n* // returns \n*\n* shx = x2.shape;\n* // returns [ 3, 2, 2 ]\n*\n* shy = y2.shape;\n* // returns [ 3, 2, 2 ]\n*\n* var v = x2.get( 0, 0, 0 );\n* // returns 1\n*\n* v = x2.get( 0, 0, 1 );\n* // returns 2\n*\n* v = x2.get( 1, 0, 0 );\n* // returns 1\n*\n* v = x2.get( 1, 1, 0 );\n* // returns 3\n*\n* v = x2.get( 2, 0, 0 );\n* // returns 1\n*\n* v = x2.get( 2, 1, 1 );\n* // returns 4\n*\n* @example\n* import zeros from '@stdlib/ndarray-zeros';\n*\n* var x = zeros( [ 2, 2 ] );\n* // returns \n*\n* var y = zeros( [ 4, 2 ] );\n* // returns \n*\n* var out = broadcastArrays( [ x, y ] );\n* // throws \n*/\nfunction broadcastArrays( arrays ) {\n\tvar shapes;\n\tvar nargs;\n\tvar list;\n\tvar out;\n\tvar sh;\n\tvar N;\n\tvar i;\n\n\tnargs = arguments.length;\n\tif ( nargs === 0 ) {\n\t\tlist = [];\n\t} else if ( nargs > 1 ) {\n\t\tlist = [];\n\t\tfor ( i = 0; i < arguments.length; i++ ) {\n\t\t\tlist.push( arguments[ i ] );\n\t\t}\n\t} else if ( isndarrayLike( arrays ) ) {\n\t\tlist = [ arrays ];\n\t} else if ( isArrayLikeObject( arrays ) ) {\n\t\tlist = arrays;\n\t} else {\n\t\tthrow new TypeError( format( '1nbFJ', arrays ) );\n\t}\n\tN = list.length;\n\n\t// Resolve the list of shapes...\n\tshapes = [];\n\tfor ( i = 0; i < N; i++ ) {\n\t\t// Delegate input argument validation to `getShape`...\n\t\ttry {\n\t\t\tshapes.push( getShape( list[ i ] ) );\n\t\t} catch ( err ) { // eslint-disable-line no-unused-vars\n\t\t\tthrow new TypeError( format( '1nbFK', list[ i ] ) );\n\t\t}\n\t}\n\t// Broadcast the shapes to a common shape:\n\tsh = broadcastShapes( shapes );\n\tif ( sh === null ) {\n\t\tthrow new Error( format('1nbFH') );\n\t}\n\t// Broadcast each array to the common shape...\n\tout = [];\n\tfor ( i = 0; i < N; i++ ) {\n\t\tout.push( broadcastArray( list[ i ], sh ) );\n\t}\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default broadcastArrays;\n"],"names":["broadcastArrays","arrays","shapes","nargs","list","out","sh","N","i","arguments","length","push","isndarrayLike","isArrayLikeObject","TypeError","format","getShape","err","broadcastShapes","Error","broadcastArray"],"mappings":";;0kBA0GA,SAASA,EAAiBC,GACzB,IAAIC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAGJ,GAAe,KADfL,EAAQM,UAAUC,QAEjBN,EAAO,QACD,GAAKD,EAAQ,EAEnB,IADAC,EAAO,GACDI,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAClCJ,EAAKO,KAAMF,UAAWD,SAEjB,GAAKI,EAAeX,GAC1BG,EAAO,CAAEH,OACH,KAAKY,EAAmBZ,GAG9B,MAAM,IAAIa,UAAWC,EAAQ,QAASd,IAFtCG,EAAOH,CAGP,CAKD,IAJAM,EAAIH,EAAKM,OAGTR,EAAS,GACHM,EAAI,EAAGA,EAAID,EAAGC,IAEnB,IACCN,EAAOS,KAAMK,EAAUZ,EAAMI,IAC7B,CAAC,MAAQS,GACT,MAAM,IAAIH,UAAWC,EAAQ,QAASX,EAAMI,IAC5C,CAIF,GAAY,QADZF,EAAKY,EAAiBhB,IAErB,MAAM,IAAIiB,MAAOJ,EAAO,UAIzB,IADAV,EAAM,GACAG,EAAI,EAAGA,EAAID,EAAGC,IACnBH,EAAIM,KAAMS,EAAgBhB,EAAMI,GAAKF,IAEtC,OAAOD,CACR"}