From a7d9ecbbfffa5f974e60a99f1202061f080b6198 Mon Sep 17 00:00:00 2001 From: Sheehan Olver Date: Tue, 25 Mar 2025 15:46:29 +0000 Subject: [PATCH] resizedata! for structured matrices --- ext/LazyArraysBandedMatricesExt.jl | 1 + src/cache.jl | 15 ++++++++++++++- src/lazybroadcasting.jl | 1 + 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/ext/LazyArraysBandedMatricesExt.jl b/ext/LazyArraysBandedMatricesExt.jl index 0ead6341..2b734edc 100644 --- a/ext/LazyArraysBandedMatricesExt.jl +++ b/ext/LazyArraysBandedMatricesExt.jl @@ -476,6 +476,7 @@ function resizedata!(::BandedColumns{DenseColumnMajor}, _, B::AbstractMatrix{T}, olddata = B.data ν,μ = B.datasize n,m = max(ν,n), max(μ,m) + resizedata!(B.array, n,m) # B.array might be cached too if (ν,μ) ≠ (n,m) l,u = bandwidths(B.array) diff --git a/src/cache.jl b/src/cache.jl index e252a224..ab607297 100644 --- a/src/cache.jl +++ b/src/cache.jl @@ -220,12 +220,25 @@ end resizedata!(B::CachedArray, mn...) = resizedata!(MemoryLayout(B.data), MemoryLayout(B.array), B, mn...) resizedata!(B::AbstractCachedArray, mn...) = resizedata!(MemoryLayout(B.data), UnknownLayout(), B, mn...) +resizedata!(B::SymTridiagonal, m, n) = error("hi $m $n") resizedata!(A, mn...) = A # don't do anything function resizedata!(A::AdjOrTrans, m, n) - m ≤ 0 || resizedata!(parent(A), n) + resizedata!(parent(A), n, m) A end +function resizedata!(A::UpperOrLowerTriangular, m, n) + resizedata!(parent(A), m, n) + A +end + +function resizedata!(B::BroadcastVector, n) + for a in B.args + resizedata!(a, n) + end + B +end + function cache_filldata!(B, inds...) B.data[inds...] .= view(B.array,inds...) end diff --git a/src/lazybroadcasting.jl b/src/lazybroadcasting.jl index fa4b49cb..7d124d4b 100644 --- a/src/lazybroadcasting.jl +++ b/src/lazybroadcasting.jl @@ -139,6 +139,7 @@ BroadcastStyle(::Type{<:Transpose{<:Any,<:LazyMatrix}}) = LazyArrayStyle{2}() BroadcastStyle(::Type{<:SubArray{<:Any,1,<:LazyMatrix,<:Tuple{Slice,Any}}}) = LazyArrayStyle{1}() BroadcastStyle(::Type{<:UpperOrLowerTriangular{<:Any,<:LazyMatrix}}) = LazyArrayStyle{2}() +BroadcastStyle(::Type{<:UpperOrLowerTriangular{<:Any,<:AdjOrTrans{<:Any,<:LazyMatrix}}}) = LazyArrayStyle{2}() BroadcastStyle(::Type{<:LinearAlgebra.HermOrSym{<:Any,<:LazyMatrix}}) = LazyArrayStyle{2}()