Skip to content

Commit c474d3f

Browse files
committed
https://github.com/JuliaLang/julia/pull/33130
1 parent 29e95d7 commit c474d3f

File tree

3 files changed

+41
-1
lines changed

3 files changed

+41
-1
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,8 @@ Currently, the `@compat` macro supports the following syntaxes:
114114

115115
## New functions, macros, and methods
116116

117+
* A new `dropdims(f, args...; dims, kwargs...)` method computes the reduction `f` over the region described by `dims` and then drops those dimensions from the result ([#33130]).
118+
117119
* `eachrow`, `eachcol`, and `eachslice` to iterate over first, second, or given dimension
118120
of an array ([#29749]).
119121

src/Compat.jl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1866,6 +1866,11 @@ if v"0.7.0" <= VERSION < v"1.1.0-DEV.594"
18661866
Base.merge(a::NamedTuple) = a
18671867
end
18681868

1869+
# https://github.com/JuliaLang/julia/pull/33130
1870+
if VERSION < v"1.4.0-DEV.79" # not in fact merged yet!
1871+
Base.dropdims(f, args...; dims, kwargs...) = _dropdims(f(args...; kwargs..., dims=dims), dims)
1872+
end
1873+
18691874
include("deprecated.jl")
18701875

18711876
end # module Compat

test/runtests.jl

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ if VERSION >= v"0.7"
3838
@test collect(eachrow(M)) == collect(eachslice(M, dims = 1)) == [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
3939
@test collect(eachcol(M)) == collect(eachslice(M, dims = 2)) == [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
4040
@test_throws DimensionMismatch eachslice(M, dims = 4)
41-
41+
4242
# Higher-dimensional case
4343
M = reshape([(1:16)...], 2, 2, 2, 2)
4444
@test_throws MethodError collect(eachrow(M))
@@ -1499,4 +1499,37 @@ end
14991499
@test merge((a=1,), (b=2,), (c=3,)) == (a=1,b=2,c=3)
15001500
end
15011501

1502+
# https://github.com/JuliaLang/julia/pull/33130
1503+
@testset "dropdims with reductions" begin # issue #16606
1504+
@test (@inferred(dropdims(sum, a, dims=1)) ==
1505+
@inferred(dropdims(sum, a, dims=(1,))) ==
1506+
reshape(sum(a, dims=1), (1, 8, 8, 1)))
1507+
@test (@inferred(dropdims(sum, a, dims=3)) ==
1508+
@inferred(dropdims(sum, a, dims=(3,))) ==
1509+
reshape(sum(a, dims=3), (1, 1, 8, 1)))
1510+
@test (@inferred(dropdims(sum, a, dims=4)) ==
1511+
@inferred(dropdims(sum, a, dims=(4,))) ==
1512+
reshape(sum(a, dims=4), (1, 1, 8, 1)))
1513+
@test (@inferred(dropdims(sum, a, dims=(1, 5))) ==
1514+
dropdims(sum, a, dims=(5, 1)) ==
1515+
reshape(sum(a, dims=(5, 1)), (1, 8, 8)))
1516+
@test (@inferred(dropdims(sum, a, dims=(1, 2, 5))) ==
1517+
dropdims(sum, a, dims=(5, 2, 1)) ==
1518+
reshape(sum(a, dims=(5, 2, 1)), (8, 8)))
1519+
@test (@inferred(dropdims(sum, abs2, a, dims=1)) ==
1520+
@inferred(dropdims(sum, abs2, a, dims=(1,))) ==
1521+
reshape(sum(abs2, a, dims=1), (1, 8, 8, 1)))
1522+
_sumplus(x; dims, plus) = sum(x; dims=dims) .+ plus # reduction with keywords
1523+
@test (@inferred(dropdims(_sumplus, a, dims=4, plus=1)) ==
1524+
@inferred(dropdims(_sumplus, a, dims=(4,), plus=1)) ==
1525+
reshape(sum(a, dims=4) .+ 1, (1, 1, 8, 1)))
1526+
@test_throws UndefKeywordError dropdims(sum, a)
1527+
@test_throws UndefKeywordError dropdims(sum, a, 1)
1528+
@test_throws ArgumentError dropdims(sum, a, dims=0)
1529+
@test_throws ArgumentError dropdims(sum, a, dims=(1, 1))
1530+
@test_throws ArgumentError dropdims(sum, a, dims=(1, 2, 1))
1531+
@test_throws ArgumentError dropdims(sum, a, dims=(1, 1, 2))
1532+
@test_throws ArgumentError dropdims(sum, a, dims=6)
1533+
end
1534+
15021535
nothing

0 commit comments

Comments
 (0)