def reset(self):
        """Re-initialize the sampler."""

        # live points
        self.live_u = self.rstate.rand(self.nlive, self.npdim)
        if self.use_pool_ptform:
            # Use the pool to compute the prior transform.
            self.live_v = np.array(list(self.M(self.prior_transform,
                                        np.array(self.live_u))))
        else:
            # Compute the prior transform using the default `map` function.
            self.live_v = np.array(list(map(self.prior_transform,
                                            np.array(self.live_u))))
        if self.use_pool_logl:
            # Use the pool to compute the log-likelihoods.
            self.live_logl = np.array(list(self.M(self.loglikelihood,
                                                  np.array(self.live_v))))
        else:
            # Compute the log-likelihoods using the default `map` function.
            self.live_logl = np.array(list(map(self.loglikelihood,
                                               np.array(self.live_v))))
        self.live_bound = np.zeros(self.nlive, dtype='int')
        self.live_it = np.zeros(self.nlive, dtype='int')

        # parallelism
        self.queue = []
        self.nqueue = 0
        self.unused = 0
        self.used = 0

        # sampling
        self.it = 1
        self.since_update = 0
        self.ncall = self.nlive
        self.bound = [UnitCube(self.npdim)]
        self.nbound = 1
        self.added_live = False

        # results
        self.saved_id = []
        self.saved_u = []
        self.saved_v = []
        self.saved_logl = []
        self.saved_logvol = []
        self.saved_logwt = []
        self.saved_logz = []
        self.saved_logzvar = []
        self.saved_h = []
        self.saved_nc = []
        self.saved_boundidx = []
        self.saved_it = []
        self.saved_bounditer = []
        self.saved_scale = []