code: def calibrateEB(variances, sigma2):
      
      if (sigma2 <= 0 or min(variances) == max(variances)):
          return(np.maximum(variances, 0))
      sigma = np.sqrt(sigma2)
      eb_prior = gfit(variances, sigma)
      # Set up a partial execution of the function
      part = functools.partial(gbayes, g_est=eb_prior,
                               sigma=sigma)
      if len(variances) >= 200:
          # Interpolate to speed up computations:
          calib_x = np.percentile(variances,
                                  np.arange(0, 102, 2))
          calib_y = list(map(part, calib_x))
          calib_all = np.interp(variances, calib_x, calib_y)
      else:
          calib_all = list(map(part, variances))
  
      return np.asarray(calib_all)
docs: Calibrate noisy variance estimates with empirical Bayes.
  
      Parameters
      ----------
      vars: ndarray
          List of variance estimates.
      sigma2: int
          Estimate of the Monte Carlo noise in vars.
  
      Returns
      -------
      An array of the calibrated variance estimates