function assign( x, y ) {
		var xsh;
		var ysh;
		var i;
		if ( isndarrayLike( x ) ) {
			if ( isndarrayLike( y ) ) {
				xsh = x.shape;
				ysh = y.shape;

				// Check whether we need to broadcast `x`...
				if ( xsh.length === ysh.length ) {
					for ( i = 0; i < xsh.length; i++ ) {
						// Check whether dimensions match...
						if ( xsh[ i ] !== ysh[ i ] ) {
							// We found a mismatched dimension; delegate to `broadcast` to ensure that `x` is broadcast compatible with the output array shape...
							x = broadcast( x, ysh );
							break;
						}
					}
				} else {
					// If we are provided arrays with different ranks (i.e., number of dimensions), assume we need to broadcast, delegating to `broadcast` to ensure that `x` is broadcast compatible with the output array shape...
					x = broadcast( x, ysh );
				}
				t.ndarray( x, y );
				return y;
			}
			throw new TypeError( 'invalid argument. If the first argument is an ndarray, the second argument must be an ndarray.' );
		}
		if ( isCollection( x ) ) {
			if ( isCollection( y ) ) {
				if ( y.length !== x.length ) {
					throw new RangeError( 'invalid argument. Output array must have the same number of elements (i.e., length) as the input array.' );
				}
				t.array( x.length, dtype( x ) || 'generic', x, 1, dtype( y ) || 'generic', y, 1 );
				return y;
			}
			throw new TypeError( 'invalid argument. If the first argument is an array-like object, the second argument must be an array-like object.' );
		}
		if ( isNumber( x ) ) {
			throw new TypeError( 'invalid argument. Providing a number is not supported. Consider providing a zero-dimensional ndarray containing the numeric value.' );
		}
		if ( isComplexLike( x ) ) {
			throw new TypeError( 'invalid argument. Providing a complex number is not supported. Consider providing a zero-dimensional ndarray containing the complex number value.' );
		}
		throw new TypeError( format( 'invalid argument. Must provide an argument having a supported data type. Value: `%s`.', x ) );
	}
Function interface which performs dispatch and assigns results to a provided output array.

@private
@param {(ndarray|Collection)} x - input array
@param {(ndarray|Collection)} y - output array
@throws {TypeError} first argument must be a supported data type
@throws {TypeError} second argument must be a supported data type
@throws {TypeError} first and second argument must be the same "kind" (i.e., either both ndarrays or both collections)
@throws {RangeError} output array must have sufficient elements
@throws {Error} unable to broadcast the input array against the output array
@returns {(ndarray|Collection)} output array