Skip to content

Commit 6b5bdf2

Browse files
jishnubKristofferC
authored andcommitted
Indirection in matrix multiplication to avoid ambiguities (#1210)
(cherry picked from commit 5cf41c4)
1 parent 37aa43a commit 6b5bdf2

File tree

2 files changed

+19
-15
lines changed

2 files changed

+19
-15
lines changed

src/diagonal.jl

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -693,22 +693,24 @@ end
693693
for Tri in (:UpperTriangular, :LowerTriangular)
694694
UTri = Symbol(:Unit, Tri)
695695
# 2 args
696-
for (fun, f) in zip((:*, :rmul!, :rdiv!, :/), (:identity, :identity, :inv, :inv))
697-
@eval $fun(A::$Tri, D::Diagonal) = $Tri($fun(A.data, D))
698-
@eval $fun(A::$UTri, D::Diagonal) = $Tri(_setdiag!($fun(A.data, D), $f, D.diag))
696+
for (fun, f) in zip((:mul, :rmul!, :rdiv!, :/), (:identity, :identity, :inv, :inv))
697+
g = fun == :mul ? :* : fun
698+
@eval $fun(A::$Tri, D::Diagonal) = $Tri($g(A.data, D))
699+
@eval $fun(A::$UTri, D::Diagonal) = $Tri(_setdiag!($g(A.data, D), $f, D.diag))
699700
end
700-
@eval *(A::$Tri{<:Any, <:StridedMaybeAdjOrTransMat}, D::Diagonal) =
701-
@invoke *(A::AbstractMatrix, D::Diagonal)
702-
@eval *(A::$UTri{<:Any, <:StridedMaybeAdjOrTransMat}, D::Diagonal) =
703-
@invoke *(A::AbstractMatrix, D::Diagonal)
704-
for (fun, f) in zip((:*, :lmul!, :ldiv!, :\), (:identity, :identity, :inv, :inv))
705-
@eval $fun(D::Diagonal, A::$Tri) = $Tri($fun(D, A.data))
706-
@eval $fun(D::Diagonal, A::$UTri) = $Tri(_setdiag!($fun(D, A.data), $f, D.diag))
701+
@eval mul(A::$Tri{<:Any, <:StridedMaybeAdjOrTransMat}, D::Diagonal) =
702+
@invoke mul(A::AbstractMatrix, D::Diagonal)
703+
@eval mul(A::$UTri{<:Any, <:StridedMaybeAdjOrTransMat}, D::Diagonal) =
704+
@invoke mul(A::AbstractMatrix, D::Diagonal)
705+
for (fun, f) in zip((:mul, :lmul!, :ldiv!, :\), (:identity, :identity, :inv, :inv))
706+
g = fun == :mul ? :* : fun
707+
@eval $fun(D::Diagonal, A::$Tri) = $Tri($g(D, A.data))
708+
@eval $fun(D::Diagonal, A::$UTri) = $Tri(_setdiag!($g(D, A.data), $f, D.diag))
707709
end
708-
@eval *(D::Diagonal, A::$Tri{<:Any, <:StridedMaybeAdjOrTransMat}) =
709-
@invoke *(D::Diagonal, A::AbstractMatrix)
710-
@eval *(D::Diagonal, A::$UTri{<:Any, <:StridedMaybeAdjOrTransMat}) =
711-
@invoke *(D::Diagonal, A::AbstractMatrix)
710+
@eval mul(D::Diagonal, A::$Tri{<:Any, <:StridedMaybeAdjOrTransMat}) =
711+
@invoke mul(D::Diagonal, A::AbstractMatrix)
712+
@eval mul(D::Diagonal, A::$UTri{<:Any, <:StridedMaybeAdjOrTransMat}) =
713+
@invoke mul(D::Diagonal, A::AbstractMatrix)
712714
# 3-arg ldiv!
713715
@eval ldiv!(C::$Tri, D::Diagonal, A::$Tri) = $Tri(ldiv!(C.data, D, A.data))
714716
@eval ldiv!(C::$Tri, D::Diagonal, A::$UTri) = $Tri(_setdiag!(ldiv!(C.data, D, A.data), inv, D.diag))

src/matmul.jl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,9 @@ julia> [1 1; 0 1] * [1 0; 1 1]
111111
1 1
112112
```
113113
"""
114-
function (*)(A::AbstractMatrix, B::AbstractMatrix)
114+
(*)(A::AbstractMatrix, B::AbstractMatrix) = mul(A, B)
115+
# we add an extra level of indirection to avoid ambiguities in *
116+
function mul(A::AbstractMatrix, B::AbstractMatrix)
115117
TS = promote_op(matprod, eltype(A), eltype(B))
116118
mul!(matprod_dest(A, B, TS), A, B)
117119
end

0 commit comments

Comments
 (0)