Skip to content

Commit b464203

Browse files
authored
Materialize adjoint in mul with HermOrSym (#1191)
1 parent 16d9d61 commit b464203

File tree

1 file changed

+13
-0
lines changed

1 file changed

+13
-0
lines changed

src/symmetric.jl

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -703,6 +703,19 @@ for f in (:+, :-)
703703
end
704704

705705
*(A::HermOrSym, B::HermOrSym) = A * copyto!(similar(parent(B)), B)
706+
# catch a few potential BLAS-cases
707+
function *(A::HermOrSym{<:BlasFloat,<:StridedMatrix}, B::AdjOrTrans{<:BlasFloat,<:StridedMatrix})
708+
T = promote_type(eltype(A), eltype(B))
709+
mul!(similar(B, T, (size(A, 1), size(B, 2))),
710+
convert(AbstractMatrix{T}, A),
711+
copy_oftype(B, T)) # make sure the AdjOrTrans wrapper is resolved
712+
end
713+
function *(A::AdjOrTrans{<:BlasFloat,<:StridedMatrix}, B::HermOrSym{<:BlasFloat,<:StridedMatrix})
714+
T = promote_type(eltype(A), eltype(B))
715+
mul!(similar(B, T, (size(A, 1), size(B, 2))),
716+
copy_oftype(A, T), # make sure the AdjOrTrans wrapper is resolved
717+
convert(AbstractMatrix{T}, B))
718+
end
706719

707720
function dot(x::AbstractVector, A::RealHermSymComplexHerm, y::AbstractVector)
708721
require_one_based_indexing(x, y)

0 commit comments

Comments
 (0)