code: def svdl(a):
      """Singular Value Decomposition (Left Singular Vectors).
  
      This function finds the eigenvalues and eigenvectors of the
      input multiplied by its transpose (a x a.T).
  
      The function will return (in this order):
          1. The eigenvalues in a tensor with the format (*,C,C,2)
          2. The eigenvectors in a tensor with the format (*,C,C,2)
  
      Arguments:
      ----------
      a : tensor
          A complex input matrix to work with. The tensor must have
          the following format: (*,2,C+P).
  
      Example:
      --------
      >>> import torch
  
      >>> from speechbrain.processing.features import STFT
      >>> from speechbrain.processing.multi_mic import Covariance
      >>> from speechbrain.processing.decomposition import svdl
      >>> from speechbrain.dataio.dataio import read_audio_multichannel
  
      >>> xs_speech = read_audio_multichannel(
      ...    'tests/samples/multi-mic/speech_-0.82918_0.55279_-0.082918.flac'
      ... )
      >>> xs_noise = read_audio_multichannel('tests/samples/multi-mic/noise_diffuse.flac')
      >>> xs = xs_speech + 0.05 * xs_noise
      >>> xs = xs.unsqueeze(0).float()
      >>>
      >>> stft = STFT(sample_rate=16000)
      >>> cov = Covariance()
      >>>
      >>> Xs = stft(xs)
      >>> XXs = cov(Xs)
      >>> us, ds = svdl(XXs)
      """
  
      # Dimensions
      D = a.dim()
      P = a.shape[D - 1]
      C = int(round(((1 + 8 * P) ** 0.5 - 1) / 2))
  
      # Computing As * As_T
      ash = f(a)
      ash_T = torch.transpose(ash, -2, -1)
  
      ash_mm_ash_T = torch.matmul(ash, ash_T)
  
      # Finding the eigenvectors and eigenvalues
      es, ush = torch.linalg.eigh(ash_mm_ash_T, UPLO="U")
  
      # Collecting the eigenvalues
      dsh = torch.zeros(ush.shape, dtype=es.dtype, device=es.device)
      dsh[..., range(0, 2 * C), range(0, 2 * C)] = torch.sqrt(es)
  
      # Converting the block matrices to full complex matrices
      us = ginv(ush)
      ds = ginv(dsh)
  
      return us, ds
  
file_path: speechbrain/speechbrain/processing/decomposition.py
imports: import torch
label_desc: Use image node_id 2 for calling a global function with example usage: svdl(a) and returns: us,  ds