code: def check_indexing(data):
      
      if data is None:
          return _indexing_none
  
      if isinstance(data, dict):
          # dictionary of containers
          return _indexing_dict
  
      if isinstance(data, (list, tuple)):
          try:
              # list or tuple of containers
              # TODO: Is there a better way than just to try to index? This
              # is error prone (e.g. if one day list of strings are
              # possible).
              multi_indexing(data[0], 0)
              indexings = [check_indexing(x) for x in data]
              return partial(_indexing_list_tuple_of_data, indexings=indexings)
          except TypeError:
              # list or tuple of values
              return _indexing_other
  
      if is_pandas_ndframe(data):
          # pandas NDFrame, will be transformed to dict
          return _indexing_ndframe
  
      # torch tensor, numpy ndarray, list
      return _indexing_other
docs: Perform a check how incoming data should be indexed and return an
      appropriate indexing function with signature f(data, index).
  
      This is useful for determining upfront how data should be indexed
      instead of doing it repeatedly for each batch, thus saving some
      time.