class_docstr: Auxiliary variable reparameterizer for
  :class:`~pyro.distributions.LinearHMM` random variables.
  
  This defers to component reparameterizers to create auxiliary random
  variables conditioned on which the process becomes a
  :class:`~pyro.distributions.GaussianHMM` . If the ``observation_dist`` is a
  :class:`~pyro.distributions.TransformedDistribution` this reorders those
  transforms so that the result is a
  :class:`~pyro.distributions.TransformedDistribution` of
  :class:`~pyro.distributions.GaussianHMM` .
  
  This is useful for training the parameters of a
  :class:`~pyro.distributions.LinearHMM` distribution, whose
  :meth:`~pyro.distributions.LinearHMM.log_prob` method is undefined.  To
  perform inference in the presence of non-Gaussian factors such as
  :meth:`~pyro.distributions.Stable`, :meth:`~pyro.distributions.StudentT` or
  :meth:`~pyro.distributions.LogNormal` , configure with
  :class:`~pyro.infer.reparam.studentt.StudentTReparam` ,
  :class:`~pyro.infer.reparam.stable.StableReparam` ,
  :class:`~pyro.infer.reparam.stable.SymmetricStableReparam` , etc.  component
  reparameterizers for ``init``, ``trans``, and ``scale``. For example::
  
      hmm = LinearHMM(
          init_dist=Stable(1,0,1,0).expand([2]).to_event(1),
          trans_matrix=torch.eye(2),
          trans_dist=MultivariateNormal(torch.zeros(2), torch.eye(2)),
          obs_matrix=torch.eye(2),
          obs_dist=TransformedDistribution(
              Stable(1.5,-0.5,1.0).expand([2]).to_event(1),
              ExpTransform()))
  
      rep = LinearHMMReparam(init=SymmetricStableReparam(),
                             obs=StableReparam())
  
      with poutine.reparam(config={"hmm": rep}):
          pyro.sample("hmm", hmm, obs=data)
  
  :param init: Optional reparameterizer for the initial distribution.
  :type init: ~pyro.infer.reparam.reparam.Reparam
  :param trans: Optional reparameterizer for the transition distribution.
  :type trans: ~pyro.infer.reparam.reparam.Reparam
  :param obs: Optional reparameterizer for the observation distribution.
  :type obs: ~pyro.infer.reparam.reparam.Reparam
class_docstr_tok: ["Auxiliary","variable","reparameterizer","for",":","class",":","`","~pyro.distributions.LinearHMM","`","random","variables",".","This","defers","to","component","reparameterizers","to","create","auxiliary","random","variables","conditioned","on","which","the","process","becomes","a",":","class",":","`","~pyro.distributions.GaussianHMM","`",".","If","the","``","observation_dist","``","is","a",":","class",":","`","~pyro.distributions.TransformedDistribution","`","this","reorders","those","transforms","so","that","the","result","is","a",":","class",":","`","~pyro.distributions.TransformedDistribution","`","of",":","class",":","`","~pyro.distributions.GaussianHMM","`",".","This","is","useful","for","training","the","parameters","of","a",":","class",":","`","~pyro.distributions.LinearHMM","`","distribution",",","whose",":","meth",":","`","~pyro.distributions.LinearHMM.log_prob","`","method","is","undefined",".","To","perform","inference","in","the","presence","of","non-Gaussian","factors","such","as",":","meth",":","`","~pyro.distributions.Stable","`",",",":","meth",":","`","~pyro.distributions.StudentT","`","or",":","meth",":","`","~pyro.distributions.LogNormal","`",",","configure","with",":","class",":","`","~pyro.infer.reparam.studentt.StudentTReparam","`",",",":","class",":","`","~pyro.infer.reparam.stable.StableReparam","`",",",":","class",":","`","~pyro.infer.reparam.stable.SymmetricStableReparam","`",",","etc",".","component","reparameterizers","for","``","init","``",",","``","trans","``",",","and","``","scale","``",".","For","example",":",":","hmm","=","LinearHMM","(","init_dist=Stable","(","1,0,1,0",")",".expand","(","[","2","]",")",".to_event","(","1",")",",","trans_matrix=torch.eye","(","2",")",",","trans_dist=MultivariateNormal","(","torch.zeros","(","2",")",",","torch.eye","(","2",")",")",",","obs_matrix=torch.eye","(","2",")",",","obs_dist=TransformedDistribution","(","Stable","(","1.5",",","-0.5,1.0",")",".expand","(","[","2","]",")",".to_event","(","1",")",",","ExpTransform","(",")",")",")","rep","=","LinearHMMReparam","(","init=SymmetricStableReparam","(",")",",","obs=StableReparam","(",")",")","with","poutine.reparam","(","config=","{","``","hmm","''",":","rep","}",")",":","pyro.sample","(","``","hmm","''",",","hmm",",","obs=data",")",":","param","init",":","Optional","reparameterizer","for","the","initial","distribution",".",":","type","init",":","~pyro.infer.reparam.reparam.Reparam",":","param","trans",":","Optional","reparameterizer","for","the","transition","distribution",".",":","type","trans",":","~pyro.infer.reparam.reparam.Reparam",":","param","obs",":","Optional","reparameterizer","for","the","observation","distribution",".",":","type","obs",":","~pyro.infer.reparam.reparam.Reparam"]
code: def __init__(self, init=None, trans=None, obs=None):
      assert init is None or isinstance(init, Reparam)
      assert trans is None or isinstance(trans, Reparam)
      assert obs is None or isinstance(obs, Reparam)
      self.init = init
      self.trans = trans
      self.obs = obs
  
imports: import pyro.distributions
  from .reparam import Reparam
label_desc: Use image node_id 1 to create a new LinearHMMReparam object from inherited base classes: Reparam with example: obj = LinearHMMReparam(init, trans, obs)