code: def sample(self, sample_indices=None, num_samples=1):
  		
  		if sample_indices is None:
  			sample_indices = np.random.choice(self.data.shape[0], size=num_samples)
  		samples = self.data[sample_indices]
  
  		samples = samples.squeeze()
  		
  		if self.num_values == 1:
  			# handle cases where there is only one value!
  			return(samples)
  		
  		probs = self.bw * np.ones(self.num_values)/(self.num_values-1)
  		probs[0] = 1-self.bw
  		
  		delta = np.random.choice(self.num_values, size=num_samples, p = probs)
  		samples = np.mod(samples + delta, self.num_values)	
  
  		return(samples)
docs: returns samples according to the KDE
  		
  			Parameters
  			----------
  				sample_inices: list of ints
  					Indices into the training data used as centers for the samples
  				
  				num_samples: int
  					if samples_indices is None, this specifies how many samples
  					are drawn.