docs: def report(self, display=False):
          """Evaluation report
  
          Parameters
          ----------
          display : bool, optional
              Set to True to print the report to stdout.
  
          Returns
          -------
          report : pandas.DataFrame
              Dataframe with one column per metric component, one row per
              evaluated item, and one final row for accumulated results.
          """
  
          report = []
          uris = []
  
          percent = 'total' in self.metric_components()
  
          for uri, components in self.results_:
              row = {}
              if percent:
                  total = components['total']
              for key, value in components.items():
                  if key == self.name:
                      row[key, '%'] = 100 * value
                  elif key == 'total':
                      row[key, ''] = value
                  else:
                      row[key, ''] = value
                      if percent:
                          if total > 0:
                              row[key, '%'] = 100 * value / total
                          else:
                              row[key, '%'] = np.NaN
  
              report.append(row)
              uris.append(uri)
  
          row = {}
          components = self.accumulated_
  
          if percent:
              total = components['total']
  
          for key, value in components.items():
              if key == self.name:
                  row[key, '%'] = 100 * value
              elif key == 'total':
                  row[key, ''] = value
              else:
                  row[key, ''] = value
                  if percent:
                      if total > 0:
                          row[key, '%'] = 100 * value / total
                      else:
                          row[key, '%'] = np.NaN
  
          row[self.name, '%'] = 100 * abs(self)
          report.append(row)
          uris.append('TOTAL')
  
          df = pd.DataFrame(report)
  
          df['item'] = uris
          df = df.set_index('item')
  
          df.columns = pd.MultiIndex.from_tuples(df.columns)
  
          df = df[[self.name] + self.metric_components()]
  
          if display:
              print(df.to_string(index=True, sparsify=False, justify='right', float_format=lambda f: '{0:.2f}'.format(f)))
  
          return df