class_docstr: A Kernel decorator for kernels with additive structure. If a kernel decomposes
  additively, then this module will be much more computationally efficient.
  
  A kernel function `k` decomposes additively if it can be written as
  
  .. math::
  
     \begin{equation*}
        k(\mathbf{x_1}, \mathbf{x_2}) = k'(x_1^{(1)}, x_2^{(1)}) + \ldots + k'(x_1^{(d)}, x_2^{(d)})
     \end{equation*}
  
  for some kernel :math:`k'` that operates on a subset of dimensions.
  
  Given a `b x n x d` input, `AdditiveStructureKernel` computes `d` one-dimensional kernels
  (using the supplied base_kernel), and then adds the component kernels together.
  Unlike :class:`~gpytorch.kernels.AdditiveKernel`, `AdditiveStructureKernel` computes each
  of the additive terms in batch, making it very fast.
  
  Args:
      base_kernel (Kernel):
          The kernel to approximate with KISS-GP
      num_dims (int):
          The dimension of the input data.
      active_dims (tuple of ints, optional):
          Passed down to the `base_kernel`.
code: def __init__(
      self,
      base_kernel: Kernel,
      num_dims: int,
      active_dims: Optional[Tuple[int, ...]] = None,
  ):
      super(AdditiveStructureKernel, self).__init__(
          active_dims=active_dims
      )
      self.base_kernel = base_kernel
      self.num_dims = num_dims
  
file_path: gpytorch/gpytorch/kernels/additive_structure_kernel.py
imports: from typing import Optional, Tuple
  from .kernel import Kernel
label_desc: Use image node_id 2 to create a new AdditiveStructureKernel object from inherited base classes: Kernel with example: obj = AdditiveStructureKernel(base_kernel, num_dims, active_dims)