Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/adjtrans.jl
Original file line number Diff line number Diff line change
Expand Up @@ -319,8 +319,8 @@ const AdjointAbsVec{T} = Adjoint{T,<:AbstractVector}
const AdjointAbsMat{T} = Adjoint{T,<:AbstractMatrix}
const TransposeAbsVec{T} = Transpose{T,<:AbstractVector}
const TransposeAbsMat{T} = Transpose{T,<:AbstractMatrix}
const AdjOrTransAbsVec{T} = AdjOrTrans{T,<:AbstractVector}
const AdjOrTransAbsMat{T} = AdjOrTrans{T,<:AbstractMatrix}
const AdjOrTransAbsVec{T,V<:AbstractVector} = AdjOrTrans{T,V}
const AdjOrTransAbsMat{T,M<:AbstractMatrix} = AdjOrTrans{T,M}

# for internal use below
wrapperop(_) = identity
Expand Down
26 changes: 26 additions & 0 deletions src/diagonal.jl
Original file line number Diff line number Diff line change
Expand Up @@ -332,6 +332,32 @@ function (*)(D::Diagonal, V::AbstractVector)
return D.diag .* V
end

function _diag_adj_mul(A::AdjOrTransAbsMat, D::Diagonal)
adj = wrapperop(A)
copy(adj(adj(D) * adj(A)))
end
function _diag_adj_mul(A::AdjOrTransAbsMat{<:Number, <:StridedMatrix}, D::Diagonal{<:Number})
TS = promote_op(matprod, eltype(A), eltype(D))
C = matprod_dest(A, D, TS)
mul!(C, A, D)
end
function _diag_adj_mul(D::Diagonal, A::AdjOrTransAbsMat)
adj = wrapperop(A)
copy(adj(adj(A) * adj(D)))
end
function _diag_adj_mul(D::Diagonal{<:Number}, A::AdjOrTransAbsMat{<:Number, <:StridedMatrix})
TS = promote_op(matprod, eltype(A), eltype(D))
C = matprod_dest(D, A, TS)
mul!(C, D, A)
end

function (*)(A::AdjOrTransAbsMat, D::Diagonal)
_diag_adj_mul(A, D)
end
function (*)(D::Diagonal, A::AdjOrTransAbsMat)
_diag_adj_mul(D, A)
end

function rmul!(A::AbstractMatrix, D::Diagonal)
matmul_size_check(size(A), size(D))
for I in CartesianIndices(A)
Expand Down