class_docstr: Class for performing sampling using simple
  Hamiltonian Monte Carlo
  
  Parameters
  ----------
  model: An instance pgmpy.models
      Model from which sampling has to be done
  
  grad_log_pdf: A subclass of pgmpy.inference.continuous.BaseGradLogPDF, defaults to None
      A class to find log and gradient of log distribution for a given assignment
      If None, then will use model.get_gradient_log_pdf
  
  simulate_dynamics: A subclass of pgmpy.inference.continuous.BaseSimulateHamiltonianDynamics
      A class to propose future values of momentum and position in time by simulating
      Hamiltonian Dynamics
  
  Example
  -------
  >>> from pgmpy.sampling import HamiltonianMC as HMC, LeapFrog, GradLogPDFGaussian
  >>> from pgmpy.factors.continuous import GaussianDistribution as JGD
  >>> import numpy as np
  >>> mean = np.array([-3, 4])
  >>> covariance = np.array([[3, 0.7], [0.7, 5]])
  >>> model = JGD(['x', 'y'], mean, covariance)
  >>> sampler = HMC(model=model, grad_log_pdf=GradLogPDFGaussian, simulate_dynamics=LeapFrog)
  >>> samples = sampler.sample(initial_pos=np.array([1, 1]), num_samples = 10000,
  ...                          trajectory_length=2, stepsize=0.4, return_type='recarray')
  >>> samples
  rec.array([(1.0, 1.0), (-3.1861687131079086, 3.7940994520145654),
   (-1.6920542547310844, 6.347410703806017), ...,
   (-1.8093621120575312, 5.940860883943261),
   (0.3933248026088032, 6.3853098838119235),
   (-0.8654072934719572, 6.023803629334816)],
            dtype=[('x', '<f8'), ('y', '<f8')])
  
  >>> samples = np.array([samples[var_name] for var_name in model.variables])
  >>> np.cov(samples)
  array([[ 3.0352818 ,  0.71379304],
         [ 0.71379304,  4.91776713]])
  >>> sampler.accepted_proposals
  9932.0
  >>> sampler.acceptance_rate
  0.9932
  
  References
  ----------
  R.Neal. Handbook of Markov Chain Monte Carlo,
  chapter 5: MCMC Using Hamiltonian Dynamics.
  CRC Press, 2011.
class_docstr_tok: ["Class","for","performing","sampling","using","simple","Hamiltonian","Monte","Carlo","Parameters","--","--","--","--","--","model",":","An","instance","pgmpy.models","Model","from","which","sampling","has","to","be","done","grad_log_pdf",":","A","subclass","of","pgmpy.inference.continuous.BaseGradLogPDF",",","defaults","to","None","A","class","to","find","log","and","gradient","of","log","distribution","for","a","given","assignment","If","None",",","then","will","use","model.get_gradient_log_pdf","simulate_dynamics",":","A","subclass","of","pgmpy.inference.continuous.BaseSimulateHamiltonianDynamics","A","class","to","propose","future","values","of","momentum","and","position","in","time","by","simulating","Hamiltonian","Dynamics","Example","--","--","--","-",">",">",">","from","pgmpy.sampling","import","HamiltonianMC","as","HMC",",","LeapFrog",",","GradLogPDFGaussian",">",">",">","from","pgmpy.factors.continuous","import","GaussianDistribution","as","JGD",">",">",">","import","numpy","as","np",">",">",">","mean","=","np.array","(","[","-3",",","4","]",")",">",">",">","covariance","=","np.array","(","[","[","3",",","0.7","]",",","[","0.7",",","5","]","]",")",">",">",">","model","=","JGD","(","[","'","x","'",",","'","y","'","]",",","mean",",","covariance",")",">",">",">","sampler","=","HMC","(","model=model",",","grad_log_pdf=GradLogPDFGaussian",",","simulate_dynamics=LeapFrog",")",">",">",">","samples","=","sampler.sample","(","initial_pos=np.array","(","[","1",",","1","]",")",",","num_samples","=","10000",",","...","trajectory_length=2",",","stepsize=0.4",",","return_type='recarray","'",")",">",">",">","samples","rec.array","(","[","(","1.0",",","1.0",")",",","(","-3.1861687131079086",",","3.7940994520145654",")",",","(","-1.6920542547310844",",","6.347410703806017",")",",","...",",","(","-1.8093621120575312",",","5.940860883943261",")",",","(","0.3933248026088032",",","6.3853098838119235",")",",","(","-0.8654072934719572",",","6.023803629334816",")","]",",","dtype=","[","(","'","x","'",",","'","<","f8","'",")",",","(","'","y","'",",","'","<","f8","'",")","]",")",">",">",">","samples","=","np.array","(","[","samples","[","var_name","]","for","var_name","in","model.variables","]",")",">",">",">","np.cov","(","samples",")","array","(","[","[","3.0352818",",","0.71379304","]",",","[","0.71379304",",","4.91776713","]","]",")",">",">",">","sampler.accepted_proposals","9932.0",">",">",">","sampler.acceptance_rate","0.9932","References","--","--","--","--","--","R.Neal",".","Handbook","of","Markov","Chain","Monte","Carlo",",","chapter","5",":","MCMC","Using","Hamiltonian","Dynamics",".","CRC","Press",",","2011","."]
docstr: Returns the acceptance probability for given new position(position) and momentum
docstr_tok: ["Returns","the","acceptance","probability","for","given","new","position","(","position",")","and","momentum"]
code: 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 * float(
          np.dot(momentum_bar.T, momentum_bar)
          - np.dot(momentum.T, momentum)
      )
  
      # acceptance probability
      return np.exp(potential_change - kinetic_change)
  
file_path: pgmpy/pgmpy/sampling/HMC.py
imports: from math import sqrt
  import numpy
  from tqdm.auto import tqdm
  from pgmpy.sampling import BaseGradLogPDF, BaseSimulateHamiltonianDynamics, LeapFrog, _return_samples
  from pgmpy.utils import _check_1d_array_object, _check_length_equal
label_desc: Use image node_id 2 for calling the HamiltonianMC obj's underlying member method code with example usage: obj._acceptance_prob(position, position_bar, momentum, momentum_bar) and returns: np