|
2 | 2 |
|
3 | 3 | using LinearAlgebra: BlasComplex, BlasFloat, BlasReal, MulAddMul |
4 | 4 |
|
5 | | -# legacy methods with final MulAddMul argument |
6 | | -LinearAlgebra.generic_matvecmul!(C::oneVector{T}, tA::AbstractChar, A::oneSparseMatrixCSR{T}, B::oneVector{T}, _add::MulAddMul) where {T <: Union{Float16, ComplexF16, BlasFloat}} = |
7 | | - LinearAlgebra.generic_matvecmul!(C, tA, A, B, _add.alpha, _add.beta) |
8 | | -LinearAlgebra.generic_matvecmul!(C::oneVector{T}, tA::AbstractChar, A::oneSparseMatrixCSC{T}, B::oneVector{T}, _add::MulAddMul) where {T <: Union{Float16, ComplexF16, BlasFloat}} = |
9 | | - LinearAlgebra.generic_matvecmul!(C, tA, A, B, _add.alpha, _add.beta) |
10 | | -LinearAlgebra.generic_matmatmul!(C::oneMatrix{T}, tA, tB, A::oneSparseMatrixCSR{T}, B::oneMatrix{T}, _add::MulAddMul) where {T <: Union{Float16, ComplexF16, BlasFloat}} = |
11 | | - LinearAlgebra.generic_matmatmul!(C, tA, tB, A, B, _add.alpha, _add.beta) |
12 | | -LinearAlgebra.generic_matmatmul!(C::oneMatrix{T}, tA, tB, A::oneSparseMatrixCSC{T}, B::oneMatrix{T}, _add::MulAddMul) where {T <: Union{Float16, ComplexF16, BlasFloat}} = |
13 | | - LinearAlgebra.generic_matmatmul!(C, tA, tB, A, B, _add.alpha, _add.beta) |
14 | | - |
15 | | -function LinearAlgebra.generic_matvecmul!(C::oneVector{T}, tA::AbstractChar, A::oneSparseMatrixCSR{T}, B::oneVector{T}, alpha::Number, beta::Number) where {T <: BlasFloat} |
| 5 | +function LinearAlgebra.mul!(C::oneVector{T}, tA::AbstractChar, A::oneSparseMatrixCSR{T}, B::oneVector{T}, alpha::Number, beta::Number) where {T <: BlasFloat} |
16 | 6 | tA = tA in ('S', 's', 'H', 'h') ? 'N' : tA |
17 | 7 | return sparse_gemv!(tA, alpha, A, B, beta, C) |
18 | 8 | end |
19 | 9 |
|
20 | | -function LinearAlgebra.generic_matvecmul!(C::oneVector{T}, tA::AbstractChar, A::oneSparseMatrixCSC{T}, B::oneVector{T}, alpha::Number, beta::Number) where {T <: BlasFloat} |
| 10 | +function LinearAlgebra.mul!(C::oneVector{T}, tA::AbstractChar, A::oneSparseMatrixCSC{T}, B::oneVector{T}, alpha::Number, beta::Number) where {T <: BlasFloat} |
21 | 11 | # sparse_gemv! already maps op(A) onto the transposed CSR handle, so tA is passed through |
22 | 12 | tA = tA in ('S', 's', 'H', 'h') ? 'N' : tA |
23 | 13 | return sparse_gemv!(tA, alpha, A, B, beta, C) |
24 | 14 | end |
25 | 15 |
|
26 | | -function LinearAlgebra.generic_matmatmul!(C::oneMatrix{T}, tA, tB, A::oneSparseMatrixCSR{T}, B::oneMatrix{T}, alpha::Number, beta::Number) where {T <: BlasFloat} |
| 16 | +function LinearAlgebra.mul!(C::oneMatrix{T}, tA, tB, A::oneSparseMatrixCSR{T}, B::oneMatrix{T}, alpha::Number, beta::Number) where {T <: BlasFloat} |
27 | 17 | tA = tA in ('S', 's', 'H', 'h') ? 'N' : tA |
28 | 18 | tB = tB in ('S', 's', 'H', 'h') ? 'N' : tB |
29 | 19 | return sparse_gemm!(tA, tB, alpha, A, B, beta, C) |
30 | 20 | end |
31 | 21 |
|
32 | | -function LinearAlgebra.generic_matmatmul!(C::oneMatrix{T}, tA, tB, A::oneSparseMatrixCSC{T}, B::oneMatrix{T}, alpha::Number, beta::Number) where {T <: BlasFloat} |
| 22 | +function LinearAlgebra.mul!(C::oneMatrix{T}, tA, tB, A::oneSparseMatrixCSC{T}, B::oneMatrix{T}, alpha::Number, beta::Number) where {T <: BlasFloat} |
33 | 23 | # sparse_gemm! already maps op(A) onto the transposed CSR handle, so tA is passed through |
34 | 24 | tA = tA in ('S', 's', 'H', 'h') ? 'N' : tA |
35 | 25 | tB = tB in ('S', 's', 'H', 'h') ? 'N' : tB |
36 | 26 | return sparse_gemm!(tA, tB, alpha, A, B, beta, C) |
37 | 27 | end |
38 | 28 |
|
| 29 | +# Julia < 1.13 dispatches on the non-public `generic_matvecmul!` and `generic_matmatmul!`, |
| 30 | +# which JuliaLang/LinearAlgebra.jl#1671 superseded by the `mul!` methods above. Forward from |
| 31 | +# the old names, both the alpha/beta variants (1.12) and the ones taking a final MulAddMul |
| 32 | +# (1.10 and 1.11). |
| 33 | +@static if VERSION < v"1.13.0-rc4" |
| 34 | + for SparseMatrixType in (:oneSparseMatrixCSR, :oneSparseMatrixCSC) |
| 35 | + @eval begin |
| 36 | + LinearAlgebra.generic_matvecmul!(C::oneVector{T}, tA::AbstractChar, A::$SparseMatrixType{T}, B::oneVector{T}, alpha::Number, beta::Number) where {T <: BlasFloat} = |
| 37 | + LinearAlgebra.mul!(C, tA, A, B, alpha, beta) |
| 38 | + LinearAlgebra.generic_matvecmul!(C::oneVector{T}, tA::AbstractChar, A::$SparseMatrixType{T}, B::oneVector{T}, _add::MulAddMul) where {T <: BlasFloat} = |
| 39 | + LinearAlgebra.mul!(C, tA, A, B, _add.alpha, _add.beta) |
| 40 | + LinearAlgebra.generic_matmatmul!(C::oneMatrix{T}, tA, tB, A::$SparseMatrixType{T}, B::oneMatrix{T}, alpha::Number, beta::Number) where {T <: BlasFloat} = |
| 41 | + LinearAlgebra.mul!(C, tA, tB, A, B, alpha, beta) |
| 42 | + LinearAlgebra.generic_matmatmul!(C::oneMatrix{T}, tA, tB, A::$SparseMatrixType{T}, B::oneMatrix{T}, _add::MulAddMul) where {T <: BlasFloat} = |
| 43 | + LinearAlgebra.mul!(C, tA, tB, A, B, _add.alpha, _add.beta) |
| 44 | + end |
| 45 | + end |
| 46 | +end |
| 47 | + |
39 | 48 | function LinearAlgebra.generic_trimatdiv!(C::oneVector{T}, uploc, isunitc, tfun::Function, A::oneSparseMatrixCSR{T}, B::oneVector{T}) where {T <: BlasFloat} |
40 | 49 | return sparse_trsv!(uploc, tfun === identity ? 'N' : tfun === transpose ? 'T' : 'C', isunitc, one(T), A, B, C) |
41 | 50 | end |
|
0 commit comments