code: def __init__(
      self,
      in_dim: int,
      out_dim: int,
      num_groups: int,
      *,
      bias: bool = True,
      activation: Optional[str] = "ReLU",
      batch_norm: bool = False,
      dropout: float = 0.0,
  ):
      super().__init__()
      self.in_dim = in_dim
      self.out_dim = out_dim
      self.num_groups = num_groups
      in_dim *= num_groups
      out_dim *= num_groups
      self.conv = nn.Conv1d(
          in_dim, out_dim, 1, groups=num_groups, bias=bias
      )
      self.bn = None if not batch_norm else nn.BatchNorm1d(out_dim)
      self.activation = Activation.make(activation)
      use_dropout = 0.0 < dropout < 1.0
      self.dropout = None if not use_dropout else nn.Dropout(dropout)
  
imports: import torch
  import torch.nn
  import torch.nn.functional
  from torch import Tensor
  from typing import Dict
  from typing import List
  from typing import Tuple
  from typing import Optional
  from itertools import combinations
  from .base import MLModel
  from ...schema import MLEncoderSettings
  from ...schema import MLGlobalEncoderSettings
  from ...misc.toolkit import eval_context
  from ...modules.blocks import Activation
label_desc: Use image node_id 1 to create a new SeparableMapping object from inherited base classes: nn with example: obj = SeparableMapping(in_dim, out_dim, num_groups)