@@ -229,6 +229,12 @@ const SelfAdjoint = Union{Symmetric{<:Real}, Hermitian{<:Number}}
229229wrappertype (:: Union{Symmetric, SymTridiagonal} ) = Symmetric
230230wrappertype (:: Hermitian ) = Hermitian
231231
232+ _symherm_wrapperop (:: Symmetric ) = symmetric
233+ _symherm_wrapperop (:: Hermitian ) = hermitian
234+
235+ _conjugation (:: Symmetric ) = transpose
236+ _conjugation (:: Hermitian ) = adjoint
237+
232238size (A:: HermOrSym ) = size (A. data)
233239axes (A:: HermOrSym ) = axes (A. data)
234240@inline function Base. isassigned (A:: HermOrSym , i:: Int , j:: Int )
@@ -266,6 +272,7 @@ Base._reverse(A::Symmetric, ::Colon) = Symmetric(reverse(A.data), A.uplo == 'U'
266272
267273@propagate_inbounds function setindex! (A:: Symmetric , v, i:: Integer , j:: Integer )
268274 i == j || throw (ArgumentError (" Cannot set a non-diagonal index in a symmetric matrix" ))
275+ issymmetric (v) || throw (ArgumentError (" cannot set a diagonal element of a symmetric matrix to an asymmetric value" ))
269276 setindex! (A. data, v, i, j)
270277 return A
271278end
@@ -276,8 +283,8 @@ Base._reverse(A::Hermitian, ::Colon) = Hermitian(reverse(A.data), A.uplo == 'U'
276283@propagate_inbounds function setindex! (A:: Hermitian , v, i:: Integer , j:: Integer )
277284 if i != j
278285 throw (ArgumentError (" Cannot set a non-diagonal index in a Hermitian matrix" ))
279- elseif ! isreal (v)
280- throw (ArgumentError (" Cannot set a diagonal entry in a Hermitian matrix to a nonreal value" ))
286+ elseif ! ishermitian (v)
287+ throw (ArgumentError (" cannot set a diagonal element of a hermitian matrix to a non-hermitian value" ))
281288 else
282289 setindex! (A. data, v, i, j)
283290 end
@@ -288,9 +295,6 @@ Base.dataids(A::HermOrSym) = Base.dataids(parent(A))
288295Base. unaliascopy (A:: Hermitian ) = Hermitian (Base. unaliascopy (parent (A)), sym_uplo (A. uplo))
289296Base. unaliascopy (A:: Symmetric ) = Symmetric (Base. unaliascopy (parent (A)), sym_uplo (A. uplo))
290297
291- _conjugation (:: Symmetric ) = transpose
292- _conjugation (:: Hermitian ) = adjoint
293-
294298diag (A:: Symmetric ) = symmetric .(diag (parent (A)), sym_uplo (A. uplo))
295299diag (A:: Hermitian ) = hermitian .(diag (parent (A)), sym_uplo (A. uplo))
296300
0 commit comments