code: def covariance_to_correlations(covariance):
      
      diagonal_ind = np.arange(covariance.shape[1])
      diagonal_els = covariance[:, diagonal_ind, diagonal_ind]
      result = covariance / np.sqrt(diagonal_els[:, :, None] * diagonal_els[:, None, :])
      result[np.isinf(result)] = 0
      return np.clip(np.nan_to_num(result), -1, 1)
docs: Transform a covariance matrix into a correlations matrix.
  
      This can be seen as dividing a covariance matrix by the outer product of the diagonal.
  
      As post processing we replace the infinities and the NaNs with zeros and clip the result to [-1, 1].
  
      Args:
          covariance (ndarray): a matrix of shape (n, p, p) with for n problems the covariance matrix of shape (p, p).
  
      Returns:
          ndarray: the correlations matrix