class_docstr: Conventional frontend structure for ASR.
  
  Stft -> WPE -> MVDR-Beamformer -> Power-spec -> Log-Mel-Fbank
class_docstr_tok: ["Conventional","frontend","structure","for","ASR",".","Stft","-",">","WPE","-",">","MVDR-Beamformer","-",">","Power-spec","-",">","Log-Mel-Fbank"]
code: def _compute_stft(
      self, input: torch.Tensor, input_lengths: torch.Tensor
  ) -> torch.Tensor:
      input_stft, feats_lens = self.stft(input, input_lengths)
  
      assert input_stft.dim() >= 4, input_stft.shape
      # "2" refers to the real/imag parts of Complex
      assert input_stft.shape[-1] == 2, input_stft.shape
  
      # Change torch.Tensor to ComplexTensor
      # input_stft: (..., F, 2) -> (..., F)
      input_stft = ComplexTensor(input_stft[..., 0], input_stft[..., 1])
      return input_stft, feats_lens
  
file_path: espnet/espnet2/asr/frontend/default.py
imports: import copy
  from typing import Optional, Tuple, Union
  import humanfriendly
  import numpy
  import torch
  from torch_complex.tensor import ComplexTensor
  from typeguard import check_argument_types
  from espnet2.asr.frontend.abs_frontend import AbsFrontend
  from espnet2.layers.log_mel import LogMel
  from espnet2.layers.stft import Stft
  from espnet2.utils.get_default_kwargs import get_default_kwargs
  from espnet.nets.pytorch_backend.frontends.frontend import Frontend
label_desc: Use image node_id 4 for calling the DefaultFrontend obj's underlying member method code with example usage: obj._compute_stft(input, input_lengths) and returns: input_stft,  feats_lens