@@ -151,101 +151,91 @@ end
151
151
(* )(Da:: Diagonal , Db:: Diagonal ) = Diagonal (Da. diag .* Db. diag)
152
152
(* )(D:: Diagonal , V:: AbstractVector ) = D. diag .* V
153
153
154
- (* )(A:: AbstractTriangular , D:: Diagonal ) = mul ! (copy (A), D)
155
- (* )(D:: Diagonal , B:: AbstractTriangular ) = mul ! (D, copy (B))
154
+ (* )(A:: AbstractTriangular , D:: Diagonal ) = mul1 ! (copy (A), D)
155
+ (* )(D:: Diagonal , B:: AbstractTriangular ) = mul2 ! (D, copy (B))
156
156
157
157
(* )(A:: AbstractMatrix , D:: Diagonal ) =
158
158
scale! (similar (A, promote_op (* , eltype (A), eltype (D. diag)), size (A)), A, D. diag)
159
159
(* )(D:: Diagonal , A:: AbstractMatrix ) =
160
160
scale! (similar (A, promote_op (* , eltype (A), eltype (D. diag)), size (A)), D. diag, A)
161
161
162
- mul! (A:: Union{LowerTriangular,UpperTriangular} , D:: Diagonal ) = typeof (A)(mul! (A. data, D))
163
- function mul! (A:: UnitLowerTriangular , D:: Diagonal )
164
- mul! (A. data, D)
162
+
163
+ mul1! (A:: Union{LowerTriangular,UpperTriangular} , D:: Diagonal ) = typeof (A)(mul1! (A. data, D))
164
+ function mul1! (A:: UnitLowerTriangular , D:: Diagonal )
165
+ mul1! (A. data, D)
165
166
for i = 1 : size (A, 1 )
166
167
A. data[i,i] = D. diag[i]
167
168
end
168
169
LowerTriangular (A. data)
169
170
end
170
- function mul ! (A:: UnitUpperTriangular , D:: Diagonal )
171
- mul ! (A. data, D)
171
+ function mul1 ! (A:: UnitUpperTriangular , D:: Diagonal )
172
+ mul1 ! (A. data, D)
172
173
for i = 1 : size (A, 1 )
173
174
A. data[i,i] = D. diag[i]
174
175
end
175
176
UpperTriangular (A. data)
176
177
end
177
- function mul! (D:: Diagonal , B:: UnitLowerTriangular )
178
- mul! (D, B. data)
178
+
179
+ function mul2! (D:: Diagonal , B:: UnitLowerTriangular )
180
+ mul2! (D, B. data)
179
181
for i = 1 : size (B, 1 )
180
182
B. data[i,i] = D. diag[i]
181
183
end
182
184
LowerTriangular (B. data)
183
185
end
184
- function mul ! (D:: Diagonal , B:: UnitUpperTriangular )
185
- mul ! (D, B. data)
186
+ function mul2 ! (D:: Diagonal , B:: UnitUpperTriangular )
187
+ mul2 ! (D, B. data)
186
188
for i = 1 : size (B, 1 )
187
189
B. data[i,i] = D. diag[i]
188
190
end
189
191
UpperTriangular (B. data)
190
192
end
191
193
192
194
* (D:: Adjoint{<:Any,<:Diagonal} , B:: Diagonal ) = Diagonal (adjoint .(D. parent. diag) .* B. diag)
193
- * (A:: Adjoint{<:Any,<:AbstractTriangular} , D:: Diagonal ) = mul ! (copy (A), D)
195
+ * (A:: Adjoint{<:Any,<:AbstractTriangular} , D:: Diagonal ) = mul1 ! (copy (A), D)
194
196
function * (adjA:: Adjoint{<:Any,<:AbstractMatrix} , D:: Diagonal )
195
197
A = adjA. parent
196
198
Ac = similar (A, promote_op (* , eltype (A), eltype (D. diag)), (size (A, 2 ), size (A, 1 )))
197
199
adjoint! (Ac, A)
198
- mul ! (Ac, D)
200
+ mul1 ! (Ac, D)
199
201
end
200
202
201
203
* (D:: Transpose{<:Any,<:Diagonal} , B:: Diagonal ) = Diagonal (transpose .(D. parent. diag) .* B. diag)
202
- * (A:: Transpose{<:Any,<:AbstractTriangular} , D:: Diagonal ) = mul ! (copy (A), D)
204
+ * (A:: Transpose{<:Any,<:AbstractTriangular} , D:: Diagonal ) = mul1 ! (copy (A), D)
203
205
function * (transA:: Transpose{<:Any,<:AbstractMatrix} , D:: Diagonal )
204
206
A = transA. parent
205
207
At = similar (A, promote_op (* , eltype (A), eltype (D. diag)), (size (A, 2 ), size (A, 1 )))
206
208
transpose! (At, A)
207
- mul ! (At, D)
209
+ mul1 ! (At, D)
208
210
end
209
211
210
212
* (D:: Diagonal , B:: Adjoint{<:Any,<:Diagonal} ) = Diagonal (D. diag .* adjoint .(B. parent. diag))
211
- * (D:: Diagonal , B:: Adjoint{<:Any,<:AbstractTriangular} ) = mul ! (D, collect (B))
212
- * (D:: Diagonal , adjQ:: Adjoint{<:Any,<:Union{QRCompactWYQ,QRPackedQ}} ) = (Q = adjQ. parent; mul ! (Array (D), adjoint (Q)))
213
+ * (D:: Diagonal , B:: Adjoint{<:Any,<:AbstractTriangular} ) = mul2 ! (D, collect (B))
214
+ * (D:: Diagonal , adjQ:: Adjoint{<:Any,<:Union{QRCompactWYQ,QRPackedQ}} ) = (Q = adjQ. parent; mul1 ! (Array (D), adjoint (Q)))
213
215
function * (D:: Diagonal , adjA:: Adjoint{<:Any,<:AbstractMatrix} )
214
216
A = adjA. parent
215
217
Ac = similar (A, promote_op (* , eltype (A), eltype (D. diag)), (size (A, 2 ), size (A, 1 )))
216
218
adjoint! (Ac, A)
217
- mul ! (D, Ac)
219
+ mul2 ! (D, Ac)
218
220
end
219
221
220
222
* (D:: Diagonal , B:: Transpose{<:Any,<:Diagonal} ) = Diagonal (D. diag .* transpose .(B. parent. diag))
221
- * (D:: Diagonal , B:: Transpose{<:Any,<:AbstractTriangular} ) = mul ! (D, copy (B))
223
+ * (D:: Diagonal , B:: Transpose{<:Any,<:AbstractTriangular} ) = mul2 ! (D, copy (B))
222
224
function * (D:: Diagonal , transA:: Transpose{<:Any,<:AbstractMatrix} )
223
225
A = transA. parent
224
226
At = similar (A, promote_op (* , eltype (A), eltype (D. diag)), (size (A, 2 ), size (A, 1 )))
225
227
transpose! (At, A)
226
- mul ! (D, At)
228
+ mul2 ! (D, At)
227
229
end
228
230
229
231
* (D:: Adjoint{<:Any,<:Diagonal} , B:: Adjoint{<:Any,<:Diagonal} ) =
230
232
Diagonal (adjoint .(D. parent. diag) .* adjoint .(B. parent. diag))
231
233
* (D:: Transpose{<:Any,<:Diagonal} , B:: Transpose{<:Any,<:Diagonal} ) =
232
234
Diagonal (transpose .(D. parent. diag) .* transpose .(B. parent. diag))
233
235
234
- mul! (A:: Diagonal , B:: Diagonal ) = throw (MethodError (mul!, (A, B)))
235
- mul! (A:: QRPackedQ , D:: Diagonal ) = throw (MethodError (mul!, (A, D)))
236
- mul! (A:: QRPackedQ , B:: Adjoint{<:Any,<:Diagonal} ) = throw (MethodError (mul!, (A, B)))
237
- mul! (A:: QRPackedQ , B:: Transpose{<:Any,<:Diagonal} ) = throw (MethodError (mul!, (A, B)))
238
- mul! (A:: Adjoint{<:Any,<:QRPackedQ} , B:: Diagonal ) = throw (MethodError (mul!, (A, B)))
239
- mul! (A:: Adjoint{<:Any,<:QRPackedQ} , B:: Adjoint{<:Any,<:Diagonal} ) = throw (MethodError (mul!, (A, B)))
240
- mul! (A:: Adjoint{<:Any,<:QRPackedQ} , B:: Transpose{<:Any,<:Diagonal} ) = throw (MethodError (mul!, (A, B)))
241
- mul! (A:: Diagonal , B:: Adjoint{<:Any,<:Diagonal} ) = throw (MethodError (mul!, (A, B)))
242
- mul! (A:: Diagonal , B:: Transpose{<:Any,<:Diagonal} ) = throw (MethodError (mul!, (A, B)))
243
- mul! (A:: Adjoint{<:Any,<:Diagonal} , B:: Adjoint{<:Any,<:Diagonal} ) = throw (MethodError (mul!, (A, B)))
244
- mul! (A:: Adjoint{<:Any,<:Diagonal} , B:: Transpose{<:Any,<:Diagonal} ) = throw (MethodError (mul!, (A, B)))
245
- mul! (A:: Transpose{<:Any,<:Diagonal} , B:: Adjoint{<:Any,<:Diagonal} ) = throw (MethodError (mul!, (A, B)))
246
- mul! (A:: Transpose{<:Any,<:Diagonal} , B:: Transpose{<:Any,<:Diagonal} ) = throw (MethodError (mul!, (A, B)))
247
- mul! (A:: Transpose{<:Any,<:Diagonal} , B:: Diagonal ) = throw (MethodError (mul!, (A, B)))
248
- mul! (A:: Adjoint{<:Any,<:Diagonal} , B:: Diagonal ) = throw (MethodError (mul!, (A, B)))
236
+ mul1! (A:: Diagonal ,B:: Diagonal ) = Diagonal (A. diag .*= B. diag)
237
+ mul2! (A:: Diagonal ,B:: Diagonal ) = Diagonal (B. diag .= A. diag .* B. diag)
238
+
249
239
mul! (A:: Diagonal , B:: AbstractMatrix ) = scale! (A. diag, B)
250
240
mul! (adjA:: Adjoint{<:Any,<:Diagonal} , B:: AbstractMatrix ) = (A = adjA. parent; scale! (conj (A. diag),B))
251
241
mul! (transA:: Transpose{<:Any,<:Diagonal} , B:: AbstractMatrix ) = (A = transA. parent; scale! (A. diag,B))
@@ -287,6 +277,7 @@ mul!(C::AbstractMatrix, A::Transpose{<:Any,<:Diagonal}, B::Transpose{<:Any,<:Rea
287
277
288
278
289
279
(/ )(Da:: Diagonal , Db:: Diagonal ) = Diagonal (Da. diag ./ Db. diag)
280
+
290
281
function ldiv! (D:: Diagonal{T} , v:: AbstractVector{T} ) where {T}
291
282
if length (v) != length (D. diag)
292
283
throw (DimensionMismatch (" diagonal matrix is $(length (D. diag)) by $(length (D. diag)) but right hand side has $(length (v)) rows" ))
@@ -316,6 +307,7 @@ function ldiv!(D::Diagonal{T}, V::AbstractMatrix{T}) where {T}
316
307
V
317
308
end
318
309
310
+
319
311
ldiv! (adjD:: Adjoint{<:Any,<:Diagonal{T}} , B:: AbstractVecOrMat{T} ) where {T} =
320
312
(D = adjD. parent; ldiv! (conj (D), B))
321
313
ldiv! (transD:: Transpose{<:Any,<:Diagonal{T}} , B:: AbstractVecOrMat{T} ) where {T} =
@@ -339,6 +331,7 @@ function rdiv!(A::AbstractMatrix{T}, D::Diagonal{T}) where {T}
339
331
A
340
332
end
341
333
334
+
342
335
rdiv! (A:: AbstractMatrix{T} , adjD:: Adjoint{<:Any,<:Diagonal{T}} ) where {T} =
343
336
(D = adjD. parent; rdiv! (A, conj (D)))
344
337
rdiv! (A:: AbstractMatrix{T} , transD:: Transpose{<:Any,<:Diagonal{T}} ) where {T} =
0 commit comments