Skip to content

rmul!(A::UnitUpperTriangular, D::Diagonal) cannot change A to be the result #1600

@mcabbott

Description

@mcabbott

Bug noted here exists at least since v1.6.7 (edit: with latest code added by #1228):

julia> using LinearAlgebra

julia> A = UnitUpperTriangular([1 0; 0 1])
2×2 UnitUpperTriangular{Int64, Matrix{Int64}}:
 1  0
   1

julia> rmul!(A, Diagonal([2,3]))
2×2 UpperTriangular{Int64, Matrix{Int64}}:
 2  0
   3

julia> A
2×2 UnitUpperTriangular{Int64, Matrix{Int64}}:
 1  0
   1

julia> @which rmul!(A, Diagonal([2,3]))
rmul!(A::UnitUpperTriangular{<:Any, <:StridedMatrix{T} where T}, D::Diagonal)
     @ LinearAlgebra ~/.julia/juliaup/julia-1.13.0-rc1+0.aarch64.apple.darwin14/Julia-1.13.app/Contents/Resources/julia/share/julia/stdlib/v1.13/LinearAlgebra/src/diagonal.jl:388

Clearer version -- A.data is in fact mutated, but the diagonal of A does not (and cannot) take the mathematically correct value:

julia> A = UnitUpperTriangular([10 10; 10 10])
2×2 UnitUpperTriangular{Int64, Matrix{Int64}}:
 1  10
    1

julia> rmul!(A, Diagonal([2,3]))
2×2 UpperTriangular{Int64, Matrix{Int64}}:
 2  30
    3

julia> A
2×2 UnitUpperTriangular{Int64, Matrix{Int64}}:
 1  30
    1

julia> A.data
2×2 Matrix{Int64}:
  2  30
 10   3

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions