@@ -25,6 +25,7 @@ var normalizeIndex = require( '@stdlib/ndarray/base/normalize-index' );
25
25
var isndarrayLike = require ( '@stdlib/assert/is-ndarray-like' ) ;
26
26
var indicesComplement = require ( '@stdlib/array/base/indices-complement' ) ;
27
27
var nditerStacks = require ( '@stdlib/ndarray/iter/stacks' ) ;
28
+ var isNonNegativeInteger = require ( '@stdlib/assert/is-nonnegative-integer' ) ;
28
29
var getShape = require ( '@stdlib/ndarray/shape' ) ;
29
30
var getStrides = require ( '@stdlib/ndarray/strides' ) ;
30
31
var getDtype = require ( '@stdlib/ndarray/dtype' ) ;
@@ -40,9 +41,10 @@ var output = require( './output.js' );
40
41
* Concatenates a list of ndarrays along a specified ndarray dimension.
41
42
*
42
43
* @param {ArrayLikeObject<Object> } arrays - array-like object containing input ndarrays
43
- * @param {integer } dim - dimension along which the arrays are concatenated
44
+ * @param {NegativeInteger } dim - dimension along which the arrays are concatenated
44
45
* @throws {TypeError } first argument must be an array of ndarray-like objects
45
- * @throws {RangeError } first argument must have more than one ndarray
46
+ * @throws {RangeError } first argument must have one or more ndarrays
47
+ * @throws {TypeError } second argument must be a negative integer
46
48
* @returns {ndarray } output ndarray
47
49
*
48
50
* @example
@@ -56,11 +58,11 @@ var output = require( './output.js' );
56
58
* var ybuf = new Float64Array( [ -5.0, 6.0, -7.0, 8.0, -9.0, 10.0 ] );
57
59
* var y = new ndarray( 'float64', ybuf, [ 2, 3 ], [ 3, 1 ], 0, 'row-major' );
58
60
*
59
- * var out = concat( [ x, y ] );
61
+ * var out = concat( [ x, y ], -1 );
60
62
* // returns <ndarray>
61
63
*
62
64
* var arr = ndarray2array( out );
63
- * // returns [ [ -1.0, 2.0, -5.0, 6.0, 7.0 ], [ -3.0, 4.0, 8.0, 9.0, 10.0 ] ]
65
+ * // returns [ [ -1.0, 2.0, -5.0, 6.0, - 7.0 ], [ -3.0, 4.0, 8.0, - 9.0, 10.0 ] ]
64
66
*/
65
67
function concat ( arrays , dim ) {
66
68
var istacks ;
@@ -69,6 +71,7 @@ function concat( arrays, dim ) {
69
71
var shapes ;
70
72
var dtypes ;
71
73
var orders ;
74
+ var nargs ;
72
75
var arrs ;
73
76
var out ;
74
77
var mi ;
@@ -77,10 +80,14 @@ function concat( arrays, dim ) {
77
80
var s ;
78
81
var i ;
79
82
83
+ nargs = arguments . length ;
84
+ if ( nargs === 2 && isNonNegativeInteger ( dim ) ) {
85
+ throw new TypeError ( format ( 'invalid argument. Second argument must be a negative integer. Value: `%s`.' , dim ) ) ;
86
+ }
80
87
N = arrays . length ;
81
88
arrs = [ ] ;
82
89
if ( N < 1 ) {
83
- throw new RangeError ( format ( 'invalid argument. First argument must have more than one ndarray . Value: `%s`.' , N ) ) ;
90
+ throw new RangeError ( format ( 'invalid argument. First argument must have one or more ndarrays . Value: `%s`.' , N ) ) ;
84
91
}
85
92
// Unpack the ndarrays and standardize ndarray meta data:
86
93
shapes = [ ] ;
@@ -89,7 +96,7 @@ function concat( arrays, dim ) {
89
96
orders = [ ] ;
90
97
for ( i = 0 ; i < N ; i ++ ) {
91
98
if ( ! isndarrayLike ( arrays [ i ] ) ) {
92
- throw new TypeError ( format ( 'invalid argument. First argument must be an array of ndarray-like objects . Value: `%s`.' , arrays [ i ] ) ) ;
99
+ throw new TypeError ( format ( 'invalid argument. First argument must be an array of ndarrays . Value: `%s`.' , arrays [ i ] ) ) ;
93
100
}
94
101
arrs [ i ] = arrays [ i ] ;
95
102
shapes . push ( getShape ( arrs [ i ] ) ) ;
0 commit comments