Skip to content

Commit fc06075

Browse files
committed
Deprecate manually vectorized float methods in favor of compact broadcast syntax.
1 parent 2193638 commit fc06075

File tree

9 files changed

+38
-16
lines changed

9 files changed

+38
-16
lines changed

base/deprecated.jl

+7
Original file line numberDiff line numberDiff line change
@@ -1000,4 +1000,11 @@ macro vectorize_2arg(S,f)
10001000
end
10011001
export @vectorize_1arg, @vectorize_2arg
10021002

1003+
# Deprecate manually vectorized floor methods in favor of compact broadcast syntax
1004+
@deprecate floor(M::Bidiagonal) floor.(M)
1005+
@deprecate floor(M::Tridiagonal) floor.(M)
1006+
@deprecate floor(M::SymTridiagonal) floor.(M)
1007+
@deprecate floor{T<:Integer}(::Type{T}, A::AbstractArray) floor.(T, A)
1008+
@deprecate floor(A::AbstractArray, digits::Integer, base::Integer = 10) floor.(A, digits, base)
1009+
10031010
# End deprecations scheduled for 0.6

base/floatfuncs.jl

+1-1
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ function round(x::AbstractFloat, ::RoundingMode{:NearestTiesUp})
112112
end
113113
round{T<:Integer}(::Type{T}, x::AbstractFloat, r::RoundingMode) = trunc(T,round(x,r))
114114

115-
for f in (:trunc,:floor,:ceil,:round)
115+
for f in (:trunc,:ceil,:round)
116116
@eval begin
117117
function ($f){T,R}(::Type{T}, x::AbstractArray{R,1})
118118
[ ($f)(T, y)::T for y in x ]

base/linalg/bidiag.jl

+4-2
Original file line numberDiff line numberDiff line change
@@ -189,10 +189,12 @@ function size(M::Bidiagonal, d::Integer)
189189
end
190190

191191
#Elementary operations
192-
for func in (:conj, :copy, :round, :trunc, :floor, :ceil, :real, :imag, :abs)
192+
broadcast(::typeof(floor), M::Bidiagonal) = Bidiagonal(floor.(M.dv), floor.(M.ev), M.isupper)
193+
for func in (:conj, :copy, :round, :trunc, :ceil, :real, :imag, :abs)
193194
@eval ($func)(M::Bidiagonal) = Bidiagonal(($func)(M.dv), ($func)(M.ev), M.isupper)
194195
end
195-
for func in (:round, :trunc, :floor, :ceil)
196+
broadcast{T<:Integer}(::typeof(floor), ::Type{T}, M::Bidiagonal) = Bidiagonal(floor.(T, M.dv), floor.(T, M.ev), M.isupper)
197+
for func in (:round, :trunc, :ceil)
196198
@eval ($func){T<:Integer}(::Type{T}, M::Bidiagonal) = Bidiagonal(($func)(T,M.dv), ($func)(T,M.ev), M.isupper)
197199
end
198200

base/linalg/tridiag.jl

+9-4
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,12 @@ end
7171
similar{T}(S::SymTridiagonal, ::Type{T}) = SymTridiagonal{T}(similar(S.dv, T), similar(S.ev, T))
7272

7373
#Elementary operations
74-
for func in (:conj, :copy, :round, :trunc, :floor, :ceil, :abs, :real, :imag)
74+
broadcast(::typeof(floor), M::SymTridiagonal) = SymTridiagonal(floor.(M.dv), floor.(M.ev))
75+
for func in (:conj, :copy, :round, :trunc, :ceil, :abs, :real, :imag)
7576
@eval ($func)(M::SymTridiagonal) = SymTridiagonal(($func)(M.dv), ($func)(M.ev))
7677
end
77-
for func in (:round, :trunc, :floor, :ceil)
78+
broadcast{T<:Integer}(::typeof(floor), ::Type{T}, M::SymTridiagonal) = SymTridiagonal(floor.(T, M.dv), floor.(T, M.ev))
79+
for func in (:round, :trunc, :ceil)
7880
@eval ($func){T<:Integer}(::Type{T},M::SymTridiagonal) = SymTridiagonal(($func)(T,M.dv), ($func)(T,M.ev))
7981
end
8082
transpose(M::SymTridiagonal) = M #Identity operation
@@ -388,12 +390,15 @@ end
388390
copy!(dest::Tridiagonal, src::Tridiagonal) = Tridiagonal(copy!(dest.dl, src.dl), copy!(dest.d, src.d), copy!(dest.du, src.du), copy!(dest.du2, src.du2))
389391

