class_docstr: Teacher that display binary classes __ok__, __notok__ on bot response.
class_docstr_tok: ["Teacher","that","display","binary","classes","__ok__",",","__notok__","on","bot","response","."]
code: def setup_data(self, data_path):
      raw_data = self._load_raw_data(data_path)
  
      data = []
      neg_data = []
      pos_data = []
  
      def _get_prepend_task_info(ex):
          return (
              "__task__ "
              + normalize_reply(ex["specific_task"])
              + " | "
              + normalize_reply(ex["task_requirement"])
              + "__endtask__"
          )
  
      for chat in raw_data:
          (
              perfect_episode,
              feedback_examples_with_metadata,
          ) = self._get_perfect_episode(
              chat, is_training=self.is_training
          )
          previous_texts = []
          for ex in feedback_examples_with_metadata:
              if self.must_have_knowledge_sentence:
                  if not (
                      woi_consts.SELECTED_SENTENCES in ex
                      and ex[woi_consts.SELECTED_SENTENCES]
                  ):
                      continue
              text = ex["text"]
              if self.prepend_task_specifics:
                  task_context = _get_prepend_task_info(ex)
                  if task_context:
                      text = task_context + "\n" + text
              # dedup sample
              if text in previous_texts:
                  continue
              previous_texts.append(text)
              new_exs = copy.deepcopy(ex)
              new_exs.update(
                  {
                      "text": text,
                      "labels": [NOT_OK_LABEL],
                      "last_nonperfect_feedback": ex[
                          "last_nonperfect_feedback"
                      ],
                  }
              )
              neg_data.append(new_exs)
          history = []
          for turn in perfect_episode:
              history.append(turn["text"])
              history.append(turn["labels"][0])
              text = "\n".join(history)
              if self.must_have_knowledge_sentence:
                  if not (
                      woi_consts.SELECTED_SENTENCES in turn
                      and turn[woi_consts.SELECTED_SENTENCES]
                  ):
                      continue
                  else:
                      text = get_knowledge_appended_context(
                          "\n".join(history[:-1]),
                          turn[woi_consts.SELECTED_SENTENCES][-1],
                          normalize_knowledge=True,
                      )
                      text = "\n".join([text] + history[-1:])
              if self.prepend_task_specifics:
                  task_context = _get_prepend_task_info(turn)
                  if task_context:
                      text = task_context + "\n" + text
              if (
                  self.positive_example_source == "human_gold"
                  and turn["last_nonperfect_feedback"]
                  != FeedbackType.CORRECT_RESPONSE.value
              ) or (
                  self.positive_example_source
                  == "human_and_bot_gold_revision"
                  and turn["last_nonperfect_feedback"]
                  == FeedbackType.NONE.value
              ):
                  continue
              new_exs = copy.deepcopy(turn)
              new_exs.update(
                  {
                      "text": text,
                      "labels": [OK_LABEL],
                      "last_nonperfect_feedback": FeedbackType.NONE.value,
                  }
              )
              pos_data.append(new_exs)
  
      data = neg_data + pos_data
      random.shuffle(data)
      for turn in data:
          message = Message(turn)
          yield message, True
  
imports: import os
  import copy
  import json
  import random
  from typing import Optional
  from parlai.utils.misc import warn_once
  from parlai.utils.data import DatatypeHelper
  from parlai.core.opt import Opt
  from parlai.core.teachers import DialogTeacher
  from parlai.core.params import ParlaiParser
  from parlai.core.message import Message
  from parlai.utils.io import PathManager
  from parlai.tasks.wizard_of_internet import constants
  from .mutators import normalize_reply, get_knowledge_appended_context, get_knowledge_sentence_with_special_tokens_only
  from .build import build
  from .constants import FeedbackType, TITLE_PASSAGE_DELIMITER, OK_LABEL, NOT_OK_LABEL
label_desc: Use image node_id 3 for calling the FitsSatisfactionTeacher obj's underlying member method code with example usage: obj.setup_data(data_path) and returns: unknown