class_docstr: Base class for kernels used in this Gaussian Process module.
  
  Every inherited class should implement a :meth:`forward` pass which takes inputs
  :math:`X`, :math:`Z` and returns their covariance matrix.
  
  To construct a new kernel from the old ones, we can use methods :meth:`add`,
  :meth:`mul`, :meth:`exp`, :meth:`warp`, :meth:`vertical_scale`.
  
  References:
  
  [1] `Gaussian Processes for Machine Learning`,
  Carl E. Rasmussen, Christopher K. I. Williams
  
  :param int input_dim: Number of feature dimensions of inputs.
  :param torch.Tensor variance: Variance parameter of this kernel.
  :param list active_dims: List of feature dimensions of the input which the kernel
      acts on.
code: def __init__(self, input_dim, active_dims=None):
      super().__init__()
  
      if active_dims is None:
          active_dims = list(range(input_dim))
      elif input_dim != len(active_dims):
          raise ValueError(
              "Input size and the length of active dimensionals should be equal."
          )
      self.input_dim = input_dim
      self.active_dims = active_dims
  
imports: import numbers
  from pyro.contrib.gp.parameterized import Parameterized
label_desc: Use image node_id 1 to create a new Kernel object from inherited base classes: Parameterized with example: obj = Kernel(input_dim, active_dims)