diff --git a/stdlib/LinearAlgebra/src/bidiag.jl b/stdlib/LinearAlgebra/src/bidiag.jl index 89bf143b3a973..d412c21f55a94 100644 --- a/stdlib/LinearAlgebra/src/bidiag.jl +++ b/stdlib/LinearAlgebra/src/bidiag.jl @@ -502,8 +502,9 @@ end const SpecialMatrix = Union{Bidiagonal,SymTridiagonal,Tridiagonal} # to avoid ambiguity warning, but shouldn't be necessary -*(A::AbstractTriangular, B::SpecialMatrix) = Array(A) * Array(B) +#*(A::AbstractTriangular, B::SpecialMatrix) = Array(A) * Array(B) *(A::SpecialMatrix, B::SpecialMatrix) = Array(A) * Array(B) +*(A::AbstractMatrix, B::SpecialMatrix) = A_mul_B_td!(zeros(eltype(A),size(A)...), A, B) #Generic multiplication *(A::Bidiagonal{T}, B::AbstractVector{T}) where {T} = *(Array(A), B) diff --git a/stdlib/LinearAlgebra/test/bidiag.jl b/stdlib/LinearAlgebra/test/bidiag.jl index f90a13caddaa3..eff5192ff368e 100644 --- a/stdlib/LinearAlgebra/test/bidiag.jl +++ b/stdlib/LinearAlgebra/test/bidiag.jl @@ -290,6 +290,11 @@ srand(1) @test Matrix{Complex{Float64}}(BD) == BD end +# Issue 27176 +Diag = Tridiagonal([1,],[2,2],[1,]) +Dense = [0.42 0.18; 0.08 0.58] +@test typeof(Diag*Dense) == typeof(Dense*Diag) == typeof(Dense) + # Issue 10742 and similar let A = Bidiagonal([1,2,3], [0,0], :U) @test istril(A)