Skip to content

Commit 72cc31b

Browse files
authored
Generalize BandedLazyLayouts (#364)
* Generalize BandedLazyLayouts * Update Project.toml * Update LazyArraysBandedMatricesExt.jl * default vcat resizedata! * Update concattests.jl
1 parent 7810cf5 commit 72cc31b

File tree

4 files changed

+14
-8
lines changed

4 files changed

+14
-8
lines changed

Project.toml

+1-1
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.5.1"
3+
version = "2.5.2"
44

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

ext/LazyArraysBandedMatricesExt.jl

+6-7
Original file line numberDiff line numberDiff line change
@@ -453,7 +453,7 @@ CachedArray(::Type{BandedMatrix}, matrix::AbstractMatrix{T}) where T = CachedArr
453453
bandwidths(B::CachedMatrix) = bandwidths(B.data)
454454
isbanded(B::CachedMatrix) = isbanded(B.data)
455455

456-
cache_layout(::BandedLayouts, A::AbstractMatrix{T}) where T = CachedArray(BandedMatrix{T}(undef, (0,0), bandwidths(A)), A)
456+
cache_layout(::BandedLayouts, A::AbstractMatrix) = CachedArray(BandedMatrix{eltype(A)}(undef, (0,0), bandwidths(A)), A)
457457

458458
function bandeddata(A::CachedMatrix)
459459
resizedata!(A, size(A)...)
@@ -537,12 +537,11 @@ bandeddata(R::ApplyMatrix{<:Any,typeof(rot180)}) = @view(bandeddata(arguments(R)
537537
# overload copy as overloading `mulreduce` requires `copyto!` overloads
538538
# Should probably be redesigned in a trait-based way, but hard to see how to do this
539539

540-
const BandedLazyLayouts = Union{AbstractLazyBandedLayout, BandedColumns{LazyLayout}, BandedRows{LazyLayout},
541-
TriangularLayout{UPLO,UNIT,BandedRows{LazyLayout}} where {UPLO,UNIT},
542-
TriangularLayout{UPLO,UNIT,BandedColumns{LazyLayout}} where {UPLO,UNIT},
543-
TriangularLayout{UPLO,UNIT,LazyBandedLayout} where {UPLO,UNIT},
544-
SymTridiagonalLayout{LazyLayout}, BidiagonalLayout{LazyLayout}, TridiagonalLayout{LazyLayout},
545-
SymmetricLayout{BandedColumns{LazyLayout}}, HermitianLayout{BandedColumns{LazyLayout}}}
540+
const BandedLazyLayouts = Union{AbstractLazyBandedLayout, BandedColumns{<:AbstractLazyLayout}, BandedRows{<:AbstractLazyLayout},
541+
StructuredLayoutTypes{<:AbstractLazyBandedLayout},
542+
StructuredLayoutTypes{<:BandedColumns{<:AbstractLazyLayout}},
543+
StructuredLayoutTypes{<:BandedRows{<:AbstractLazyLayout}},
544+
SymTridiagonalLayout{<:AbstractLazyLayout}, BidiagonalLayout{<:AbstractLazyLayout}, TridiagonalLayout{<:AbstractLazyLayout}}
546545

547546
@inline islazy_layout(::BandedLazyLayouts) = Val(true)
548547

src/padded.jl

+2
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,8 @@ function _vcat_resizedata!(::Union{AbstractPaddedLayout, DualLayout{<:PaddedRows
116116
B
117117
end
118118

119+
_vcat_resizedata!(_, B, m...) = B # by default we can't resize
120+
119121
resizedata!(B::Vcat, m...) = _vcat_resizedata!(MemoryLayout(B), B, m...)
120122

121123
function ==(A::CachedVector{<:Any,<:Any,<:Zeros}, B::CachedVector{<:Any,<:Any,<:Zeros})

test/concattests.jl

+5
Original file line numberDiff line numberDiff line change
@@ -657,6 +657,11 @@ import LazyArrays: MemoryLayout, DenseColumnMajor, materialize!, call, paddeddat
657657
A = Vcat([1 2 3], [4 5 6])
658658
@test A[2:-1:1,1:-1:1] == [4; 1 ;;]
659659
end
660+
661+
@testset "resizedata! for non-cached" begin
662+
A = @inferred(Vcat(1:10, 1:20))
663+
@test resizedata!(A, 3) A
664+
end
660665
end
661666

662667
end # module

0 commit comments

Comments
 (0)