@@ -108,21 +108,14 @@ end
108
108
end
109
109
110
110
function setindex! (A:: Symmetric , v, i:: Integer , j:: Integer )
111
- if (A. uplo == ' U' && i >= j) || (A. uplo == ' L' && i <= j)
112
- setindex! (A. data, v, i, j)
113
- else
114
- setindex! (A. data, v, j, i)
115
- end
111
+ i == j || throw (ArgumentError (" Cannot set a non-diagonal index in a symmetric matrix" ))
112
+ setindex! (A. data, v, i, j)
116
113
end
117
114
118
115
function setindex! (A:: Hermitian , v, i:: Integer , j:: Integer )
119
- if i == j && ! isreal (v)
120
- throw (ArgumentError (" Cannot set a nonreal value to the diagonal in a Hermitian matrix" ))
121
- elseif (A. uplo == ' U' && i >= j) || (A. uplo == ' L' && i <= j)
122
- setindex! (A. data, v, i, j)
123
- else
124
- setindex! (A. data, v, j, i)
125
- end
116
+ i == j || throw (ArgumentError (" Cannot set a non-diagonal index in a Hermitian matrix" ))
117
+ isreal (v) || throw (ArgumentError (" Cannot set a nonreal value to the diagonal in a Hermitian matrix" ))
118
+ setindex! (A. data, v, i, j)
126
119
end
127
120
128
121
similar {T} (A:: Symmetric , :: Type{T} ) = Symmetric (similar (A. data, T))
@@ -255,6 +248,10 @@ A_mul_B!{T<:BlasComplex,S<:StridedMatrix}(C::StridedMatrix{T}, A::StridedMatrix{
255
248
* (A:: HermOrSym , B:: HermOrSym ) = full (A)* full (B)
256
249
* (A:: StridedMatrix , B:: HermOrSym ) = A* full (B)
257
250
251
+ for T in (:Symmetric , :Hermitian ), op in (:+ , :- , :* , :/ )
252
+ @eval ($ op)(A:: $T , x:: Number ) = ($ T)(($ op)(A. data, x), Symbol (A. uplo))
253
+ end
254
+
258
255
bkfact (A:: HermOrSym ) = bkfact (A. data, Symbol (A. uplo), issymmetric (A))
259
256
factorize (A:: HermOrSym ) = bkfact (A)
260
257
0 commit comments