class_docstr: SVoice model for speech separation.
  
  Reference:
      Voice Separation with an Unknown Number of Multiple Speakers;
      E. Nachmani et al., 2020;
      https://arxiv.org/abs/2003.01531
  
  Args:
      enc_dim: int, dimension of the encoder module's output. (Default: 128)
      kernel_size: int, the kernel size of Conv1D layer in both encoder and
          decoder modules. (Default: 8)
      hidden_size: int, dimension of the hidden state in RNN layers. (Default: 128)
      num_spk: int, the number of speakers in the output. (Default: 2)
      num_layers: int, number of stacked MulCat blocks. (Default: 4)
      segment_size: dual-path segment size. (Default: 20)
      bidirectional: bool, whether the RNN layers are bidirectional. (Default: True)
      input_normalize: bool, whether to apply GroupNorm on the input Tensor.
          (Default: False)
code: def __init__(
      self,
      input_dim: int,
      enc_dim: int,
      kernel_size: int,
      hidden_size: int,
      num_spk: int = 2,
      num_layers: int = 4,
      segment_size: int = 20,
      bidirectional: bool = True,
      input_normalize: bool = False,
  ):
      super().__init__()
  
      self._num_spk = num_spk
      self.enc_dim = enc_dim
      self.segment_size = segment_size
      # model sub-networks
      self.encoder = Encoder(kernel_size, enc_dim)
      self.decoder = Decoder(kernel_size)
      self.rnn_model = DPMulCat(
          input_size=enc_dim,
          hidden_size=hidden_size,
          output_size=enc_dim,
          num_spk=num_spk,
          num_layers=num_layers,
          bidirectional=bidirectional,
          input_normalize=input_normalize,
      )
  
imports: import math
  from collections import OrderedDict
  from typing import Dict, List, Optional, Tuple
  import torch
  import torch.nn
  import torch.nn.functional
  from espnet2.enh.layers.dpmulcat import DPMulCat
  from espnet2.enh.layers.dprnn import merge_feature, split_feature
  from espnet2.enh.separator.abs_separator import AbsSeparator
label_desc: Use image node_id 1 to create a new SVoiceSeparator object from inherited base classes: AbsSeparator with example: obj = SVoiceSeparator(input_dim, enc_dim, kernel_size, hidden_size, num_spk, num_layers, segment_size, bidirectional, input_normalize)