Skip to content

Commit 2aab330

Browse files
committed
Add a special path for strided matrices
1 parent 3f8f398 commit 2aab330

File tree

2 files changed

+19
-4
lines changed

2 files changed

+19
-4
lines changed

src/adjtrans.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -319,8 +319,8 @@ const AdjointAbsVec{T} = Adjoint{T,<:AbstractVector}
319319
const AdjointAbsMat{T} = Adjoint{T,<:AbstractMatrix}
320320
const TransposeAbsVec{T} = Transpose{T,<:AbstractVector}
321321
const TransposeAbsMat{T} = Transpose{T,<:AbstractMatrix}
322-
const AdjOrTransAbsVec{T} = AdjOrTrans{T,<:AbstractVector}
323-
const AdjOrTransAbsMat{T} = AdjOrTrans{T,<:AbstractMatrix}
322+
const AdjOrTransAbsVec{T,V<:AbstractVector} = AdjOrTrans{T,V}
323+
const AdjOrTransAbsMat{T,M<:AbstractMatrix} = AdjOrTrans{T,M}
324324

325325
# for internal use below
326326
wrapperop(_) = identity

src/diagonal.jl

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -332,14 +332,29 @@ function (*)(D::Diagonal, V::AbstractVector)
332332
return D.diag .* V
333333
end
334334

335-
function (*)(A::AdjOrTransAbsMat, D::Diagonal)
335+
function _diag_adj_mul(A::AdjOrTransAbsMat, D::Diagonal)
336336
adj = wrapperop(A)
337337
copy(adj(adj(D) * adj(A)))
338338
end
339-
function (*)(D::Diagonal, A::AdjOrTransAbsMat)
339+
function _diag_adj_mul(A::AdjOrTransAbsMat{<:Any, <:StridedMatrix}, D::Diagonal)
340+
Ac = copy_similar(A, promote_op(*, eltype(A), eltype(D)))
341+
rmul!(Ac, D)
342+
end
343+
function _diag_adj_mul(D::Diagonal, A::AdjOrTransAbsMat)
340344
adj = wrapperop(A)
341345
copy(adj(adj(A) * adj(D)))
342346
end
347+
function _diag_adj_mul(D::Diagonal, A::AdjOrTransAbsMat{<:Any, <:StridedMatrix})
348+
Ac = copy_similar(A, promote_op(*, eltype(A), eltype(D)))
349+
lmul!(D, Ac)
350+
end
351+
352+
function (*)(A::AdjOrTransAbsMat, D::Diagonal)
353+
_diag_adj_mul(A, D)
354+
end
355+
function (*)(D::Diagonal, A::AdjOrTransAbsMat)
356+
_diag_adj_mul(D, A)
357+
end
343358

344359
function rmul!(A::AbstractMatrix, D::Diagonal)
345360
matmul_size_check(size(A), size(D))

0 commit comments

Comments
 (0)