.. role:: hidden
    :class: hidden-section

gpytorch.distributions
===================================

GPyTorch distribution objects are essentially the same as torch distribution objects.
For the most part, GPyTorch relies on torch's distribution library.
However, we offer two custom distributions.

We implement a custom :obj:`~gpytorch.distributions.MultivariateNormal` that accepts
:obj:`~linear_operator.operators.LinearOperator` objects for covariance matrices. This allows us to use custom
linear algebra operations, which makes this more efficient than PyTorch's MVN implementation.

In addition, we implement a :obj:`~gpytorch.distributions.MultitaskMultivariateNormal` which
can be used with multi-output Gaussian process models.

.. note::

  If Pyro is available, all GPyTorch distribution objects inherit Pyro's distribution methods
  as well.

.. automodule:: gpytorch.distributions
.. currentmodule:: gpytorch.distributions


Distribution
-----------------------------

.. autoclass:: Distribution
   :members:


MultivariateNormal
-----------------------------

.. autoclass:: MultivariateNormal
   :members:
   :special-members: __getitem__


MultitaskMultivariateNormal
----------------------------------

.. autoclass:: MultitaskMultivariateNormal
   :members:
   :special-members: __getitem__


Delta
----------------------------------

.. class:: Delta(v, log_density=0.0, event_dim=0, validate_args=None)

  (Borrowed from Pyro.) Degenerate discrete distribution (a single point).

  Discrete distribution that assigns probability one to the single element in
  its support. Delta distribution parameterized by a random choice should not
  be used with MCMC based inference, as doing so produces incorrect results.

  :param v: The single support element.
  :param log_density: An optional density for this Delta. This is useful to
    keep the class of Delta distributions closed under differentiable
    transformation.
  :param event_dim: Optional event dimension, defaults to zero.
  :type v: torch.Tensor
  :type log_density: torch.Tensor
  :type event_dim: int
