From 4ea8c8974c9713bc51c4a0e01c30aa2de1ad39b5 Mon Sep 17 00:00:00 2001 From: Sheehan Olver Date: Tue, 28 Mar 2023 15:00:14 +0100 Subject: [PATCH 1/3] Structured Broadcasting --- src/fillbroadcast.jl | 3 +++ test/runtests.jl | 13 +++++++++++++ 2 files changed, 16 insertions(+) diff --git a/src/fillbroadcast.jl b/src/fillbroadcast.jl index 574fb145..8a3dca60 100644 --- a/src/fillbroadcast.jl +++ b/src/fillbroadcast.jl @@ -247,3 +247,6 @@ broadcasted(::DefaultArrayStyle{N}, ::typeof(Base.literal_pow), ::Base.RefValue{ broadcasted(::DefaultArrayStyle{N}, ::typeof(Base.literal_pow), ::Base.RefValue{typeof(^)}, r::Ones{T,N}, ::Base.RefValue{Val{k}}) where {T,N,k} = Ones{T}(axes(r)) broadcasted(::DefaultArrayStyle{N}, ::typeof(Base.literal_pow), ::Base.RefValue{typeof(^)}, r::Zeros{T,N}, ::Base.RefValue{Val{0}}) where {T,N} = Ones{T}(axes(r)) broadcasted(::DefaultArrayStyle{N}, ::typeof(Base.literal_pow), ::Base.RefValue{typeof(^)}, r::Zeros{T,N}, ::Base.RefValue{Val{k}}) where {T,N,k} = Zeros{T}(axes(r)) + +# supports structured broadcast +LinearAlgebra.fzero(x::Zeros) = zero(eltype(x)) \ No newline at end of file diff --git a/test/runtests.jl b/test/runtests.jl index 81ba61c5..6603068d 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -1469,3 +1469,16 @@ end @test cor(Fill(3, 4, 5)) ≈ cor(fill(3, 4, 5)) nans=true @test cor(Fill(3, 4, 5), dims=2) ≈ cor(fill(3, 4, 5), dims=2) nans=true end + +@testset "Structured broadcast" begin + D = Diagonal(1:5) + @test D + Zeros(5,5) isa Diagonal + @test D - Zeros(5,5) isa Diagonal + @test Zeros(5,5) - D isa Diagonal + @test Zeros(5,5) + D isa Diagonal + f = (x,y) -> x+1 + @test f.(D, Zeros(5,5)) isa Matrix + + S = Symmetric(randn(5,5)) + S + Zeros(5,5) +end \ No newline at end of file From 1ac267883057973ff230f230e4ed44c437c7361f Mon Sep 17 00:00:00 2001 From: Sheehan Olver Date: Tue, 28 Mar 2023 15:16:43 +0100 Subject: [PATCH 2/3] add jishnubs tests --- Project.toml | 2 +- src/fillbroadcast.jl | 4 +++- test/runtests.jl | 5 ++--- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/Project.toml b/Project.toml index 0d75506b..5ad72414 100644 --- a/Project.toml +++ b/Project.toml @@ -9,7 +9,7 @@ SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" [compat] -Aqua = "0.5" +Aqua = "0.5, 0.6" julia = "1.6" [extras] diff --git a/src/fillbroadcast.jl b/src/fillbroadcast.jl index 8a3dca60..1cd24010 100644 --- a/src/fillbroadcast.jl +++ b/src/fillbroadcast.jl @@ -249,4 +249,6 @@ broadcasted(::DefaultArrayStyle{N}, ::typeof(Base.literal_pow), ::Base.RefValue{ broadcasted(::DefaultArrayStyle{N}, ::typeof(Base.literal_pow), ::Base.RefValue{typeof(^)}, r::Zeros{T,N}, ::Base.RefValue{Val{k}}) where {T,N,k} = Zeros{T}(axes(r)) # supports structured broadcast -LinearAlgebra.fzero(x::Zeros) = zero(eltype(x)) \ No newline at end of file +if isdefined(LinearAlgebra, :fzero) + LinearAlgebra.fzero(x::Zeros) = zero(eltype(x)) +end \ No newline at end of file diff --git a/test/runtests.jl b/test/runtests.jl index 6603068d..d49e6084 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -1474,11 +1474,10 @@ end D = Diagonal(1:5) @test D + Zeros(5,5) isa Diagonal @test D - Zeros(5,5) isa Diagonal + @test D .* Zeros(5,5) isa Diagonal + @test Zeros(5,5) .* D isa Diagonal @test Zeros(5,5) - D isa Diagonal @test Zeros(5,5) + D isa Diagonal f = (x,y) -> x+1 @test f.(D, Zeros(5,5)) isa Matrix - - S = Symmetric(randn(5,5)) - S + Zeros(5,5) end \ No newline at end of file From a955f696ded5aeace93793c21fec5f39caaf1d45 Mon Sep 17 00:00:00 2001 From: Sheehan Olver Date: Tue, 28 Mar 2023 15:22:46 +0100 Subject: [PATCH 3/3] Update runtests.jl --- test/runtests.jl | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test/runtests.jl b/test/runtests.jl index d49e6084..90c970f2 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -1474,10 +1474,14 @@ end D = Diagonal(1:5) @test D + Zeros(5,5) isa Diagonal @test D - Zeros(5,5) isa Diagonal + @test D .+ Zeros(5,5) isa Diagonal + @test D .- Zeros(5,5) isa Diagonal @test D .* Zeros(5,5) isa Diagonal @test Zeros(5,5) .* D isa Diagonal @test Zeros(5,5) - D isa Diagonal - @test Zeros(5,5) + D isa Diagonal + @test Zeros(5,5) + D isa Diagonal + @test Zeros(5,5) .- D isa Diagonal + @test Zeros(5,5) .+ D isa Diagonal f = (x,y) -> x+1 @test f.(D, Zeros(5,5)) isa Matrix end \ No newline at end of file