code: def compute_von_neumann_entropy(data, t_max=100):
      
      _, eigenvalues, _ = svd(data)
      entropy = []
      eigenvalues_t = np.copy(eigenvalues)
      for _ in range(t_max):
          prob = eigenvalues_t / np.sum(eigenvalues_t)
          prob = prob + np.finfo(float).eps
          entropy.append(-np.sum(prob * np.log(prob)))
          eigenvalues_t = eigenvalues_t * eigenvalues
      entropy = np.array(entropy)
  
      return np.array(entropy)
docs: Determines the Von Neumann entropy of data
      at varying matrix powers. The user should select a value of t
      around the "knee" of the entropy curve.
  
      Parameters
      ----------
      t_max : int, default: 100
          Maximum value of t to test
  
      Returns
      -------
      entropy : array, shape=[t_max]
          The entropy of the diffusion affinities for each value of t
  
      Examples
      --------
      >>> import numpy as np
      >>> import phate
      >>> X = np.eye(10)
      >>> X[0,0] = 5
      >>> X[3,2] = 4
      >>> h = phate.vne.compute_von_neumann_entropy(X)
      >>> phate.vne.find_knee_point(h)
      23