code: def prepare_data(self, *args, **kwargs):
      if self.setup_data is not None:
          return None
  
      key = "normalization_data_map"
  
      data_fetcher = OssDataFetcher()
  
      normalization_data_map = (
          self.run_feature_identification(self.input_table_spec)
          if key not in self.saved_setup_data
          else pickle.loads(self.saved_setup_data[key])
      )
      calc_cpe_in_training = self.should_generate_eval_dataset
      sample_range_output = get_sample_range(
          self.input_table_spec, calc_cpe_in_training
      )
      train_dataset = self.query_data(
          input_table_spec=self.input_table_spec,
          sample_range=sample_range_output.train_sample_range,
          reward_options=self.reward_options,
          data_fetcher=data_fetcher,
      )
      eval_dataset = None
      if calc_cpe_in_training:
          eval_dataset = self.query_data(
              input_table_spec=self.input_table_spec,
              sample_range=sample_range_output.eval_sample_range,
              reward_options=self.reward_options,
              data_fetcher=data_fetcher,
          )
  
      self.setup_data = self._pickle_setup_data(
          normalization_data_map=normalization_data_map,
          train_dataset=train_dataset,
          eval_dataset=eval_dataset,
      )
      return self.setup_data
  
imports: import abc
  import logging
  import pickle
  from typing import Dict, List, NamedTuple, Optional, Tuple
  from reagent.core.parameters import NormalizationData
  from reagent.data.data_fetcher import DataFetcher
  from reagent.data.oss_data_fetcher import OssDataFetcher
  from reagent.preprocessing.batch_preprocessor import BatchPreprocessor
  from reagent.workflow.types import Dataset, ReaderOptions, ResourceOptions, RewardOptions, TableSpec
  from .reagent_data_module import ReAgentDataModule
label_desc: Use image node_id 2 for calling the ManualDataModule obj's underlying member method code with example usage: obj.prepare_data() and returns: self, None