code: 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)
docs: Fast numerical integration method using mid-point rule.