Okay, I get it now. It is actually pretty neat that you can do that. However, Iâ€™m wondering how much of a speedup it is relative to something like

```
X = [ones(n) randn(n,k)]
F = cholfact(X'X)
diag(inv(F)) .* sum(abs2, UpperTriangular(F.factors), 1)[:]
```

which will probably traverse memory in more friendly patterns. To test it, I wrote this implementation which can only compute a single rotation given a `Cholesky`

```
function _circshiftchol!(C::Cholesky)
n = size(C, 1)
CC = C.factors
if C.uplo == 'U'
# Loop over rows of CC
@inbounds for i in 1:n - 1
# Set active column
k = i + 1
# Compute givens rotation
G, r = givens(CC[i, k], CC[i + 1, k], 1, 2)
# Set value in active column
CC[i, k] = r
CC[i + 1, k] = 0 # not strictly required
# Apply rotation to columns to the right
@simd for j in i + 2:n
cij = CC[i , j]
ci1j = CC[i + 1, j]
CC[i, j] = G.c*cij + G.s*ci1j
CC[i + 1, j] = -G.s*cij + G.c*ci1j
end
# Apply rotation to left column (where lower element is zero)
cij = CC[i, 1]
CC[i , 1] = G.c*cij
CC[i + 1, 1] = -G.s*cij
end
end
return CC
end
```

but the simple one-liner seems to be faster.