class_docstr: An IMQ (inverse multi-quadratic) kernel for use in the SVGD inference algorithm [1]. The bandwidth of the kernel
  is chosen from the particles using a simple heuristic as in reference [2]. The kernel takes the form
  
  :math:`K(x, y) = (\alpha + ||x-y||^2/h)^{\beta}`
  
  where :math:`\alpha` and :math:`\beta` are user-specified parameters and :math:`h` is the bandwidth.
  
  :param float alpha: Kernel hyperparameter, defaults to 0.5.
  :param float beta: Kernel hyperparameter, defaults to -0.5.
  :param float bandwidth_factor: Optional factor by which to scale the bandwidth, defaults to 1.0.
  :ivar float ~.bandwidth_factor: Property that controls the factor by which to scale the bandwidth
      at each iteration.
  
  References
  
  [1] "Stein Points," Wilson Ye Chen, Lester Mackey, Jackson Gorham, Francois-Xavier Briol, Chris. J. Oates.
  [2] "Stein Variational Gradient Descent: A General Purpose Bayesian Inference Algorithm," Qiang Liu, Dilin Wang
docstr: :param float alpha: Kernel hyperparameter, defaults to 0.5.
  :param float beta: Kernel hyperparameter, defaults to -0.5.
  :param float bandwidth_factor: Optional factor by which to scale the bandwidth
docstr_tok: [":","param","float","alpha",":","Kernel","hyperparameter",",","defaults","to","0.5.",":","param","float","beta",":","Kernel","hyperparameter",",","defaults","to","-0.5.",":","param","float","bandwidth_factor",":","Optional","factor","by","which","to","scale","the","bandwidth"]
code: def __init__(self, alpha=0.5, beta=-0.5, bandwidth_factor=None):
      """
      :param float alpha: Kernel hyperparameter, defaults to 0.5.
      :param float beta: Kernel hyperparameter, defaults to -0.5.
      :param float bandwidth_factor: Optional factor by which to scale the bandwidth
      """
      assert alpha > 0.0, "alpha must be positive."
      assert beta < 0.0, "beta must be negative."
      self.alpha = alpha
      self.beta = beta
      self.bandwidth_factor = bandwidth_factor
  
imports: import math
  from abc import ABCMeta, abstractmethod
  import torch
  from torch.distributions import biject_to
  import pyro
  from pyro import poutine
  from pyro.distributions import Delta
  from pyro.distributions.util import copy_docs_from
  from pyro.infer.autoguide.guides import AutoContinuous
  from pyro.infer.autoguide.initialization import init_to_sample
  from pyro.infer.trace_elbo import Trace_ELBO
label_desc: Use image node_id 1 to create a new IMQSteinKernel object from inherited base classes: SteinKernel with example: obj = IMQSteinKernel(alpha, beta, bandwidth_factor)