@@ -21,9 +21,21 @@ function matrix_versions(A)
2121 transpose (sparse (transpose (A_sparse))),
2222 adjoint (sparse (adjoint (A_sparse))),
2323 ]
24- # if issymmetric(A)
25- # append!(versions, Symmetric.(versions))
26- # end
24+ if issymmetric (A)
25+ lower_triangles = [
26+ Matrix (LowerTriangular (A_dense)), sparse (LowerTriangular (A_sparse))
27+ ]
28+ upper_triangles = [
29+ Matrix (UpperTriangular (A_dense)), sparse (UpperTriangular (A_sparse))
30+ ]
31+ symmetric_versions = vcat (
32+ Symmetric .(versions),
33+ Hermitian .(versions),
34+ Symmetric .(lower_triangles, :L ),
35+ Symmetric .(upper_triangles, :U ),
36+ )
37+ append! (versions, symmetric_versions)
38+ end
2739 return versions
2840end
2941
@@ -38,11 +50,15 @@ respectful_similar(A::AbstractMatrix) = respectful_similar(A, eltype(A))
3850respectful_similar (A:: AbstractMatrix , :: Type{T} ) where {T} = similar (A, T)
3951
4052function respectful_similar (A:: Transpose , :: Type{T} ) where {T}
41- return transpose (similar (parent (A), T))
53+ return transpose (respectful_similar (parent (A), T))
4254end
4355
4456function respectful_similar (A:: Adjoint , :: Type{T} ) where {T}
45- return adjoint (similar (parent (A), T))
57+ return adjoint (respectful_similar (parent (A), T))
58+ end
59+
60+ function respectful_similar (A:: Union{Symmetric,Hermitian} , :: Type{T} ) where {T}
61+ return respectful_similar (sparse (A), T)
4662end
4763
4864"""
0 commit comments