code: def stream_info(self) -> None:
          
          stream_names = [stream_name for stream_name in dir(self)
                          if 'stream' in stream_name and stream_name != 'stream_info']
          logging.info('Found %s stream candidates: %s', len(stream_names), stream_names)
          for stream_name in stream_names:
              try:
                  stream_fn = getattr(self, stream_name)
                  logging.info(stream_name)
                  batch = next(iter(stream_fn()))
                  rows = []
                  for key, value in batch.items():
                          try:
                              value_arr = np.array(value)
                              row = [key, value_arr.dtype, value_arr.shape]
                              if value_arr.dtype.kind in 'bui':  # boolean, unsigned, integer
                                  row.append('{} - {}'.format(value_arr.min(), value_arr.max()))
                              elif value_arr.dtype.kind is 'f':
                                  row.append('{0:.2f} - {1:.2f}'.format(value_arr.min(), value_arr.max()))
                          except ValueError:  # np broadcasting failed (ragged array)
                              value_arr = None
                              row = [key, '{}'.format(type(value[0]).__name__), '({},)'.format(len(list(value)))]
  
                          if value_arr is None or \
                                  (value_arr.ndim > 0 and value_arr.shape[1:] != np.array(value_arr[0]).shape):
                              logging.warning('*** stream source `%s` appears to be ragged (non-rectangular) ***', key)
  
                          rows.append(row)
                  for line in tabulate.tabulate(rows, headers=['name', 'dtype', 'shape', 'range'],
                                                tablefmt='grid').split('\n'):
                      logging.info(line)
              except Exception:
                  logging.warning('Exception was raised during checking stream `%s`, '
                                  '(stack trace is displayed only with --verbose flag)', stream_name)
                  logging.debug(traceback.format_exc())
docs: Check and report source names, dtypes and shapes of all the streams available.