Skip to content

Commit 0157d0c

Browse files
committed
Remove arithtype in matmul
1 parent e59aa5d commit 0157d0c

File tree

1 file changed

+14
-17
lines changed

1 file changed

+14
-17
lines changed

base/linalg/matmul.jl

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@
22

33
# matmul.jl: Everything to do with dense matrix multiplication
44

5-
arithtype(T) = T
6-
arithtype(::Type{Bool}) = Int
7-
85
matprod(x, y) = x*y + x*y
96

107
# multiply by diagonal matrix as vector
@@ -78,11 +75,11 @@ At_mul_B{T<:BlasComplex}(x::StridedVector{T}, y::StridedVector{T}) = [BLAS.dotu(
7875

7976
# Matrix-vector multiplication
8077
function (*){T<:BlasFloat,S}(A::StridedMatrix{T}, x::StridedVector{S})
81-
TS = promote_op(matprod, arithtype(T), arithtype(S))
78+
TS = promote_op(matprod, T, S)
8279
A_mul_B!(similar(x, TS, size(A,1)), A, convert(AbstractVector{TS}, x))
8380
end
8481
function (*){T,S}(A::AbstractMatrix{T}, x::AbstractVector{S})
85-
TS = promote_op(matprod, arithtype(T), arithtype(S))
82+
TS = promote_op(matprod, T, S)
8683
A_mul_B!(similar(x,TS,size(A,1)),A,x)
8784
end
8885
(*)(A::AbstractVector, B::AbstractMatrix) = reshape(A,length(A),1)*B
@@ -101,22 +98,22 @@ end
10198
A_mul_B!(y::AbstractVector, A::AbstractVecOrMat, x::AbstractVector) = generic_matvecmul!(y, 'N', A, x)
10299

103100
function At_mul_B{T<:BlasFloat,S}(A::StridedMatrix{T}, x::StridedVector{S})
104-
TS = promote_op(matprod, arithtype(T), arithtype(S))
101+
TS = promote_op(matprod, T, S)
105102
At_mul_B!(similar(x,TS,size(A,2)), A, convert(AbstractVector{TS}, x))
106103
end
107104
function At_mul_B{T,S}(A::AbstractMatrix{T}, x::AbstractVector{S})
108-
TS = promote_op(matprod, arithtype(T), arithtype(S))
105+
TS = promote_op(matprod, T, S)
109106
At_mul_B!(similar(x,TS,size(A,2)), A, x)
110107
end
111108
At_mul_B!{T<:BlasFloat}(y::StridedVector{T}, A::StridedVecOrMat{T}, x::StridedVector{T}) = gemv!(y, 'T', A, x)
112109
At_mul_B!(y::AbstractVector, A::AbstractVecOrMat, x::AbstractVector) = generic_matvecmul!(y, 'T', A, x)
113110

114111
function Ac_mul_B{T<:BlasFloat,S}(A::StridedMatrix{T}, x::StridedVector{S})
115-
TS = promote_op(matprod, arithtype(T), arithtype(S))
112+
TS = promote_op(matprod, T, S)
116113
Ac_mul_B!(similar(x,TS,size(A,2)),A,convert(AbstractVector{TS},x))
117114
end
118115
function Ac_mul_B{T,S}(A::AbstractMatrix{T}, x::AbstractVector{S})
119-
TS = promote_op(matprod, arithtype(T), arithtype(S))
116+
TS = promote_op(matprod, T, S)
120117
Ac_mul_B!(similar(x,TS,size(A,2)), A, x)
121118
end
122119

@@ -127,7 +124,7 @@ Ac_mul_B!(y::AbstractVector, A::AbstractVecOrMat, x::AbstractVector) = generic_m
127124
# Matrix-matrix multiplication
128125

129126
function (*){T,S}(A::AbstractMatrix{T}, B::AbstractMatrix{S})
130-
TS = promote_op(matprod, arithtype(T), arithtype(S))
127+
TS = promote_op(matprod, T, S)
131128
A_mul_B!(similar(B, TS, (size(A,1), size(B,2))), A, B)
132129
end
133130
A_mul_B!{T<:BlasFloat}(C::StridedMatrix{T}, A::StridedVecOrMat{T}, B::StridedVecOrMat{T}) = gemm_wrapper!(C, 'N', 'N', A, B)
@@ -144,14 +141,14 @@ end
144141
A_mul_B!(C::AbstractMatrix, A::AbstractVecOrMat, B::AbstractVecOrMat) = generic_matmatmul!(C, 'N', 'N', A, B)
145142

146143
function At_mul_B{T,S}(A::AbstractMatrix{T}, B::AbstractMatrix{S})
147-
TS = promote_op(matprod, arithtype(T), arithtype(S))
144+
TS = promote_op(matprod, T, S)
148145
At_mul_B!(similar(B, TS, (size(A,2), size(B,2))), A, B)
149146
end
150147
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)
151148
At_mul_B!(C::AbstractMatrix, A::AbstractVecOrMat, B::AbstractVecOrMat) = generic_matmatmul!(C, 'T', 'N', A, B)
152149

153150
function A_mul_Bt{T,S}(A::AbstractMatrix{T}, B::AbstractMatrix{S})
154-
TS = promote_op(matprod, arithtype(T), arithtype(S))
151+
TS = promote_op(matprod, T, S)
155152
A_mul_Bt!(similar(B, TS, (size(A,1), size(B,1))), A, B)
156153
end
157154
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 +165,7 @@ end
168165
A_mul_Bt!(C::AbstractVecOrMat, A::AbstractVecOrMat, B::AbstractVecOrMat) = generic_matmatmul!(C, 'N', 'T', A, B)
169166

170167
function At_mul_Bt{T,S}(A::AbstractMatrix{T}, B::AbstractVecOrMat{S})
171-
TS = promote_op(matprod, arithtype(T), arithtype(S))
168+
TS = promote_op(matprod, T, S)
172169
At_mul_Bt!(similar(B, TS, (size(A,2), size(B,1))), A, B)
173170
end
174171
At_mul_Bt!{T<:BlasFloat}(C::StridedMatrix{T}, A::StridedVecOrMat{T}, B::StridedVecOrMat{T}) = gemm_wrapper!(C, 'T', 'T', A, B)
@@ -177,7 +174,7 @@ At_mul_Bt!(C::AbstractMatrix, A::AbstractVecOrMat, B::AbstractVecOrMat) = generi
177174
Ac_mul_B{T<:BlasReal}(A::StridedMatrix{T}, B::StridedMatrix{T}) = At_mul_B(A, B)
178175
Ac_mul_B!{T<:BlasReal}(C::StridedMatrix{T}, A::StridedVecOrMat{T}, B::StridedVecOrMat{T}) = At_mul_B!(C, A, B)
179176
function Ac_mul_B{T,S}(A::AbstractMatrix{T}, B::AbstractMatrix{S})
180-
TS = promote_op(matprod, arithtype(T), arithtype(S))
177+
TS = promote_op(matprod, T, S)
181178
Ac_mul_B!(similar(B, TS, (size(A,2), size(B,2))), A, B)
182179
end
183180
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)
@@ -186,14 +183,14 @@ Ac_mul_B!(C::AbstractMatrix, A::AbstractVecOrMat, B::AbstractVecOrMat) = generic
186183
A_mul_Bc{T<:BlasFloat,S<:BlasReal}(A::StridedMatrix{T}, B::StridedMatrix{S}) = A_mul_Bt(A, B)
187184
A_mul_Bc!{T<:BlasFloat,S<:BlasReal}(C::StridedMatrix{T}, A::StridedVecOrMat{T}, B::StridedVecOrMat{S}) = A_mul_Bt!(C, A, B)
188185
function A_mul_Bc{T,S}(A::AbstractMatrix{T}, B::AbstractMatrix{S})
189-
TS = promote_op(matprod, arithtype(T), arithtype(S))
186+
TS = promote_op(matprod, T, S)
190187
A_mul_Bc!(similar(B,TS,(size(A,1),size(B,1))),A,B)
191188
end
192189
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)
193190
A_mul_Bc!(C::AbstractMatrix, A::AbstractVecOrMat, B::AbstractVecOrMat) = generic_matmatmul!(C, 'N', 'C', A, B)
194191

