class_docstr: Class for managing the user data in nebullvm.
  
  Attributes:
      data_reader(Sequence): Object implementing the __getitem__, the
          __len__ and the __iter__/__next__ APIs. It should read the
          user data and return tuples of tensors for feeding the models.
code: def get_list(
      self, n: int = None, shuffle: bool = False, with_ys: bool = False
  ) -> Union[List[Tuple[Any, ...]], Tuple[List[Tuple[Any, ...]], List]]:
      if n is None:
          n = len(self)
      if shuffle:
          idx = np.random.choice(len(self), n, replace=n > len(self))
      else:
          idx = np.arange(0, min(n, len(self)))
          if n > len(self):
              np.random.seed(0)
              idx = np.concatenate(
                  [
                      idx,
                      np.random.choice(
                          len(self), n - len(self), replace=True
                      ),
                  ]
              )
      if not with_ys:
          return [self[i][0] for i in idx]
  
      ys, xs = [], []
      for i in idx:
          x, y = self[i] if len(self[i]) > 1 else (self[i][0], None)
          xs.append(x)
          ys.append(y)
      return xs, ys
  
imports: from typing import Sequence, List, Tuple, Any, Union, Iterable
  import numpy
  from loguru import logger
  from nebullvm.config import MIN_DIM_INPUT_DATA
  from nebullvm.optional_modules.tensorflow import tensorflow
  from nebullvm.optional_modules.torch import torch, Dataset, DataLoader
  from nebullvm.tools.onnx import convert_to_numpy
label_desc: Use image node_id 7 for calling the DataManager obj's underlying member method code with example usage: obj.get_list(n, shuffle, with_ys) and returns: xs,  ys, unknown