Skip to content

Commit 9135a16

Browse files
committed
Add macros
1 parent b3ac8fa commit 9135a16

File tree

3 files changed

+35
-2
lines changed

3 files changed

+35
-2
lines changed

src/ArrayLayouts.jl

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,9 @@ end
4848

4949
export materialize, materialize!, MulAdd, muladd!, Ldiv, Lmul, Rmul, MemoryLayout, AbstractStridedLayout,
5050
DenseColumnMajor, ColumnMajor, ZerosLayout, FillLayout, AbstractColumnMajor, RowMajor, AbstractRowMajor,
51-
DiagonalLayout, ScalarLayout, SymTridiagonalLayout, SymmetricLayout, TriangularLayout,
52-
ApplyBroadcastStyle, colsupport, rowsupport
51+
DiagonalLayout, ScalarLayout, SymTridiagonalLayout, HermitianLayout, SymmetricLayout, TriangularLayout,
52+
UnknownLayout, AbstractBandedLayout, ApplyBroadcastStyle, ConjLayout, AbstractFillLayout,
53+
colsupport, rowsupport, lazy_getindex
5354

5455
struct ApplyBroadcastStyle <: BroadcastStyle end
5556
@inline function copyto!(dest::AbstractArray, bc::Broadcasted{ApplyBroadcastStyle})
@@ -64,4 +65,10 @@ include("ldiv.jl")
6465
include("diagonal.jl")
6566
include("triangular.jl")
6667

68+
@inline sub_materialize(_, V) = Array(V)
69+
@inline sub_materialize(V::SubArray) = sub_materialize(MemoryLayout(typeof(V)), V)
70+
71+
@inline lazy_getindex(A, I...) = sub_materialize(view(A, I...))
72+
73+
6774
end

src/ldiv.jl

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,3 +71,16 @@ const MatLdivVec{styleA, styleB, T, V} = Ldiv{styleA, styleB, <:AbstractMatrix{T
7171
const MatLdivMat{styleA, styleB, T, V} = Ldiv{styleA, styleB, <:AbstractMatrix{T}, <:AbstractMatrix{V}}
7272
const BlasMatLdivVec{styleA, styleB, T<:BlasFloat} = MatLdivVec{styleA, styleB, T, T}
7373
const BlasMatLdivMat{styleA, styleB, T<:BlasFloat} = MatLdivMat{styleA, styleB, T, T}
74+
75+
76+
macro lazyldiv(Typ)
77+
esc(quote
78+
LinearAlgebra.ldiv!(A::$Typ, x::AbstractVector) = ArrayLayouts.materialize!(ArrayLayouts.Ldiv(A,x))
79+
LinearAlgebra.ldiv!(A::$Typ, x::AbstractMatrix) = ArrayLayouts.materialize!(ArrayLayouts.Ldiv(A,x))
80+
LinearAlgebra.ldiv!(A::$Typ, x::StridedVector) = ArrayLayouts.materialize!(ArrayLayouts.Ldiv(A,x))
81+
LinearAlgebra.ldiv!(A::$Typ, x::StridedMatrix) = ArrayLayouts.materialize!(ArrayLayouts.Ldiv(A,x))
82+
83+
Base.:\(A::$Typ, x::AbstractVector) = ArrayLayouts.materialize(ArrayLayouts.Ldiv(A,x))
84+
Base.:\(A::$Typ, x::AbstractMatrix) = ArrayLayouts.materialize(ArrayLayouts.Ldiv(A,x))
85+
end)
86+
end

src/lmul.jl

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,16 @@ end
5858
materialize!(M::Lmul) = lmul!(M.A,M.B)
5959
materialize!(M::Rmul) = rmul!(M.A,M.B)
6060

61+
62+
63+
macro lazylmul(Typ)
64+
esc(quote
65+
LinearAlgebra.lmul!(A::$Typ, x::AbstractVector) = ArrayLayouts.materialize!(ArrayLayouts.Lmul(A,x))
66+
LinearAlgebra.lmul!(A::$Typ, x::AbstractMatrix) = ArrayLayouts.materialize!(ArrayLayouts.Lmul(A,x))
67+
LinearAlgebra.lmul!(A::$Typ, x::StridedVector) = ArrayLayouts.materialize!(ArrayLayouts.Lmul(A,x))
68+
LinearAlgebra.lmul!(A::$Typ, x::StridedMatrix) = ArrayLayouts.materialize!(ArrayLayouts.Lmul(A,x))
69+
end)
70+
end
71+
72+
73+

0 commit comments

Comments
 (0)