Skip to content

Commit b315648

Browse files
authored
Promote eltype when dividing UniformScaling by matrix (#40528)
1 parent 3428e88 commit b315648

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

stdlib/LinearAlgebra/src/uniformscaling.jl

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -265,15 +265,17 @@ end
265265
*(J::UniformScaling, x::Number) = UniformScaling(J.λ*x)
266266

267267
/(J1::UniformScaling, J2::UniformScaling) = J2.λ == 0 ? throw(SingularException(1)) : UniformScaling(J1.λ/J2.λ)
268-
/(J::UniformScaling, A::AbstractMatrix) = lmul!(J.λ, inv(A))
268+
/(J::UniformScaling, A::AbstractMatrix) =
269+
(invA = inv(A); lmul!(J.λ, convert(AbstractMatrix{promote_type(eltype(J),eltype(invA))}, invA)))
269270
/(A::AbstractMatrix, J::UniformScaling) = J.λ == 0 ? throw(SingularException(1)) : A/J.λ
270271
/(v::AbstractVector, J::UniformScaling) = reshape(v, length(v), 1) / J
271272

272273
/(J::UniformScaling, x::Number) = UniformScaling(J.λ/x)
273274

274275
\(J1::UniformScaling, J2::UniformScaling) = J1.λ == 0 ? throw(SingularException(1)) : UniformScaling(J1.λ\J2.λ)
275276
\(J::UniformScaling, A::AbstractVecOrMat) = J.λ == 0 ? throw(SingularException(1)) : J.λ\A
276-
\(A::AbstractMatrix, J::UniformScaling) = rmul!(inv(A), J.λ)
277+
\(A::AbstractMatrix, J::UniformScaling) =
278+
(invA = inv(A); rmul!(convert(AbstractMatrix{promote_type(eltype(invA),eltype(J))}, invA), J.λ))
277279
\(F::Factorization, J::UniformScaling) = F \ J(size(F,1))
278280

279281
\(x::Number, J::UniformScaling) = UniformScaling(x\J.λ)

stdlib/LinearAlgebra/test/uniformscaling.jl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -528,4 +528,12 @@ end
528528
@test sum(A - I) -3.0
529529
end
530530

531+
@testset "type promotion when dividing UniformScaling by matrix" begin
532+
A = randn(5,5)
533+
cA = complex(A)
534+
J = (5+2im)*I
535+
@test J/A J/cA
536+
@test A\J cA\J
537+
end
538+
531539
end # module TestUniformscaling

0 commit comments

Comments
 (0)