195192
Ac_mul_Bc{T,S}(A::AbstractMatrix{T}, B::AbstractMatrix{S}) =
196-
Ac_mul_Bc!(similar(B, promote_op(matprod, arithtype(T), arithtype(S)), (size(A,2), size(B,1))), A, B)
193+
Ac_mul_Bc!(similar(B, promote_op(matprod, T, S), (size(A,2), size(B,1))), A, B)
197194
Ac_mul_Bc!{T<:BlasFloat}(C::StridedMatrix{T}, A::StridedVecOrMat{T}, B::StridedVecOrMat{T}) = gemm_wrapper!(C, 'C', 'C', A, B)
198195
Ac_mul_Bc!(C::AbstractMatrix, A::AbstractVecOrMat, B::AbstractVecOrMat) = generic_matmatmul!(C, 'C', 'C', A, B)
199196
Ac_mul_Bt!(C::AbstractMatrix, A::AbstractVecOrMat, B::AbstractVecOrMat) = generic_matmatmul!(C, 'C', 'T', A, B)
@@ -426,7 +423,7 @@ end
426423
function generic_matmatmul{T,S}(tA, tB, A::AbstractVecOrMat{T}, B::AbstractMatrix{S})
427424
mA, nA = lapack_size(tA, A)
428425
mB, nB = lapack_size(tB, B)
429-
C = similar(B, promote_op(matprod, arithtype(T), arithtype(S)), mA, nB)
426+
C = similar(B, promote_op(matprod, T, S), mA, nB)
430427
generic_matmatmul!(C, tA, tB, A, B)
431428
end
432429

0 commit comments

Comments
 (0)