code: def complexity_entropy_svd(signal, tau=1, emb_dim=2):
      
      mat =  _embed_seq(signal, tau, emb_dim)
      W = np.linalg.svd(mat, compute_uv = False)
      W /= sum(W) # normalize singular values
      entropy_svd = -1*sum(W * np.log2(W))
      return(entropy_svd)
docs: Computes the Singular Value Decomposition (SVD) entropy of a signal. Based on the `pyrem <https://github.com/gilestrolab/pyrem>`_ repo by Quentin Geissmann.
  
      Parameters
      ----------
      signal : list or array
          List or array of values.
      tau : int
          The delay
      emb_dim : int
          The embedding dimension (*m*, the length of vectors to compare).
  
      Returns
      ----------
      entropy_svd : float
          The SVD entropy as float value.
  
  
      Example
      ----------
      >>> import neurokit as nk
      >>>
      >>> signal = np.sin(np.log(np.random.sample(666)))
      >>> entropy_svd = nk.complexity_entropy_svd(signal, 1, 2)
  
      Notes
      ----------
      *Details*
  
      - **SVD Entropy**: Indicator of how many vectors are needed for an adequate explanation of the data set. Measures feature-richness in the sense that the higher the entropy of the set of SVD weights, the more orthogonal vectors are required to adequately explain it.
  
      *Authors*
  
      - Quentin Geissmann (https://github.com/qgeissmann)
  
      *Dependencies*
  
      - numpy
  
      *See Also*
  
      - pyrem package: https://github.com/gilestrolab/pyrem