@@ -1270,6 +1270,15 @@ end
1270
1270
# Generic routines #
1271
1271
# ###################
1272
1272
1273
+ function _set_diag! (B:: UpperOrLowerTriangular , x)
1274
+ # get a mutable array to modify the diagonal
1275
+ Bm = parent (B) isa StridedArray ? B : copy! (similar (B), B)
1276
+ for i in diagind (Bm. data, IndexStyle (Bm. data))
1277
+ Bm. data[i] = x
1278
+ end
1279
+ Bm
1280
+ end
1281
+
1273
1282
for (t, unitt) in ((UpperTriangular, UnitUpperTriangular),
1274
1283
(LowerTriangular, UnitLowerTriangular))
1275
1284
tstrided = t{<: Any , <: StridedMaybeAdjOrTransMat }
@@ -1283,10 +1292,7 @@ for (t, unitt) in ((UpperTriangular, UnitUpperTriangular),
1283
1292
1284
1293
function (* )(A:: $unitt , x:: Number )
1285
1294
B = $ t (A. data)* x
1286
- for i in axes (A, 1 )
1287
- B. data[i,i] = x
1288
- end
1289
- return B
1295
+ _set_diag! (B, oneunit (eltype (A)) * x)
1290
1296
end
1291
1297
1292
1298
(* )(x:: Number , A:: $t ) = $ t (x* A. data)
@@ -1298,10 +1304,7 @@ for (t, unitt) in ((UpperTriangular, UnitUpperTriangular),
1298
1304
1299
1305
function (* )(x:: Number , A:: $unitt )
1300
1306
B = x* $ t (A. data)
1301
- for i in axes (A, 1 )
1302
- B. data[i,i] = x
1303
- end
1304
- return B
1307
+ _set_diag! (B, x * oneunit (eltype (A)))
1305
1308
end
1306
1309
1307
1310
(/ )(A:: $t , x:: Number ) = $ t (A. data/ x)
@@ -1313,11 +1316,7 @@ for (t, unitt) in ((UpperTriangular, UnitUpperTriangular),
1313
1316
1314
1317
function (/ )(A:: $unitt , x:: Number )
1315
1318
B = $ t (A. data)/ x
1316
- invx = inv (x)
1317
- for i in axes (A, 1 )
1318
- B. data[i,i] = invx
1319
- end
1320
- return B
1319
+ _set_diag! (B, oneunit (eltype (A)) / x)
1321
1320
end
1322
1321
1323
1322
(\ )(x:: Number , A:: $t ) = $ t (x\ A. data)
@@ -1329,11 +1328,7 @@ for (t, unitt) in ((UpperTriangular, UnitUpperTriangular),
1329
1328
1330
1329
function (\ )(x:: Number , A:: $unitt )
1331
1330
B = x\ $ t (A. data)
1332
- invx = inv (x)
1333
- for i in axes (A, 1 )
1334
- B. data[i,i] = invx
1335
- end
1336
- return B
1331
+ _set_diag! (B, x \ oneunit (eltype (A)))
1337
1332
end
1338
1333
end
1339
1334
end
0 commit comments