From 0d4c0fed875b9e3c0842ad943052c0411ead709d Mon Sep 17 00:00:00 2001 From: Jishnu Bhattacharya Date: Thu, 29 Jun 2023 23:51:53 +0530 Subject: [PATCH 1/2] diag for Eye --- Project.toml | 2 +- src/FillArrays.jl | 6 ++++++ test/runtests.jl | 7 +++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 44a5e5e8..c4182cfd 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "FillArrays" uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" -version = "1.2.1" +version = "1.3.0" [deps] LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" diff --git a/src/FillArrays.jl b/src/FillArrays.jl index af3ee9af..f1cd83bc 100644 --- a/src/FillArrays.jl +++ b/src/FillArrays.jl @@ -434,6 +434,12 @@ const Eye{T,Axes} = RectOrDiagonal{T,Ones{T,1,Tuple{Axes}}} isone(::SquareEye) = true +function LinearAlgebra.diag(E::Eye, k::Integer=0) + v = k == 0 ? oneunit(eltype(E)) : zero(eltype(E)) + len = length(diagind(E, k)) + Fill(v, len) +end + # These should actually be in StdLib, LinearAlgebra.jl, for all Diagonal for f in (:permutedims, :triu, :triu!, :tril, :tril!, :copy) @eval ($f)(IM::Diagonal{<:Any,<:AbstractFill}) = IM diff --git a/test/runtests.jl b/test/runtests.jl index df8d25db..22a0d2c6 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -470,6 +470,13 @@ end @test Diagonal(Eye(8,5)) == Diagonal(ones(5)) @test convert(Diagonal, Eye(5)) == Diagonal(ones(5)) @test convert(Diagonal{Int}, Eye(5)) == Diagonal(ones(Int,5)) + + for E in (Eye(2,4), Eye(3)) + M = collect(E) + for i in -5:5 + @test diag(E, i) == diag(M, i) + end + end end @testset "one" begin From 19b2292879977ca53543b6e84eea079dc41d5448 Mon Sep 17 00:00:00 2001 From: Jishnu Bhattacharya Date: Fri, 30 Jun 2023 11:34:02 +0530 Subject: [PATCH 2/2] namespace --- src/FillArrays.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/FillArrays.jl b/src/FillArrays.jl index f1cd83bc..5ba58b82 100644 --- a/src/FillArrays.jl +++ b/src/FillArrays.jl @@ -434,7 +434,7 @@ const Eye{T,Axes} = RectOrDiagonal{T,Ones{T,1,Tuple{Axes}}} isone(::SquareEye) = true -function LinearAlgebra.diag(E::Eye, k::Integer=0) +function diag(E::Eye, k::Integer=0) v = k == 0 ? oneunit(eltype(E)) : zero(eltype(E)) len = length(diagind(E, k)) Fill(v, len)