Skip to content

Commit 04c8226

Browse files
authored
AbstractQ Layout (#15)
* Update factorizations.jl * Update Project.toml * layoutrmul
1 parent 6c43de9 commit 04c8226

File tree

3 files changed

+26
-7
lines changed

3 files changed

+26
-7
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.2.4"
4+
version = "0.2.5"
55

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

src/factorizations.jl

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1-
struct QLayout <: MemoryLayout end
1+
abstract type AbstractQLayout <: MemoryLayout end
2+
struct QLayout <: AbstractQLayout end
23

34
MemoryLayout(::Type{<:AbstractQ}) = QLayout()
45

5-
transposelayout(::QLayout) = QLayout()
6+
adjointlayout(::Type, ::AbstractQLayout) = QLayout()
67

78

8-
copy(M::Lmul{QLayout}) = copyto!(similar(M), M)
9+
copy(M::Lmul{<:AbstractQLayout}) = copyto!(similar(M), M)
910

10-
function copyto!(dest::AbstractArray{T}, M::Lmul{QLayout}) where T
11+
function copyto!(dest::AbstractArray{T}, M::Lmul{<:AbstractQLayout}) where T
1112
A,B = M.A,M.B
1213
if size(dest,1) == size(B,1)
1314
copyto!(dest, B)
@@ -18,13 +19,15 @@ function copyto!(dest::AbstractArray{T}, M::Lmul{QLayout}) where T
1819
materialize!(Lmul(A,dest))
1920
end
2021

21-
function copyto!(dest::AbstractArray, M::Ldiv{QLayout})
22+
function copyto!(dest::AbstractArray, M::Ldiv{<:AbstractQLayout})
2223
A,B = M.A,M.B
2324
copyto!(dest, B)
2425
materialize!(Ldiv(A,dest))
2526
end
2627

27-
materialize!(M::Ldiv{QLayout}) = materialize!(Lmul(M.A',M.B))
28+
materialize!(M::Lmul{LAY}) where LAY<:AbstractQLayout = error("Overload materialize!(::Lmul{$(LAY)})")
29+
materialize!(M::Rmul{LAY}) where LAY<:AbstractQLayout = error("Overload materialize!(::Lmul{$(LAY)})")
30+
materialize!(M::Ldiv{<:AbstractQLayout}) = materialize!(Lmul(M.A',M.B))
2831

2932
_qr(layout, axes, A; kwds...) = Base.invoke(qr, Tuple{AbstractMatrix{eltype(A)}}, A; kwds...)
3033
_qr(layout, axes, A, pivot::P; kwds...) where P = Base.invoke(qr, Tuple{AbstractMatrix{eltype(A)},P}, A, pivot; kwds...)

src/lmul.jl

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,4 +79,20 @@ macro layoutlmul(Typ)
7979
ArrayLayouts.@_layoutlmul LowerTriangular{T, <:$Typ{T}} where T
8080
ArrayLayouts.@_layoutlmul UnitLowerTriangular{T, <:$Typ{T}} where T
8181
end)
82+
end
83+
84+
macro _layoutrmul(Typ)
85+
esc(quote
86+
LinearAlgebra.rmul!(A::AbstractMatrix, B::$Typ) = ArrayLayouts.materialize!(ArrayLayouts.Rmul(A, B))
87+
LinearAlgebra.rmul!(A::StridedMatrix, B::$Typ) = ArrayLayouts.materialize!(ArrayLayouts.Rmul(A, B))
88+
end)
89+
end
90+
91+
macro layoutrmul(Typ)
92+
esc(quote
93+
ArrayLayouts.@_layoutrmul UpperTriangular{T, <:$Typ{T}} where T
94+
ArrayLayouts.@_layoutrmul UnitUpperTriangular{T, <:$Typ{T}} where T
95+
ArrayLayouts.@_layoutrmul LowerTriangular{T, <:$Typ{T}} where T
96+
ArrayLayouts.@_layoutrmul UnitLowerTriangular{T, <:$Typ{T}} where T
97+
end)
8298
end

0 commit comments

Comments
 (0)