code: def tabulate(self, n=None, headers=(), tablefmt="simple", floatfmt="g", numalign="decimal",
                   stralign="left", missingval=""):
          
          self.cache()
          length = self.len()
          if length == 0 or not is_tabulatable(self[0]):
              return None
  
          if n is None or n >= length:
              rows = self.list()
              message = ''
          else:
              rows = self.take(n).list()
              if tablefmt == 'simple':
                  message = '\nShowing {} of {} rows'.format(n, length)
              elif tablefmt == 'html':
                  message = '<p>Showing {} of {} rows'.format(n, length)
              else:
                  message = ''
          if len(headers) == 0 and is_namedtuple(rows[0]):
              headers = rows[0]._fields
          return tabulate(rows, headers=headers, tablefmt=tablefmt, floatfmt=floatfmt,
                          numalign=numalign, stralign=stralign, missingval=missingval) + message
docs: Return pretty string table of first n rows of sequence or everything if n is None. See
          https://bitbucket.org/astanin/python-tabulate for details on tabulate parameters
  
          :param n: Number of rows to show, if set to None return all rows
          :param headers: Passed to tabulate
          :param tablefmt: Passed to tabulate
          :param floatfmt: Passed to tabulate
          :param numalign: Passed to tabulate
          :param stralign: Passed to tabulate
          :param missingval: Passed to tabulate