class_docstr: Class for encoder-mask-decoder audio processing models.
  
  The model consists of the following blocks:
      - encoder: transforms input multi-channel audio signal into an encoded representation (analysis transform)
      - mask_estimator: estimates a mask used by signal processor
      - mask_processor: mask-based signal processor, combines the encoded input and the estimated mask
      - decoder: transforms processor output into the time domain (synthesis transform)
class_docstr_tok: ["Class","for","encoder-mask-decoder","audio","processing","models",".","The","model","consists","of","the","following","blocks",":","-","encoder",":","transforms","input","multi-channel","audio","signal","into","an","encoded","representation","(","analysis","transform",")","-","mask_estimator",":","estimates","a","mask","used","by","signal","processor","-","mask_processor",":","mask-based","signal","processor",",","combines","the","encoded","input","and","the","estimated","mask","-","decoder",":","transforms","processor","output","into","the","time","domain","(","synthesis","transform",")"]
code: def _setup_dataloader_from_config(self, config: Optional[Dict]):
      is_concat = config.get("is_concat", False)
      if is_concat:
          raise NotImplementedError("Concat not implemented")
  
      # TODO: Consider moving `inject` from `audio_to_text_dataset` to a utility module?
      # Automatically inject args from model config to dataloader config
      inject_dataloader_value_from_model_config(
          self.cfg, config, key="sample_rate"
      )
  
      # Instantiate tarred dataset loader or normal dataset loader
      if config.get("is_tarred", False):
          raise NotImplementedError("Tarred datasets not supported")
  
      if (
          "manifest_filepath" in config
          and config["manifest_filepath"] is None
      ):
          logging.warning(
              f"Could not load dataset as `manifest_filepath` was None. Provided config : {config}"
          )
          return None
  
      dataset = audio_to_audio_dataset.get_audio_to_target_dataset(
          config=config
      )
  
      if hasattr(dataset, "collate_fn"):
          collate_fn = dataset.collate_fn
      elif hasattr(dataset.datasets[0], "collate_fn"):
          # support datasets that are lists of entries
          collate_fn = dataset.datasets[0].collate_fn
      else:
          # support datasets that are lists of lists
          collate_fn = dataset.datasets[0].datasets[0].collate_fn
  
      return torch.utils.data.DataLoader(
          dataset=dataset,
          batch_size=config["batch_size"],
          collate_fn=collate_fn,
          drop_last=config.get("drop_last", False),
          shuffle=config["shuffle"],
          num_workers=config.get("num_workers", 0),
          pin_memory=config.get("pin_memory", False),
      )
  
imports: import json
  import os
  import tempfile
  from typing import Dict, List, Optional, Union
  import librosa
  import soundfile
  import torch
  from omegaconf import DictConfig
  from pytorch_lightning import Trainer
  from tqdm import tqdm
  from nemo.collections.asr.data import audio_to_audio_dataset
  from nemo.collections.asr.data.audio_to_text_dataset import inject_dataloader_value_from_model_config
  from nemo.collections.asr.models.audio_to_audio_model import AudioToAudioModel
  from nemo.collections.asr.parts.utils.audio_utils import ChannelSelectorType
  from nemo.core.classes.common import PretrainedModelInfo, typecheck
  from nemo.core.neural_types import AudioSignal, LengthsType, NeuralType
  from nemo.utils import logging
label_desc: Use image node_id 3 for calling the EncMaskDecAudioToAudioModel obj's underlying member method code with example usage: obj._setup_dataloader_from_config(config) and returns: torch, None