Skip to content

Commit 17f851b

Browse files
committed
type-stable
1 parent 96dce9e commit 17f851b

File tree

2 files changed

+8
-7
lines changed

2 files changed

+8
-7
lines changed

base/abstractarray.jl

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2788,19 +2788,20 @@ function mapslices(f, A::AbstractArray; dims)
27882788
Aslice = A[idx1...]
27892789
r1 = f(Aslice)
27902790

2791-
if r1 isa AbstractArray && ndims(r1) > 0
2791+
res1 = if r1 isa AbstractArray && ndims(r1) > 0
27922792
n = sum(dim_mask)
27932793
if ndims(r1) > n && any(ntuple(d -> size(r1,d+n)>1, ndims(r1)-n))
27942794
s = size(r1)[1:n]
27952795
throw(DimensionMismatch("cannot assign slice f(x) of size $(size(r1)) into output of size $s"))
27962796
end
2797-
res1 = r1
2797+
r1
27982798
else
27992799
# If the result of f on a single slice is a scalar then we add singleton
28002800
# dimensions. When adding the dimensions, we have to respect the
28012801
# index type of the input array (e.g. in the case of OffsetArrays)
2802-
res1 = similar(Aslice, typeof(r1), reduced_indices(Aslice, 1:ndims(Aslice)))
2803-
res1[begin] = r1
2802+
_res1 = similar(Aslice, typeof(r1), reduced_indices(Aslice, 1:ndims(Aslice)))
2803+
_res1[begin] = r1
2804+
_res1
28042805
end
28052806

28062807
# Determine result size and allocate. We always pad ndims(res1) out to length(dims):

test/arrayops.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1201,7 +1201,7 @@ end
12011201
@test mapslices(nnz, sparse(1.0I, 3, 3), dims=1) == [1 1 1]
12021202

12031203
r = rand(Int8, 4,5,2)
1204-
@test mapslices(transpose, r, dims=(1,3)) == permutedims(r, (3,2,1))
1204+
@test @inferred(mapslices(transpose, r, dims=(1,3))) == permutedims(r, (3,2,1))
12051205
@test vec(mapslices(repr, r, dims=(2,1))) == map(repr, eachslice(r, dims=3))
12061206
@test mapslices(cumsum, sparse(r[:,:,1]), dims=1) == cumsum(r[:,:,1], dims=1)
12071207
@test mapslices(prod, sparse(r[:,:,1]), dims=1) == prod(r[:,:,1], dims=1)
@@ -1210,8 +1210,8 @@ end
12101210
@test_throws ArgumentError mapslices(identity, rand(2,3), dims=0) # previously BoundsError
12111211
@test_throws ArgumentError mapslices(identity, rand(2,3), dims=(1,3)) # previously BoundsError
12121212
@test_throws DimensionMismatch mapslices(x -> x * x', rand(2,3), dims=1) # explicitly caught
1213-
@test mapslices(hcat, [1 2; 3 4], dims=1) == [1 2; 3 4] # previously an error, now allowed
1214-
@test mapslices(identity, [1 2; 3 4], dims=(2,2)) == [1 2; 3 4] # previously an error
1213+
@test @inferred(mapslices(hcat, [1 2; 3 4], dims=1)) == [1 2; 3 4] # previously an error, now allowed
1214+
@test @inferred(mapslices(identity, [1 2; 3 4], dims=(2,2))) == [1 2; 3 4] # previously an error
12151215
end
12161216

12171217
@testset "single multidimensional index" begin

0 commit comments

Comments
 (0)