From 35a135b3301ea496b70816ae52580008a92e5f7c Mon Sep 17 00:00:00 2001 From: Daniel Karrasch Date: Mon, 8 May 2023 18:30:40 +0200 Subject: [PATCH] Help disambiguation with special matrix types (#134) --- Project.toml | 2 +- src/mul.jl | 13 ++++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/Project.toml b/Project.toml index 18d6de5..343c57d 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "ArrayLayouts" uuid = "4c555306-a7a7-4459-81d9-ec55ddd5c99a" authors = ["Sheehan Olver "] -version = "1.0.3" +version = "1.0.4" [deps] FillArrays = "1a297f60-69ca-5386-bcde-b61e274b549b" diff --git a/src/mul.jl b/src/mul.jl index d8ac988..9aa5327 100644 --- a/src/mul.jl +++ b/src/mul.jl @@ -203,10 +203,6 @@ macro layoutmul(Typ) ArrayLayouts.mul!(dest,A,B,α,β) LinearAlgebra.mul!(dest::AbstractMatrix, A::AbstractMatrix, B::$Typ, α::Number, β::Number) = ArrayLayouts.mul!(dest,A,B,α,β) - LinearAlgebra.mul!(dest::AbstractMatrix, A::$Typ, B::Diagonal, α::Number, β::Number) = - ArrayLayouts.mul!(dest,A,B,α,β) - LinearAlgebra.mul!(dest::AbstractMatrix, A::Diagonal, B::$Typ, α::Number, β::Number) = - ArrayLayouts.mul!(dest,A,B,α,β) LinearAlgebra.mul!(dest::AbstractMatrix, A::$Typ, B::$Typ, α::Number, β::Number) = ArrayLayouts.mul!(dest,A,B,α,β) @@ -237,10 +233,17 @@ macro layoutmul(Typ) (*)(A::LinearAlgebra.AdjointQ{<:Any,<:LinearAlgebra.LQPackedQ}, B::$Typ) = ArrayLayouts.mul(A,B) end end - for Struc in (:AbstractTriangular, :Diagonal) + for Struc in (:AbstractTriangular, :Diagonal, :Bidiagonal, :SymTridiagonal, :Tridiagonal) + # starting from Julia v1.10, the last four could be put into a single Union to + # reduce the number of mul! methods; or perhaps addressed as some common supertype ret = quote $ret + LinearAlgebra.mul!(dest::AbstractMatrix, A::$Typ, B::LinearAlgebra.$Struc, α::Number, β::Number) = + ArrayLayouts.mul!(dest,A,B,α,β) + LinearAlgebra.mul!(dest::AbstractMatrix, A::LinearAlgebra.$Struc, B::$Typ, α::Number, β::Number) = + ArrayLayouts.mul!(dest,A,B,α,β) + (*)(A::LinearAlgebra.$Struc, B::$Typ) = ArrayLayouts.mul(A,B) (*)(A::$Typ, B::LinearAlgebra.$Struc) = ArrayLayouts.mul(A,B) end