class_docstr: Extracts features from raw audio waveforms and embeds them in a latent
  space as described in Section 2 of
  :cite:t:`https://doi.org/10.48550/arxiv.2006.11477`.
class_docstr_tok: ["Extracts","features","from","raw","audio","waveforms","and","embeds","them","in","a","latent","space","as","described","in","Section","2","of",":","cite",":","t",":","`","https",":","\/\/doi.org\/10.48550\/arxiv.2006.11477","`","."]
code: def _contract_seq_lens(self, num_frames: Tensor) -> Tensor:
      seq_lens = num_frames.clone()
  
      for desc in self.layer_descs:
          kernel_size, stride = desc[1], desc[2]
  
          seq_lens = (((seq_lens - kernel_size) / stride) + 1.0).floor()
  
      return seq_lens.type_as(num_frames)
  
imports: from typing import List, Optional, Sequence, Tuple, final
  import torch
  import torch.nn
  from torch import Tensor
  from torch.nn import GELU, Conv1d, Dropout, GroupNorm, Module, Sequential
  from torch.nn.functional import group_norm, layer_norm
  from fairseq2.models.feature_extractor import SequenceFeatureExtractor
  from fairseq2.nn.normalization import LayerNorm
  from fairseq2.nn.padding import PaddingMask
  from fairseq2.nn.utils.grad import scale_grad
  from fairseq2.typing import DataType, Device, finaloverride, override
label_desc: Use image node_id 3 for calling the Wav2Vec2FeatureExtractor obj's underlying member method code with example usage: obj._contract_seq_lens(num_frames) and returns: seq_lens