Skip to content

Commit

Permalink
Allow trans/adj in triangular ldiv!
Browse files Browse the repository at this point in the history
  • Loading branch information
dlfivefifty committed Jul 26, 2023
1 parent 42c498f commit 384625f
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 14 deletions.
2 changes: 1 addition & 1 deletion Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"

[compat]
Aqua = "0.6"
ArrayLayouts = "1"
ArrayLayouts = "1.1"
Documenter = "0.27"
FillArrays = "1.3"
InfiniteArrays = "0.12"
Expand Down
2 changes: 1 addition & 1 deletion src/BandedMatrices.jl
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ import ArrayLayouts: MemoryLayout, transposelayout, triangulardata,
sublayout, sub_materialize, _fill_lmul!, _copy_oftype,
reflector!, reflectorApply!, _copyto!, checkdimensions,
_qr!, _qr, _lu!, _lu, _factorize, AbstractTridiagonalLayout, TridiagonalLayout,
BidiagonalLayout, bidiagonaluplo, diagonaldata, supdiagonaldata, subdiagonaldata
BidiagonalLayout, bidiagonaluplo, diagonaldata, supdiagonaldata, subdiagonaldata, copymutable_oftype_layout

import FillArrays: AbstractFill, getindex_value, _broadcasted_zeros, unique_value, OneElement

