@@ -1270,6 +1270,15 @@ end
12701270# Generic routines #
12711271# ###################
12721272
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+
12731282for (t, unitt) in ((UpperTriangular, UnitUpperTriangular),
12741283 (LowerTriangular, UnitLowerTriangular))
12751284 tstrided = t{<: Any , <: StridedMaybeAdjOrTransMat }
@@ -1283,10 +1292,7 @@ for (t, unitt) in ((UpperTriangular, UnitUpperTriangular),
12831292
12841293 function (* )(A:: $unitt , x:: Number )
12851294 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)
12901296 end
12911297
12921298 (* )(x:: Number , A:: $t ) = $ t (x* A. data)
@@ -1298,10 +1304,7 @@ for (t, unitt) in ((UpperTriangular, UnitUpperTriangular),
12981304
12991305 function (* )(x:: Number , A:: $unitt )
13001306 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)))
13051308 end
13061309
13071310 (/ )(A:: $t , x:: Number ) = $ t (A. data/ x)
@@ -1313,11 +1316,7 @@ for (t, unitt) in ((UpperTriangular, UnitUpperTriangular),
13131316
13141317 function (/ )(A:: $unitt , x:: Number )
13151318 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)
13211320 end
13221321
13231322 (\ )(x:: Number , A:: $t ) = $ t (x\ A. data)
@@ -1329,11 +1328,7 @@ for (t, unitt) in ((UpperTriangular, UnitUpperTriangular),
13291328
13301329 function (\ )(x:: Number , A:: $unitt )
13311330 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)))
13371332 end
13381333 end
13391334end
0 commit comments