docstr: Distribution of `Y ⊥ X = Y - E[Y | X]`, where `Y ~ gauss` and `X ~ untrunc`
  is the untruncated version of `Z ~ trunc`.
docstr_tok: ["Distribution","of","`","Y","\u22a5","X","=","Y","-","E","[","Y","|","X","]","`",",","where","`","Y","~","gauss","`","and","`","X","~","untrunc","`","is","the","untruncated","version","of","`","Z","~","trunc","`","."]
code: def _orthogonalized_gauss(self) -> MultivariateNormal:
      r"""Distribution of `Y ⊥ X = Y - E[Y | X]`, where `Y ~ gauss` and `X ~ untrunc`
      is the untruncated version of `Z ~ trunc`."""
      n = self.gauss.loc.shape[-1]
      parameters = {"loc": torch.zeros_like(self.gauss.loc)}
      if "scale_tril" in self.__dict__:
          parameters["scale_tril"] = self.scale_tril[..., -n:, -n:]
      else:
          beta = self._iLxx_Kxy
          parameters["covariance_matrix"] = (
              self.gauss.covariance_matrix
              - beta.transpose(-1, -2) @ beta
          )
      return MultivariateNormal(
          **parameters, validate_args=self._validate_args
      )
  
imports: from __future__ import annotations
  from inspect import getmembers
  from typing import Optional, Sequence, Union
  import torch
  from botorch.utils.probability.linalg import augment_cholesky, block_matrix_concat
  from botorch.utils.probability.mvnxpb import MVNXPB
  from botorch.utils.probability.truncated_multivariate_normal import TruncatedMultivariateNormal
  from linear_operator.operators import LinearOperator
  from linear_operator.utils.errors import NotPSDError
  from torch import Tensor
  from torch.distributions.multivariate_normal import Distribution, MultivariateNormal
  from torch.distributions.utils import lazy_property
  from torch.nn.functional import pad
label_desc: Use image node_id 9 for calling the UnifiedSkewNormal obj's underlying member method code with example usage: obj._orthogonalized_gauss() and returns: MultivariateNormal