From 38419ed6f252d665e74c4c3262fb31d65f759f60 Mon Sep 17 00:00:00 2001 From: Andreas Noack Date: Sat, 14 Jul 2018 04:12:58 +0200 Subject: [PATCH] Add checks that reductions along dimensions are inferred --- base/abstractarray.jl | 4 ++-- test/reducedim.jl | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/base/abstractarray.jl b/base/abstractarray.jl index 41dbb078c766d..676feaaa63264 100644 --- a/base/abstractarray.jl +++ b/base/abstractarray.jl @@ -1927,10 +1927,10 @@ function mapslices(f, A::AbstractArray; dims) # TODO: maybe support removing dimensions if !isa(r1, AbstractArray) || ndims(r1) == 0 # If the result of f on a single slice is a scalar then we add singleton - # dimensions. When adding adding the dimensions, we have to respect the + # dimensions. When adding the dimensions, we have to respect the # index type of the input array (e.g. in the case of OffsetArrays) tmp = similar(Aslice, typeof(r1), reduced_indices(Aslice, 1:ndims(Aslice))) - tmp[first(CartesianIndices(tmp))] = r1 + tmp[firstindex(tmp)] = r1 r1 = tmp end nextra = max(0, length(dims)-ndims(r1)) diff --git a/test/reducedim.jl b/test/reducedim.jl index 95fd9aeed6e93..18c7619ad66f7 100644 --- a/test/reducedim.jl +++ b/test/reducedim.jl @@ -50,14 +50,14 @@ safe_minabs(A::Array{T}, region) where {T} = safe_mapslices(minimum, abs.(A), re fill!(r, -1.5) @test minimum!(abs, r, Areduc, init=false) ≈ fill!(r2, -1.5) - @test sum(Areduc, dims=region) ≈ safe_sum(Areduc, region) - @test prod(Areduc, dims=region) ≈ safe_prod(Areduc, region) - @test maximum(Areduc, dims=region) ≈ safe_maximum(Areduc, region) - @test minimum(Areduc, dims=region) ≈ safe_minimum(Areduc, region) - @test sum(abs, Areduc, dims=region) ≈ safe_sumabs(Areduc, region) - @test sum(abs2, Areduc, dims=region) ≈ safe_sumabs2(Areduc, region) - @test maximum(abs, Areduc, dims=region) ≈ safe_maxabs(Areduc, region) - @test minimum(abs, Areduc, dims=region) ≈ safe_minabs(Areduc, region) + @test @inferred(sum(Areduc, dims=region)) ≈ safe_sum(Areduc, region) + @test @inferred(prod(Areduc, dims=region)) ≈ safe_prod(Areduc, region) + @test @inferred(maximum(Areduc, dims=region)) ≈ safe_maximum(Areduc, region) + @test @inferred(minimum(Areduc, dims=region)) ≈ safe_minimum(Areduc, region) + @test @inferred(sum(abs, Areduc, dims=region)) ≈ safe_sumabs(Areduc, region) + @test @inferred(sum(abs2, Areduc, dims=region)) ≈ safe_sumabs2(Areduc, region) + @test @inferred(maximum(abs, Areduc, dims=region)) ≈ safe_maxabs(Areduc, region) + @test @inferred(minimum(abs, Areduc, dims=region)) ≈ safe_minabs(Areduc, region) end # Test reduction along first dimension; this is special-cased for