Hello, I am trying to implement the function below and compute its gradient using `backward()`

, but I have an in-place operation that I cannot solve, below I show an option I tried and didn’t work.

```
def modified_gram_schmidt(A):
m, n = A.shape
Q = torch.zeros((m, n), requires_grad=True).clone()
R = torch.zeros((n, n), requires_grad=True).clone()
for j in range(n):
v = A[:, j].clone()
for i in range(j):
R[i, j] = torch.dot(Q[:, i], v)
v_prev = v.clone()
v = v_prev - torch.dot(Q[:, i], v_prev) * Q[:, i]
R[j, j] = torch.norm(v)
v = v / torch.norm(v)
Q[:, j] = v.clone()
return Q, R
```

The operation which is causing the issue is `v = v_prev - torch.dot(Q[:, i], v_prev) * Q[:, i]`

, when I try to compute the gradient by `Q.sum().backward()`

I have the error: `RuntimeError: one of the variables needed for gradient computation has been modified by an inplace operation`

. I would appreciate any help.