@@ -24,12 +24,16 @@ function rankUpdate!(A::StridedMatrix, x::StridedVector, y::StridedVector, α::N
2424 end
2525end
2626
27- # Deprecated 11 October 2018
28- Base. @deprecate rankUpdate! (α:: Number , x:: StridedVector , y:: StridedVector , A:: StridedMatrix ) rankUpdate! (A, x, y, α)
29-
3027# # Hermitian
31- rankUpdate! (A:: HermOrSym{T,S} , a:: StridedVector{T} , α:: T ) where {T<: BlasReal ,S<: StridedMatrix } = BLAS. syr! (A. uplo, α, a, A. data)
32- rankUpdate! (A:: HermOrSym{T,S} , a:: StridedVector{T} ) where {T<: BlasReal ,S<: StridedMatrix } = rankUpdate! (one (T), a, A)
28+ function rankUpdate! (A:: HermOrSym{T,S} , a:: StridedVector{T} , α:: T ) where {T<: BlasReal ,S<: StridedMatrix }
29+ BLAS. syr! (A. uplo, α, a, A. data)
30+ return A
31+ end
32+ function rankUpdate! (A:: Hermitian{Complex{T},S} , a:: StridedVector{Complex{T}} , α:: T ) where {T<: BlasReal ,S<: StridedMatrix }
33+ BLAS. her! (A. uplo, α, a, A. data)
34+ return A
35+ end
36+ rankUpdate! (A:: HermOrSym{T,S} , a:: StridedVector{T} ) where {T<: BlasFloat ,S<: StridedMatrix } = rankUpdate! (A, a, one (real (T)))
3337
3438# ## Generic
3539function rankUpdate! (A:: Hermitian , a:: StridedVector , α:: Real )
@@ -44,15 +48,18 @@ function rankUpdate!(A::Hermitian, a::StridedVector, α::Real)
4448 return A
4549end
4650
47- # Deprecated 11 October 2018
48- Base. @deprecate rankUpdate! (α:: Real , a:: StridedVector , A:: Hermitian ) rankUpdate! (A, a, α)
49-
5051# Rank k update
5152# # Real
52- rankUpdate! (C:: HermOrSym{T,S} , A:: StridedMatrix{T} , α:: T , β:: T ) where {T<: BlasReal ,S<: StridedMatrix } = syrk! (C. uplo, ' N' , α, A, β, C. data)
53+ function rankUpdate! (C:: HermOrSym{T,S} , A:: StridedMatrix{T} , α:: T , β:: T ) where {T<: BlasReal ,S<: StridedMatrix }
54+ BLAS. syrk! (C. uplo, ' N' , α, A, β, C. data)
55+ return C
56+ end
5357
5458# # Complex
55- rankUpdate! (C:: Hermitian{T,S} , A:: StridedMatrix{Complex{T}} , α:: T , β:: T ) where {T<: BlasReal ,S<: StridedMatrix } = herk! (C. uplo, ' N' , α, A, β, C. data)
59+ function rankUpdate! (C:: Hermitian{Complex{T},S} , A:: StridedMatrix{Complex{T}} , α:: T , β:: T ) where {T<: BlasReal ,S<: StridedMatrix }
60+ BLAS. herk! (C. uplo, ' N' , α, A, β, C. data)
61+ return C
62+ end
5663
5764# ## Generic
5865function rankUpdate! (C:: Hermitian , A:: StridedVecOrMat , α:: Real )
@@ -80,93 +87,14 @@ function rankUpdate!(C::Hermitian, A::StridedVecOrMat, α::Real)
8087 return C
8188end
8289
83- # Deprecated 11 October 2018
84- Base. @deprecate rankUpdate! (α:: Real , A:: StridedVecOrMat , C:: Hermitian ) rankUpdate! (C, A, α)
85- Base. @deprecate rankUpdate! (α:: Real , A:: StridedVecOrMat , β:: Real , C:: Hermitian ) rankUpdate! (C, A, α, β)
86-
87- if VERSION < v " 1.3.0-alpha.115"
88- # BLAS style mul!
89- # # gemv
90- mul! (y:: StridedVector{T} , A:: StridedMatrix{T} , x:: StridedVector{T} , α:: T , β:: T ) where {T<: BlasFloat } = gemv! (' N' , α, A, x, β, y)
91- mul! (y:: StridedVector{T} , A:: Adjoint{T,<:StridedMatrix{T}} , x:: StridedVector{T} , α:: T , β:: T ) where {T<: BlasFloat } = gemv! (' C' , α, parent (adjA), x, β, y)
92-
93- # # gemm
94- mul! (C:: StridedMatrix{T} , A:: StridedMatrix{T} , B:: StridedMatrix{T} , α:: T , β:: T ) where {T<: BlasFloat } = BLAS. gemm! (' N' , ' N' , α, A, B, β, C)
95- mul! (C:: StridedMatrix{T} , adjA:: Adjoint{T,<:StridedMatrix{T}} , B:: StridedMatrix{T} , α:: T , β:: T ) where {T<: BlasFloat } = BLAS. gemm! (' C' , ' N' , α, parent (adjA), B, β, C)
96- # Not optimized since it is a generic fallback. Can probably soon be removed when the signatures in base have been updated.
97- function mul! (C:: StridedVecOrMat ,
98- A:: StridedMatrix ,
99- B:: StridedVecOrMat ,
100- α:: Number ,
101- β:: Number )
102-
103- m, n = size (C, 1 ), size (C, 2 )
104- k = size (A, 2 )
105-
106- if β != 1
107- if β == 0
108- fill! (C, 0 )
109- else
110- rmul! (C, β)
111- end
112- end
113- for j = 1 : n
114- for i = 1 : m
115- for l = 1 : k
116- C[i,j] += α* A[i,l]* B[l,j]
117- end
118- end
119- end
120- return C
121- end
122- function mul! (C:: StridedVecOrMat ,
123- adjA:: Adjoint{<:Number,<:StridedMatrix} ,
124- B:: StridedVecOrMat ,
125- α:: Number ,
126- β:: Number )
127-
128- A = parent (adjA)
129- m, n = size (C, 1 ), size (C, 2 )
130- k = size (A, 1 )
131-
132- if β != 1
133- if β == 0
134- fill! (C, 0 )
135- else
136- rmul! (C, β)
137- end
138- end
139- for j = 1 : n
140- for i = 1 : m
141- for l = 1 : k
142- C[i,j] += α* A[l,i]' * B[l,j]
143- end
144- end
145- end
146- return C
147- end
148-
149- # # trmm like
150- # ## BLAS versions
151- mul! (A:: UpperTriangular{T,S} , B:: StridedMatrix{T} , α:: T ) where {T<: BlasFloat ,S} = trmm! (' L' , ' U' , ' N' , ' N' , α, A. data, B)
152- mul! (A:: LowerTriangular{T,S} , B:: StridedMatrix{T} , α:: T ) where {T<: BlasFloat ,S} = trmm! (' L' , ' L' , ' N' , ' N' , α, A. data, B)
153- mul! (A:: UnitUpperTriangular{T,S} , B:: StridedMatrix{T} , α:: T ) where {T<: BlasFloat ,S} = trmm! (' L' , ' U' , ' N' , ' U' , α, A. data, B)
154- mul! (A:: UnitLowerTriangular{T,S} , B:: StridedMatrix{T} , α:: T ) where {T<: BlasFloat ,S} = trmm! (' L' , ' L' , ' N' , ' U' , α, A. data, B)
155- mul! (A:: Adjoint{T,UpperTriangular{T,S}} , B:: StridedMatrix{T} , α:: T ) where {T<: BlasFloat ,S} = trmm! (' L' , ' U' , ' C' , ' N' , α, parent (A). data, B)
156- mul! (A:: Adjoint{T,LowerTriangular{T,S}} , B:: StridedMatrix{T} , α:: T ) where {T<: BlasFloat ,S} = trmm! (' L' , ' L' , ' C' , ' N' , α, parent (A). data, B)
157- mul! (A:: Adjoint{T,UnitUpperTriangular{T,S}} , B:: StridedMatrix{T} , α:: T ) where {T<: BlasFloat ,S} = trmm! (' L' , ' U' , ' C' , ' U' , α, parent (A). data, B)
158- mul! (A:: Adjoint{T,UnitLowerTriangular{T,S}} , B:: StridedMatrix{T} , α:: T ) where {T<: BlasFloat ,S} = trmm! (' L' , ' L' , ' C' , ' U' , α, parent (A). data, B)
159-
160- end # VERSION
161-
16290# ## Generic fallbacks
16391function lmul! (A:: UpperTriangular{T,S} , B:: StridedMatrix{T} , α:: T ) where {T<: Number ,S}
16492 AA = A. data
16593 m, n = size (B)
166- for i = 1 : m
167- for j = 1 : n
94+ for i ∈ 1 : m
95+ for j ∈ 1 : n
16896 B[i,j] = α* AA[i,i]* B[i,j]
169- for l = i + 1 : m
97+ for l ∈ ( i + 1 ) : m
17098 B[i,j] += α* AA[i,l]* B[l,j]
17199 end
172100 end
@@ -176,10 +104,10 @@ end
176104function lmul! (A:: LowerTriangular{T,S} , B:: StridedMatrix{T} , α:: T ) where {T<: Number ,S}
177105 AA = A. data
178106 m, n = size (B)
179- for i = m: - 1 : 1
180- for j = 1 : n
107+ for i ∈ m: - 1 : 1
108+ for j ∈ 1 : n
181109 B[i,j] = α* AA[i,i]* B[i,j]
182- for l = 1 : i - 1
110+ for l ∈ 1 : ( i - 1 )
183111 B[i,j] += α* AA[i,l]* B[l,j]
184112 end
185113 end
@@ -189,11 +117,11 @@ end
189117function lmul! (A:: UnitUpperTriangular{T,S} , B:: StridedMatrix{T} , α:: T ) where {T<: Number ,S}
190118 AA = A. data
191119 m, n = size (B)
192- for i = 1 : m
193- for j = 1 : n
120+ for i ∈ 1 : m
121+ for j ∈ 1 : n
194122 B[i,j] = α* B[i,j]
195- for l = i + 1 : m
196- B[i,j] = α* AA[i,l]* B[l,j]
123+ for l ∈ ( i + 1 ) : m
124+ B[i,j] + = α* AA[i,l]* B[l,j]
197125 end
198126 end
199127 end
@@ -202,63 +130,63 @@ end
202130function lmul! (A:: UnitLowerTriangular{T,S} , B:: StridedMatrix{T} , α:: T ) where {T<: Number ,S}
203131 AA = A. data
204132 m, n = size (B)
205- for i = m: - 1 : 1
206- for j = 1 : n
133+ for i ∈ m: - 1 : 1
134+ for j ∈ 1 : n
207135 B[i,j] = α* B[i,j]
208- for l = 1 : i - 1
136+ for l ∈ 1 : ( i - 1 )
209137 B[i,j] += α* AA[i,l]* B[l,j]
210138 end
211139 end
212140 end
213141 return B
214142end
215- function lmul! (A:: Adjoint {T,UpperTriangular {T,S}} , B:: StridedMatrix{T} , α:: T ) where {T<: Number ,S}
216- AA = parent (A) . data
143+ function lmul! (A:: LowerTriangular {T,Adjoint {T,S}} , B:: StridedMatrix{T} , α:: T ) where {T<: Number ,S}
144+ AA = parent (A. data)
217145 m, n = size (B)
218- for i = m: - 1 : 1
219- for j = 1 : n
220- B[i,j] = α* AA[i,i]* B[i,j]
221- for l = 1 : i - 1
146+ for i ∈ m: - 1 : 1
147+ for j ∈ 1 : n
148+ B[i,j] = α* AA[i,i]' * B[i,j]
149+ for l ∈ 1 : ( i - 1 )
222150 B[i,j] += α* AA[l,i]' * B[l,j]
223151 end
224152 end
225153 end
226154 return B
227155end
228- function lmul! (A:: Adjoint {T,LowerTriangular {T,S}} , B:: StridedMatrix{T} , α:: T ) where {T<: Number ,S}
229- AA = parent (A) . data
156+ function lmul! (A:: UpperTriangular {T,Adjoint {T,S}} , B:: StridedMatrix{T} , α:: T ) where {T<: Number ,S}
157+ AA = parent (A. data)
230158 m, n = size (B)
231- for i = 1 : m
232- for j = 1 : n
233- B[i,j] = α* AA[i,i]* B[i,j]
234- for l = i + 1 : m
159+ for i ∈ 1 : m
160+ for j ∈ 1 : n
161+ B[i,j] = α* AA[i,i]' * B[i,j]
162+ for l ∈ ( i + 1 ) : m
235163 B[i,j] += α* AA[l,i]' * B[l,j]
236164 end
237165 end
238166 end
239167 return B
240168end
241- function lmul! (A:: Adjoint {T,UnitUpperTriangular {T,S}} , B:: StridedMatrix{T} , α:: T ) where {T<: Number ,S}
242- AA = parent (A) . data
169+ function lmul! (A:: UnitLowerTriangular {T,Adjoint {T,S}} , B:: StridedMatrix{T} , α:: T ) where {T<: Number ,S}
170+ AA = parent (A. data)
243171 m, n = size (B)
244- for i = m: - 1 : 1
245- for j = 1 : n
172+ for i ∈ m: - 1 : 1
173+ for j ∈ 1 : n
246174 B[i,j] = α* B[i,j]
247- for l = 1 : i - 1
175+ for l ∈ 1 : ( i - 1 )
248176 B[i,j] += α* AA[l,i]' * B[l,j]
249177 end
250178 end
251179 end
252180 return B
253181end
254- function lmul! (A:: Adjoint {T,UnitLowerTriangular {T,S}} , B:: StridedMatrix{T} , α:: T ) where {T<: Number ,S}
255- AA = parent (A) . data
182+ function lmul! (A:: UnitUpperTriangular {T,Adjoint {T,S}} , B:: StridedMatrix{T} , α:: T ) where {T<: Number ,S}
183+ AA = parent (A. data)
256184 m, n = size (B)
257- for i = 1 : m
258- for j = 1 : n
185+ for i ∈ 1 : m
186+ for j ∈ 1 : n
259187 B[i,j] = α* B[i,j]
260- for l = i + 1 : m
261- B[i,j] = α* AA[l,i]' * B[l,j]
188+ for l ∈ ( i + 1 ) : m
189+ B[i,j] + = α* AA[l,i]' * B[l,j]
262190 end
263191 end
264192 end
0 commit comments