code: def propose_live(self):
          
  
          # Copy a random live point.
          i = self.rstate.randint(self.nlive)
          u = self.live_u[i, :]
  
          # Check for ellipsoid overlap.
          ell_idxs = self.mell.within(u)
          nidx = len(ell_idxs)
  
          # Automatically trigger an update if we're not in any ellipsoid.
          if nidx == 0:
              try:
                  # Expected ln(prior volume) at a given iteration.
                  expected_vol = math.exp(self.saved_logvol[-1] - self.dlv)
              except:
                  # Expected ln(prior volume) at the first iteration.
                  expected_vol = math.exp(-self.dlv)
              pointvol = expected_vol / self.nlive  # minimum point volume
  
              # Update the bounding ellipsoids.
              bound = self.update(pointvol)
              if self.save_bounds:
                  self.bound.append(bound)
              self.nbound += 1
              self.since_update = 0
  
              # Check for ellipsoid overlap (again).
              ell_idxs = self.mell.within(u)
              nidx = len(ell_idxs)
  
          # Pick a random ellipsoid that encompasses `u`.
          ell_idx = ell_idxs[self.rstate.randint(nidx)]
  
          # Choose axes.
          if self.sampling in ['rwalk', 'rstagger', 'rslice']:
              ax = self.mell.ells[ell_idx].axes
          elif self.sampling == 'slice':
              ax = self.mell.ells[ell_idx].paxes
          else:
              ax = np.identity(self.npdim)
  
          return u, ax
docs: Return a live point/axes to be used by other sampling methods.