Skip to content

Commit ea34968

Browse files
authored
Merge pull request #24656 from Sacha0/depozarr
deprecate {ones|zeros}(A::AbstractArray[, opts...]) methods
2 parents a2fa248 + 3c15496 commit ea34968

File tree

14 files changed

+82
-78
lines changed

14 files changed

+82
-78
lines changed

NEWS.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -449,6 +449,15 @@ Deprecated or removed
449449
* `expand(ex)` and `expand(module, ex)` have been deprecated in favor of
450450
`Meta.lower(module, ex)` ([#22064, #24278]).
451451

452+
* `ones(A::AbstractArray[, opts...])` and `zeros(A::AbstractArray[, opts...])` methods
453+
have been deprecated. The general replacement is `fill!(similar(A[, opts...]), {1|0})`,
454+
though in most use cases simpler alternatives are better: For `zeros(A)`, consider
455+
`zero(A)`. For `ones(A)` or `zeros(A)`, consider `fill(v, size(A))` for `v` an
456+
appropriate one or zero, `fill!(copy(A), {1|0})`, `ones(size(A))` or
457+
`zeros(size(A))`, or any of the preceding with different element type
458+
and/or shape depending on `opts...`. For an algebraic multiplicative identity,
459+
consider `one(A)` ([#24656]).
460+
452461
* The `Operators` module is deprecated. Instead, import required operators explicitly
453462
from `Base`, e.g. `import Base: +, -, *, /` ([#22251]).
454463

base/array.jl

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -420,11 +420,6 @@ function ones end
420420

421421
for (fname, felt) in ((:zeros, :zero), (:ones, :one))
422422
@eval begin
423-
# allow signature of similar
424-
$fname(a::AbstractArray, ::Type{T}, dims::Tuple) where {T} = fill!(similar(a, T, dims), $felt(T))
425-
$fname(a::AbstractArray, ::Type{T}, dims...) where {T} = fill!(similar(a, T, dims...), $felt(T))
426-
$fname(a::AbstractArray, ::Type{T}=eltype(a)) where {T} = fill!(similar(a, T), $felt(T))
427-
428423
$fname(::Type{T}, dims::NTuple{N, Any}) where {T, N} = fill!(Array{T,N}(Dims(dims)), $felt(T))
429424
$fname(dims::Tuple) = ($fname)(Float64, dims)
430425
$fname(::Type{T}, dims...) where {T} = $fname(T, dims)

base/deprecated.jl

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1793,6 +1793,16 @@ end
17931793
# `SSHCredentials` and `UserPasswordCredentials` constructors using `prompt_if_incorrect`
17941794
# are deprecated in base/libgit2/types.jl.
17951795

1796+
# deprecate ones/zeros methods accepting an array as first argument
1797+
@deprecate ones(a::AbstractArray, ::Type{T}, dims::Tuple) where {T} fill!(similar(a, T, dims), 1)
1798+
@deprecate ones(a::AbstractArray, ::Type{T}, dims...) where {T} fill!(similar(a, T, dims...), 1)
1799+
@deprecate ones(a::AbstractArray, ::Type{T}) where {T} fill!(similar(a, T), 1)
1800+
@deprecate ones(a::AbstractArray) fill!(similar(a), 1)
1801+
@deprecate zeros(a::AbstractArray, ::Type{T}, dims::Tuple) where {T} fill!(similar(a, T, dims), 0)
1802+
@deprecate zeros(a::AbstractArray, ::Type{T}, dims...) where {T} fill!(similar(a, T, dims...), 0)
1803+
@deprecate zeros(a::AbstractArray, ::Type{T}) where {T} fill!(similar(a, T), 0)
1804+
@deprecate zeros(a::AbstractArray) fill!(similar(a), 0)
1805+
17961806
# PR #23711
17971807
@eval LibGit2 begin
17981808
@deprecate get_creds!(cache::CachedCredentials, credid, default) get!(cache, credid, default)

base/linalg/diagonal.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -418,7 +418,7 @@ function svd(D::Diagonal{<:Number})
418418
piv = sortperm(S, rev = true)
419419
U = Diagonal(D.diag ./ S)
420420
Up = hcat([U[:,i] for i = 1:length(D.diag)][piv]...)
421-
V = Diagonal(ones(D.diag))
421+
V = Diagonal(fill!(similar(D.diag), 1))
422422
Vp = hcat([V[:,i] for i = 1:length(D.diag)][piv]...)
423423
return (Up, S[piv], Vp)
424424
end

base/linalg/tridiag.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -284,9 +284,9 @@ function tril!(M::SymTridiagonal, k::Integer=0)
284284
return Tridiagonal(M.ev,M.dv,copy(M.ev))
285285
elseif k == -1
286286
fill!(M.dv,0)
287-
return Tridiagonal(M.ev,M.dv,zeros(M.ev))
287+
return Tridiagonal(M.ev,M.dv,fill!(similar(M.ev), 0))
288288
elseif k == 0
289-
return Tridiagonal(M.ev,M.dv,zeros(M.ev))
289+
return Tridiagonal(M.ev,M.dv,fill!(similar(M.ev), 0))
290290
elseif k >= 1
291291
return Tridiagonal(M.ev,M.dv,copy(M.ev))
292292
end
@@ -303,9 +303,9 @@ function triu!(M::SymTridiagonal, k::Integer=0)
303303
return Tridiagonal(M.ev,M.dv,copy(M.ev))
304304
elseif k == 1
305305
fill!(M.dv,0)
306-
return Tridiagonal(zeros(M.ev),M.dv,M.ev)
306+
return Tridiagonal(fill!(similar(M.ev), 0),M.dv,M.ev)
307307
elseif k == 0
308-
return Tridiagonal(zeros(M.ev),M.dv,M.ev)
308+
return Tridiagonal(fill!(similar(M.ev), 0),M.dv,M.ev)
309309
elseif k <= -1
310310
return Tridiagonal(M.ev,M.dv,copy(M.ev))
311311
end

test/arrayops.jl

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2174,11 +2174,9 @@ Base.convert(::Type{Float64}, x::F21666) = Float64(x.x)
21742174
end
21752175

21762176
@testset "zeros and ones" begin
2177-
@test ones([1,2], Float64, (2,3)) == ones(2,3)
2178-
@test ones(2) == ones(Int, 2) == ones([2,3], Float32, 2) == [1,1]
2177+
@test ones(2) == ones(Int, 2) == [1,1]
21792178
@test isa(ones(2), Vector{Float64})
21802179
@test isa(ones(Int, 2), Vector{Int})
2181-
@test isa(ones([2,3], Float32, 2), Vector{Float32})
21822180

21832181
function test_zeros(arr, T, s)
21842182
@test all(arr .== 0)
@@ -2194,22 +2192,8 @@ end
21942192
test_zeros(zeros(Int, 2, 3), Matrix{Int}, (2,3))
21952193
test_zeros(zeros(Int, (2, 3)), Matrix{Int}, (2,3))
21962194

2197-
test_zeros(zeros([1 2; 3 4]), Matrix{Int}, (2, 2))
2198-
test_zeros(zeros([1 2; 3 4], Float64), Matrix{Float64}, (2, 2))
2199-
2200-
zs = zeros(SparseMatrixCSC([1 2; 3 4]), Complex{Float64}, (2,3))
2201-
test_zeros(zs, SparseMatrixCSC{Complex{Float64}}, (2, 3))
2202-
22032195
# #19265"
22042196
@test_throws ErrorException zeros(Float64, [1.]) # TODO change to MethodError, when v0.6 deprecations are done
2205-
x = [1.]
2206-
test_zeros(zeros(x, Float64), Vector{Float64}, (1,))
2207-
@test x == [1.]
2208-
2209-
# exotic indexing
2210-
oarr = zeros(randn(3), UInt16, 1:3, -1:0)
2211-
@test indices(oarr) == (1:3, -1:0)
2212-
test_zeros(oarr.parent, Matrix{UInt16}, (3, 2))
22132197
end
22142198

22152199
# issue #11053

test/linalg/bidiag.jl

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -113,29 +113,32 @@ srand(1)
113113
end
114114

115115
@testset "triu and tril" begin
116+
zerosdv = zeros(elty, length(dv))
117+
zerosev = zeros(elty, length(ev))
116118
bidiagcopy(dv, ev, uplo) = Bidiagonal(copy(dv), copy(ev), uplo)
119+
117120
@test istril(Bidiagonal(dv,ev,:L))
118121
@test !istril(Bidiagonal(dv,ev,:U))
119-
@test tril!(bidiagcopy(dv,ev,:U),-1) == Bidiagonal(zeros(dv),zeros(ev),:U)
120-
@test tril!(bidiagcopy(dv,ev,:L),-1) == Bidiagonal(zeros(dv),ev,:L)
121-
@test tril!(bidiagcopy(dv,ev,:U),-2) == Bidiagonal(zeros(dv),zeros(ev),:U)
122-
@test tril!(bidiagcopy(dv,ev,:L),-2) == Bidiagonal(zeros(dv),zeros(ev),:L)
122+
@test tril!(bidiagcopy(dv,ev,:U),-1) == Bidiagonal(zerosdv,zerosev,:U)
123+
@test tril!(bidiagcopy(dv,ev,:L),-1) == Bidiagonal(zerosdv,ev,:L)
124+
@test tril!(bidiagcopy(dv,ev,:U),-2) == Bidiagonal(zerosdv,zerosev,:U)
125+
@test tril!(bidiagcopy(dv,ev,:L),-2) == Bidiagonal(zerosdv,zerosev,:L)
123126
@test tril!(bidiagcopy(dv,ev,:U),1) == Bidiagonal(dv,ev,:U)
124127
@test tril!(bidiagcopy(dv,ev,:L),1) == Bidiagonal(dv,ev,:L)
125-
@test tril!(bidiagcopy(dv,ev,:U)) == Bidiagonal(dv,zeros(ev),:U)
128+
@test tril!(bidiagcopy(dv,ev,:U)) == Bidiagonal(dv,zerosev,:U)
126129
@test tril!(bidiagcopy(dv,ev,:L)) == Bidiagonal(dv,ev,:L)
127130
@test_throws ArgumentError tril!(bidiagcopy(dv, ev, :U), -n - 2)
128131
@test_throws ArgumentError tril!(bidiagcopy(dv, ev, :U), n)
129132

130133
@test istriu(Bidiagonal(dv,ev,:U))
131134
@test !istriu(Bidiagonal(dv,ev,:L))
132-
@test triu!(bidiagcopy(dv,ev,:L),1) == Bidiagonal(zeros(dv),zeros(ev),:L)
133-
@test triu!(bidiagcopy(dv,ev,:U),1) == Bidiagonal(zeros(dv),ev,:U)
134-
@test triu!(bidiagcopy(dv,ev,:U),2) == Bidiagonal(zeros(dv),zeros(ev),:U)
135-
@test triu!(bidiagcopy(dv,ev,:L),2) == Bidiagonal(zeros(dv),zeros(ev),:L)
135+
@test triu!(bidiagcopy(dv,ev,:L),1) == Bidiagonal(zerosdv,zerosev,:L)
136+
@test triu!(bidiagcopy(dv,ev,:U),1) == Bidiagonal(zerosdv,ev,:U)
137+
@test triu!(bidiagcopy(dv,ev,:U),2) == Bidiagonal(zerosdv,zerosev,:U)
138+
@test triu!(bidiagcopy(dv,ev,:L),2) == Bidiagonal(zerosdv,zerosev,:L)
136139
@test triu!(bidiagcopy(dv,ev,:U),-1) == Bidiagonal(dv,ev,:U)
137140
@test triu!(bidiagcopy(dv,ev,:L),-1) == Bidiagonal(dv,ev,:L)
138-
@test triu!(bidiagcopy(dv,ev,:L)) == Bidiagonal(dv,zeros(ev),:L)
141+
@test triu!(bidiagcopy(dv,ev,:L)) == Bidiagonal(dv,zerosev,:L)
139142
@test triu!(bidiagcopy(dv,ev,:U)) == Bidiagonal(dv,ev,:U)
140143
@test_throws ArgumentError triu!(bidiagcopy(dv, ev, :U), -n)
141144
@test_throws ArgumentError triu!(bidiagcopy(dv, ev, :U), n + 2)

test/linalg/lapack.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ end
107107
A = diagm(-2 => dl2, -1 => dl, 0 => d, 1 => du)
108108
@test A\C D
109109
@test_throws DimensionMismatch LAPACK.gbtrs!('N',2,1,6,AB,ipiv,ones(elty,7,6))
110-
@test_throws Base.LinAlg.LAPACKException LAPACK.gbtrf!(2,1,6,zeros(AB))
110+
@test_throws Base.LinAlg.LAPACKException LAPACK.gbtrf!(2,1,6,zeros(elty,6,6))
111111
end
112112
end
113113

@@ -405,7 +405,7 @@ end
405405
@test_throws DimensionMismatch LAPACK.stev!('U',d,rand(elty,10))
406406
@test_throws DimensionMismatch LAPACK.stebz!('A','B',zero(elty),zero(elty),0,0,-1.,d,rand(elty,10))
407407
@test_throws DimensionMismatch LAPACK.stegr!('N','A',d,rand(elty,10),zero(elty),zero(elty),0,0)
408-
@test_throws DimensionMismatch LAPACK.stein!(d,zeros(elty,10),zeros(d),zeros(BlasInt,10),zeros(BlasInt,10))
408+
@test_throws DimensionMismatch LAPACK.stein!(d,zeros(elty,10),zeros(elty,10),zeros(BlasInt,10),zeros(BlasInt,10))
409409
@test_throws DimensionMismatch LAPACK.stein!(d,e,zeros(elty,11),zeros(BlasInt,10),zeros(BlasInt,10))
410410
end
411411
end

test/linalg/triangular.jl

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ for elty1 in (Float32, Float64, BigFloat, Complex64, Complex128, Complex{BigFloa
109109
@test_throws ArgumentError tril!(A1, n)
110110
@test triu(A1,0) == t1(diagm(0 => diag(A1)))
111111
@test triu(A1,-1) == t1(tril(triu(A1.data,-1)))
112-
@test triu(A1,1) == LowerTriangular(zeros(A1.data))
112+
@test triu(A1,1) == zeros(size(A1)) # or just @test iszero(triu(A1,1))?
113113
@test_throws ArgumentError triu!(A1, -n)
114114
@test_throws ArgumentError triu!(A1, n + 2)
115115
else
@@ -120,7 +120,7 @@ for elty1 in (Float32, Float64, BigFloat, Complex64, Complex128, Complex{BigFloa
120120
@test_throws ArgumentError triu!(A1, n + 2)
121121
@test tril(A1,0) == t1(diagm(0 => diag(A1)))
122122
@test tril(A1,1) == t1(triu(tril(A1.data,1)))
123-
@test tril(A1,-1) == UpperTriangular(zeros(A1.data))
123+
@test tril(A1,-1) == zeros(size(A1)) # or just @test iszero(tril(A1,-1))?
124124
@test_throws ArgumentError tril!(A1, -n - 2)
125125
@test_throws ArgumentError tril!(A1, n)
126126
end
@@ -343,16 +343,16 @@ for elty1 in (Float32, Float64, BigFloat, Complex64, Complex128, Complex{BigFloa
343343
@test B'A1' B'Matrix(A1)'
344344

345345
if eltyB == elty1
346-
@test A_mul_B!(zeros(B),A1,B) A1*B
347-
@test A_mul_Bc!(zeros(B),A1,B) A1*B'
348-
@test A_mul_Bt!(zeros(B),A1,B) A1*B.'
349-
@test Ac_mul_B!(zeros(B),A1,B) A1'*B
350-
@test At_mul_B!(zeros(B),A1,B) A1.'*B
346+
@test A_mul_B!(similar(B),A1,B) A1*B
347+
@test A_mul_Bc!(similar(B),A1,B) A1*B'
348+
@test A_mul_Bt!(similar(B),A1,B) A1*B.'
349+
@test Ac_mul_B!(similar(B),A1,B) A1'*B
350+
@test At_mul_B!(similar(B),A1,B) A1.'*B
351351
# test also vector methods
352352
B1 = vec(B[1,:])
353-
@test A_mul_B!(zeros(B1),A1,B1) A1*B1
354-
@test Ac_mul_B!(zeros(B1),A1,B1) A1'*B1
355-
@test At_mul_B!(zeros(B1),A1,B1) A1.'*B1
353+
@test A_mul_B!(similar(B1),A1,B1) A1*B1
354+
@test Ac_mul_B!(similar(B1),A1,B1) A1'*B1
355+
@test At_mul_B!(similar(B1),A1,B1) A1.'*B1
356356
end
357357
#error handling
358358
@test_throws DimensionMismatch Base.LinAlg.A_mul_B!(A1, ones(eltyB,n+1))

test/linalg/tridiag.jl

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -81,36 +81,39 @@ guardsrand(123) do
8181
@test Array(convert(SymTridiagonal{Complex64},Tridiagonal(SymTridiagonal(d, dl)))) == convert(Matrix{Complex64}, SymTridiagonal(d, dl))
8282
end
8383
@testset "tril/triu" begin
84+
zerosd = fill!(similar(d), 0)
85+
zerosdl = fill!(similar(dl), 0)
86+
zerosdu = fill!(similar(du), 0)
8487
@test_throws ArgumentError tril!(SymTridiagonal(d, dl), -n - 2)
8588
@test_throws ArgumentError tril!(SymTridiagonal(d, dl), n)
8689
@test_throws ArgumentError tril!(Tridiagonal(dl, d, du), -n - 2)
8790
@test_throws ArgumentError tril!(Tridiagonal(dl, d, du), n)
88-
@test tril(SymTridiagonal(d,dl)) == Tridiagonal(dl,d,zeros(dl))
91+
@test tril(SymTridiagonal(d,dl)) == Tridiagonal(dl,d,zerosdl)
8992
@test tril(SymTridiagonal(d,dl),1) == Tridiagonal(dl,d,dl)
90-
@test tril(SymTridiagonal(d,dl),-1) == Tridiagonal(dl,zeros(d),zeros(dl))
91-
@test tril(SymTridiagonal(d,dl),-2) == Tridiagonal(zeros(dl),zeros(d),zeros(dl))
92-
@test tril(Tridiagonal(dl,d,du)) == Tridiagonal(dl,d,zeros(du))
93+
@test tril(SymTridiagonal(d,dl),-1) == Tridiagonal(dl,zerosd,zerosdl)
94+
@test tril(SymTridiagonal(d,dl),-2) == Tridiagonal(zerosdl,zerosd,zerosdl)
95+
@test tril(Tridiagonal(dl,d,du)) == Tridiagonal(dl,d,zerosdu)
9396
@test tril(Tridiagonal(dl,d,du),1) == Tridiagonal(dl,d,du)
94-
@test tril(Tridiagonal(dl,d,du),-1) == Tridiagonal(dl,zeros(d),zeros(du))
95-
@test tril(Tridiagonal(dl,d,du),-2) == Tridiagonal(zeros(dl),zeros(d),zeros(du))
97+
@test tril(Tridiagonal(dl,d,du),-1) == Tridiagonal(dl,zerosd,zerosdu)
98+
@test tril(Tridiagonal(dl,d,du),-2) == Tridiagonal(zerosdl,zerosd,zerosdu)
9699

97100
@test_throws ArgumentError triu!(SymTridiagonal(d, dl), -n)
98101
@test_throws ArgumentError triu!(SymTridiagonal(d, dl), n + 2)
99102
@test_throws ArgumentError triu!(Tridiagonal(dl, d, du), -n)
100103
@test_throws ArgumentError triu!(Tridiagonal(dl, d, du), n + 2)
101-
@test triu(SymTridiagonal(d,dl)) == Tridiagonal(zeros(dl),d,dl)
104+
@test triu(SymTridiagonal(d,dl)) == Tridiagonal(zerosdl,d,dl)
102105
@test triu(SymTridiagonal(d,dl),-1) == Tridiagonal(dl,d,dl)
103-
@test triu(SymTridiagonal(d,dl),1) == Tridiagonal(zeros(dl),zeros(d),dl)
104-
@test triu(SymTridiagonal(d,dl),2) == Tridiagonal(zeros(dl),zeros(d),zeros(dl))
105-
@test triu(Tridiagonal(dl,d,du)) == Tridiagonal(zeros(dl),d,du)
106+
@test triu(SymTridiagonal(d,dl),1) == Tridiagonal(zerosdl,zerosd,dl)
107+
@test triu(SymTridiagonal(d,dl),2) == Tridiagonal(zerosdl,zerosd,zerosdl)
108+
@test triu(Tridiagonal(dl,d,du)) == Tridiagonal(zerosdl,d,du)
106109
@test triu(Tridiagonal(dl,d,du),-1) == Tridiagonal(dl,d,du)
107-
@test triu(Tridiagonal(dl,d,du),1) == Tridiagonal(zeros(dl),zeros(d),du)
108-
@test triu(Tridiagonal(dl,d,du),2) == Tridiagonal(zeros(dl),zeros(d),zeros(du))
110+
@test triu(Tridiagonal(dl,d,du),1) == Tridiagonal(zerosdl,zerosd,du)
111+
@test triu(Tridiagonal(dl,d,du),2) == Tridiagonal(zerosdl,zerosd,zerosdu)
109112

110113
@test !istril(SymTridiagonal(d,dl))
111114
@test !istriu(SymTridiagonal(d,dl))
112-
@test istriu(Tridiagonal(zeros(dl),d,du))
113-
@test istril(Tridiagonal(dl,d,zeros(du)))
115+
@test istriu(Tridiagonal(zerosdl,d,du))
116+
@test istril(Tridiagonal(dl,d,zerosdu))
114117
end
115118

116119
@testset for mat_type in (Tridiagonal, SymTridiagonal)
@@ -212,8 +215,8 @@ guardsrand(123) do
212215
@test A*LowerTriangular(Matrix(1.0I, n, n)) fA
213216
end
214217
@testset "A_mul_B! errors" begin
215-
@test_throws DimensionMismatch Base.LinAlg.A_mul_B!(zeros(fA),A,ones(elty,n,n+1))
216-
@test_throws DimensionMismatch Base.LinAlg.A_mul_B!(zeros(fA),A,ones(elty,n+1,n))
218+
@test_throws DimensionMismatch Base.LinAlg.A_mul_B!(similar(fA),A,ones(elty,n,n+1))
219+
@test_throws DimensionMismatch Base.LinAlg.A_mul_B!(similar(fA),A,ones(elty,n+1,n))
217220
@test_throws DimensionMismatch A_mul_B!(zeros(elty,n,n),B,ones(elty,n+1,n))
218221
@test_throws DimensionMismatch A_mul_B!(zeros(elty,n+1,n),B,ones(elty,n,n))
219222
@test_throws DimensionMismatch A_mul_B!(zeros(elty,n,n+1),B,ones(elty,n,n))

0 commit comments

Comments
 (0)