code: def handle_dataset_validation(self, data_creator, config, steps):
      config, local_batch_size = self._handle_batch_size(config)
      config["rank"] = self.rank
      config["size"] = self.size
      dataset = data_creator(config, config["batch_size"])
      if isinstance(dataset, list) and all(
          [isinstance(x, ray.ObjectID) for x in dataset]
      ):
          assert steps is not None, "steps must be provided for xshard"
          dataset = self._handle_xshards(
              dataset,
              steps=steps,
              local_batch_size=local_batch_size,
              shuffle=False,
          )
      else:
          dataset = self._handle_sharding(dataset)
  
      return dataset
  
imports: import logging
  import json
  import os
  import numpy
  import ray
  from contextlib import closing
  import logging
  import socket
  from zoo.orca.data.utils import ray_partitions_get_data_label
label_desc: Use image node_id 3 for calling the DatasetHandler obj's underlying member method code with example usage: obj.handle_dataset_validation(data_creator, config, steps) and returns: dataset