@@ -1651,7 +1651,7 @@ function _typed_hcat(::Type{T}, A::AbstractVecOrTuple{AbstractVecOrMat}) where T
16511651 for j = 1 : nargs
16521652 Aj = A[j]
16531653 if size (Aj, 1 ) != nrows
1654- throw (ArgumentError (" number of rows of each array must match (got $(map (x-> size (x,1 ), A)) )" ))
1654+ throw (DimensionMismatch (" number of rows of each array must match (got $(map (x-> size (x,1 ), A)) )" ))
16551655 end
16561656 dense &= isa (Aj,Array)
16571657 nd = ndims (Aj)
@@ -1686,7 +1686,7 @@ function _typed_vcat(::Type{T}, A::AbstractVecOrTuple{AbstractVecOrMat}) where T
16861686 ncols = size (A[1 ], 2 )
16871687 for j = 2 : nargs
16881688 if size (A[j], 2 ) != ncols
1689- throw (ArgumentError (" number of columns of each array must match (got $(map (x-> size (x,2 ), A)) )" ))
1689+ throw (DimensionMismatch (" number of columns of each array must match (got $(map (x-> size (x,2 ), A)) )" ))
16901690 end
16911691 end
16921692 B = similar (A[1 ], T, nrows, ncols)
@@ -1984,16 +1984,14 @@ julia> cat(1, [2], [3;;]; dims=Val(2))
19841984
19851985# The specializations for 1 and 2 inputs are important
19861986# especially when running with --inline=no, see #11158
1987- # The specializations for Union{AbstractVecOrMat,Number} are necessary
1988- # to have more specialized methods here than in LinearAlgebra/uniformscaling.jl
19891987vcat (A:: AbstractArray ) = cat (A; dims= Val (1 ))
19901988vcat (A:: AbstractArray , B:: AbstractArray ) = cat (A, B; dims= Val (1 ))
19911989vcat (A:: AbstractArray... ) = cat (A... ; dims= Val (1 ))
1992- vcat (A:: Union{AbstractVecOrMat ,Number} ...) = cat (A... ; dims= Val (1 ))
1990+ vcat (A:: Union{AbstractArray ,Number} ...) = cat (A... ; dims= Val (1 ))
19931991hcat (A:: AbstractArray ) = cat (A; dims= Val (2 ))
19941992hcat (A:: AbstractArray , B:: AbstractArray ) = cat (A, B; dims= Val (2 ))
19951993hcat (A:: AbstractArray... ) = cat (A... ; dims= Val (2 ))
1996- hcat (A:: Union{AbstractVecOrMat ,Number} ...) = cat (A... ; dims= Val (2 ))
1994+ hcat (A:: Union{AbstractArray ,Number} ...) = cat (A... ; dims= Val (2 ))
19971995
19981996typed_vcat (T:: Type , A:: AbstractArray ) = _cat_t (Val (1 ), T, A)
19991997typed_vcat (T:: Type , A:: AbstractArray , B:: AbstractArray ) = _cat_t (Val (1 ), T, A, B)
@@ -2055,8 +2053,8 @@ julia> hvcat((2,2,2), a,b,c,d,e,f) == hvcat(2, a,b,c,d,e,f)
20552053true
20562054```
20572055"""
2058- hvcat (rows:: Tuple{Vararg{Int}} , xs:: AbstractVecOrMat ... ) = typed_hvcat (promote_eltype (xs... ), rows, xs... )
2059- hvcat (rows:: Tuple{Vararg{Int}} , xs:: AbstractVecOrMat {T} ...) where {T} = typed_hvcat (T, rows, xs... )
2056+ hvcat (rows:: Tuple{Vararg{Int}} , xs:: AbstractArray ... ) = typed_hvcat (promote_eltype (xs... ), rows, xs... )
2057+ hvcat (rows:: Tuple{Vararg{Int}} , xs:: AbstractArray {T} ...) where {T} = typed_hvcat (T, rows, xs... )
20602058
20612059function typed_hvcat (:: Type{T} , rows:: Tuple{Vararg{Int}} , as:: AbstractVecOrMat... ) where T
20622060 nbr = length (rows) # number of block rows
@@ -2084,16 +2082,16 @@ function typed_hvcat(::Type{T}, rows::Tuple{Vararg{Int}}, as::AbstractVecOrMat..
20842082 Aj = as[a+ j- 1 ]
20852083 szj = size (Aj,2 )
20862084 if size (Aj,1 ) != szi
2087- throw (ArgumentError (" mismatched height in block row $(i) (expected $szi , got $(size (Aj,1 )) )" ))
2085+ throw (DimensionMismatch (" mismatched height in block row $(i) (expected $szi , got $(size (Aj,1 )) )" ))
20882086 end
20892087 if c- 1 + szj > nc
2090- throw (ArgumentError (" block row $(i) has mismatched number of columns (expected $nc , got $(c- 1 + szj) )" ))
2088+ throw (DimensionMismatch (" block row $(i) has mismatched number of columns (expected $nc , got $(c- 1 + szj) )" ))
20912089 end
20922090 out[r: r- 1 + szi, c: c- 1 + szj] = Aj
20932091 c += szj
20942092 end
20952093 if c != nc+ 1
2096- throw (ArgumentError (" block row $(i) has mismatched number of columns (expected $nc , got $(c- 1 ) )" ))
2094+ throw (DimensionMismatch (" block row $(i) has mismatched number of columns (expected $nc , got $(c- 1 ) )" ))
20972095 end
20982096 r += szi
20992097 a += rows[i]
@@ -2115,7 +2113,7 @@ function hvcat(rows::Tuple{Vararg{Int}}, xs::T...) where T<:Number
21152113 k = 1
21162114 @inbounds for i= 1 : nr
21172115 if nc != rows[i]
2118- throw (ArgumentError (" row $(i) has mismatched number of columns (expected $nc , got $(rows[i]) )" ))
2116+ throw (DimensionMismatch (" row $(i) has mismatched number of columns (expected $nc , got $(rows[i]) )" ))
21192117 end
21202118 for j= 1 : nc
21212119 a[i,j] = xs[k]
@@ -2144,14 +2142,14 @@ end
21442142hvcat (rows:: Tuple{Vararg{Int}} , xs:: Number... ) = typed_hvcat (promote_typeof (xs... ), rows, xs... )
21452143hvcat (rows:: Tuple{Vararg{Int}} , xs... ) = typed_hvcat (promote_eltypeof (xs... ), rows, xs... )
21462144# the following method is needed to provide a more specific one compared to LinearAlgebra/uniformscaling.jl
2147- hvcat (rows:: Tuple{Vararg{Int}} , xs:: Union{AbstractVecOrMat ,Number} ...) = typed_hvcat (promote_eltypeof (xs... ), rows, xs... )
2145+ hvcat (rows:: Tuple{Vararg{Int}} , xs:: Union{AbstractArray ,Number} ...) = typed_hvcat (promote_eltypeof (xs... ), rows, xs... )
21482146
21492147function typed_hvcat (:: Type{T} , rows:: Tuple{Vararg{Int}} , xs:: Number... ) where T
21502148 nr = length (rows)
21512149 nc = rows[1 ]
21522150 for i = 2 : nr
21532151 if nc != rows[i]
2154- throw (ArgumentError (" row $(i) has mismatched number of columns (expected $nc , got $(rows[i]) )" ))
2152+ throw (DimensionMismatch (" row $(i) has mismatched number of columns (expected $nc , got $(rows[i]) )" ))
21552153 end
21562154 end
21572155 hvcat_fill! (Matrix {T} (undef, nr, nc), xs)
@@ -2319,7 +2317,7 @@ function _typed_hvncat(::Type{T}, ::Val{N}, as::AbstractArray...) where {T, N}
23192317 Ndim += cat_size (as[i], N)
23202318 nd = max (nd, cat_ndims (as[i]))
23212319 for d ∈ 1 : N - 1
2322- cat_size (as[1 ], d) == cat_size (as[i], d) || throw (ArgumentError (" mismatched size along axis $d in element $i " ))
2320+ cat_size (as[1 ], d) == cat_size (as[i], d) || throw (DimensionMismatch (" mismatched size along axis $d in element $i " ))
23232321 end
23242322 end
23252323
@@ -2346,7 +2344,7 @@ function _typed_hvncat(::Type{T}, ::Val{N}, as...) where {T, N}
23462344 nd = max (nd, cat_ndims (as[i]))
23472345 for d ∈ 1 : N- 1
23482346 cat_size (as[i], d) == 1 ||
2349- throw (ArgumentError (" all dimensions of element $i other than $N must be of length 1" ))
2347+ throw (DimensionMismatch (" all dimensions of element $i other than $N must be of length 1" ))
23502348 end
23512349 end
23522350
@@ -2463,7 +2461,7 @@ function _typed_hvncat_dims(::Type{T}, dims::NTuple{N, Int}, row_first::Bool, as
24632461 for dd ∈ 1 : N
24642462 dd == d && continue
24652463 if cat_size (as[startelementi], dd) != cat_size (as[i], dd)
2466- throw (ArgumentError (" incompatible shape in element $i " ))
2464+ throw (DimensionMismatch (" incompatible shape in element $i " ))
24672465 end
24682466 end
24692467 end
@@ -2500,18 +2498,18 @@ function _typed_hvncat_dims(::Type{T}, dims::NTuple{N, Int}, row_first::Bool, as
25002498 elseif currentdims[d] < outdims[d] # dimension in progress
25012499 break
25022500 else # exceeded dimension
2503- throw (ArgumentError (" argument $i has too many elements along axis $d " ))
2501+ throw (DimensionMismatch (" argument $i has too many elements along axis $d " ))
25042502 end
25052503 end
25062504 end
25072505 elseif currentdims[d1] > outdims[d1] # exceeded dimension
2508- throw (ArgumentError (" argument $i has too many elements along axis $d1 " ))
2506+ throw (DimensionMismatch (" argument $i has too many elements along axis $d1 " ))
25092507 end
25102508 end
25112509
25122510 outlen = prod (outdims)
25132511 elementcount == outlen ||
2514- throw (ArgumentError (" mismatched number of elements; expected $(outlen) , got $(elementcount) " ))
2512+ throw (DimensionMismatch (" mismatched number of elements; expected $(outlen) , got $(elementcount) " ))
25152513
25162514 # copy into final array
25172515 A = cat_similar (as[1 ], T, outdims)
@@ -2572,8 +2570,8 @@ function _typed_hvncat_shape(::Type{T}, shape::NTuple{N, Tuple}, row_first, as::
25722570 if d == 1 || i == 1 || wasstartblock
25732571 currentdims[d] += dsize
25742572 elseif dsize != cat_size (as[i - 1 ], ad)
2575- throw (ArgumentError (" argument $i has a mismatched number of elements along axis $ad ; \
2576- expected $(cat_size (as[i - 1 ], ad)) , got $dsize " ))
2573+ throw (DimensionMismatch (" argument $i has a mismatched number of elements along axis $ad ; \
2574+ expected $(cat_size (as[i - 1 ], ad)) , got $dsize " ))
25772575 end
25782576
25792577 wasstartblock = blockcounts[d] == 1 # remember for next dimension
@@ -2583,15 +2581,15 @@ function _typed_hvncat_shape(::Type{T}, shape::NTuple{N, Tuple}, row_first, as::
25832581 if outdims[d] == - 1
25842582 outdims[d] = currentdims[d]
25852583 elseif outdims[d] != currentdims[d]
2586- throw (ArgumentError (" argument $i has a mismatched number of elements along axis $ad ; \
2587- expected $(abs (outdims[d] - (currentdims[d] - dsize))) , got $dsize " ))
2584+ throw (DimensionMismatch (" argument $i has a mismatched number of elements along axis $ad ; \
2585+ expected $(abs (outdims[d] - (currentdims[d] - dsize))) , got $dsize " ))
25882586 end
25892587 currentdims[d] = 0
25902588 blockcounts[d] = 0
25912589 shapepos[d] += 1
25922590 d > 1 && (blockcounts[d - 1 ] == 0 ||
2593- throw (ArgumentError (" shape in level $d is inconsistent; level counts must nest \
2594- evenly into each other" )))
2591+ throw (DimensionMismatch (" shape in level $d is inconsistent; level counts must nest \
2592+ evenly into each other" )))
25952593 end
25962594 end
25972595 end
0 commit comments