docs: def sample_truncated_gaussian_vector(data, uncertainties, bounds=None):
      '''
      Samples a Gaussian distribution subject to boundaries on the data
  
      :param numpy.ndarray data:
          Vector of N data values
      :param numpy.ndarray uncertainties:
          Vector of N data uncertainties
      :param int number_bootstraps:
          Number of bootstrap samples
      :param tuple bounds:
          (Lower, Upper) bound of data space
      '''
      nvals = len(data)
      if bounds:
          # if bounds[0] or (fabs(bounds[0]) < PRECISION):
          if bounds[0] is not None:
              lower_bound = (bounds[0] - data) / uncertainties
          else:
              lower_bound = -np.inf * np.ones_like(data)
  
          # if bounds[1] or (fabs(bounds[1]) < PRECISION):
          if bounds[1] is not None:
              upper_bound = (bounds[1] - data) / uncertainties
          else:
              upper_bound = np.inf * np.ones_like(data)
          sample = hmtk_truncnorm.rvs(lower_bound, upper_bound, size=nvals)
  
      else:
          sample = np.random.normal(0., 1., nvals)
      return data + uncertainties * sample