@@ -783,49 +783,47 @@ ldiv!(c::AbstractVecOrMat, A::Adjoint{<:Any,<:Bidiagonal}, b::AbstractVecOrMat)
783
783
(_rdiv! (adjoint (c), adjoint (b), adjoint (A)); return c)
784
784
785
785
# ## Generic promotion methods and fallbacks
786
- function \ (A:: Bidiagonal{<:Number} , B:: AbstractVecOrMat{<:Number} )
787
- TA, TB = eltype (A), eltype (B)
788
- TAB = typeof ((oneunit (TA))\ oneunit (TB))
789
- ldiv! (zeros (TAB, size (B)), A, B)
790
- end
791
- \ (A:: Bidiagonal , B:: AbstractVecOrMat ) = ldiv! (copy (B), A, B)
786
+ \ (A:: Bidiagonal , B:: AbstractVecOrMat ) = ldiv! (_initarray (\ , eltype (A), eltype (B), B), A, B)
792
787
\ (tA:: Transpose{<:Any,<:Bidiagonal} , B:: AbstractVecOrMat ) = copy (tA) \ B
793
788
\ (adjA:: Adjoint{<:Any,<:Bidiagonal} , B:: AbstractVecOrMat ) = copy (adjA) \ B
794
789
795
790
# ## Triangular specializations
796
- function \ (B:: Bidiagonal{<:Number} , U:: UpperOrUnitUpperTriangular{<:Number} )
797
- T = typeof ((oneunit (eltype (B)))\ oneunit (eltype (U)))
798
- A = ldiv! (zeros (T, size (U)), B, U)
791
+ function \ (B:: Bidiagonal , U:: UpperTriangular )
792
+ A = ldiv! (_initarray (\ , eltype (B), eltype (U), U), B, U)
799
793
return B. uplo == ' U' ? UpperTriangular (A) : A
800
794
end
801
- function \ (B:: Bidiagonal , U:: UpperOrUnitUpperTriangular )
802
- A = ldiv! (copy ( parent (U) ), B, U)
795
+ function \ (B:: Bidiagonal , U:: UnitUpperTriangular )
796
+ A = ldiv! (_initarray ( \ , eltype (B), eltype (U), U ), B, U)
803
797
return B. uplo == ' U' ? UpperTriangular (A) : A
804
798
end
805
- function \ (B:: Bidiagonal{<:Number} , L:: LowerOrUnitLowerTriangular{<:Number} )
806
- T = typeof ((oneunit (eltype (B)))\ oneunit (eltype (L)))
807
- A = ldiv! (zeros (T, size (L)), B, L)
799
+ function \ (B:: Bidiagonal , L:: LowerTriangular )
800
+ A = ldiv! (_initarray (\ , eltype (B), eltype (L), L), B, L)
808
801
return B. uplo == ' L' ? LowerTriangular (A) : A
809
802
end
810
- function \ (B:: Bidiagonal , L:: LowerOrUnitLowerTriangular )
811
- A = ldiv! (copy ( parent (L) ), B, L)
803
+ function \ (B:: Bidiagonal , L:: UnitLowerTriangular )
804
+ A = ldiv! (_initarray ( \ , eltype (B), eltype (L), L ), B, L)
812
805
return B. uplo == ' L' ? LowerTriangular (A) : A
813
806
end
814
807
815
- function \ (U:: UpperOrUnitUpperTriangular{<:Number} , B:: Bidiagonal{<:Number} )
816
- T = typeof ((oneunit (eltype (U)))/ oneunit (eltype (B)))
817
- A = ldiv! (U, copy_similar (B, T))
808
+ function \ (U:: UpperTriangular , B:: Bidiagonal )
809
+ A = ldiv! (U, copy_similar (B, _init_eltype (\ , eltype (U), eltype (B))))
810
+ return B. uplo == ' U' ? UpperTriangular (A) : A
811
+ end
812
+ function \ (U:: UnitUpperTriangular , B:: Bidiagonal )
813
+ A = ldiv! (U, copy_similar (B, _init_eltype (\ , eltype (U), eltype (B))))
818
814
return B. uplo == ' U' ? UpperTriangular (A) : A
819
815
end
820
- function \ (L:: LowerOrUnitLowerTriangular{<:Number} , B:: Bidiagonal{<:Number} )
821
- T = typeof ((oneunit (eltype (L)))/ oneunit (eltype (B)))
822
- A = ldiv! (L, copy_similar (B, T))
816
+ function \ (L:: LowerTriangular , B:: Bidiagonal )
817
+ A = ldiv! (L, copy_similar (B, _init_eltype (\ , eltype (L), eltype (B))))
818
+ return B. uplo == ' L' ? LowerTriangular (A) : A
819
+ end
820
+ function \ (L:: UnitLowerTriangular , B:: Bidiagonal )
821
+ A = ldiv! (L, copy_similar (B, _init_eltype (\ , eltype (L), eltype (B))))
823
822
return B. uplo == ' L' ? LowerTriangular (A) : A
824
823
end
825
824
# ## Diagonal specialization
826
- function \ (B:: Bidiagonal{<:Number} , D:: Diagonal{<:Number} )
827
- T = typeof ((oneunit (eltype (B)))\ oneunit (eltype (D)))
828
- A = ldiv! (zeros (T, size (D)), B, D)
825
+ function \ (B:: Bidiagonal , D:: Diagonal )
826
+ A = ldiv! (_initarray (\ , eltype (B), eltype (D), D), B, D)
829
827
return B. uplo == ' U' ? UpperTriangular (A) : LowerTriangular (A)
830
828
end
831
829
@@ -878,54 +876,50 @@ _rdiv!(C::AbstractMatrix, A::AbstractMatrix, B::Adjoint{<:Any,<:Bidiagonal}) =
878
876
_rdiv! (C:: AbstractMatrix , A:: AbstractMatrix , B:: Transpose{<:Any,<:Bidiagonal} ) =
879
877
(ldiv! (transpose (C), transpose (B), transpose (A)); return C)
880
878
881
- function / (A:: AbstractMatrix{<:Number} , B:: Bidiagonal{<:Number} )
882
- TA, TB = eltype (A), eltype (B)
883
- TAB = typeof ((oneunit (TA))/ oneunit (TB))
884
- _rdiv! (zeros (TAB, size (A)), A, B)
885
- end
886
- / (A:: AbstractMatrix , B:: Bidiagonal ) = _rdiv! (copy (A), A, B)
879
+ / (A:: AbstractMatrix , B:: Bidiagonal ) = _rdiv! (_initarray (/ , eltype (A), eltype (B), A), A, B)
887
880
888
881
# ## Triangular specializations
889
- function / (U:: UpperOrUnitUpperTriangular{<:Number} , B:: Bidiagonal{<:Number} )
890
- T = typeof ((oneunit (eltype (U)))/ oneunit (eltype (B)))
891
- A = _rdiv! (zeros (T, size (U)), U, B)
882
+ function / (U:: UpperTriangular , B:: Bidiagonal )
883
+ A = _rdiv! (_initarray (/ , eltype (U), eltype (B), U), U, B)
892
884
return B. uplo == ' U' ? UpperTriangular (A) : A
893
885
end
894
- function / (U:: UpperOrUnitUpperTriangular , B:: Bidiagonal )
895
- A = _rdiv! (copy ( parent (U)), U, B)
886
+ function / (U:: UnitUpperTriangular , B:: Bidiagonal )
887
+ A = _rdiv! (_initarray ( / , eltype (U), eltype (B), U ), U, B)
896
888
return B. uplo == ' U' ? UpperTriangular (A) : A
897
889
end
898
- function / (L:: LowerOrUnitLowerTriangular{<:Number} , B:: Bidiagonal{<:Number} )
899
- T = typeof ((oneunit (eltype (L)))/ oneunit (eltype (B)))
900
- A = _rdiv! (zeros (T, size (L)), L, B)
890
+ function / (L:: LowerTriangular , B:: Bidiagonal )
891
+ A = _rdiv! (_initarray (/ , eltype (L), eltype (B), L), L, B)
901
892
return B. uplo == ' L' ? LowerTriangular (A) : A
902
893
end
903
- function / (L:: LowerOrUnitLowerTriangular , B:: Bidiagonal )
904
- A = _rdiv! (copy ( parent (L)), L, B)
894
+ function / (L:: UnitLowerTriangular , B:: Bidiagonal )
895
+ A = _rdiv! (_initarray ( / , eltype (L), eltype (B), L ), L, B)
905
896
return B. uplo == ' L' ? LowerTriangular (A) : A
906
897
end
907
- function / (B:: Bidiagonal{<:Number} , U:: UpperOrUnitUpperTriangular{<:Number} )
908
- T = typeof ((oneunit (eltype (B)))/ oneunit (eltype (U)))
909
- A = rdiv! (copy_similar (B, T), U)
898
+ function / (B:: Bidiagonal , U:: UpperTriangular )
899
+ A = rdiv! (copy_similar (B, _init_eltype (/ , eltype (B), eltype (U))), U)
900
+ return B. uplo == ' U' ? UpperTriangular (A) : A
901
+ end
902
+ function / (B:: Bidiagonal , U:: UnitUpperTriangular )
903
+ A = rdiv! (copy_similar (B, _init_eltype (/ , eltype (B), eltype (U))), U)
910
904
return B. uplo == ' U' ? UpperTriangular (A) : A
911
905
end
912
- function / (B:: Bidiagonal{<:Number} , L:: LowerOrUnitLowerTriangular{<:Number} )
913
- T = typeof ((oneunit (eltype (B)))\ oneunit (eltype (L)))
914
- A = rdiv! (copy_similar (B, T), L)
906
+ function / (B:: Bidiagonal , L:: LowerTriangular )
907
+ A = rdiv! (copy_similar (B, _init_eltype (/ , eltype (B), eltype (L))), L)
908
+ return B. uplo == ' L' ? LowerTriangular (A) : A
909
+ end
910
+ function / (B:: Bidiagonal , L:: UnitLowerTriangular )
911
+ A = rdiv! (copy_similar (B, _init_eltype (/ , eltype (B), eltype (L))), L)
915
912
return B. uplo == ' L' ? LowerTriangular (A) : A
916
913
end
917
914
# ## Diagonal specialization
918
- function / (D:: Diagonal{<:Number} , B:: Bidiagonal{<:Number} )
919
- T = typeof ((oneunit (eltype (D)))/ oneunit (eltype (B)))
920
- A = _rdiv! (zeros (T, size (D)), D, B)
915
+ function / (D:: Diagonal , B:: Bidiagonal )
916
+ A = _rdiv! (_initarray (/ , eltype (D), eltype (B), D), D, B)
921
917
return B. uplo == ' U' ? UpperTriangular (A) : LowerTriangular (A)
922
918
end
923
919
924
920
/ (A:: AbstractMatrix , B:: Transpose{<:Any,<:Bidiagonal} ) = A / copy (B)
925
921
/ (A:: AbstractMatrix , B:: Adjoint{<:Any,<:Bidiagonal} ) = A / copy (B)
926
922
# disambiguation
927
- / (A:: AdjointAbsVec{<:Number} , B:: Bidiagonal{<:Number} ) = adjoint (adjoint (B) \ parent (A))
928
- / (A:: TransposeAbsVec{<:Number} , B:: Bidiagonal{<:Number} ) = transpose (transpose (B) \ parent (A))
929
923
/ (A:: AdjointAbsVec , B:: Bidiagonal ) = adjoint (adjoint (B) \ parent (A))
930
924
/ (A:: TransposeAbsVec , B:: Bidiagonal ) = transpose (transpose (B) \ parent (A))
931
925
/ (A:: AdjointAbsVec , B:: Transpose{<:Any,<:Bidiagonal} ) = adjoint (adjoint (B) \ parent (A))
0 commit comments