diff --git a/src/uniformscaling.jl b/src/uniformscaling.jl index 4422799f..b5874d2d 100644 --- a/src/uniformscaling.jl +++ b/src/uniformscaling.jl @@ -217,6 +217,17 @@ function (-)(J::UniformScaling{<:Complex}, A::Hermitian) return B end +function (+)(A::AdjOrTransAbsMat, J::UniformScaling) + checksquare(A) + op = wrapperop(A) + op(op(A) + op(J)) +end +function (-)(J::UniformScaling, A::AdjOrTransAbsMat) + checksquare(A) + op = wrapperop(A) + op(op(J) - op(A)) +end + function (+)(A::AbstractMatrix, J::UniformScaling) checksquare(A) B = copymutable_oftype(A, Base.promote_op(+, eltype(A), typeof(J))) diff --git a/test/uniformscaling.jl b/test/uniformscaling.jl index 21bd4b80..047848de 100644 --- a/test/uniformscaling.jl +++ b/test/uniformscaling.jl @@ -335,6 +335,19 @@ let @test @inferred(J - T) == J - Array(T) end + @testset for f in (transpose, adjoint) + if isa(A, Array) + T = f(randn(ComplexF64,3,3)) + else + T = f(view(randn(ComplexF64,3,3), 1:3, 1:3)) + end + TA = Array(T) + @test @inferred(T + J) == TA + J + @test @inferred(J + T) == J + TA + @test @inferred(T - J) == TA - J + @test @inferred(J - T) == J - TA + end + @test @inferred(I\A) == A @test @inferred(A\I) == inv(A) @test @inferred(λ\I) === UniformScaling(1/λ)