when inputs are on a CUDA device, this function synchronizes that
     device with the CPU when computing the gradients. This is checked
     when computing the gradients of this function. As such, when
     inputs are on a CUDA device, the computation of the gradients of
     this function synchronizes that device with the CPU.
Warning:
 Gradients computed using the *eigenvectors* tensor will only be
 finite when "A" has distinct eigenvalues. Furthermore, if the
 distance between any two eigenvalues is close to zero, the
 gradient will be numerically unstable, as it depends on the
 eigenvalues \lambda_i through the computation of \frac{1}{\min_{i
 \neq j} \lambda_i - \lambda_j}.

See also:
 "torch.linalg.eigvals()" computes only the eigenvalues. Unlike
 "torch.linalg.eig()", the gradients of "eigvals()" are always
 numerically stable.

 "torch.linalg.eigh()" for a (faster) function that computes the
