class_docstr: Randomly permute and selects a subset of channels.
  
  Args:
      permute_channels (bool): Apply a random permutation of channels.
      num_channels_min (int): Minimum number of channels to select.
      num_channels_max (int): Max number of channels to select.
      rng: Optional, random generator.
      seed: Optional, seed for the generator.
code: def __init__(
      self,
      permute_channels: bool = True,
      num_channels_min: int = 1,
      num_channels_max: Optional[int] = None,
      rng: Optional[Callable] = None,
      seed: Optional[int] = None,
  ):
      super().__init__()
  
      self._rng = random.Random(seed) if rng is None else rng
      self.permute_channels = permute_channels
      self.num_channels_min = num_channels_min
      self.num_channels_max = num_channels_max
  
      if (
          num_channels_max is not None
          and num_channels_min > num_channels_max
      ):
          raise ValueError(
              f"Min number of channels {num_channels_min} cannot be greater than max number of channels {num_channels_max}"
          )
  
      logging.debug("Initialized %s with", self.__class__.__name__)
      logging.debug("\tpermute_channels: %s", self.permute_channels)
      logging.debug("\tnum_channels_min: %s", self.num_channels_min)
      logging.debug("\tnum_channels_max: %s", self.num_channels_max)
  
imports: import random
  from typing import Callable, Optional
  import torch
  from nemo.collections.asr.parts.submodules.multi_head_attention import MultiHeadAttention
  from nemo.core.classes import NeuralModule, typecheck
  from nemo.core.neural_types import AudioSignal, FloatType, NeuralType, SpectrogramType
  from nemo.utils import logging
label_desc: Use image node_id 1 to create a new ChannelAugment object from inherited base classes: NeuralModule with example: obj = ChannelAugment(permute_channels, num_channels_min, num_channels_max, rng, seed)