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: Method for choosing initial value of stepsize
  
  References
  -----------
  Matthew D. Hoffman, Andrew Gelman, The No-U-Turn Sampler: Adaptively
  Setting Path Lengths in Hamiltonian Monte Carlo. Journal of
  Machine Learning Research 15 (2014) 1351-1381
  Algorithm 4 : Heuristic for choosing an initial value of epsilon
docstr_tok: ["Method","for","choosing","initial","value","of","stepsize","References","--","--","--","--","--","-","Matthew","D.","Hoffman",",","Andrew","Gelman",",","The","No-U-Turn","Sampler",":","Adaptively","Setting","Path","Lengths","in","Hamiltonian","Monte","Carlo",".","Journal","of","Machine","Learning","Research","15","(","2014",")","1351-1381","Algorithm","4",":","Heuristic","for","choosing","an","initial","value","of","epsilon"]
code: def _find_reasonable_stepsize(self, position, stepsize_app=1):
      """
      Method for choosing initial value of stepsize
  
      References
      -----------
      Matthew D. Hoffman, Andrew Gelman, The No-U-Turn Sampler: Adaptively
      Setting Path Lengths in Hamiltonian Monte Carlo. Journal of
      Machine Learning Research 15 (2014) 1351-1381
      Algorithm 4 : Heuristic for choosing an initial value of epsilon
      """
      # momentum = N(0, I)
      momentum = np.reshape(
          np.random.normal(0, 1, len(position)), position.shape
      )
  
      # Take a single step in time
      position_bar, momentum_bar, _ = self.simulate_dynamics(
          self.model,
          position,
          momentum,
          stepsize_app,
          self.grad_log_pdf,
      ).get_proposed_values()
  
      acceptance_prob = self._acceptance_prob(
          position, position_bar, momentum, momentum_bar
      )
  
      # a = 2I[acceptance_prob] -1
      a = 2 * (acceptance_prob > 0.5) - 1
  
      condition = self._get_condition(acceptance_prob, a)
  
      while condition:
          stepsize_app = (2**a) * stepsize_app
  
          position_bar, momentum_bar, _ = self.simulate_dynamics(
              self.model,
              position,
              momentum,
              stepsize_app,
              self.grad_log_pdf,
          ).get_proposed_values()
  
          acceptance_prob = self._acceptance_prob(
              position, position_bar, momentum, momentum_bar
          )
  
          condition = self._get_condition(acceptance_prob, a)
  
      return stepsize_app
  
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 4 for calling the HamiltonianMC obj's underlying member method code with example usage: obj._find_reasonable_stepsize(position, stepsize_app) and returns: stepsize_app