Open
Description
So for the various array wrapper types like Symmetric
, Hermitian
, and Adjoint
, we currently don't have a specialized zero
method, but instead fall back to the AbstractArray
definition which works in terms of similar
. That means that e.g. this gives a MMatrix
:
julia> using StaticArrays
julia> zero(Symmetric(SA[1 2; 3 4]))
2×2 Symmetric{Int64, MMatrix{2, 2, Int64, 4}} with indices SOneTo(2)×SOneTo(2):
0 0
0 0
I think though for these wrapper types, we should be able to define zero
(and maybe some other functions?) like
for func in [:zero, #=Any others?=#]
for Wrapper in [:Symmetric, :Hermitian, :Adjoint, #=Any others?=#]
@eval Base.:($func)(M::$Wrapper) = $Wrapper($func(parent(M)))
end
end
to avoid falling back to similar
where possible, and make sure that custom methods like zero(::SMatrix)
end up getting called instead.