def _integrate(cls, fn, emin, emax, params, scale=1.0, extra_params=None,
                   npt=20):
        """Fast numerical integration method using mid-point rule."""

        emin = np.expand_dims(emin, -1)
        emax = np.expand_dims(emax, -1)

        params = copy.deepcopy(params)
        for i, p in enumerate(params):
            params[i] = np.expand_dims(params[i], -1)

        xedges = np.linspace(0.0, 1.0, npt + 1)
        logx_edge = np.log(emin) + xedges * (np.log(emax) - np.log(emin))
        logx = 0.5 * (logx_edge[..., 1:] + logx_edge[..., :-1])
        xw = np.exp(logx_edge[..., 1:]) - np.exp(logx_edge[..., :-1])
        dnde = fn(np.exp(logx), params, scale, extra_params)
        return np.sum(dnde * xw, axis=-1)
def _integrate ( cls , fn , emin , emax , params , scale = 1.0 , extra_params = None , npt = 20 ) : emin = np . expand_dims ( emin , - 1 ) emax = np . expand_dims ( emax , - 1 ) params = copy . deepcopy ( params ) for i , p in enumerate ( params ) : params [ i ] = np . expand_dims ( params [ i ] , - 1 ) xedges = np . linspace ( 0.0 , 1.0 , npt + 1 ) logx_edge = np . log ( emin ) + xedges * ( np . log ( emax ) - np . log ( emin ) ) logx = 0.5 * ( logx_edge [ ... , 1 : ] + logx_edge [ ... , : - 1 ] ) xw = np . exp ( logx_edge [ ... , 1 : ] ) - np . exp ( logx_edge [ ... , : - 1 ] ) dnde = fn ( np . exp ( logx ) , params , scale , extra_params ) return np . sum ( dnde * xw , axis = - 1 )
Fast numerical integration method using mid-point rule.