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 returns a generator type object whose each iteration yields a sample
  using Hamiltonian Monte Carlo
  
  Parameters
  ----------
  initial_pos: A 1d array like object
      Vector representing values of parameter position, the starting
      state in markov chain.
  
  num_samples: int
      Number of samples to be generated
  
  trajectory_length: int or float
      Target trajectory length, stepsize * number of steps(L),
      where L is the number of steps taken per HMC iteration,
      and stepsize is step size for splitting time method.
  
  stepsize: float , defaults to None
      The stepsize for proposing new values of position and momentum in simulate_dynamics
      If None, then will be chosen suitably
  
  Returns
  -------
  genrator: yielding a 1d numpy.array type object for a sample
  
  Examples
  --------
  >>> from pgmpy.sampling import HamiltonianMC as HMC, GradLogPDFGaussian as GLPG
  >>> from pgmpy.factors import GaussianDistribution as JGD
  >>> import numpy as np
  >>> mean = np.array([4, -1])
  >>> covariance = np.array([[3, 0.4], [0.4, 3]])
  >>> model = JGD(['x', 'y'], mean, covariance)
  >>> sampler = HMC(model=model, grad_log_pdf=GLPG)
  >>> gen_samples = sampler.generate_sample(np.array([-1, 1]), num_samples = 10000,
  ...                                       trajectory_length=2, stepsize=0.25)
  >>> samples_array = np.array([sample for sample in gen_samples])
  >>> samples_array
  array([[ 0.1467264 ,  0.27143857],
         [ 4.0371448 ,  0.15871274],
         [ 3.24656208, -1.03742621],
         ...,
         [ 6.45975905,  1.97941306],
         [ 4.89007171,  0.15413156],
         [ 5.9528083 ,  1.92983158]])
  >>> np.cov(samples_array.T)
  array([[ 2.95692642,  0.4379419 ],
         [ 0.4379419 ,  3.00939434]])
  >>> sampler.acceptance_rate
  0.9969
docstr_tok: ["Method","returns","a","generator","type","object","whose","each","iteration","yields","a","sample","using","Hamiltonian","Monte","Carlo","Parameters","--","--","--","--","--","initial_pos",":","A","1d","array","like","object","Vector","representing","values","of","parameter","position",",","the","starting","state","in","markov","chain",".","num_samples",":","int","Number","of","samples","to","be","generated","trajectory_length",":","int","or","float","Target","trajectory","length",",","stepsize","*","number","of","steps","(","L",")",",","where","L","is","the","number","of","steps","taken","per","HMC","iteration",",","and","stepsize","is","step","size","for","splitting","time","method",".","stepsize",":","float",",","defaults","to","None","The","stepsize","for","proposing","new","values","of","position","and","momentum","in","simulate_dynamics","If","None",",","then","will","be","chosen","suitably","Returns","--","--","--","-","genrator",":","yielding","a","1d","numpy.array","type","object","for","a","sample","Examples","--","--","--","--",">",">",">","from","pgmpy.sampling","import","HamiltonianMC","as","HMC",",","GradLogPDFGaussian","as","GLPG",">",">",">","from","pgmpy.factors","import","GaussianDistribution","as","JGD",">",">",">","import","numpy","as","np",">",">",">","mean","=","np.array","(","[","4",",","-1","]",")",">",">",">","covariance","=","np.array","(","[","[","3",",","0.4","]",",","[","0.4",",","3","]","]",")",">",">",">","model","=","JGD","(","[","'","x","'",",","'","y","'","]",",","mean",",","covariance",")",">",">",">","sampler","=","HMC","(","model=model",",","grad_log_pdf=GLPG",")",">",">",">","gen_samples","=","sampler.generate_sample","(","np.array","(","[","-1",",","1","]",")",",","num_samples","=","10000",",","...","trajectory_length=2",",","stepsize=0.25",")",">",">",">","samples_array","=","np.array","(","[","sample","for","sample","in","gen_samples","]",")",">",">",">","samples_array","array","(","[","[","0.1467264",",","0.27143857","]",",","[","4.0371448",",","0.15871274","]",",","[","3.24656208",",","-1.03742621","]",",","...",",","[","6.45975905",",","1.97941306","]",",","[","4.89007171",",","0.15413156","]",",","[","5.9528083",",","1.92983158","]","]",")",">",">",">","np.cov","(","samples_array.T",")","array","(","[","[","2.95692642",",","0.4379419","]",",","[","0.4379419",",","3.00939434","]","]",")",">",">",">","sampler.acceptance_rate","0.9969"]
code: def generate_sample(
      self, initial_pos, num_samples, trajectory_length, stepsize=None
  ):
      """
      Method returns a generator type object whose each iteration yields a sample
      using Hamiltonian Monte Carlo
  
      Parameters
      ----------
      initial_pos: A 1d array like object
          Vector representing values of parameter position, the starting
          state in markov chain.
  
      num_samples: int
          Number of samples to be generated
  
      trajectory_length: int or float
          Target trajectory length, stepsize * number of steps(L),
          where L is the number of steps taken per HMC iteration,
          and stepsize is step size for splitting time method.
  
      stepsize: float , defaults to None
          The stepsize for proposing new values of position and momentum in simulate_dynamics
          If None, then will be chosen suitably
  
      Returns
      -------
      genrator: yielding a 1d numpy.array type object for a sample
  
      Examples
      --------
      >>> from pgmpy.sampling import HamiltonianMC as HMC, GradLogPDFGaussian as GLPG
      >>> from pgmpy.factors import GaussianDistribution as JGD
      >>> import numpy as np
      >>> mean = np.array([4, -1])
      >>> covariance = np.array([[3, 0.4], [0.4, 3]])
      >>> model = JGD(['x', 'y'], mean, covariance)
      >>> sampler = HMC(model=model, grad_log_pdf=GLPG)
      >>> gen_samples = sampler.generate_sample(np.array([-1, 1]), num_samples = 10000,
      ...                                       trajectory_length=2, stepsize=0.25)
      >>> samples_array = np.array([sample for sample in gen_samples])
      >>> samples_array
      array([[ 0.1467264 ,  0.27143857],
             [ 4.0371448 ,  0.15871274],
             [ 3.24656208, -1.03742621],
             ...,
             [ 6.45975905,  1.97941306],
             [ 4.89007171,  0.15413156],
             [ 5.9528083 ,  1.92983158]])
      >>> np.cov(samples_array.T)
      array([[ 2.95692642,  0.4379419 ],
             [ 0.4379419 ,  3.00939434]])
      >>> sampler.acceptance_rate
      0.9969
      """
  
      self.accepted_proposals = 0
      initial_pos = _check_1d_array_object(initial_pos, "initial_pos")
      _check_length_equal(
          initial_pos,
          self.model.variables,
          "initial_pos",
          "model.variables",
      )
  
      if stepsize is None:
          stepsize = self._find_reasonable_stepsize(initial_pos)
  
      lsteps = int(max(1, round(trajectory_length / stepsize, 0)))
      position_m = initial_pos.copy()
  
      for i in range(0, num_samples):
          position_m, _ = self._sample(
              position_m, trajectory_length, stepsize, lsteps
          )
  
          yield position_m
  
      self.acceptance_rate = self.accepted_proposals / num_samples
  
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 7 for calling the HamiltonianMC obj's underlying member method code with example usage: obj.generate_sample(initial_pos, num_samples, trajectory_length, stepsize) without return types