docs: def _acceptance_prob(self, position, position_bar, momentum, momentum_bar):
          """
          Returns the acceptance probability for given new position(position) and momentum
          """
  
          # Parameters to help in evaluating Joint distribution P(position, momentum)
          _, logp = self.grad_log_pdf(position, self.model).get_gradient_log_pdf()
          _, logp_bar = self.grad_log_pdf(position_bar, self.model).get_gradient_log_pdf()
  
          # acceptance_prob = P(position_bar, momentum_bar)/ P(position, momentum)
          potential_change = logp_bar - logp  # Negative change
          kinetic_change = 0.5 * np.float(np.dot(momentum_bar.T, momentum_bar) - np.dot(momentum.T, momentum))
  
          # acceptance probability
          return np.exp(potential_change - kinetic_change)