Skip to content

Commit f02280c

Browse files
authored
Fix zero() for LinearAlgebra wrappers over StaticArrays (#1337)
\`zero(Symmetric(smatrix))\`, \`zero(Diagonal(svector))\`, etc. failed because \`zero\` was not defined for LinearAlgebra wrapper types over StaticArrays. Fix: add \`zero\` methods for \`Symmetric\`, \`Hermitian\`, \`UpperTriangular\`, \`LowerTriangular\`, \`UnitUpperTriangular\`, \`UnitLowerTriangular\`, \`Transpose\`, \`Adjoint\`, and \`Diagonal\` wrapping StaticArrays.
1 parent 146cc3f commit f02280c

File tree

3 files changed

+18
-1
lines changed

3 files changed

+18
-1
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name = "StaticArrays"
22
uuid = "90137ffa-7385-5640-81b9-e52037218182"
3-
version = "1.9.17"
3+
version = "1.9.18"
44

55
[deps]
66
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"

src/linalg.jl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,14 @@ end
148148
@inline Base.zero(a::SA) where {SA <: StaticArray} = zeros(SA)
149149
@inline Base.zero(a::Type{SA}) where {SA <: StaticArray} = zeros(SA)
150150

151+
# Wrappers over StaticArray (see StaticMatrixLike definition)
152+
for WR in (:Symmetric, :Hermitian)
153+
@eval @inline Base.zero(a::$WR{<:Any,<:StaticMatrix}) = $WR(zero(parent(a)), _sym_uplo(a))
154+
end
155+
for WR in (:UpperTriangular, :LowerTriangular, :UnitUpperTriangular, :UnitLowerTriangular, :Transpose, :Adjoint)
156+
@eval @inline Base.zero(a::$WR{<:Any,<:StaticArray}) = $WR(zero(parent(a)))
157+
end
158+
151159
@inline _construct_sametype(a::Type, elements) = a(elements)
152160
@inline _construct_sametype(a, elements) = typeof(a)(elements)
153161

test/linalg.jl

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,15 @@ end
231231
@test one(RotMat2) == SA[1 0; 0 1]
232232
# TODO: See comment in _one.
233233
@test_broken one(RotMat2) isa SMatrix{2,2,Float64}
234+
235+
# zero preserves wrapper types over StaticArrays
236+
let S = SMatrix{2,2}(1.0, 0.5, 0.5, 2.0), v = SVector(1.0, 2.0)
237+
for WR in (Symmetric, Hermitian, UpperTriangular, LowerTriangular,
238+
UnitUpperTriangular, UnitLowerTriangular, Transpose, Adjoint)
239+
@test @inferred(zero(WR(S))) === WR(zero(S))
240+
end
241+
@test @inferred(zero(Diagonal(v))) === Diagonal(zero(v))
242+
end
234243
end
235244

236245
@testset "cross()" begin

0 commit comments

Comments
 (0)