Skip to content

Commit 28c8eca

Browse files
committed
Scaling for partly initialized unit triangular
1 parent d1bf1cd commit 28c8eca

File tree

2 files changed

+22
-17
lines changed

2 files changed

+22
-17
lines changed

src/triangular.jl

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1323,15 +1323,6 @@ end
13231323
# Generic routines #
13241324
####################
13251325

1326-
function _set_diag!(B::UpperOrLowerTriangular, x)
1327-
# get a mutable array to modify the diagonal
1328-
Bm = parent(B) isa StridedArray ? B : copy!(similar(B), B)
1329-
for i in diagind(Bm.data, IndexStyle(Bm.data))
1330-
Bm.data[i] = x
1331-
end
1332-
Bm
1333-
end
1334-
13351326
for (t, unitt) in ((UpperTriangular, UnitUpperTriangular),
13361327
(LowerTriangular, UnitLowerTriangular))
13371328
tstrided = t{<:Any, <:StridedMaybeAdjOrTransMat}
@@ -1344,8 +1335,8 @@ for (t, unitt) in ((UpperTriangular, UnitUpperTriangular),
13441335
end
13451336

13461337
function (*)(A::$unitt, x::Number)
1347-
B = $t(A.data)*x
1348-
_set_diag!(B, oneunit(eltype(A)) * x)
1338+
B = copy!(similar($t(A.data)), A)
1339+
B * x
13491340
end
13501341

13511342
(*)(x::Number, A::$t) = $t(x*A.data)
@@ -1356,8 +1347,8 @@ for (t, unitt) in ((UpperTriangular, UnitUpperTriangular),
13561347
end
13571348

13581349
function (*)(x::Number, A::$unitt)
1359-
B = x*$t(A.data)
1360-
_set_diag!(B, x * oneunit(eltype(A)))
1350+
B = copy!(similar($t(A.data)), A)
1351+
x * B
13611352
end
13621353

13631354
(/)(A::$t, x::Number) = $t(A.data/x)
@@ -1368,8 +1359,8 @@ for (t, unitt) in ((UpperTriangular, UnitUpperTriangular),
13681359
end
13691360

13701361
function (/)(A::$unitt, x::Number)
1371-
B = $t(A.data)/x
1372-
_set_diag!(B, oneunit(eltype(A)) / x)
1362+
B = copy!(similar($t(A.data)), A)
1363+
B / x
13731364
end
13741365

13751366
(\)(x::Number, A::$t) = $t(x\A.data)
@@ -1380,8 +1371,8 @@ for (t, unitt) in ((UpperTriangular, UnitUpperTriangular),
13801371
end
13811372

13821373
function (\)(x::Number, A::$unitt)
1383-
B = x\$t(A.data)
1384-
_set_diag!(B, x \ oneunit(eltype(A)))
1374+
B = copy!(similar($t(A.data)), A)
1375+
x \ B
13851376
end
13861377
end
13871378
end

test/triangular.jl

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -944,4 +944,18 @@ end
944944
@test 2*U == 2*M
945945
end
946946

947+
@testset "scaling partly initialized unit triangular" begin
948+
for T in (UnitUpperTriangular, UnitLowerTriangular)
949+
isupper = T == UnitUpperTriangular
950+
M = Matrix{BigFloat}(undef,2,2)
951+
M[1+!isupper, 1+isupper] = 3
952+
U = T(M)
953+
C = Matrix(U)
954+
@test U * 2 == C * 2
955+
@test 2 * U == 2 * C
956+
@test U / 2 == C / 2
957+
@test 2 \ U == 2 \ C
958+
end
959+
end
960+
947961
end # module TestTriangular

0 commit comments

Comments
 (0)