diff --git a/NEWS.md b/NEWS.md index a62dd5b0f0575..0a5a83ec84fb5 100644 --- a/NEWS.md +++ b/NEWS.md @@ -798,7 +798,7 @@ Deprecated or removed `dims` keyword argument. This includes the functions `sum`, `prod`, `maximum`, `minimum`, `all`, `any`, `findmax`, `findmin`, `mean`, `varm`, `std`, `var`, `cov`, `cor`, `median`, `mapreducedim`, `reducedim`, `sort`, `accumulate`, `accumulate!`, - `cumsum`, `cumsum!`, `cumprod`, `cumprod!`, `flipdim`, `squeeze`, and `cat` ([#25501], [#26660], [#27100]). + `cumsum`, `cumsum!`, `cumprod`, `cumprod!`, `flipdim`, `dropdims`, and `cat` ([#25501], [#26660], [#27100]). * `indices(a)` and `indices(a,d)` have been deprecated in favor of `axes(a)` and `axes(a, d)` ([#25057]). @@ -1321,6 +1321,8 @@ Deprecated or removed * `ndigits(n, b, [pad])` is deprecated in favor of `ndigits(n, base=b, pad=pad)` ([#27908]). + * `squeeze` is deprecated in favor of `dropdims`. + Command-line option changes --------------------------- diff --git a/base/abstractarraymath.jl b/base/abstractarraymath.jl index 2930b9252e6fb..9e6cd7af7ca23 100644 --- a/base/abstractarraymath.jl +++ b/base/abstractarraymath.jl @@ -47,7 +47,7 @@ _sub(t::Tuple, ::Tuple{}) = t _sub(t::Tuple, s::Tuple) = _sub(tail(t), tail(s)) """ - squeeze(A; dims) + dropdims(A; dims) Remove the dimensions specified by `dims` from array `A`. Elements of `dims` must be unique and within the range `1:ndims(A)`. @@ -61,20 +61,20 @@ julia> a = reshape(Vector(1:4),(2,2,1,1)) 1 3 2 4 -julia> squeeze(a; dims=3) +julia> dropdims(a; dims=3) 2×2×1 Array{Int64,3}: [:, :, 1] = 1 3 2 4 ``` """ -squeeze(A; dims) = _squeeze(A, dims) -function _squeeze(A::AbstractArray, dims::Dims) +dropdims(A; dims) = _dropdims(A, dims) +function _dropdims(A::AbstractArray, dims::Dims) for i in 1:length(dims) - 1 <= dims[i] <= ndims(A) || throw(ArgumentError("squeezed dims must be in range 1:ndims(A)")) - length(axes(A, dims[i])) == 1 || throw(ArgumentError("squeezed dims must all be size 1")) + 1 <= dims[i] <= ndims(A) || throw(ArgumentError("dropped dims must be in range 1:ndims(A)")) + length(axes(A, dims[i])) == 1 || throw(ArgumentError("dropped dims must all be size 1")) for j = 1:i-1 - dims[j] == dims[i] && throw(ArgumentError("squeezed dims must be unique")) + dims[j] == dims[i] && throw(ArgumentError("dropped dims must be unique")) end end d = () @@ -85,7 +85,7 @@ function _squeeze(A::AbstractArray, dims::Dims) end reshape(A, d::typeof(_sub(axes(A), dims))) end -_squeeze(A::AbstractArray, dim::Integer) = _squeeze(A, (Int(dim),)) +_dropdims(A::AbstractArray, dim::Integer) = _dropdims(A, (Int(dim),)) ## Unary operators ## diff --git a/base/deprecated.jl b/base/deprecated.jl index 7ef508550c41a..2907d283cb99a 100644 --- a/base/deprecated.jl +++ b/base/deprecated.jl @@ -1386,7 +1386,8 @@ export readandwrite @deprecate flipdim(A, d) reverse(A, dims=d) -@deprecate squeeze(A, dims) squeeze(A, dims=dims) +@deprecate squeeze dropdims +@deprecate dropdims(A, dims) dropdims(A, dims=dims) @deprecate diff(A::AbstractMatrix, dim::Integer) diff(A, dims=dim) @deprecate unique(A::AbstractArray, dim::Int) unique(A, dims=dim) diff --git a/base/exports.jl b/base/exports.jl index 958fd6a299937..156502365211e 100644 --- a/base/exports.jl +++ b/base/exports.jl @@ -423,7 +423,7 @@ export sortperm, sortperm!, sortrows, - squeeze, + dropdims, step, stride, strides, diff --git a/doc/src/base/arrays.md b/doc/src/base/arrays.md index f2bb0b9dcc6af..421a5276787b9 100644 --- a/doc/src/base/arrays.md +++ b/doc/src/base/arrays.md @@ -105,7 +105,7 @@ Base.parentindices Base.selectdim Base.reinterpret Base.reshape -Base.squeeze +Base.dropdims Base.vec ``` diff --git a/stdlib/SparseArrays/src/SparseArrays.jl b/stdlib/SparseArrays/src/SparseArrays.jl index 95ef9560a809e..d648f2483a555 100644 --- a/stdlib/SparseArrays/src/SparseArrays.jl +++ b/stdlib/SparseArrays/src/SparseArrays.jl @@ -22,7 +22,7 @@ import Base: @get!, acos, acosd, acot, acotd, acsch, asech, asin, asind, asinh, cotd, coth, count, csc, cscd, csch, done, exp10, exp2, findprev, findnext, floor, hash, argmin, inv, log10, log2, next, sec, secd, sech, show, - sin, sinc, sind, sinh, sinpi, squeeze, start, sum, summary, tan, + sin, sinc, sind, sinh, sinpi, dropdims, start, sum, summary, tan, tand, tanh, trunc, abs, abs2, broadcast, ceil, complex, conj, convert, copy, copyto!, adjoint, exp, expm1, findall, findmax, findmin, float, getindex, diff --git a/stdlib/SparseArrays/test/sparse.jl b/stdlib/SparseArrays/test/sparse.jl index e73becb43976a..c0f1dbc744cd6 100644 --- a/stdlib/SparseArrays/test/sparse.jl +++ b/stdlib/SparseArrays/test/sparse.jl @@ -167,14 +167,14 @@ let end end -@testset "squeeze" begin +@testset "dropdims" begin for i = 1:5 am = sprand(20, 1, 0.2) - av = squeeze(am, dims=2) + av = dropdims(am, dims=2) @test ndims(av) == 1 @test all(av.==am) am = sprand(1, 20, 0.2) - av = squeeze(am, dims=1) + av = dropdims(am, dims=1) @test ndims(av) == 1 @test all(av' .== am) end @@ -1401,10 +1401,10 @@ end @test norm(Array(D) - Array(S)) == 0.0 end -@testset "error conditions for reshape, and squeeze" begin +@testset "error conditions for reshape, and dropdims" begin local A = sprand(Bool, 5, 5, 0.2) @test_throws DimensionMismatch reshape(A,(20, 2)) - @test_throws ArgumentError squeeze(A,dims=(1, 1)) + @test_throws ArgumentError dropdims(A,dims=(1, 1)) end @testset "float" begin diff --git a/test/arrayops.jl b/test/arrayops.jl index e5ace0234d2a9..1ac65c50e82fe 100644 --- a/test/arrayops.jl +++ b/test/arrayops.jl @@ -267,17 +267,17 @@ end @test vec(b) == vec(a) a = rand(1, 1, 8, 8, 1) - @test @inferred(squeeze(a, dims=1)) == @inferred(squeeze(a, dims=(1,))) == reshape(a, (1, 8, 8, 1)) - @test @inferred(squeeze(a, dims=(1, 5))) == squeeze(a, dims=(5, 1)) == reshape(a, (1, 8, 8)) - @test @inferred(squeeze(a, dims=(1, 2, 5))) == squeeze(a, dims=(5, 2, 1)) == reshape(a, (8, 8)) - @test_throws UndefKeywordError squeeze(a) - @test_throws ArgumentError squeeze(a, dims=0) - @test_throws ArgumentError squeeze(a, dims=(1, 1)) - @test_throws ArgumentError squeeze(a, dims=(1, 2, 1)) - @test_throws ArgumentError squeeze(a, dims=(1, 1, 2)) - @test_throws ArgumentError squeeze(a, dims=3) - @test_throws ArgumentError squeeze(a, dims=4) - @test_throws ArgumentError squeeze(a, dims=6) + @test @inferred(dropdims(a, dims=1)) == @inferred(dropdims(a, dims=(1,))) == reshape(a, (1, 8, 8, 1)) + @test @inferred(dropdims(a, dims=(1, 5))) == dropdims(a, dims=(5, 1)) == reshape(a, (1, 8, 8)) + @test @inferred(dropdims(a, dims=(1, 2, 5))) == dropdims(a, dims=(5, 2, 1)) == reshape(a, (8, 8)) + @test_throws UndefKeywordError dropdims(a) + @test_throws ArgumentError dropdims(a, dims=0) + @test_throws ArgumentError dropdims(a, dims=(1, 1)) + @test_throws ArgumentError dropdims(a, dims=(1, 2, 1)) + @test_throws ArgumentError dropdims(a, dims=(1, 1, 2)) + @test_throws ArgumentError dropdims(a, dims=3) + @test_throws ArgumentError dropdims(a, dims=4) + @test_throws ArgumentError dropdims(a, dims=6) sz = (5,8,7) A = reshape(1:prod(sz),sz...) diff --git a/test/offsetarray.jl b/test/offsetarray.jl index 38a0166441a54..a45c12aab896c 100644 --- a/test/offsetarray.jl +++ b/test/offsetarray.jl @@ -321,20 +321,20 @@ am = map(identity, a) @test isa(am, OffsetArray) @test am == a -# squeeze +# dropdims a0 = rand(1,1,8,8,1) a = OffsetArray(a0, (-1,2,3,4,5)) -@test @inferred(squeeze(a, dims=1)) == @inferred(squeeze(a, dims=(1,))) == OffsetArray(reshape(a, (1,8,8,1)), (2,3,4,5)) -@test @inferred(squeeze(a, dims=5)) == @inferred(squeeze(a, dims=(5,))) == OffsetArray(reshape(a, (1,1,8,8)), (-1,2,3,4)) -@test @inferred(squeeze(a, dims=(1,5))) == squeeze(a, dims=(5,1)) == OffsetArray(reshape(a, (1,8,8)), (2,3,4)) -@test @inferred(squeeze(a, dims=(1,2,5))) == squeeze(a, dims=(5,2,1)) == OffsetArray(reshape(a, (8,8)), (3,4)) -@test_throws ArgumentError squeeze(a, dims=0) -@test_throws ArgumentError squeeze(a, dims=(1,1)) -@test_throws ArgumentError squeeze(a, dims=(1,2,1)) -@test_throws ArgumentError squeeze(a, dims=(1,1,2)) -@test_throws ArgumentError squeeze(a, dims=3) -@test_throws ArgumentError squeeze(a, dims=4) -@test_throws ArgumentError squeeze(a, dims=6) +@test @inferred(dropdims(a, dims=1)) == @inferred(dropdims(a, dims=(1,))) == OffsetArray(reshape(a, (1,8,8,1)), (2,3,4,5)) +@test @inferred(dropdims(a, dims=5)) == @inferred(dropdims(a, dims=(5,))) == OffsetArray(reshape(a, (1,1,8,8)), (-1,2,3,4)) +@test @inferred(dropdims(a, dims=(1,5))) == dropdims(a, dims=(5,1)) == OffsetArray(reshape(a, (1,8,8)), (2,3,4)) +@test @inferred(dropdims(a, dims=(1,2,5))) == dropdims(a, dims=(5,2,1)) == OffsetArray(reshape(a, (8,8)), (3,4)) +@test_throws ArgumentError dropdims(a, dims=0) +@test_throws ArgumentError dropdims(a, dims=(1,1)) +@test_throws ArgumentError dropdims(a, dims=(1,2,1)) +@test_throws ArgumentError dropdims(a, dims=(1,1,2)) +@test_throws ArgumentError dropdims(a, dims=3) +@test_throws ArgumentError dropdims(a, dims=4) +@test_throws ArgumentError dropdims(a, dims=6) # other functions v = OffsetArray(v0, (-3,)) diff --git a/test/subarray.jl b/test/subarray.jl index d7cb049015d61..2824c47544644 100644 --- a/test/subarray.jl +++ b/test/subarray.jl @@ -24,7 +24,7 @@ function Agen_slice(A::AbstractArray, I...) push!(sd, i) end end - squeeze(B, dims=sd) + dropdims(B, dims=sd) end _Agen(A, i1) = [A[j1] for j1 in i1]