Expand Down
17 changes: 9 additions & 8 deletions src/banded/BandedMatrix.jl
Original file line number Diff line number Diff line change
Expand Up @@ -148,15 +148,16 @@ convert(::Type{DefaultBandedMatrix}, M::AbstractMatrix{T}) where T = convert(Def

copy(B::BandedMatrix) = _BandedMatrix(copy(B.data), B.raxis, B.l, B.u)

if isdefined(LinearAlgebra, :copymutable_oftype)
LinearAlgebra.copymutable_oftype(B::BandedMatrix, ::Type{S}) where S =
_BandedMatrix(LinearAlgebra.copymutable_oftype(B.data, S), B.raxis, B.l, B.u)

LinearAlgebra.copymutable_oftype(B::Adjoint{<:Any,<:BandedMatrix}, ::Type{S}) where S =
LinearAlgebra.copymutable_oftype(parent(B), S)'
LinearAlgebra.copymutable_oftype(B::Transpose{<:Any,<:BandedMatrix}, ::Type{S}) where S =
transpose(LinearAlgebra.copymutable_oftype(parent(B), S))
end
copymutable_oftype_layout(::BandedColumns, B, ::Type{S}) where S =

Check warning on line 152 in src/banded/BandedMatrix.jl

View check run for this annotation

Codecov / codecov/patch

src/banded/BandedMatrix.jl#L152

Added line #L152 was not covered by tests
_BandedMatrix(LinearAlgebra.copymutable_oftype(bandeddata(B), S), axes(B,1), bandwidths(B)...)

copymutable_oftype_layout(::BandedRows, B, ::Type{S}) where S =

Check warning on line 155 in src/banded/BandedMatrix.jl

View check run for this annotation

Codecov / codecov/patch

src/banded/BandedMatrix.jl#L155

Added line #L155 was not covered by tests
LinearAlgebra.copymutable_oftype(parent(B), S)'

copymutable_oftype_layout(::AbstractBandedLayout, B, ::Type{S}) where S =

Check warning on line 158 in src/banded/BandedMatrix.jl

View check run for this annotation

Codecov / codecov/patch

src/banded/BandedMatrix.jl#L158

Added line #L158 was not covered by tests
copyto!(BandedMatrix{S}(undef, axes(B), bandwidths(B)), B)


promote_rule(::Type{BandedMatrix{T1, C1}}, ::Type{BandedMatrix{T2, C2}}) where {T1,C1, T2,C2} =
BandedMatrix{promote_type(T1,T2), promote_type(C1, C2)}
Expand Down
18 changes: 14 additions & 4 deletions src/tribanded.jl
Original file line number Diff line number Diff line change
Expand Up @@ -79,17 +79,27 @@ end
# Ldiv
for UNIT in ('N', 'U')
@eval begin
@inline function materialize!(M::BlasMatLdivVec{<:TriangularLayout{'U',$UNIT,<:BandedColumnMajor},
<:AbstractStridedLayout})
@inline function materialize!(M::BlasMatLdivVec{<:TriangularLayout{'U',$UNIT,<:BandedColumnMajor}, <:AbstractStridedLayout})

Check warning on line 82 in src/tribanded.jl

View check run for this annotation

Codecov / codecov/patch

src/tribanded.jl#L82

Added line #L82 was not covered by tests
A,x = M.A,M.B
tbsv!('U', 'N', $UNIT, size(A,1), bandwidth(A,2), bandeddata(A), x)
end

@inline function materialize!(M::BlasMatLdivVec{<:TriangularLayout{'L',$UNIT,<:BandedColumnMajor},
<:AbstractStridedLayout})
@inline function materialize!(M::BlasMatLdivVec{<:TriangularLayout{'L',$UNIT,<:BandedColumnMajor}, <:AbstractStridedLayout})

Check warning on line 87 in src/tribanded.jl

View check run for this annotation

Codecov / codecov/patch

src/tribanded.jl#L87

Added line #L87 was not covered by tests
A,x = M.A,M.B
tbsv!('L', 'N', $UNIT, size(A,1), bandwidth(A,1), bandeddata(A), x)
end

@inline function materialize!(M::BlasMatLdivVec{<:TriangularLayout{'U',$UNIT,<:BandedRowMajor}, <:AbstractStridedLayout})

Check warning on line 92 in src/tribanded.jl

View check run for this annotation

Codecov / codecov/patch

src/tribanded.jl#L92

Added line #L92 was not covered by tests
U,x = M.A,M.B
A = triangulardata(U)
tbsv!('L', 'T', $UNIT, size(A,1), bandwidth(A,2), bandeddata(LowerTriangular(A')), x)
end

@inline function materialize!(M::BlasMatLdivVec{<:TriangularLayout{'L',$UNIT,<:BandedRowMajor}, <:AbstractStridedLayout})

Check warning on line 98 in src/tribanded.jl

View check run for this annotation

Codecov / codecov/patch

src/tribanded.jl#L98

Added line #L98 was not covered by tests
L,x = M.A,M.B
A = triangulardata(L)
tbsv!('U', 'T', $UNIT, size(A,1), bandwidth(A,1), bandeddata(UpperTriangular(A')), x)
end
end
# for UPLO in ('U', 'L')
# @eval begin
Expand Down
8 changes: 8 additions & 0 deletions test/test_tribanded.jl
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,15 @@ import BandedMatrices: BandedColumns, BandedRows
A = brand(5,5,2,1)
b = randn(5)
U = UpperTriangular(A')
L = LowerTriangular(A')
= LowerTriangular(A)'
= UpperTriangular(A)'
@test MemoryLayout(U) isa TriangularLayout{'U','N',BandedRows{DenseColumnMajor}}
@test ArrayLayouts.lmul!(U,copy(b)) U*b
@test ArrayLayouts.lmul!(L,copy(b)) L*b
@test ldiv!(U,copy(b)) ArrayLayouts.ldiv!(U,copy(b)) U\b Matrix(U)\b
@test ldiv!(L,copy(b)) ArrayLayouts.ldiv!(L,copy(b)) L\b Matrix(L)\b
@test ldiv!(Ũ,copy(b)) ArrayLayouts.ldiv!(Ũ,copy(b)) \b Matrix(Ũ)\b
@test ldiv!(L̃,copy(b)) ArrayLayouts.ldiv!(L̃,copy(b)) \b Matrix(L̃)\b
end
end

0 comments on commit 384625f

Please sign in to comment.