390392
#Elementary operations
391-
for func in (:conj, :copy, :round, :trunc, :floor, :ceil, :abs, :real, :imag)
393+
broadcast(::typeof(floor), M::Tridiagonal) = Tridiagonal(floor.(M.dl), floor.(M.d), floor.(M.du), floor.(M.du2))
394+
for func in (:conj, :copy, :round, :trunc, :ceil, :abs, :real, :imag)
392395
@eval function ($func)(M::Tridiagonal)
393396
Tridiagonal(($func)(M.dl), ($func)(M.d), ($func)(M.du), ($func)(M.du2))
394397
end
395398
end
396-
for func in (:round, :trunc, :floor, :ceil)
399+
broadcast{T<:Integer}(::typeof(floor), ::Type{T}, M::Tridiagonal) =
400+
Tridiagonal(floor.(T, M.dl), floor.(T, M.d), floor.(T, M.du), floor.(T, M.du2))
401+
for func in (:round, :trunc, :ceil)
397402
@eval function ($func){T<:Integer}(::Type{T},M::Tridiagonal)
398403
Tridiagonal(($func)(T,M.dl), ($func)(T,M.d), ($func)(T,M.du), ($func)(T,M.du2))
399404
end

base/sparse/sparsematrix.jl

+1-1
Original file line numberDiff line numberDiff line change
@@ -1441,7 +1441,7 @@ broadcast{Tv,Ti}(::typeof(imag), A::SparseMatrixCSC{Tv,Ti}) = spzeros(Tv, Ti, A.
14411441
broadcast{TTv}(::typeof(real), A::SparseMatrixCSC{Complex{TTv}}) = _broadcast_unary_nz2z_z2z_T(real, A, TTv)
14421442
broadcast{TTv}(::typeof(imag), A::SparseMatrixCSC{Complex{TTv}}) = _broadcast_unary_nz2z_z2z_T(imag, A, TTv)
14431443
ceil{To}(::Type{To}, A::SparseMatrixCSC) = _broadcast_unary_nz2z_z2z_T(ceil, A, To)
1444-
floor{To}(::Type{To}, A::SparseMatrixCSC) = _broadcast_unary_nz2z_z2z_T(floor, A, To)
1444+
broadcast{T<:Integer}(::typeof(floor), ::Type{T}, A::SparseMatrixCSC) = _broadcast_unary_nz2z_z2z_T(floor, A, T)
14451445
trunc{To}(::Type{To}, A::SparseMatrixCSC) = _broadcast_unary_nz2z_z2z_T(trunc, A, To)
14461446
round{To}(::Type{To}, A::SparseMatrixCSC) = _broadcast_unary_nz2z_z2z_T(round, A, To)
14471447

test/linalg/bidiag.jl

+2-2
Original file line numberDiff line numberDiff line change
@@ -158,8 +158,8 @@ for relty in (Int, Float32, Float64, BigFloat), elty in (relty, Complex{relty})
158158

159159
debug && println("Round,float,trunc,ceil")
160160
if elty <: BlasReal
161-
@test floor(Int,T) == Bidiagonal(floor(Int,T.dv),floor(Int,T.ev),T.isupper)
162-
@test isa(floor(Int,T), Bidiagonal)
161+
@test floor.(Int,T) == Bidiagonal(floor.(Int,T.dv),floor.(Int,T.ev),T.isupper)
162+
@test isa(floor.(Int,T), Bidiagonal)
163163
@test trunc(Int,T) == Bidiagonal(trunc(Int,T.dv),trunc(Int,T.ev),T.isupper)
164164
@test isa(trunc(Int,T), Bidiagonal)
165165
@test round(Int,T) == Bidiagonal(round(Int,T.dv),round(Int,T.ev),T.isupper)

test/linalg/tridiag.jl

+4-4
Original file line numberDiff line numberDiff line change
@@ -278,8 +278,8 @@ let n = 12 #Size of matrix problem to test
278278
@test isa(trunc(Int,A), SymTridiagonal)
279279
@test ceil(Int,A) == ceil(Int,fA)
280280
@test isa(ceil(Int,A), SymTridiagonal)
281-
@test floor(Int,A) == floor(Int,fA)
282-
@test isa(floor(Int,A), SymTridiagonal)
281+
@test floor.(Int,A) == floor.(Int,fA)
282+
@test isa(floor.(Int,A), SymTridiagonal)
283283
end
284284

285285
debug && println("Tridiagonal/SymTridiagonal mixing ops")
@@ -396,8 +396,8 @@ let n = 12 #Size of matrix problem to test
396396
@test isa(trunc(Int,A), Tridiagonal)
397397
@test ceil(Int,A) == ceil(Int,fA)
398398
@test isa(ceil(Int,A), Tridiagonal)
399-
@test floor(Int,A) == floor(Int,fA)
400-
@test isa(floor(Int,A), Tridiagonal)
399+
@test floor.(Int,A) == floor.(Int,fA)
400+
@test isa(floor.(Int,A), Tridiagonal)
401401
end
402402

403403
debug && println("Binary operations")

test/numbers.jl

+9-1
Original file line numberDiff line numberDiff line change
@@ -2021,14 +2021,22 @@ x = 0.0
20212021
@test approx_eq(round(pi,3,5), 3.144)
20222022
# vectorized trunc/round/floor/ceil with digits/base argument
20232023
a = rand(2, 2, 2)
2024-
for f in (trunc, round, floor, ceil)
2024+
for f in (trunc, round, ceil)
20252025
@test f(a[:, 1, 1], 2) == map(x->f(x, 2), a[:, 1, 1])
20262026
@test f(a[:, :, 1], 2) == map(x->f(x, 2), a[:, :, 1])
20272027
@test f(a, 9, 2) == map(x->f(x, 9, 2), a)
20282028
@test f(a[:, 1, 1], 9, 2) == map(x->f(x, 9, 2), a[:, 1, 1])
20292029
@test f(a[:, :, 1], 9, 2) == map(x->f(x, 9, 2), a[:, :, 1])
20302030
@test f(a, 9, 2) == map(x->f(x, 9, 2), a)
20312031
end
2032+
for f in (floor,)
2033+
@test f.(a[:, 1, 1], 2) == map(x->f(x, 2), a[:, 1, 1])
2034+
@test f.(a[:, :, 1], 2) == map(x->f(x, 2), a[:, :, 1])
2035+
@test f.(a, 9, 2) == map(x->f(x, 9, 2), a)
2036+
@test f.(a[:, 1, 1], 9, 2) == map(x->f(x, 9, 2), a[:, 1, 1])
2037+
@test f.(a[:, :, 1], 9, 2) == map(x->f(x, 9, 2), a[:, :, 1])
2038+
@test f.(a, 9, 2) == map(x->f(x, 9, 2), a)
2039+
end
20322040
# significant digits (would be nice to have a smart vectorized
20332041
# version of signif)
20342042
@test approx_eq(signif(123.456,1), 100.)

test/sparsedir/sparse.jl

+1-1
Original file line numberDiff line numberDiff line change
@@ -486,7 +486,7 @@ let
486486
@test cos.(Afull) == full(cos.(A))
487487
# Test representatives of remaining vectorized-nonbroadcast unary functions
488488
@test ceil(Int, Afull) == full(ceil(Int, A))
489-
@test floor(Int, Afull) == full(floor(Int, A))
489+
@test floor.(Int, Afull) == full(floor.(Int, A))
490490
# Tests of real, imag, abs, and abs2 for SparseMatrixCSC{Int,X}s previously elsewhere
491491
for T in (Int, Float16, Float32, Float64, BigInt, BigFloat)
492492
R = rand(T[1:100;], 2, 2)

0 commit comments

Comments
 (0)