code: def _read_datasets(self, dataset_nodes, **kwargs):
          
          # Sort requested datasets by reader
          reader_datasets = {}
  
          for node in dataset_nodes:
              ds_id = node.name
              # if we already have this node loaded or the node was assigned
              # by the user (node data is None) then don't try to load from a
              # reader
              if ds_id in self.datasets or not isinstance(node.data, dict):
                  continue
              reader_name = node.data.get('reader_name')
              if reader_name is None:
                  # This shouldn't be possible
                  raise RuntimeError("Dependency tree has a corrupt node.")
              reader_datasets.setdefault(reader_name, set()).add(ds_id)
  
          # load all datasets for one reader at a time
          loaded_datasets = DatasetDict()
          for reader_name, ds_ids in reader_datasets.items():
              reader_instance = self.readers[reader_name]
              new_datasets = reader_instance.load(ds_ids, **kwargs)
              loaded_datasets.update(new_datasets)
          self.datasets.update(loaded_datasets)
          return loaded_datasets
docs: Read the given datasets from file.