diff --git a/NEWS.md b/NEWS.md index 2ff503e4978ea..8343a2bab04c8 100644 --- a/NEWS.md +++ b/NEWS.md @@ -81,6 +81,7 @@ Standard library changes * New method `LinearAlgebra.issuccess(::CholeskyPivoted)` for checking whether pivoted Cholesky factorization was successful ([#36002]). * `UniformScaling` can now be indexed into using ranges to return dense matrices and vectors ([#24359]). * New function `LinearAlgebra.BLAS.get_num_threads()` for getting the number of BLAS threads. ([#36360]) +* `(+)(::UniformScaling)` is now defined, making `+I` a valid unary operation. ([#36784]) #### Markdown diff --git a/stdlib/LinearAlgebra/src/uniformscaling.jl b/stdlib/LinearAlgebra/src/uniformscaling.jl index 5afc778a7d18b..776d63854c2c5 100644 --- a/stdlib/LinearAlgebra/src/uniformscaling.jl +++ b/stdlib/LinearAlgebra/src/uniformscaling.jl @@ -147,6 +147,7 @@ isposdef(J::UniformScaling) = isposdef(J.λ) (-)(J::UniformScaling, x::Number) = J.λ - x (-)(x::Number, J::UniformScaling) = x - J.λ +(+)(J::UniformScaling) = UniformScaling(+J.λ) (+)(J1::UniformScaling, J2::UniformScaling) = UniformScaling(J1.λ+J2.λ) (+)(B::BitArray{2}, J::UniformScaling) = Array(B) + J (+)(J::UniformScaling, B::BitArray{2}) = J + Array(B) diff --git a/stdlib/LinearAlgebra/test/uniformscaling.jl b/stdlib/LinearAlgebra/test/uniformscaling.jl index 5c2fb17bc012f..726a7191484f3 100644 --- a/stdlib/LinearAlgebra/test/uniformscaling.jl +++ b/stdlib/LinearAlgebra/test/uniformscaling.jl @@ -153,6 +153,11 @@ end @test (α * I) .^ β == UniformScaling(α^β) end +@testset "unary" begin + @test +I === +1*I + @test -I === -1*I +end + @testset "tr, det and logdet" begin for T in (Int, Float64, ComplexF64, Bool) @test tr(UniformScaling(zero(T))) === zero(T)