Skip to content

Commit 43b2ee2

Browse files
authored
Use LAPACK for T\B where T is triangular (#96)
* Use LAPACK for T\B where T is triangular * v0.8.7 * Update triangular.jl * Update test_ldiv.jl
1 parent 6eb9d9d commit 43b2ee2

File tree

3 files changed

+33
-5
lines changed

3 files changed

+33
-5
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.8.6"
4+
version = "0.8.7"
55

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

src/triangular.jl

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,25 +215,40 @@ for UNIT in ('U', 'N')
215215
@eval @inline materialize!(M::BlasMatLdivVec{<:TriangularLayout{$UPLO,$UNIT,<:AbstractColumnMajor},
216216
<:AbstractStridedLayout}) =
217217
BLAS.trsv!($UPLO, 'N', $UNIT, triangulardata(M.A), M.B)
218+
@eval @inline materialize!(M::BlasMatLdivMat{<:TriangularLayout{$UPLO,$UNIT,<:AbstractColumnMajor},
219+
<:AbstractStridedLayout}) =
220+
LAPACK.trtrs!($UPLO, 'N', $UNIT, triangulardata(M.A), M.B)
218221
end
219222

220223
@eval begin
221224
@inline materialize!(M::BlasMatLdivVec{<:TriangularLayout{'U',$UNIT,<:AbstractRowMajor},
222225
<:AbstractStridedLayout}) =
223226
BLAS.trsv!('L', 'T', $UNIT, transpose(triangulardata(M.A)), M.B)
227+
@inline materialize!(M::BlasMatLdivMat{<:TriangularLayout{'U',$UNIT,<:AbstractRowMajor},
228+
<:AbstractStridedLayout}) =
229+
LAPACK.trtrs!('L', 'T', $UNIT, transpose(triangulardata(M.A)), M.B)
224230

225231
@inline materialize!(M::BlasMatLdivVec{<:TriangularLayout{'L',$UNIT,<:AbstractRowMajor},
226232
<:AbstractStridedLayout}) =
227233
BLAS.trsv!('U', 'T', $UNIT, transpose(triangulardata(M.A)), M.B)
234+
@inline materialize!(M::BlasMatLdivMat{<:TriangularLayout{'L',$UNIT,<:AbstractRowMajor},
235+
<:AbstractStridedLayout}) =
236+
LAPACK.trtrs!('U', 'T', $UNIT, transpose(triangulardata(M.A)), M.B)
228237

229238

230239
@inline materialize!(M::BlasMatLdivVec{<:TriangularLayout{'U',$UNIT,<:ConjLayout{<:AbstractRowMajor}},
231240
<:AbstractStridedLayout}) =
232241
BLAS.trsv!('L', 'C', $UNIT, triangulardata(M.A)', M.B)
242+
@inline materialize!(M::BlasMatLdivMat{<:TriangularLayout{'U',$UNIT,<:ConjLayout{<:AbstractRowMajor}},
243+
<:AbstractStridedLayout}) =
244+
LAPACK.trtrs!('L', 'C', $UNIT, triangulardata(M.A)', M.B)
233245

234246
@inline materialize!(M::BlasMatLdivVec{<:TriangularLayout{'L',$UNIT,<:ConjLayout{<:AbstractRowMajor}},
235247
<:AbstractStridedLayout}) =
236248
BLAS.trsv!('U', 'C', $UNIT, triangulardata(M.A)', M.B)
249+
@inline materialize!(M::BlasMatLdivMat{<:TriangularLayout{'L',$UNIT,<:ConjLayout{<:AbstractRowMajor}},
250+
<:AbstractStridedLayout}) =
251+
LAPACK.trtrs!('U', 'C', $UNIT, triangulardata(M.A)', M.B)
237252
end
238253
end
239254

test/test_ldiv.jl

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -86,11 +86,24 @@ import ArrayLayouts: ApplyBroadcastStyle, QRCompactWYQLayout, QRCompactWYLayout,
8686

8787
@testset "Triangular \\ matrix" begin
8888
A = randn(5,5)
89-
b = randn(5,5)
90-
M = Ldiv(UpperTriangular(A), b)
89+
B = randn(5,5)
90+
M = Ldiv(UpperTriangular(A), B)
9191
@test Base.Broadcast.broadcastable(M) === M
92-
@test UpperTriangular(A) \ b copyto!(similar(b) , Ldiv(UpperTriangular(A), b))
93-
(b .= Ldiv(UpperTriangular(A), b))
92+
@test UpperTriangular(A) \ B copyto!(similar(B) , Ldiv(UpperTriangular(A), B)) (B .= Ldiv(UpperTriangular(A), B))
93+
@test UpperTriangular(A') \ B copyto!(similar(B) , Ldiv(UpperTriangular(A'), B)) (B .= Ldiv(UpperTriangular(A'), B))
94+
@test LowerTriangular(A') \ B copyto!(similar(B) , Ldiv(LowerTriangular(A'), B)) (B .= Ldiv(LowerTriangular(A'), B))
95+
@test UnitUpperTriangular(A) \ B copyto!(similar(B) , Ldiv(UnitUpperTriangular(A), B)) (B .= Ldiv(UnitUpperTriangular(A), B))
96+
@test UnitUpperTriangular(A') \ B copyto!(similar(B) , Ldiv(UnitUpperTriangular(A'), B)) (B .= Ldiv(UnitUpperTriangular(A'), B))
97+
@test UnitLowerTriangular(A') \ B copyto!(similar(B) , Ldiv(UnitLowerTriangular(A'), B)) (B .= Ldiv(UnitLowerTriangular(A'), B))
98+
99+
C = randn(5,5) + im * randn(5,5)
100+
D = randn(5,5) + im * randn(5,5)
101+
@test UpperTriangular(C) \ D copyto!(similar(D) , Ldiv(UpperTriangular(C), D)) (D .= Ldiv(UpperTriangular(C), D))
102+
@test UpperTriangular(C') \ D copyto!(similar(D) , Ldiv(UpperTriangular(C'), D)) (D .= Ldiv(UpperTriangular(C'), D))
103+
@test LowerTriangular(C') \ D copyto!(similar(D) , Ldiv(LowerTriangular(C'), D)) (D .= Ldiv(LowerTriangular(C'), D))
104+
@test UnitUpperTriangular(C) \ D copyto!(similar(D) , Ldiv(UnitUpperTriangular(C), D)) (D .= Ldiv(UnitUpperTriangular(C), D))
105+
@test UnitUpperTriangular(C') \ D copyto!(similar(D) , Ldiv(UnitUpperTriangular(C'), D)) (D .= Ldiv(UnitUpperTriangular(C'), D))
106+
@test UnitLowerTriangular(C') \ D copyto!(similar(D) , Ldiv(UnitLowerTriangular(C'), D)) (D .= Ldiv(UnitLowerTriangular(C'), D))
94107
end
95108

96109
@testset "Int" begin

0 commit comments

Comments
 (0)