@@ -409,6 +409,7 @@ const BandedMatrix = Union{Bidiagonal,Diagonal,Tridiagonal,SymTridiagonal} # or
409409const BiTriSym = Union{Bidiagonal,Tridiagonal,SymTridiagonal}
410410const BiTri = Union{Bidiagonal,Tridiagonal}
411411@inline mul! (C:: AbstractVector , A:: BandedMatrix , B:: AbstractVector , alpha:: Number , beta:: Number ) = _mul! (C, A, B, MulAddMul (alpha, beta))
412+ @inline mul! (C:: AbstractMatrix , A:: BandedMatrix , B:: AbstractVector , alpha:: Number , beta:: Number ) = _mul! (C, A, B, MulAddMul (alpha, beta))
412413@inline mul! (C:: AbstractMatrix , A:: BandedMatrix , B:: AbstractMatrix , alpha:: Number , beta:: Number ) = _mul! (C, A, B, MulAddMul (alpha, beta))
413414@inline mul! (C:: AbstractMatrix , A:: AbstractMatrix , B:: BandedMatrix , alpha:: Number , beta:: Number ) = _mul! (C, A, B, MulAddMul (alpha, beta))
414415@inline mul! (C:: AbstractMatrix , A:: BandedMatrix , B:: BandedMatrix , alpha:: Number , beta:: Number ) = _mul! (C, A, B, MulAddMul (alpha, beta))
@@ -747,39 +748,27 @@ ldiv!(c::AbstractVecOrMat, A::AdjOrTrans{<:Any,<:Bidiagonal}, b::AbstractVecOrMa
747748\ (xA:: AdjOrTrans{<:Any,<:Bidiagonal} , B:: AbstractVecOrMat ) = copy (xA) \ B
748749
749750# ## Triangular specializations
750- function \ (B:: Bidiagonal , U:: UpperTriangular )
751- A = ldiv! (_initarray (\ , eltype (B), eltype (U), U), B, U)
752- return B. uplo == ' U' ? UpperTriangular (A) : A
753- end
754- function \ (B:: Bidiagonal , U:: UnitUpperTriangular )
755- A = ldiv! (_initarray (\ , eltype (B), eltype (U), U), B, U)
756- return B. uplo == ' U' ? UpperTriangular (A) : A
757- end
758- function \ (B:: Bidiagonal , L:: LowerTriangular )
759- A = ldiv! (_initarray (\ , eltype (B), eltype (L), L), B, L)
760- return B. uplo == ' L' ? LowerTriangular (A) : A
751+ for tri in (:UpperTriangular , :UnitUpperTriangular )
752+ @eval function \ (B:: Bidiagonal , U:: $tri )
753+ A = ldiv! (_initarray (\ , eltype (B), eltype (U), U), B, U)
754+ return B. uplo == ' U' ? UpperTriangular (A) : A
755+ end
756+ @eval function \ (U:: $tri , B:: Bidiagonal )
757+ A = ldiv! (_initarray (\ , eltype (U), eltype (B), U), U, B)
758+ return B. uplo == ' U' ? UpperTriangular (A) : A
759+ end
761760end
762- function \ (B:: Bidiagonal , L:: UnitLowerTriangular )
763- A = ldiv! (_initarray (\ , eltype (B), eltype (L), L), B, L)
764- return B. uplo == ' L' ? LowerTriangular (A) : A
761+ for tri in (:LowerTriangular , :UnitLowerTriangular )
762+ @eval function \ (B:: Bidiagonal , L:: $tri )
763+ A = ldiv! (_initarray (\ , eltype (B), eltype (L), L), B, L)
764+ return B. uplo == ' L' ? LowerTriangular (A) : A
765+ end
766+ @eval function \ (L:: $tri , B:: Bidiagonal )
767+ A = ldiv! (_initarray (\ , eltype (L), eltype (B), L), L, B)
768+ return B. uplo == ' L' ? LowerTriangular (A) : A
769+ end
765770end
766771
767- function \ (U:: UpperTriangular , B:: Bidiagonal )
768- A = ldiv! (U, copy_similar (B, _init_eltype (\ , eltype (U), eltype (B))))
769- return B. uplo == ' U' ? UpperTriangular (A) : A
770- end
771- function \ (U:: UnitUpperTriangular , B:: Bidiagonal )
772- A = ldiv! (U, copy_similar (B, _init_eltype (\ , eltype (U), eltype (B))))
773- return B. uplo == ' U' ? UpperTriangular (A) : A
774- end
775- function \ (L:: LowerTriangular , B:: Bidiagonal )
776- A = ldiv! (L, copy_similar (B, _init_eltype (\ , eltype (L), eltype (B))))
777- return B. uplo == ' L' ? LowerTriangular (A) : A
778- end
779- function \ (L:: UnitLowerTriangular , B:: Bidiagonal )
780- A = ldiv! (L, copy_similar (B, _init_eltype (\ , eltype (L), eltype (B))))
781- return B. uplo == ' L' ? LowerTriangular (A) : A
782- end
783772# ## Diagonal specialization
784773function \ (B:: Bidiagonal , D:: Diagonal )
785774 A = ldiv! (_initarray (\ , eltype (B), eltype (D), D), B, D)
@@ -835,38 +824,27 @@ _rdiv!(C::AbstractMatrix, A::AbstractMatrix, B::AdjOrTrans{<:Any,<:Bidiagonal})
835824/ (A:: AbstractMatrix , B:: Bidiagonal ) = _rdiv! (_initarray (/ , eltype (A), eltype (B), A), A, B)
836825
837826# ## Triangular specializations
838- function / (U:: UpperTriangular , B:: Bidiagonal )
839- A = _rdiv! (_initarray (/ , eltype (U), eltype (B), U), U, B)
840- return B. uplo == ' U' ? UpperTriangular (A) : A
841- end
842- function / (U:: UnitUpperTriangular , B:: Bidiagonal )
843- A = _rdiv! (_initarray (/ , eltype (U), eltype (B), U), U, B)
844- return B. uplo == ' U' ? UpperTriangular (A) : A
845- end
846- function / (L:: LowerTriangular , B:: Bidiagonal )
847- A = _rdiv! (_initarray (/ , eltype (L), eltype (B), L), L, B)
848- return B. uplo == ' L' ? LowerTriangular (A) : A
849- end
850- function / (L:: UnitLowerTriangular , B:: Bidiagonal )
851- A = _rdiv! (_initarray (/ , eltype (L), eltype (B), L), L, B)
852- return B. uplo == ' L' ? LowerTriangular (A) : A
853- end
854- function / (B:: Bidiagonal , U:: UpperTriangular )
855- A = rdiv! (copy_similar (B, _init_eltype (/ , eltype (B), eltype (U))), U)
856- return B. uplo == ' U' ? UpperTriangular (A) : A
857- end
858- function / (B:: Bidiagonal , U:: UnitUpperTriangular )
859- A = rdiv! (copy_similar (B, _init_eltype (/ , eltype (B), eltype (U))), U)
860- return B. uplo == ' U' ? UpperTriangular (A) : A
861- end
862- function / (B:: Bidiagonal , L:: LowerTriangular )
863- A = rdiv! (copy_similar (B, _init_eltype (/ , eltype (B), eltype (L))), L)
864- return B. uplo == ' L' ? LowerTriangular (A) : A
827+ for tri in (:UpperTriangular , :UnitUpperTriangular )
828+ @eval function / (U:: $tri , B:: Bidiagonal )
829+ A = _rdiv! (_initarray (/ , eltype (U), eltype (B), U), U, B)
830+ return B. uplo == ' U' ? UpperTriangular (A) : A
831+ end
832+ @eval function / (B:: Bidiagonal , U:: $tri )
833+ A = _rdiv! (_initarray (/ , eltype (B), eltype (U), U), B, U)
834+ return B. uplo == ' U' ? UpperTriangular (A) : A
835+ end
865836end
866- function / (B:: Bidiagonal , L:: UnitLowerTriangular )
867- A = rdiv! (copy_similar (B, _init_eltype (/ , eltype (B), eltype (L))), L)
868- return B. uplo == ' L' ? LowerTriangular (A) : A
837+ for tri in (:LowerTriangular , :UnitLowerTriangular )
838+ @eval function / (L:: $tri , B:: Bidiagonal )
839+ A = _rdiv! (_initarray (/ , eltype (L), eltype (B), L), L, B)
840+ return B. uplo == ' L' ? LowerTriangular (A) : A
841+ end
842+ @eval function / (B:: Bidiagonal , L:: $tri )
843+ A = _rdiv! (_initarray (/ , eltype (B), eltype (L), L), B, L)
844+ return B. uplo == ' L' ? LowerTriangular (A) : A
845+ end
869846end
847+
870848# ## Diagonal specialization
871849function / (D:: Diagonal , B:: Bidiagonal )
872850 A = _rdiv! (_initarray (/ , eltype (D), eltype (B), D), D, B)
886864factorize (A:: Bidiagonal ) = A
887865function inv (B:: Bidiagonal{T} ) where T
888866 n = size (B, 1 )
889- dest = zeros (typeof (oneunit (T)\ one (T )), (n, n))
890- ldiv! (dest, B, Diagonal {typeof(one(T)\ one(T))} (I, n))
867+ dest = zeros (typeof (inv ( oneunit (T))), (n, n))
868+ ldiv! (dest, B, Diagonal {typeof(one(T)/ one(T))} (I, n))
891869 return B. uplo == ' U' ? UpperTriangular (dest) : LowerTriangular (dest)
892870end
893871
0 commit comments