def aggregate(self, dimensions=None, function=None, spreadfn=None, **kwargs):
        """Aggregates data on the supplied dimensions.

        Aggregates over the supplied key dimensions with the defined
        function.

        Args:
            dimensions: Dimension(s) to aggregate on
                Default to all key dimensions
            function: Aggregation function to apply, e.g. numpy.mean
            spreadfn: Secondary reduction to compute value spread
                Useful for computing a confidence interval, spread, or
                standard deviation.
            **kwargs: Keyword arguments passed to the aggregation function

        Returns:
            Returns the aggregated Dataset
        """
        if function is None:
            raise ValueError("The aggregate method requires a function to be specified")
        if dimensions is None: dimensions = self.kdims
        elif not isinstance(dimensions, list): dimensions = [dimensions]
        kdims = [self.get_dimension(d, strict=True) for d in dimensions]
        if not len(self):
            if spreadfn:
                spread_name = spreadfn.__name__
                vdims = [d for vd in self.vdims for d in [vd, vd('_'.join([vd.name, spread_name]))]]
            else:
                vdims = self.vdims
            return self.clone([], kdims=kdims, vdims=vdims)

        vdims = self.vdims
        aggregated, dropped = self.interface.aggregate(self, kdims, function, **kwargs)
        aggregated = self.interface.unpack_scalar(self, aggregated)
        vdims = [vd for vd in vdims if vd not in dropped]

        ndims = len(dimensions)
        min_d, max_d = self.params('kdims').bounds
        generic_type = (min_d is not None and ndims < min_d) or (max_d is not None and ndims > max_d)

        if spreadfn:
            error, _ = self.interface.aggregate(self, dimensions, spreadfn)
            spread_name = spreadfn.__name__
            ndims = len(vdims)
            error = self.clone(error, kdims=kdims, new_type=Dataset)
            combined = self.clone(aggregated, kdims=kdims, new_type=Dataset)
            for i, d in enumerate(vdims):
                dim = d('_'.join([d.name, spread_name]))
                dvals = error.dimension_values(d, flat=False)
                combined = combined.add_dimension(dim, ndims+i, dvals, True)
            return combined.clone(new_type=Dataset if generic_type else type(self))

        if np.isscalar(aggregated):
            return aggregated
        else:
            try:
                # Should be checking the dimensions declared on the element are compatible
                return self.clone(aggregated, kdims=kdims, vdims=vdims)
            except:
                datatype = self.params('datatype').default
                return self.clone(aggregated, kdims=kdims, vdims=vdims,
                                  new_type=Dataset if generic_type else None,
                                  datatype=datatype)
def aggregate ( self , dimensions = None , function = None , spreadfn = None , ** kwargs ) : if function is None : raise ValueError ( "The aggregate method requires a function to be specified" ) if dimensions is None : dimensions = self . kdims elif not isinstance ( dimensions , list ) : dimensions = [ dimensions ] kdims = [ self . get_dimension ( d , strict = True ) for d in dimensions ] if not len ( self ) : if spreadfn : spread_name = spreadfn . __name__ vdims = [ d for vd in self . vdims for d in [ vd , vd ( '_' . join ( [ vd . name , spread_name ] ) ) ] ] else : vdims = self . vdims return self . clone ( [ ] , kdims = kdims , vdims = vdims ) vdims = self . vdims aggregated , dropped = self . interface . aggregate ( self , kdims , function , ** kwargs ) aggregated = self . interface . unpack_scalar ( self , aggregated ) vdims = [ vd for vd in vdims if vd not in dropped ] ndims = len ( dimensions ) min_d , max_d = self . params ( 'kdims' ) . bounds generic_type = ( min_d is not None and ndims < min_d ) or ( max_d is not None and ndims > max_d ) if spreadfn : error , _ = self . interface . aggregate ( self , dimensions , spreadfn ) spread_name = spreadfn . __name__ ndims = len ( vdims ) error = self . clone ( error , kdims = kdims , new_type = Dataset ) combined = self . clone ( aggregated , kdims = kdims , new_type = Dataset ) for i , d in enumerate ( vdims ) : dim = d ( '_' . join ( [ d . name , spread_name ] ) ) dvals = error . dimension_values ( d , flat = False ) combined = combined . add_dimension ( dim , ndims + i , dvals , True ) return combined . clone ( new_type = Dataset if generic_type else type ( self ) ) if np . isscalar ( aggregated ) : return aggregated else : try : return self . clone ( aggregated , kdims = kdims , vdims = vdims ) except : datatype = self . params ( 'datatype' ) . default return self . clone ( aggregated , kdims = kdims , vdims = vdims , new_type = Dataset if generic_type else None , datatype = datatype )
Aggregates data on the supplied dimensions.

        Aggregates over the supplied key dimensions with the defined
        function.

        Args:
            dimensions: Dimension(s) to aggregate on
                Default to all key dimensions
            function: Aggregation function to apply, e.g. numpy.mean
            spreadfn: Secondary reduction to compute value spread
                Useful for computing a confidence interval, spread, or
                standard deviation.
            **kwargs: Keyword arguments passed to the aggregation function

        Returns:
            Returns the aggregated Dataset