FillArrays.jl
FillArrays.jl copied to clipboard
Consistently specialize one, zero on args of type Zeros, Ones, Eye
These should be specialized to return FillArrays types:
julia> one(Ones(3,3)) # could return Eye(3)
3×3 Matrix{Float64}:
1.0 0.0 0.0
0.0 1.0 0.0
0.0 0.0 1.0
julia> one(Zeros(3,3)) # could return Eye(3)
3×3 Matrix{Float64}:
1.0 0.0 0.0
0.0 1.0 0.0
0.0 0.0 1.0
julia> one(Eye(3)) # could return Eye(3)
3×3 Diagonal{Float64, Vector{Float64}}:
1.0 ⋅ ⋅
⋅ 1.0 ⋅
⋅ ⋅ 1.0
julia> zero(Eye(3)) # could return Zeros(3,3)
3×3 Diagonal{Float64, Vector{Float64}}:
0.0 ⋅ ⋅
⋅ 0.0 ⋅
⋅ ⋅ 0.0
Compare with:
julia> zero(Zeros(3,3))
3×3 Zeros{Float64}
julia> zero(Ones(3,3))
3×3 Zeros{Float64}