code: def get_pstats(pstatfile, n):
      
      with tempfile.TemporaryFile(mode='w+') as stream:
          ps = pstats.Stats(pstatfile, stream=stream)
          ps.sort_stats('cumtime')
          ps.print_stats(n)
          stream.seek(0)
          lines = list(stream)
      for i, line in enumerate(lines):
          if line.startswith('   ncalls'):
              break
      data = []
      for line in lines[i + 2:]:
          columns = line.split()
          if len(columns) == 6:
              data.append(PStatData(*columns))
      rows = [(rec.ncalls, rec.cumtime, rec.path) for rec in data]
      # here is an example of the expected output table:
      # ====== ======= ========================================================
      # ncalls cumtime path
      # ====== ======= ========================================================
      # 1      33.502  commands/run.py:77(_run)
      # 1      33.483  calculators/base.py:110(run)
      # 1      25.166  calculators/classical.py:115(execute)
      # 1      25.104  baselib.parallel.py:249(apply_reduce)
      # 1      25.099  calculators/classical.py:41(classical)
      # 1      25.099  hazardlib/calc/hazard_curve.py:164(classical)
      return views.rst_table(rows, header='ncalls cumtime path'.split())
docs: Return profiling information as an RST table.
  
      :param pstatfile: path to a .pstat file
      :param n: the maximum number of stats to retrieve