@@ -1323,6 +1323,15 @@ end
1323
1323
# Generic routines #
1324
1324
# ###################
1325
1325
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
+
1326
1335
for (t, unitt) in ((UpperTriangular, UnitUpperTriangular),
1327
1336
(LowerTriangular, UnitLowerTriangular))
1328
1337
tstrided = t{<: Any , <: StridedMaybeAdjOrTransMat }
@@ -1336,10 +1345,7 @@ for (t, unitt) in ((UpperTriangular, UnitUpperTriangular),
1336
1345
1337
1346
function (* )(A:: $unitt , x:: Number )
1338
1347
B = $ t (A. data)* x
1339
- for i in axes (A, 1 )
1340
- B. data[i,i] = x
1341
- end
1342
- return B
1348
+ _set_diag! (B, oneunit (eltype (A)) * x)
1343
1349
end
1344
1350
1345
1351
(* )(x:: Number , A:: $t ) = $ t (x* A. data)
@@ -1351,10 +1357,7 @@ for (t, unitt) in ((UpperTriangular, UnitUpperTriangular),
1351
1357
1352
1358
function (* )(x:: Number , A:: $unitt )
1353
1359
B = x* $ t (A. data)
1354
- for i in axes (A, 1 )
1355
- B. data[i,i] = x
1356
- end
1357
- return B
1360
+ _set_diag! (B, x * oneunit (eltype (A)))
1358
1361
end
1359
1362
1360
1363
(/ )(A:: $t , x:: Number ) = $ t (A. data/ x)
@@ -1366,11 +1369,7 @@ for (t, unitt) in ((UpperTriangular, UnitUpperTriangular),
1366
1369
1367
1370
function (/ )(A:: $unitt , x:: Number )
1368
1371
B = $ t (A. data)/ x
1369
- invx = inv (x)
1370
- for i in axes (A, 1 )
1371
- B. data[i,i] = invx
1372
- end
1373
- return B
1372
+ _set_diag! (B, oneunit (eltype (A)) / x)
1374
1373
end
1375
1374
1376
1375
(\ )(x:: Number , A:: $t ) = $ t (x\ A. data)
@@ -1382,11 +1381,7 @@ for (t, unitt) in ((UpperTriangular, UnitUpperTriangular),
1382
1381
1383
1382
function (\ )(x:: Number , A:: $unitt )
1384
1383
B = x\ $ t (A. data)
1385
- invx = inv (x)
1386
- for i in axes (A, 1 )
1387
- B. data[i,i] = invx
1388
- end
1389
- return B
1384
+ _set_diag! (B, x \ oneunit (eltype (A)))
1390
1385
end
1391
1386
end
1392
1387
end
0 commit comments