class_docstr: Speaker Diarization model
  
  If "attractor" is "None", SA-EEND will be used.
  Else if "attractor" is not "None", EEND-EDA will be used.
  For the details about SA-EEND and EEND-EDA, refer to the following papers:
  SA-EEND: https://arxiv.org/pdf/1909.06247.pdf
  EEND-EDA: https://arxiv.org/pdf/2005.09921.pdf, https://arxiv.org/pdf/2106.10654.pdf
code: def _extract_feats(
      self, speech: torch.Tensor, speech_lengths: torch.Tensor
  ) -> Tuple[torch.Tensor, torch.Tensor]:
      batch_size = speech.shape[0]
      speech_lengths = (
          speech_lengths
          if speech_lengths is not None
          else torch.ones(batch_size).int() * speech.shape[1]
      )
  
      assert speech_lengths.dim() == 1, speech_lengths.shape
  
      # for data-parallel
      speech = speech[:, : speech_lengths.max()]
  
      if self.frontend is not None:
          # Frontend
          #  e.g. STFT and Feature extract
          #       data_loader may send time-domain signal in this case
          # speech (Batch, NSamples) -> feats: (Batch, NFrames, Dim)
          feats, feats_lengths = self.frontend(speech, speech_lengths)
      else:
          # No frontend and no feature extract
          feats, feats_lengths = speech, speech_lengths
      return feats, feats_lengths
  
imports: from contextlib import contextmanager
  from itertools import permutations
  from typing import Dict, Optional, Tuple
  import numpy
  import torch
  import torch.nn.functional
  from packaging.version import parse
  from typeguard import check_argument_types
  from espnet2.asr.encoder.abs_encoder import AbsEncoder
  from espnet2.asr.frontend.abs_frontend import AbsFrontend
  from espnet2.asr.specaug.abs_specaug import AbsSpecAug
  from espnet2.diar.attractor.abs_attractor import AbsAttractor
  from espnet2.diar.decoder.abs_decoder import AbsDecoder
  from espnet2.layers.abs_normalize import AbsNormalize
  from espnet2.torch_utils.device_funcs import force_gatherable
  from espnet2.train.abs_espnet_model import AbsESPnetModel
  from espnet.nets.pytorch_backend.nets_utils import to_device
label_desc: Use image node_id 5 for calling the ESPnetDiarizationModel obj's underlying member method code with example usage: obj._extract_feats(speech, speech_lengths) and returns: feats,  feats_lengths