You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Use promote_op in broadcasting and matrix multiplication
This makes it easier to support these operations on AbstractArrays with generic eltypes
(cherry picked from commit 82f9a21)
ref #13803
remove _pure_meta for backport
also qualify Base.MulFun
At_mul_B!(similar(B, TS, (size(A,2), size(B,2))), A, B)
149
149
end
150
150
At_mul_B!{T<:BlasFloat}(C::StridedMatrix{T}, A::StridedVecOrMat{T}, B::StridedVecOrMat{T}) =is(A,B) ?syrk_wrapper!(C, 'T', A) :gemm_wrapper!(C, 'T', 'N', A, B)
151
151
At_mul_B!(C::StridedMatrix, A::StridedVecOrMat, B::StridedVecOrMat) =generic_matmatmul!(C, 'T', 'N', A, B)
A_mul_Bt!(similar(B, TS, (size(A,1), size(B,1))), A, B)
156
156
end
157
157
A_mul_Bt!{T<:BlasFloat}(C::StridedMatrix{T}, A::StridedVecOrMat{T}, B::StridedVecOrMat{T}) =is(A,B) ?syrk_wrapper!(C, 'N', A) :gemm_wrapper!(C, 'N', 'T', A, B)
@@ -168,7 +168,7 @@ end
168
168
A_mul_Bt!(C::StridedVecOrMat, A::StridedVecOrMat, B::StridedVecOrMat) =generic_matmatmul!(C, 'N', 'T', A, B)
Ac_mul_B!(similar(B, TS, (size(A,2), size(B,2))), A, B)
182
182
end
183
183
Ac_mul_B!{T<:BlasComplex}(C::StridedMatrix{T}, A::StridedVecOrMat{T}, B::StridedVecOrMat{T}) =is(A,B) ?herk_wrapper!(C,'C',A) :gemm_wrapper!(C,'C', 'N', A, B)
A_mul_Bc!{T<:BlasComplex}(C::StridedMatrix{T}, A::StridedVecOrMat{T}, B::StridedVecOrMat{T}) =is(A,B) ?herk_wrapper!(C, 'N', A) :gemm_wrapper!(C, 'N', 'C', A, B)
193
193
A_mul_Bc!(C::StridedMatrix, A::StridedVecOrMat, B::StridedVecOrMat) =generic_matmatmul!(C, 'N', 'C', A, B)
194
194
195
-
Ac_mul_Bc{T,S}(A::AbstractMatrix{T}, B::StridedMatrix{S}) =Ac_mul_Bc!(similar(B, promote_type(arithtype(T), arithtype(S)), (size(A,2), size(B,1))), A, B)
195
+
Ac_mul_Bc{T,S}(A::AbstractMatrix{T}, B::StridedMatrix{S}) =Ac_mul_Bc!(similar(B, promote_op(MulFun(),arithtype(T), arithtype(S)), (size(A,2), size(B,1))), A, B)
196
196
Ac_mul_Bc!{T<:BlasFloat}(C::StridedMatrix{T}, A::StridedVecOrMat{T}, B::StridedVecOrMat{T}) =gemm_wrapper!(C, 'C', 'C', A, B)
197
197
Ac_mul_Bc!(C::StridedMatrix, A::StridedVecOrMat, B::StridedVecOrMat) =generic_matmatmul!(C, 'C', 'C', A, B)
198
-
Ac_mul_Bt{T,S}(A::AbstractMatrix{T}, B::StridedMatrix{S}) =Ac_mul_Bt(similar(B, promote_type(arithtype(A), arithtype(B)), (size(A,2), size(B,1))), A, B)
198
+
Ac_mul_Bt{T,S}(A::AbstractMatrix{T}, B::StridedMatrix{S}) =Ac_mul_Bt(similar(B, promote_op(MulFun(),arithtype(A), arithtype(B)), (size(A,2), size(B,1))), A, B)
199
199
Ac_mul_Bt!(C::StridedMatrix, A::StridedVecOrMat, B::StridedVecOrMat) =generic_matmatmul!(C, 'C', 'T', A, B)
0 commit comments