code: def sample(self, n=1):
          
          samples = np.empty((n, self.n_rvs))
          idxs_to_sample = np.arange(n)
  
          iters = 0
  
          while idxs_to_sample.size and iters < self._maxiters:
              samples[idxs_to_sample] = self._dist.sample(len(idxs_to_sample))
  
              idxs_to_sample = idxs_to_sample[np.nonzero(np.logical_not(
                  self._model.are_models_valid(samples[idxs_to_sample, :])
              ))[0]]
  
              iters += 1
  
          if idxs_to_sample.size:
              raise RuntimeError("Did not successfully postselect within {} iterations.".format(self._maxiters))
  
          return samples
docs: Returns one or more samples from this probability distribution.
  
          :param int n: Number of samples to return.
          :return numpy.ndarray: An array containing samples from the
              distribution of shape ``(n, d)``, where ``d`` is the number of
              random variables.