Skip to content

Commit c694678

Browse files
committed
Remove arithtype in matmul and deprecate it
1 parent 00117d5 commit c694678

File tree

2 files changed

+28
-17
lines changed

2 files changed

+28
-17
lines changed

base/deprecated.jl

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1009,4 +1009,18 @@ export @vectorize_1arg, @vectorize_2arg
10091009
@deprecate abs(M::SymTridiagonal) abs.(M)
10101010
@deprecate abs(x::AbstractSparseVector) abs.(x)
10111011

1012+
# #18218
1013+
eval(Base.LinAlg, quote
1014+
function arithtype(T)
1015+
depwarn("arithtype is deprecated as it is no longer needed in Julia Base.",
1016+
:arithtype)
1017+
T
1018+
end
1019+
function arithtype(::Type{Bool})
1020+
depwarn("arithtype is deprecated as it is no longer needed in Julia Base.",
1021+
:arithtype)
1022+
Int
1023+
end
1024+
end)
1025+
10121026
# End deprecations scheduled for 0.6

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

@@ -134,7 +131,7 @@ Ac_mul_B!(y::AbstractVector, A::AbstractVecOrMat, x::AbstractVector) = generic_m
134131
Matrix multiplication.
135132
"""
136133
function (*){T,S}(A::AbstractMatrix{T}, B::AbstractMatrix{S})
137-
TS = promote_op(matprod, arithtype(T), arithtype(S))
134+
TS = promote_op(matprod, T, S)
138135
A_mul_B!(similar(B, TS, (size(A,1), size(B,2))), A, B)
139136
end
140137
A_mul_B!{T<:BlasFloat}(C::StridedMatrix{T}, A::StridedVecOrMat{T}, B::StridedVecOrMat{T}) = gemm_wrapper!(C, 'N', 'N', A, B)
@@ -168,14 +165,14 @@ julia> Y
168165
A_mul_B!(C::AbstractMatrix, A::AbstractVecOrMat, B::AbstractVecOrMat) = generic_matmatmul!(C, 'N', 'N', A, B)
169166

170167
function At_mul_B{T,S}(A::AbstractMatrix{T}, B::AbstractMatrix{S})
171-
TS = promote_op(matprod, arithtype(T), arithtype(S))
168+
TS = promote_op(matprod, T, S)
172169
At_mul_B!(similar(B, TS, (size(A,2), size(B,2))), A, B)
173170
end
174171
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)
175172
At_mul_B!(C::AbstractMatrix, A::AbstractVecOrMat, B::AbstractVecOrMat) = generic_matmatmul!(C, 'T', 'N', A, B)
176173

177174
function A_mul_Bt{T,S}(A::AbstractMatrix{T}, B::AbstractMatrix{S})
178-
TS = promote_op(matprod, arithtype(T), arithtype(S))
175+
TS = promote_op(matprod, T, S)
179176
A_mul_Bt!(similar(B, TS, (size(A,1), size(B,1))), A, B)
180177
end
181178
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)
@@ -192,7 +189,7 @@ end
192189
A_mul_Bt!(C::AbstractVecOrMat, A::AbstractVecOrMat, B::AbstractVecOrMat) = generic_matmatmul!(C, 'N', 'T', A, B)
193190

194191
function At_mul_Bt{T,S}(A::AbstractMatrix{T}, B::AbstractVecOrMat{S})
195-
TS = promote_op(matprod, arithtype(T), arithtype(S))
192+
TS = promote_op(matprod, T, S)
196193
At_mul_Bt!(similar(B, TS, (size(A,2), size(B,1))), A, B)
197194
end
198195
At_mul_Bt!{T<:BlasFloat}(C::StridedMatrix{T}, A::StridedVecOrMat{T}, B::StridedVecOrMat{T}) = gemm_wrapper!(C, 'T', 'T', A, B)
@@ -201,7 +198,7 @@ At_mul_Bt!(C::AbstractMatrix, A::AbstractVecOrMat, B::AbstractVecOrMat) = generi
201198
Ac_mul_B{T<:BlasReal}(A::StridedMatrix{T}, B::StridedMatrix{T}) = At_mul_B(A, B)
202199
Ac_mul_B!{T<:BlasReal}(C::StridedMatrix{T}, A::StridedVecOrMat{T}, B::StridedVecOrMat{T}) = At_mul_B!(C, A, B)
203200
function Ac_mul_B{T,S}(A::AbstractMatrix{T}, B::AbstractMatrix{S})
204-
TS = promote_op(matprod, arithtype(T), arithtype(S))
201+
TS = promote_op(matprod, T, S)
205202
Ac_mul_B!(similar(B, TS, (size(A,2), size(B,2))), A, B)
206203
end
207204
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)
@@ -210,14 +207,14 @@ Ac_mul_B!(C::AbstractMatrix, A::AbstractVecOrMat, B::AbstractVecOrMat) = generic
210207
A_mul_Bc{T<:BlasFloat,S<:BlasReal}(A::StridedMatrix{T}, B::StridedMatrix{S}) = A_mul_Bt(A, B)
211208
A_mul_Bc!{T<:BlasFloat,S<:BlasReal}(C::StridedMatrix{T}, A::StridedVecOrMat{T}, B::StridedVecOrMat{S}) = A_mul_Bt!(C, A, B)
212209
function A_mul_Bc{T,S}(A::AbstractMatrix{T}, B::AbstractMatrix{S})
213-
TS = promote_op(matprod, arithtype(T), arithtype(S))
210+
TS = promote_op(matprod, T, S)
214211
A_mul_Bc!(similar(B,TS,(size(A,1),size(B,1))),A,B)
215212
end
216213
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)
217214
A_mul_Bc!(C::AbstractMatrix, A::AbstractVecOrMat, B::AbstractVecOrMat) = generic_matmatmul!(C, 'N', 'C', A, B)
218215

219216
Ac_mul_Bc{T,S}(A::AbstractMatrix{T}, B::AbstractMatrix{S}) =
220-
Ac_mul_Bc!(similar(B, promote_op(matprod, arithtype(T), arithtype(S)), (size(A,2), size(B,1))), A, B)
217+
Ac_mul_Bc!(similar(B, promote_op(matprod, T, S), (size(A,2), size(B,1))), A, B)
221218
Ac_mul_Bc!{T<:BlasFloat}(C::StridedMatrix{T}, A::StridedVecOrMat{T}, B::StridedVecOrMat{T}) = gemm_wrapper!(C, 'C', 'C', A, B)
222219
Ac_mul_Bc!(C::AbstractMatrix, A::AbstractVecOrMat, B::AbstractVecOrMat) = generic_matmatmul!(C, 'C', 'C', A, B)
223220
Ac_mul_Bt!(C::AbstractMatrix, A::AbstractVecOrMat, B::AbstractVecOrMat) = generic_matmatmul!(C, 'C', 'T', A, B)
@@ -450,7 +447,7 @@ end
450447
function generic_matmatmul{T,S}(tA, tB, A::AbstractVecOrMat{T}, B::AbstractMatrix{S})
451448
mA, nA = lapack_size(tA, A)
452449
mB, nB = lapack_size(tB, B)
453-
C = similar(B, promote_op(matprod, arithtype(T), arithtype(S)), mA, nB)
450+
C = similar(B, promote_op(matprod, T, S), mA, nB)
454451
generic_matmatmul!(C, tA, tB, A, B)
455452
end
456453

0 commit comments

Comments
 (0)