code: def compute_lower_upper_errors(sample, num_sigma=1):
      
      if num_sigma > 3:
          raise ValueError("Number of sigma-constraints restircted to three. %s not valid" % num_sigma)
      num = len(sample)
      num_threshold1 = int(round((num-1)*0.833))
      num_threshold2 = int(round((num-1)*0.977249868))
      num_threshold3 = int(round((num-1)*0.998650102))
  
      median = np.median(sample)
      sorted_sample = np.sort(sample)
      if num_sigma > 0:
          upper_sigma1 = sorted_sample[num_threshold1-1]
          lower_sigma1 = sorted_sample[num-num_threshold1-1]
      else:
          return median, [[]]
      if num_sigma > 1:
          upper_sigma2 = sorted_sample[num_threshold2-1]
          lower_sigma2 = sorted_sample[num-num_threshold2-1]
      else:
          return median, [[median-lower_sigma1, upper_sigma1-median]]
      if num_sigma > 2:
          upper_sigma3 = sorted_sample[num_threshold3-1]
          lower_sigma3 = sorted_sample[num-num_threshold3-1]
          return median, [[median-lower_sigma1, upper_sigma1-median], [median-lower_sigma2, upper_sigma2-median],
                        [median-lower_sigma3, upper_sigma3-median]]
      else:
          return median, [[median-lower_sigma1, upper_sigma1-median], [median-lower_sigma2, upper_sigma2-median]]
docs: computes the upper and lower sigma from the median value.
      This functions gives good error estimates for skewed pdf's
      :param sample: 1-D sample
      :return: median, lower_sigma, upper_sigma