From 36dfacdd98a18f376aff62fe32252aaeaf3d49f9 Mon Sep 17 00:00:00 2001 From: Sheehan Olver Date: Fri, 6 Jun 2025 11:05:55 +0100 Subject: [PATCH 1/2] Support overloading broadcast style for lazy block arrays --- Project.toml | 2 +- src/blockbroadcast.jl | 11 +++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/Project.toml b/Project.toml index edf66627..1935c38a 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "BlockArrays" uuid = "8e7c35d0-a365-5155-bbbb-fb81a777f24e" -version = "1.6.3" +version = "1.7.0" [deps] ArrayLayouts = "4c555306-a7a7-4459-81d9-ec55ddd5c99a" diff --git a/src/blockbroadcast.jl b/src/blockbroadcast.jl index d9a892f3..b3d415ad 100644 --- a/src/blockbroadcast.jl +++ b/src/blockbroadcast.jl @@ -15,10 +15,13 @@ BlockStyle(::Val{N}) where {N} = BlockStyle{N}() BlockedStyle(::Val{N}) where {N} = BlockedStyle{N}() BlockStyle{M}(::Val{N}) where {N,M} = BlockStyle{N}() BlockedStyle{M}(::Val{N}) where {N,M} = BlockedStyle{N}() -BroadcastStyle(::Type{<:BlockArray{<:Any,N}}) where {N} = BlockStyle{N}() -BroadcastStyle(::Type{<:BlockedArray{<:Any,N}}) where {N} = BlockedStyle{N}() -BroadcastStyle(::Type{<:AdjOrTrans{<:Any,<:BlockArray{<:Any,N}}}) where {N} = BlockStyle{2}() -BroadcastStyle(::Type{<:AdjOrTrans{<:Any,<:BlockedArray{<:Any,N}}}) where {N} = BlockedStyle{2}() +blockbroadcaststyle(::AbstractArrayStyle{N}) where {N} = BlockStyle{N}() +blockedbroadcaststyle(::AbstractArrayStyle{N}) where {N} = BlockedStyle{N}() + +BroadcastStyle(::Type{<:BlockArray{<:Any,N,Blocks}}) where {N,Blocks} = blockbroadcaststyle(BroadcastStyle(Blocks)) +BroadcastStyle(::Type{<:BlockedArray{<:Any,N,Blocks}}) where {N,Blocks} = blockedbroadcaststyle(BroadcastStyle(Blocks)) +BroadcastStyle(::Type{<:AdjOrTrans{<:Any,<:BlockArray{<:Any,N,Blocks}}}) where {N,Blocks} = blockbroadcaststyle(BroadcastStyle(Blocks)) +BroadcastStyle(::Type{<:AdjOrTrans{<:Any,<:BlockedArray{<:Any,N,Blocks}}}) where {N,Blocks} = blockedbroadcaststyle(BroadcastStyle(Blocks)) BroadcastStyle(::DefaultArrayStyle{N}, b::AbstractBlockStyle{M}) where {M,N} = typeof(b)(Val(max(M,N))) BroadcastStyle(a::AbstractBlockStyle{N}, ::DefaultArrayStyle{M}) where {M,N} = typeof(a)(Val(max(M,N))) From c5242c7b8abeea28d4eb88fc25c5888388111994 Mon Sep 17 00:00:00 2001 From: Sheehan Olver Date: Mon, 9 Jun 2025 09:38:55 +0100 Subject: [PATCH 2/2] Update blockbroadcast.jl --- src/blockbroadcast.jl | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/blockbroadcast.jl b/src/blockbroadcast.jl index b3d415ad..0c645817 100644 --- a/src/blockbroadcast.jl +++ b/src/blockbroadcast.jl @@ -20,8 +20,10 @@ blockedbroadcaststyle(::AbstractArrayStyle{N}) where {N} = BlockedStyle{N}() BroadcastStyle(::Type{<:BlockArray{<:Any,N,Blocks}}) where {N,Blocks} = blockbroadcaststyle(BroadcastStyle(Blocks)) BroadcastStyle(::Type{<:BlockedArray{<:Any,N,Blocks}}) where {N,Blocks} = blockedbroadcaststyle(BroadcastStyle(Blocks)) -BroadcastStyle(::Type{<:AdjOrTrans{<:Any,<:BlockArray{<:Any,N,Blocks}}}) where {N,Blocks} = blockbroadcaststyle(BroadcastStyle(Blocks)) -BroadcastStyle(::Type{<:AdjOrTrans{<:Any,<:BlockedArray{<:Any,N,Blocks}}}) where {N,Blocks} = blockedbroadcaststyle(BroadcastStyle(Blocks)) +BroadcastStyle(::Type{<:Adjoint{T,<:BlockArray{<:Any,N,Blocks}}}) where {T,N,Blocks} = blockbroadcaststyle(BroadcastStyle(Adjoint{T,Blocks})) +BroadcastStyle(::Type{<:Transpose{T,<:BlockArray{<:Any,N,Blocks}}}) where {T,N,Blocks} = blockbroadcaststyle(BroadcastStyle(Transpose{T,Blocks})) +BroadcastStyle(::Type{<:Adjoint{T,<:BlockedArray{<:Any,N,Blocks}}}) where {T,N,Blocks} = blockedbroadcaststyle(BroadcastStyle(Adjoint{T,Blocks})) +BroadcastStyle(::Type{<:Transpose{T,<:BlockedArray{<:Any,N,Blocks}}}) where {T,N,Blocks} = blockedbroadcaststyle(BroadcastStyle(Transpose{T,Blocks})) BroadcastStyle(::DefaultArrayStyle{N}, b::AbstractBlockStyle{M}) where {M,N} = typeof(b)(Val(max(M,N))) BroadcastStyle(a::AbstractBlockStyle{N}, ::DefaultArrayStyle{M}) where {M,N} = typeof(a)(Val(max(M,N)))