code: def setup_data(self, path):
      logging.info(f"loading normalized fbdialog data: {path}")
      exs_counter = 0
      for data, new_episode in super().setup_data(path):
          text, labels, reward = data[:3]
          candidates = None if len(data) == 3 else data[3]
          if new_episode:
              exs_counter = 0
          if (
              self.max_num_turns > 0
              and exs_counter >= self.max_num_turns
          ):
              continue
          text = self.normalize_replies(text)
          labels = [self.normalize_replies(l) for l in labels]
          exs_counter += 1
          if candidates:
              candidates = [
                  self.normalize_replies(c) for c in candidates
              ]
              yield (text, labels, reward, candidates), new_episode
          else:
              yield (text, labels, reward), new_episode
  
imports: from parlai.core.teachers import FbDeprecatedDialogTeacher, YamlTeacher
  from parlai.utils.data import DatatypeHelper
  from parlai.utils.misc import warn_once
  from .build import build
  from parlai.utils.strings import normalize_reply
  import parlai.utils.logging
  from parlai.core.params import ParlaiParser
  from typing import Optional
  from parlai.core.opt import Opt
  import copy
  import os
label_desc: Use image node_id 4 for calling the NormalizedTeacherTrait obj's underlying member method code with example usage: obj.setup_data(path) without return types