class_docstr: Orthogonal Additive Kernels (OAKs) were introduced in [Lu2022additive]_, though
  only for the case of Gaussian base kernels with a Gaussian input data distribution.
  
  The implementation here generalizes OAKs to arbitrary base kernels by using a
  Gauss-Legendre quadrature approximation to the required one-dimensional integrals
  involving the base kernels.
  
  .. [Lu2022additive]
      X. Lu, A. Boukouvalas, and J. Hensman. Additive Gaussian processes revisited.
      Proceedings of the 39th International Conference on Machine Learning. Jul 2022.
class_docstr_tok: ["Orthogonal","Additive","Kernels","(","OAKs",")","were","introduced","in","[","Lu2022additive","]","_",",","though","only","for","the","case","of","Gaussian","base","kernels","with","a","Gaussian","input","data","distribution",".","The","implementation","here","generalizes","OAKs","to","arbitrary","base","kernels","by","using","a","Gauss-Legendre","quadrature","approximation","to","the","required","one-dimensional","integrals","involving","the","base","kernels",".","..","[","Lu2022additive","]","X.","Lu",",","A.","Boukouvalas",",","and","J.","Hensman",".","Additive","Gaussian","processes","revisited",".","Proceedings","of","the","39th","International","Conference","on","Machine","Learning",".","Jul","2022","."]
docstr: Integrates the `d` orthogonalized base kernels over `[0, 1] x [0, 1]`.
  NOTE: If the module is in train mode, this needs to re-compute the normalizer
  each time because the underlying parameters might have changed.
  
  Args:
      eps: Minimum value constraint on the normalizers. Avoids division by zero.
  
  Returns:
      A `d`-dim tensor of normalization constants.
docstr_tok: ["Integrates","the","`","d","`","orthogonalized","base","kernels","over","`","[","0",",","1","]","x","[","0",",","1","]","`",".","NOTE",":","If","the","module","is","in","train","mode",",","this","needs","to","re-compute","the","normalizer","each","time","because","the","underlying","parameters","might","have","changed",".","Args",":","eps",":","Minimum","value","constraint","on","the","normalizers",".","Avoids","division","by","zero",".","Returns",":","A","`","d","`","-dim","tensor","of","normalization","constants","."]
code: def normalizer(self, eps: float = 1e-6) -> Tensor:
      """Integrates the `d` orthogonalized base kernels over `[0, 1] x [0, 1]`.
      NOTE: If the module is in train mode, this needs to re-compute the normalizer
      each time because the underlying parameters might have changed.
  
      Args:
          eps: Minimum value constraint on the normalizers. Avoids division by zero.
  
      Returns:
          A `d`-dim tensor of normalization constants.
      """
      if self.train() or getattr(self, "_normalizer", None) is None:
          self._normalizer = (
              self.w.T @ self.k(self.z, self.z) @ self.w
          ).clamp(eps)
      return self._normalizer
  
imports: import math
  from typing import List, Optional, Tuple
  import numpy
  import torch
  from botorch.exceptions.errors import UnsupportedError
  from gpytorch.constraints import Interval, Positive
  from gpytorch.kernels import Kernel
  from torch import nn, Tensor
label_desc: Use image node_id 8 for calling the OrthogonalAdditiveKernel obj's underlying member method code with example usage: obj.normalizer(eps) and returns: self