code: def _bin_exp(self, n_bin, scale=1.0):
          
          boundaries = np.flip(scipy.stats.expon.isf(
              np.linspace(0, 1, n_bin + 1),
              scale=scale), axis=0)
          bins = np.empty(n_bin)
          for i in np.arange(n_bin):
              bins[i] = utils.center_mass_exp(
                  (boundaries[i], boundaries[i + 1]), scale=scale)
          return bins
docs: Calculate the bin locations to approximate exponential distribution.
              It breaks the cumulative probability of exponential distribution
              into n_bin equal bins, each covering 1 / n_bin probability. Then it
              calculates the center of mass in each bins and returns the
              centers of mass. So, it approximates the exponential distribution
              with n_bin of Delta function weighted by 1 / n_bin, at the
              locations of these centers of mass.
          Parameters:
          -----------
          n_bin: int
              The number of bins to approximate the exponential distribution
          scale: float.
              The scale parameter of the exponential distribution, defined in
              the same way as scipy.stats. It does not influence the ratios
              between the bins, but just controls the spacing between the bins.
              So generally users should not change its default.
          Returns:
          --------
          bins: numpy array of size [n_bin,]
              The centers of mass for each segment of the
              exponential distribution.