class_docstr: Base class for input data adapter.
  In order to simplify the training code path, all the input data
  object will be converted to a `generator` if possible.
  The sample usage of this class is like:
  
  ```
  x = list(range(100))
  adapter_cls = [ArrayDataAdapter, ..., ListsOfScalarsDataAdapter]
  applicable_adapters = [cls for cls in adapter_cls if cls.can_handle(x)]
  if len(applicable_adapters) != 1:
    raise ValueError("Expect only one adapter class to handle the input")
  dataset = applicable_adapters[0](x).get_dataset()
  for data in dataset():
    # training
  ```
docstr: Returns number of samples in the data, or `None`.
docstr_tok: ["Returns","number","of","samples","in","the","data",",","or","`","None","`","."]
code: def get_samples(self):
      """Returns number of samples in the data, or `None`."""
      if not self.get_size() or not self.batch_size():
          return None
      total_sample = self.get_size() * self.batch_size()
      if self.has_partial_batch():
          total_sample -= self.batch_size() - self.partial_batch_size()
      return total_sample
  
file_path: elegy/elegy/data/data_adapter.py
imports: import abc
  import typing
  import six
label_desc: Use image node_id 10 for calling the DataAdapter obj's underlying member method code with example usage: obj.get_samples() and returns: total_sample, None