Skip to content

Commit a2a9287

Browse files
committed
include vector solves
1 parent a6b1e73 commit a2a9287

3 files changed

Lines changed: 7 additions & 14 deletions

File tree

src/SparseArrays.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ using Base.Order: Forward
1111
using LinearAlgebra
1212
using LinearAlgebra: AdjOrTrans, AdjointFactorization, TransposeFactorization, matprod,
1313
AbstractQ, AdjointQ, HessenbergQ, QRCompactWYQ, QRPackedQ, LQPackedQ, MulAddMul,
14-
UpperOrLowerTriangular, @stable_muladdmul
14+
UpperOrLowerTriangular, UnitUpperOrUnitLowerTriangular, @stable_muladdmul
1515

1616

1717
import Base: +, -, *, \, /, ==, zero

src/linalg.jl

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1313,13 +1313,17 @@ end
13131313
# so they should return dense arrays
13141314
const StructuredWithDenseInverse = Union{Bidiagonal,SymTridiagonal,Tridiagonal,LowerTriangular,UpperTriangular,UpperHessenberg}
13151315

1316+
matop_dest(::typeof(\), A::StructuredWithDenseInverse, b::AbstractSparseVector) =
1317+
Vector{promote_op(\, eltype(A), eltype(B))}(undef, length(b))
1318+
matop_dest(::typeof(\), A::UnitUpperOrUnitLowerTriangular, b::AbstractSparseVector) =
1319+
Vector{LinearAlgebra._inner_type_promotion(\, eltype(A), eltype(B))}(undef, length(b))
13161320
matop_dest(::typeof(\), A::StructuredWithDenseInverse, B::QuasiSparseMatrix) =
13171321
Matrix{promote_op(\, eltype(A), eltype(B))}(undef, size(B))
1318-
matop_dest(::typeof(\), A::LinearAlgebra.UnitUpperOrUnitLowerTriangular, B::QuasiSparseMatrix) =
1322+
matop_dest(::typeof(\), A::UnitUpperOrUnitLowerTriangular, B::QuasiSparseMatrix) =
13191323
Matrix{LinearAlgebra._inner_type_promotion(\, eltype(A), eltype(B))}(undef, size(B))
13201324
matop_dest(::typeof(/), A::QuasiSparseMatrix, B::StructuredWithDenseInverse) =
13211325
Matrix{promote_op(/, eltype(A), eltype(B))}(undef, size(A))
1322-
matop_dest(::typeof(/), A::QuasiSparseMatrix, B::LinearAlgebra.UnitUpperOrUnitLowerTriangular) =
1326+
matop_dest(::typeof(/), A::QuasiSparseMatrix, B::UnitUpperOrUnitLowerTriangular) =
13231327
Matrix{LinearAlgebra._inner_type_promotion(/, eltype(A), eltype(B))}(undef, size(A))
13241328
## end of triangular
13251329

src/sparsevector.jl

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2160,17 +2160,6 @@ for isunittri in (true, false), islowertri in (true, false)
21602160
halfstr = islowertri ? "Lower" : "Upper"
21612161
tritype = :(LinearAlgebra.$(Symbol(unitstr, halfstr, "Triangular")))
21622162

2163-
# build out-of-place left-division operations
2164-
# broad method where elements are Numbers
2165-
@eval function \(A::$tritype{<:TA,<:AbstractMatrix}, b::AbstractCompressedVector{Tb}) where {TA<:Number,Tb<:Number}
2166-
TAb = $(isunittri ?
2167-
:(typeof(zero(TA)*zero(Tb) + zero(TA)*zero(Tb))) :
2168-
:(typeof((zero(TA)*zero(Tb) + zero(TA)*zero(Tb))/one(TA))) )
2169-
return LinearAlgebra.ldiv!(convert(AbstractArray{TAb}, A), convert(Array{TAb}, b))
2170-
end
2171-
# fallback where elements are not Numbers
2172-
@eval \(A::$tritype, b::AbstractCompressedVector) = LinearAlgebra.ldiv!(A, copy(b))
2173-
21742163
# faster method requiring good view support of the
21752164
# triangular matrix type. hence the StridedMatrix restriction.
21762165
for (istrans, applyxform, xformtype, xformop) in (

0 commit comments

Comments
 (0)