Example #1
0
 def reduce(self, store_results=True):
     # Terminaison (leaf) node return results
     if not self.children:
         return self.load_state(name="results")
     # 1) Build sub-aggregates over children
     children_results = [child.reduce(store_results=False) for
         child in self.children]
     result_set = ResultSet(*children_results)
     if not self.reducer:
         return result_set
     # Group by key, without consideration of the fold/permutation number
     # which is the head of the key
     # use OrderedDict to preserve runing order
     from collections import OrderedDict
     groups = OrderedDict()
     for result in result_set:
         # remove the head of the key
         _, key_tail = key_pop(result["key"], index=0)
         result["key"] = key_tail
         key_tail = result["key"]
         if not key_tail in groups:
             groups[key_tail] = list()
         groups[key_tail].append(result)
     # For each key, stack results
     reduced = ResultSet()
     for key in groups:
         result_stacked = Result.stack(*groups[key])
         reduced.add(self.reducer.reduce(result_stacked))
     return reduced
Example #2
0
    def reduce(self, store_results=True):
        # Terminaison (leaf) node return results
        if not self.children:
            return self.load_results()
        # 1) Build sub-aggregates over children
        children_results = [
            child.reduce(store_results=False) for child in self.children
        ]
        result_set = ResultSet(*children_results)
        if not self.reducer:
            return result_set

        if not self.need_group_key:
            reduced = ResultSet()
            reduced.add(self.reducer.reduce(result_set))
            return reduced

        # Group by key, without consideration of the fold/permutation number
        # which is the head of the key
        # use OrderedDict to preserve runing order
        from collections import OrderedDict
        groups = OrderedDict()
        for result in result_set:
            # remove the head of the key
            _, key_tail = key_pop(result["key"], index=0)
            result["key"] = key_tail
            if not key_tail in groups:
                groups[key_tail] = list()
            groups[key_tail].append(result)
        # For each key, stack results
        reduced = ResultSet()
        for key in groups:
            result_stacked = Result.stack(*groups[key])
            reduced.add(self.reducer.reduce(result_stacked))
        return reduced