Skip to content

Commit ce9e9c1

Browse files
authored
Generalise cached banded matrix (#361)
* Generalise cached banded matrix * update tests * v2.5
1 parent 4492817 commit ce9e9c1

File tree

6 files changed

+16
-12
lines changed

6 files changed

+16
-12
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name = "LazyArrays"
22
uuid = "5078a376-72f3-5289-bfd5-ec5146d43c02"
3-
version = "2.4"
3+
version = "2.5"
44

55
[deps]
66
ArrayLayouts = "4c555306-a7a7-4459-81d9-ec55ddd5c99a"

ext/LazyArraysBandedMatricesExt.jl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import LazyArrays: sublayout, symmetriclayout, hermitianlayout, applylayout, cac
1111
PaddedColumns, CachedArray, CachedMatrix, LazyLayout, BroadcastLayout, ApplyLayout,
1212
paddeddata, resizedata!, broadcastlayout, _broadcastarray2broadcasted, _broadcast_sub_arguments,
1313
arguments, call, applybroadcaststyle, simplify, simplifiable, islazy_layout, lazymaterialize, _broadcast_mul_mul, _broadcast_mul_simplifiable,
14-
triangularlayout, AbstractCachedMatrix, _mulbanded_copyto!, ApplyBandedLayout, BroadcastBandedLayout
14+
triangularlayout, AbstractCachedMatrix, cache_layout, _mulbanded_copyto!, ApplyBandedLayout, BroadcastBandedLayout
1515
import Base: BroadcastStyle, similar, copy, broadcasted, getindex, OneTo, oneto, tail, sign, abs
1616
import BandedMatrices: bandedbroadcaststyle, bandwidths, isbanded, bandedcolumns, bandeddata, BandedStyle,
1717
AbstractBandedLayout, AbstractBandedMatrix, BandedColumns, BandedRows, BandedSubBandedMatrix,
@@ -450,10 +450,11 @@ LazyArrays._vcat_sub_arguments(lay::ApplyBandedLayout{typeof(hcat)}, A, V) = Laz
450450

451451
CachedArray(::Type{BandedMatrix}, matrix::AbstractMatrix{T}) where T = CachedArray(BandedMatrix{T}(undef, (0,0), bandwidths(matrix)), matrix)
452452

453-
cachedlayout(::BandedColumns{DenseColumnMajor}, ::AbstractBandedLayout) = BandedColumns{DenseColumnMajor}()
454453
bandwidths(B::CachedMatrix) = bandwidths(B.data)
455454
isbanded(B::CachedMatrix) = isbanded(B.data)
456455

456+
cache_layout(::BandedLayouts, A::AbstractMatrix{T}) where T = CachedArray(BandedMatrix{T}(undef, (0,0), bandwidths(A)), A)
457+
457458
function bandeddata(A::CachedMatrix)
458459
resizedata!(A, size(A)...)
459460
bandeddata(A.data)

ext/LazyArraysBlockArraysExt.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ using LazyArrays.FillArrays
77
import LazyArrays: resizedata!, paddeddata, paddeddata_axes, arguments, call,
88
LazyArrayStyle, CachedVector, AbstractPaddedLayout, PaddedLayout, PaddedRows, PaddedColumns, BroadcastLayout,
99
AbstractCachedMatrix, AbstractCachedArray, setindex, applybroadcaststyle,
10-
ApplyLayout, _cache
10+
ApplyLayout, cache_layout
1111
import ArrayLayouts: sub_materialize
1212
import Base: getindex, BroadcastStyle, broadcasted, OneTo
1313
import BlockArrays: AbstractBlockStyle, AbstractBlockedUnitRange, blockcolsupport, blockrowsupport, BlockSlice, BlockIndexRange, AbstractBlockLayout

ext/LazyArraysBlockBandedMatricesExt.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ using LazyArrays.ArrayLayouts
99
import LazyArrays: sublayout, symmetriclayout, hermitianlayout, transposelayout, conjlayout,
1010
PaddedLayout, PaddedColumns, AbstractPaddedLayout, PaddedRows, paddeddata,
1111
islazy_layout, arguments, call, applylayout, broadcastlayout, applybroadcaststyle,
12-
BroadcastMatrix, _broadcastarray2broadcasted, _cache, resizedata!, simplifiable,
12+
BroadcastMatrix, _broadcastarray2broadcasted, cache_layout, resizedata!, simplifiable,
1313
AbstractLazyLayout, LazyArrayStyle, LazyLayout, ApplyLayout, BroadcastLayout, AbstractInvLayout,
1414
_mul_args_colsupport, _mul_args_rowsupport, _mat_mul_arguments, LazyBandedLayout,
1515
CachedArray, _broadcast_sub_arguments, simplify, lazymaterialize, _mulbanded_copyto!
@@ -193,7 +193,7 @@ sublayout(LAY::BroadcastBandedBlockBandedLayout, ::Type{<:Tuple{BlockSlice{<:Blo
193193
_broadcastarray2broadcasted(::BroadcastBlockBandedLayouts{F}, A) where F = _broadcastarray2broadcasted(BroadcastLayout{F}(), A)
194194
_broadcastarray2broadcasted(::BroadcastBlockBandedLayouts{F}, A::BroadcastArray) where F = _broadcastarray2broadcasted(BroadcastLayout{F}(), A)
195195

196-
function _cache(::BlockBandedLayouts, A::AbstractMatrix{T}) where T
196+
function cache_layout(::BlockBandedLayouts, A::AbstractMatrix{T}) where T
197197
kr,jr = axes(A)
198198
CachedArray(BlockBandedMatrix{T}(undef, (kr[Block.(1:0)], jr[Block.(1:0)]), blockbandwidths(A)), A)
199199
end

src/cache.jl

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,14 @@ CachedArray(array::AbstractArray{T,N}) where {T,N} = CachedArray(similar(array,
4848
Caches the entries of an array.
4949
"""
5050
cache(::Type{MT}, O::AbstractArray) where {MT<:AbstractArray} = CachedArray(MT,O)
51-
cache(A::AbstractArray) = _cache(MemoryLayout(A), A)
52-
_cache(_, O::AbstractArray) = CachedArray(O)
53-
_cache(_, O::CachedArray) = CachedArray(copy(O.data), O.array, O.datasize)
54-
_cache(::AbstractStridedLayout, O::AbstractArray) = copy(O)
5551

52+
53+
cache(A::AbstractArray) = cache_layout(MemoryLayout(A), A)
54+
cache_layout(_, O::AbstractArray) = CachedArray(O)
55+
cache_layout(_, O::CachedArray) = CachedArray(copy(O.data), O.array, O.datasize)
56+
cache_layout(::AbstractStridedLayout, O::AbstractArray) = copy(O)
57+
58+
const _cache = cache_layout # TODO: deprecate
5659
cacheddata(A::AbstractCachedArray) = view(A.data,OneTo.(A.datasize)...)
5760

5861
convert(::Type{AbstractArray{T}}, S::CachedArray{T}) where T = S
@@ -565,7 +568,7 @@ end
565568
# AbstractQ
566569
##
567570
cache(A::AbstractQ) = _cache(MemoryLayout(A), A)
568-
_cache(_, O::AbstractQ) = CachedArray(O)
571+
cache_layout(_, O::AbstractQ) = CachedArray(O)
569572
CachedArray(array::AbstractQ{T}) where T = CachedArray(similar(Matrix{T}, (0,0)), array)
570573
CachedArray(data::AbstractMatrix, array::AbstractQ) = CachedArray(data, array, size(data))
571574
CachedArray(data::AbstractMatrix{T}, array::AbstractQ{T}, datasize::NTuple{2,Int}) where T =

test/bandedtests.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -773,7 +773,7 @@ LinearAlgebra.lmul!(β::Number, A::PseudoBandedMatrix) = (lmul!(β, A.data); A)
773773
@testset "cache" begin
774774
B = brand(10,10,2,1)
775775
A = ApplyArray(*, B, B)
776-
@test_broken cache(A).data isa BandedMatrix
776+
@test cache(A).data isa BandedMatrix
777777
C = cache(BandedMatrix,A)
778778
@test isbanded(C)
779779
@test bandwidths(C) == (4,2)

0 commit comments

Comments
 (0)