class_docstr: This strategy constrains the inducing points to a grid and applies a deterministic
  relationship between :math:`\mathbf f` and :math:`\mathbf u`.
  It was introduced by `Wilson et al. (2016)`_.
  
  Here, the inducing points are not learned. Instead, the strategy
  automatically creates inducing points based on a set of grid sizes and grid
  bounds.
  
  .. _Wilson et al. (2016):
      https://arxiv.org/abs/1611.00336
  
  :param ~gpytorch.models.ApproximateGP model: Model this strategy is applied to.
      Typically passed in when the VariationalStrategy is created in the
      __init__ method of the user defined model.
  :param int grid_size: Size of the grid
  :param list grid_bounds: Bounds of each dimension of the grid (should be a list of (float, float) tuples)
  :param ~gpytorch.variational.VariationalDistribution variational_distribution: A
      VariationalDistribution object that represents the form of the variational distribution :math:`q(\mathbf u)`
class_docstr_tok: ["This","strategy","constrains","the","inducing","points","to","a","grid","and","applies","a","deterministic","relationship","between",":","math",":","`","\\mathbf","f","`","and",":","math",":","`","\\mathbf","u","`",".","It","was","introduced","by","`","Wilson","et","al",".","(","2016",")","`","_",".","Here",",","the","inducing","points","are","not","learned",".","Instead",",","the","strategy","automatically","creates","inducing","points","based","on","a","set","of","grid","sizes","and","grid","bounds",".","..","_Wilson","et","al",".","(","2016",")",":","https",":","\/\/arxiv.org\/abs\/1611.00336",":","param","~gpytorch.models.ApproximateGP","model",":","Model","this","strategy","is","applied","to",".","Typically","passed","in","when","the","VariationalStrategy","is","created","in","the","__init__","method","of","the","user","defined","model",".",":","param","int","grid_size",":","Size","of","the","grid",":","param","list","grid_bounds",":","Bounds","of","each","dimension","of","the","grid","(","should","be","a","list","of","(","float",",","float",")","tuples",")",":","param","~gpytorch.variational.VariationalDistribution","variational_distribution",":","A","VariationalDistribution","object","that","represents","the","form","of","the","variational","distribution",":","math",":","`","q","(","\\mathbf","u",")","`"]
code: def prior_distribution(self):
      out = self.model.forward(self.inducing_points)
      # TODO: investigate why smaller than 1e-3 breaks some tests
      res = MultivariateNormal(
          out.mean, out.lazy_covariance_matrix.add_jitter(1e-3)
      )
      return res
  
file_path: gpytorch/gpytorch/variational/grid_interpolation_variational_strategy.py
imports: import torch
  from linear_operator.operators import InterpolatedLinearOperator
  from linear_operator.utils.interpolation import left_interp
  from ..distributions import MultivariateNormal
  from ..utils.interpolation import Interpolation
  from ..utils.memoize import cached
  from ._variational_strategy import _VariationalStrategy
label_desc: Use image node_id 3 for calling the GridInterpolationVariationalStrategy obj's underlying member method code with example usage: obj.prior_distribution() and returns: res