Skip to content

Commit d3e5959

Browse files
authored
Fix BandedMatrices #188 (#29)
1 parent 26953ce commit d3e5959

File tree

4 files changed

+17
-2
lines changed

4 files changed

+17
-2
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "ArrayLayouts"
22
uuid = "4c555306-a7a7-4459-81d9-ec55ddd5c99a"
33
authors = ["Sheehan Olver <[email protected]>"]
4-
version = "0.3.6"
4+
version = "0.3.7"
55

66
[deps]
77
FillArrays = "1a297f60-69ca-5386-bcde-b61e274b549b"

src/diagonal.jl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ end
2727
copy(M::Rmul{<:Any,<:DiagonalLayout}) = M.A .* permutedims(M.B.diag)
2828
copy(M::Rmul{<:Any,<:DiagonalLayout{<:AbstractFillLayout}}) = M.A .* getindex_value(M.B.diag)
2929

30+
function materialize!(M::Ldiv{<:DiagonalLayout})
31+
M.B .= M.A.diag .\ M.B
32+
M.B
33+
end
34+
3035
copy(M::Ldiv{<:DiagonalLayout,<:DiagonalLayout}) = Diagonal(inv.(M.A.diag) .* M.B.diag)
3136
copy(M::Ldiv{<:DiagonalLayout}) = inv.(M.A.diag) .* M.B
3237
copy(M::Ldiv{<:DiagonalLayout{<:AbstractFillLayout}}) = inv(getindex_value(M.A.diag)) .* M.B

src/triangular.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ materialize!(M::MatRmulMat{<:AbstractStridedLayout,<:TriangularLayout}) = Linear
116116
########
117117

118118

119-
@inline function copyto!(dest::AbstractArray, M::Ldiv{<:Union{TriangularLayout,BidiagonalLayout}})
119+
@inline function copyto!(dest::AbstractArray, M::Ldiv{<:Union{TriangularLayout,BidiagonalLayout,DiagonalLayout}})
120120
A, B = M.A, M.B
121121
dest B || copyto!(dest, B)
122122
ldiv!(A, dest)

test/test_ldiv.jl

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,5 +249,15 @@ import ArrayLayouts: ApplyBroadcastStyle, QRCompactWYQLayout, QRCompactWYLayout,
249249
@test_throws DimensionMismatch ArrayLayouts.ldiv(L,randn(3))
250250
@test_throws DimensionMismatch materialize!(Ldiv(L,randn(3)))
251251
end
252+
253+
@testset "Diagonal Ldiv bug (BandedMatrices #188)" begin
254+
n = 5
255+
B = randn(n,n)
256+
D = Diagonal(-collect(1.0:n))
257+
@test ArrayLayouts.ldiv!(similar(B), D, B) == D \ B
258+
@test ArrayLayouts.ldiv!(similar(B), B, D) == B \ D
259+
@test ArrayLayouts.rdiv!(similar(B), B, D) == B / D
260+
@test_broken ArrayLayouts.rdiv!(similar(B), D, B) == D / B
261+
end
252262
end
253263

0 commit comments

Comments
 (0)