docs: def _perform_reduce(self, map_results, factory, group=False,
                          group_level=None):
          '''
          map_results here is a list of tuples (key, value, id)
          '''
  
          def get_group_key(key, group, group_level):
              if group:
                  return key
              return key[0:group_level]
  
          if not group and group_level is None:
              keys = map(operator.itemgetter(0), map_results)
              values = map(operator.itemgetter(1), map_results)
              return self._reduce_values(factory, None, keys, values)
          else:
              groups = dict()
              for row in map_results:
                  key, value = row[:2]
                  group_key = get_group_key(key, group, group_level)
                  if group_key not in groups:
                      groups[group_key] = list()
                  groups[group_key].append((key, value))
              resp = list()
              for group_key, results in groups.iteritems():
                  keys = map(operator.itemgetter(0), results)
                  values = map(operator.itemgetter(1), results)
                  resp.extend(
                      self._reduce_values(factory, group_key, keys, values))
              return resp