@@ -1323,6 +1323,15 @@ 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+
13261335for (t, unitt) in ((UpperTriangular, UnitUpperTriangular),
13271336 (LowerTriangular, UnitLowerTriangular))
13281337 tstrided = t{<: Any , <: StridedMaybeAdjOrTransMat }
@@ -1336,10 +1345,7 @@ for (t, unitt) in ((UpperTriangular, UnitUpperTriangular),
13361345
13371346 function (* )(A:: $unitt , x:: Number )
13381347 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)
13431349 end
13441350
13451351 (* )(x:: Number , A:: $t ) = $ t (x* A. data)
@@ -1351,10 +1357,7 @@ for (t, unitt) in ((UpperTriangular, UnitUpperTriangular),
13511357
13521358 function (* )(x:: Number , A:: $unitt )
13531359 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)))
13581361 end
13591362
13601363 (/ )(A:: $t , x:: Number ) = $ t (A. data/ x)
@@ -1366,11 +1369,7 @@ for (t, unitt) in ((UpperTriangular, UnitUpperTriangular),
13661369
13671370 function (/ )(A:: $unitt , x:: Number )
13681371 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)
13741373 end
13751374
13761375 (\ )(x:: Number , A:: $t ) = $ t (x\ A. data)
@@ -1382,11 +1381,7 @@ for (t, unitt) in ((UpperTriangular, UnitUpperTriangular),
13821381
13831382 function (\ )(x:: Number , A:: $unitt )
13841383 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)))
13901385 end
13911386 end
13921387end
0 commit comments