Skip to content

Commit ca1152e

Browse files
authored
UpperOrLowerTriangular layout mul (#152)
* UpperOrLowerTriangular layout mul * Update test_layoutarray.jl
1 parent aea984e commit ca1152e

File tree

5 files changed

+19
-4
lines changed

5 files changed

+19
-4
lines changed

Project.toml

+1-1
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 <solver@mac.com>"]
4-
version = "1.0.11"
4+
version = "1.0.12"
55

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

src/ArrayLayouts.jl

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ using Base: _typed_hcat
33
using Base, Base.Broadcast, LinearAlgebra, FillArrays, SparseArrays
44
using LinearAlgebra.BLAS
55

6-
using Base: AbstractCartesianIndex, OneTo, RangeIndex, ReinterpretArray, ReshapedArray,
6+
using Base: AbstractCartesianIndex, OneTo, oneto, RangeIndex, ReinterpretArray, ReshapedArray,
77
Slice, tuple_type_tail, unalias,
88
@propagate_inbounds, @_propagate_inbounds_meta
99

src/mul.jl

+6
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,12 @@ end
310310
*(x::TransposeAbsVec{<:Any,<:Zeros{<:Any,1}}, D::Diagonal, y::LayoutVector) = FillArrays._triple_zeromul(x, D, y)
311311

312312

313+
*(A::UpperOrLowerTriangular{<:Any,<:LayoutMatrix}, B::UpperOrLowerTriangular{<:Any,<:LayoutMatrix}) = mul(A, B)
314+
*(A::UpperOrLowerTriangular{<:Any,<:AdjOrTrans{<:Any,<:LayoutMatrix}}, B::UpperOrLowerTriangular{<:Any,<:LayoutMatrix}) = mul(A, B)
315+
*(A::UpperOrLowerTriangular{<:Any,<:LayoutMatrix}, B::UpperOrLowerTriangular{<:Any,<:AdjOrTrans{<:Any,<:LayoutMatrix}}) = mul(A, B)
316+
*(A::UpperOrLowerTriangular{<:Any,<:AdjOrTrans{<:Any,<:LayoutMatrix}}, B::UpperOrLowerTriangular{<:Any,<:AdjOrTrans{<:Any,<:LayoutMatrix}}) = mul(A, B)
317+
318+
313319
# mul! for subarray of layout matrix
314320
LinearAlgebra.mul!(C::SubArray{<:Any,2,<:LayoutMatrix}, A::SubArray{<:Any,2,<:LayoutMatrix}, B::SubArray{<:Any,2,<:LayoutMatrix}, α::Number, β::Number) =
315321
ArrayLayouts.mul!(C, A, B, α, β)

src/triangular.jl

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
colsupport(::TriangularLayout{'L'}, A, j) = isempty(j) ? (1:0) : colsupport(triangulardata(A), j) (minimum(j):size(A,1))
2-
colsupport(::TriangularLayout{'U'}, A, j) = isempty(j) ? (1:0) : colsupport(triangulardata(A), j) OneTo(maximum(j))
2+
colsupport(::TriangularLayout{'U'}, A, j) = isempty(j) ? (1:0) : colsupport(triangulardata(A), j) oneto(maximum(j))
33
rowsupport(::TriangularLayout{'U'}, A, j) = isempty(j) ? (1:0) : rowsupport(triangulardata(A), j) (minimum(j):size(A,2))
4-
rowsupport(::TriangularLayout{'L'}, A, j) = isempty(j) ? (1:0) : rowsupport(triangulardata(A), j) OneTo(maximum(j))
4+
rowsupport(::TriangularLayout{'L'}, A, j) = isempty(j) ? (1:0) : rowsupport(triangulardata(A), j) oneto(maximum(j))
55

66

77

test/test_layoutarray.jl

+9
Original file line numberDiff line numberDiff line change
@@ -446,6 +446,15 @@ MemoryLayout(::Type{MyVector}) = DenseColumnMajor()
446446
@test mul(view(y', :, 1:5), D) isa Adjoint
447447
@test mul(view(transpose(y), :, 1:5), D) isa Transpose
448448
end
449+
450+
@testset "Tri * Tri" begin
451+
A = MyMatrix(randn(3,3))
452+
@test UpperTriangular(A) * LowerTriangular(A) UpperTriangular(A.A) * LowerTriangular(A.A)
453+
@test UpperTriangular(A) * UnitUpperTriangular(A) UpperTriangular(A.A) * UnitUpperTriangular(A.A)
454+
@test UpperTriangular(A') * UnitUpperTriangular(A) UpperTriangular(A.A') * UnitUpperTriangular(A.A)
455+
@test UpperTriangular(A) * UnitUpperTriangular(A') UpperTriangular(A.A) * UnitUpperTriangular(A.A')
456+
@test UpperTriangular(A') * UnitUpperTriangular(A') UpperTriangular(A.A') * UnitUpperTriangular(A.A')
457+
end
449458
end
450459

451460
struct MyUpperTriangular{T} <: AbstractMatrix{T}

0 commit comments

Comments
 (0)