Skip to content

Commit

Permalink
replace RowVector(shape...) constructors/calls with RowVector(uniniti…
Browse files Browse the repository at this point in the history
…alized, shape...) (#24786)

* Replace primitive RowVector{T}(shape...) constructors with RowVector{T}(uninitialized, shape...) etc.

* Replace RowVector{...}(shape...)-like calls everywhere (base,test,stdlib,doc).

* Deprecate RowVector{T}(shape...) constructors to RowVector{T}(uninitialized, shape...) equivalents.
  • Loading branch information
Sacha0 authored Nov 29, 2017
1 parent f48283e commit 00e3a9f
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 12 deletions.
7 changes: 7 additions & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
Expand Up @@ -435,6 +435,13 @@ Deprecated or removed
* `whos` has been renamed `varinfo`, and now returns a markdown table instead of printing
output ([#12131]).

* Uninitialized `RowVector` constructors of the form `RowVector{T}(shape...)` have been
deprecated in favor of equivalents accepting `uninitialized` (an alias for
`Uninitialized()`) as their first argument, as in
`RowVector{T}(uninitialized, shape...)`. For example, `RowVector{Int}(3)` is now
`RowVector{Int}(uninitialized, 3)`, and `RowVector{Float32}((1, 4))` is now
`RowVector{Float32}(uninitialized, (1, 4))` ([#24786]).

* `writecsv(io, a; opts...)` has been deprecated in favor of
`writedlm(io, a, ','; opts...)` ([#23529]).

Expand Down
6 changes: 6 additions & 0 deletions base/deprecated.jl
Original file line number Diff line number Diff line change
Expand Up @@ -2114,6 +2114,12 @@ end
@deprecate chol!(x::Number, uplo) chol(x) false
end

# deprecate RowVector{T}(shape...) constructors to RowVector{T}(uninitialized, shape...) equivalents
@deprecate RowVector{T}(n::Int) where {T} RowVector{T}(uninitialized, n)
@deprecate RowVector{T}(n1::Int, n2::Int) where {T} RowVector{T}(uninitialized, n1, n2)
@deprecate RowVector{T}(n::Tuple{Int}) where {T} RowVector{T}(uninitialized, n)
@deprecate RowVector{T}(n::Tuple{Int,Int}) where {T} RowVector{T}(uninitialized, n)

@deprecate cumsum(A::AbstractArray) cumsum(A, 1)
@deprecate cumsum_kbn(A::AbstractArray) cumsum_kbn(A, 1)
@deprecate cumprod(A::AbstractArray) cumprod(A, 1)
Expand Down
18 changes: 10 additions & 8 deletions base/linalg/rowvector.jl
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,16 @@ const ConjRowVector{T,CV<:ConjVector} = RowVector{T,CV}
@inline RowVector{T}(vec::AbstractVector{T}) where {T} = RowVector{T,typeof(vec)}(vec)

# Constructors that take a size and default to Array
@inline RowVector{T}(n::Int) where {T} = RowVector{T}(Vector{transpose_type(T)}(uninitialized, n))
@inline RowVector{T}(n1::Int, n2::Int) where {T} = n1 == 1 ?
RowVector{T}(Vector{transpose_type(T)}(uninitialized, n2)) :
error("RowVector expects 1×N size, got ($n1,$n2)")
@inline RowVector{T}(n::Tuple{Int}) where {T} = RowVector{T}(Vector{transpose_type(T)}(uninitialized, n[1]))
@inline RowVector{T}(n::Tuple{Int,Int}) where {T} = n[1] == 1 ?
RowVector{T}(Vector{transpose_type(T)}(uninitialized, n[2])) :
error("RowVector expects 1×N size, got $n")
@inline RowVector{T}(::Uninitialized, n::Int) where {T} =
RowVector{T}(Vector{transpose_type(T)}(uninitialized, n))
@inline RowVector{T}(::Uninitialized, n1::Int, n2::Int) where {T} =
n1 == 1 ? RowVector{T}(Vector{transpose_type(T)}(uninitialized, n2)) :
error("RowVector expects 1×N size, got ($n1,$n2)")
@inline RowVector{T}(::Uninitialized, n::Tuple{Int}) where {T} =
RowVector{T}(Vector{transpose_type(T)}(uninitialized, n[1]))
@inline RowVector{T}(::Uninitialized, n::Tuple{Int,Int}) where {T} =
n[1] == 1 ? RowVector{T}(Vector{transpose_type(T)}(uninitialized, n[2])) :
error("RowVector expects 1×N size, got $n")

# Conversion of underlying storage
convert(::Type{RowVector{T,V}}, rowvec::RowVector) where {T,V<:AbstractVector} =
Expand Down
8 changes: 4 additions & 4 deletions test/linalg/rowvector.jl
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@

@test RowVector(v) == [1 2 3]
@test RowVector{Int}(v) == [1 2 3]
@test size(RowVector{Int}(3)) === (1,3)
@test size(RowVector{Int}(1,3)) === (1,3)
@test size(RowVector{Int}((3,))) === (1,3)
@test size(RowVector{Int}((1,3))) === (1,3)
@test size(RowVector{Int}(uninitialized, 3)) === (1,3)
@test size(RowVector{Int}(uninitialized, 1,3)) === (1,3)
@test size(RowVector{Int}(uninitialized, (3,))) === (1,3)
@test size(RowVector{Int}(uninitialized, (1,3))) === (1,3)
@test_throws ErrorException RowVector{Float64, Vector{Int}}(v)

@test (v.')::RowVector == [1 2 3]
Expand Down

2 comments on commit 00e3a9f

@nanosoldier
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Executing the daily benchmark build, I will reply here when finished:

@nanosoldier runbenchmarks(ALL, isdaily = true)

@nanosoldier
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your benchmark job has completed - possible performance regressions were detected. A full report can be found here. cc @ararslan

Please sign in to comment.