FillArrays.jl icon indicating copy to clipboard operation
FillArrays.jl copied to clipboard

Consistently specialize one, zero on args of type Zeros, Ones, Eye

Open cossio opened this issue 3 years ago • 0 comments

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}

cossio avatar Mar 16 '22 15:03 cossio