From 33f51d0876e9254275148dbc5accfde43d60fc18 Mon Sep 17 00:00:00 2001 From: Jishnu Bhattacharya Date: Wed, 12 Mar 2025 16:51:58 +0530 Subject: [PATCH 1/2] Broadcast operations for arbitrary styles --- Project.toml | 2 +- src/fillbroadcast.jl | 26 +++++++++++++------------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Project.toml b/Project.toml index d0d3e609..6a51fba7 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "FillArrays" uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" -version = "1.14.0" +version = "1.15.0" [deps] LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" diff --git a/src/fillbroadcast.jl b/src/fillbroadcast.jl index 2b5ea59c..9e47681b 100644 --- a/src/fillbroadcast.jl +++ b/src/fillbroadcast.jl @@ -79,16 +79,16 @@ function broadcasted(::DefaultArrayStyle{N}, op, r::AbstractFill{T,N}) where {T, return Fill(op(getindex_value(r)), axes(r)) end -broadcasted(::DefaultArrayStyle, ::typeof(+), r::AbstractZeros) = r -broadcasted(::DefaultArrayStyle, ::typeof(-), r::AbstractZeros) = r -broadcasted(::DefaultArrayStyle, ::typeof(+), r::AbstractOnes) = r +broadcasted(::typeof(+), r::AbstractZeros) = r +broadcasted(::typeof(-), r::AbstractZeros) = r +broadcasted(::typeof(+), r::AbstractOnes) = r -broadcasted(::DefaultArrayStyle{N}, ::typeof(conj), r::AbstractZeros{T,N}) where {T,N} = r -broadcasted(::DefaultArrayStyle{N}, ::typeof(conj), r::AbstractOnes{T,N}) where {T,N} = r -broadcasted(::DefaultArrayStyle{N}, ::typeof(real), r::AbstractZeros{T,N}) where {T,N} = Zeros{real(T)}(axes(r)) -broadcasted(::DefaultArrayStyle{N}, ::typeof(real), r::AbstractOnes{T,N}) where {T,N} = Ones{real(T)}(axes(r)) -broadcasted(::DefaultArrayStyle{N}, ::typeof(imag), r::AbstractZeros{T,N}) where {T,N} = Zeros{real(T)}(axes(r)) -broadcasted(::DefaultArrayStyle{N}, ::typeof(imag), r::AbstractOnes{T,N}) where {T,N} = Zeros{real(T)}(axes(r)) +broadcasted(::typeof(conj), r::AbstractZeros{T,N}) where {T,N} = r +broadcasted(::typeof(conj), r::AbstractOnes{T,N}) where {T,N} = r +broadcasted(::typeof(real), r::AbstractZeros{T,N}) where {T,N} = Zeros{real(T)}(axes(r)) +broadcasted(::typeof(real), r::AbstractOnes{T,N}) where {T,N} = Ones{real(T)}(axes(r)) +broadcasted(::typeof(imag), r::AbstractZeros{T,N}) where {T,N} = Zeros{real(T)}(axes(r)) +broadcasted(::typeof(imag), r::AbstractOnes{T,N}) where {T,N} = Zeros{real(T)}(axes(r)) ### Binary broadcasting @@ -260,10 +260,10 @@ broadcasted(::DefaultArrayStyle{N}, op, r::AbstractFill{T,N}, x::Ref) where {T,N broadcasted(::DefaultArrayStyle{N}, op, x::Ref, r::AbstractFill{T,N}) where {T,N} = broadcasted_fill(op, r, op(x[], getindex_value(r)), axes(r)) # support AbstractFill .^ k -broadcasted(::DefaultArrayStyle{N}, op::typeof(Base.literal_pow), ::Base.RefValue{typeof(^)}, r::AbstractFill{T,N}, ::Base.RefValue{Val{k}}) where {T,N,k} = broadcasted_fill(op, r, getindex_value(r)^k, axes(r)) -broadcasted(::DefaultArrayStyle{N}, op::typeof(Base.literal_pow), ::Base.RefValue{typeof(^)}, r::AbstractOnes{T,N}, ::Base.RefValue{Val{k}}) where {T,N,k} = broadcasted_ones(op, r, T, axes(r)) -broadcasted(::DefaultArrayStyle{N}, op::typeof(Base.literal_pow), ::Base.RefValue{typeof(^)}, r::AbstractZeros{T,N}, ::Base.RefValue{Val{0}}) where {T,N} = broadcasted_ones(op, r, T, axes(r)) -broadcasted(::DefaultArrayStyle{N}, op::typeof(Base.literal_pow), ::Base.RefValue{typeof(^)}, r::AbstractZeros{T,N}, ::Base.RefValue{Val{k}}) where {T,N,k} = broadcasted_zeros(op, r, T, axes(r)) +broadcasted(op::typeof(Base.literal_pow), ::typeof(^), r::AbstractFill{T,N}, ::Val{k}) where {T,N,k} = broadcasted_fill(op, r, getindex_value(r)^k, axes(r)) +broadcasted(op::typeof(Base.literal_pow), ::typeof(^), r::AbstractOnes{T,N}, ::Val{k}) where {T,N,k} = broadcasted_ones(op, r, T, axes(r)) +broadcasted(op::typeof(Base.literal_pow), ::typeof(^), r::AbstractZeros{T,N}, ::Val{0}) where {T,N} = broadcasted_ones(op, r, T, axes(r)) +broadcasted(op::typeof(Base.literal_pow), ::typeof(^), r::AbstractZeros{T,N}, ::Val{k}) where {T,N,k} = broadcasted_zeros(op, r, T, axes(r)) # supports structured broadcast if isdefined(LinearAlgebra, :fzero) From c2deb57f66afde68b3282506c7cc146773e77ab3 Mon Sep 17 00:00:00 2001 From: Jishnu Bhattacharya Date: Wed, 12 Mar 2025 23:02:42 +0530 Subject: [PATCH 2/2] Add/subtract AbstractZeros --- src/fillbroadcast.jl | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/fillbroadcast.jl b/src/fillbroadcast.jl index 9e47681b..e5f74c2f 100644 --- a/src/fillbroadcast.jl +++ b/src/fillbroadcast.jl @@ -122,13 +122,13 @@ function _broadcasted_nan(f, a, b) return broadcasted_fill(f, a, b, val, ax) end -broadcasted(::DefaultArrayStyle, ::typeof(+), a::AbstractZeros, b::AbstractZeros) = _broadcasted_zeros(+, a, b) -broadcasted(::DefaultArrayStyle, ::typeof(+), a::AbstractOnes, b::AbstractZeros) = _broadcasted_ones(+, a, b) -broadcasted(::DefaultArrayStyle, ::typeof(+), a::AbstractZeros, b::AbstractOnes) = _broadcasted_ones(+, a, b) +broadcasted(::typeof(+), a::AbstractZeros, b::AbstractZeros) = _broadcasted_zeros(+, a, b) +broadcasted(::typeof(+), a::AbstractOnes, b::AbstractZeros) = _broadcasted_ones(+, a, b) +broadcasted(::typeof(+), a::AbstractZeros, b::AbstractOnes) = _broadcasted_ones(+, a, b) -broadcasted(::DefaultArrayStyle, ::typeof(-), a::AbstractZeros, b::AbstractZeros) = _broadcasted_zeros(-, a, b) -broadcasted(::DefaultArrayStyle, ::typeof(-), a::AbstractOnes, b::AbstractZeros) = _broadcasted_ones(-, a, b) -broadcasted(::DefaultArrayStyle, ::typeof(-), a::AbstractOnes, b::AbstractOnes) = _broadcasted_zeros(-, a, b) +broadcasted(::typeof(-), a::AbstractZeros, b::AbstractZeros) = _broadcasted_zeros(-, a, b) +broadcasted(::typeof(-), a::AbstractOnes, b::AbstractZeros) = _broadcasted_ones(-, a, b) +broadcasted(::typeof(-), a::AbstractOnes, b::AbstractOnes) = _broadcasted_zeros(-, a, b) broadcasted(::DefaultArrayStyle{1}, ::typeof(+), a::AbstractZerosVector, b::AbstractZerosVector) = _broadcasted_zeros(+, a, b) broadcasted(::DefaultArrayStyle{1}, ::typeof(+), a::AbstractOnesVector, b::AbstractZerosVector) = _broadcasted_ones(+, a, b)