class_docstr: Abstract Mixin class for acquisition functions using a cached Cholesky.
  
  Specifically, this is for acquisition functions that require sampling from
  the posterior P(f(X_baseline, X) | D). The Cholesky of the posterior
  covariance over f(X_baseline) is cached.
  
  :meta private:
docstr: Cache Cholesky of the posterior covariance over f(X_baseline).
  
  Because `LinearOperator.root_decomposition` is decorated with LinearOperator's
  @cached decorator, this function is doing a lot implicitly:
  
  1) Check if a root decomposition has already been cached to `lazy_covar`.
    Note that it will not have been if `posterior.mvn` is a
    `MultitaskMultivariateNormal`, since we construct `lazy_covar` in that
    case.
  2) If the root decomposition has not been found in the cache, compute it.
  3) Write it to the cache of `lazy_covar`. Note that this will become
    inaccessible if `posterior.mvn` is a `MultitaskMultivariateNormal`,
    since in that case `lazy_covar`'s scope is only this function.
  
  Args:
      posterior: The posterior over f(X_baseline).
docstr_tok: ["Cache","Cholesky","of","the","posterior","covariance","over","f","(","X_baseline",")",".","Because","`","LinearOperator.root_decomposition","`","is","decorated","with","LinearOperator's","@","cached","decorator",",","this","function","is","doing","a","lot","implicitly",":","1",")","Check","if","a","root","decomposition","has","already","been","cached","to","`","lazy_covar","`",".","Note","that","it","will","not","have","been","if","`","posterior.mvn","`","is","a","`","MultitaskMultivariateNormal","`",",","since","we","construct","`","lazy_covar","`","in","that","case",".","2",")","If","the","root","decomposition","has","not","been","found","in","the","cache",",","compute","it",".","3",")","Write","it","to","the","cache","of","`","lazy_covar","`",".","Note","that","this","will","become","inaccessible","if","`","posterior.mvn","`","is","a","`","MultitaskMultivariateNormal","`",",","since","in","that","case","`","lazy_covar","`","'s","scope","is","only","this","function",".","Args",":","posterior",":","The","posterior","over","f","(","X_baseline",")","."]
code: def _compute_root_decomposition(
      self,
      posterior: Posterior,
  ) -> Tensor:
      r"""Cache Cholesky of the posterior covariance over f(X_baseline).
  
      Because `LinearOperator.root_decomposition` is decorated with LinearOperator's
      @cached decorator, this function is doing a lot implicitly:
  
      1) Check if a root decomposition has already been cached to `lazy_covar`.
        Note that it will not have been if `posterior.mvn` is a
        `MultitaskMultivariateNormal`, since we construct `lazy_covar` in that
        case.
      2) If the root decomposition has not been found in the cache, compute it.
      3) Write it to the cache of `lazy_covar`. Note that this will become
        inaccessible if `posterior.mvn` is a `MultitaskMultivariateNormal`,
        since in that case `lazy_covar`'s scope is only this function.
  
      Args:
          posterior: The posterior over f(X_baseline).
      """
      if isinstance(
          posterior.distribution, MultitaskMultivariateNormal
      ):
          lazy_covar = extract_batch_covar(posterior.distribution)
      else:
          lazy_covar = posterior.distribution.lazy_covariance_matrix
      lazy_covar_root = lazy_covar.root_decomposition()
      return lazy_covar_root.root.to_dense()
  
imports: from __future__ import annotations
  import warnings
  from typing import Optional
  import torch
  from botorch.acquisition.acquisition import MCSamplerMixin
  from botorch.exceptions.warnings import BotorchWarning
  from botorch.models.gpytorch import GPyTorchModel
  from botorch.models.higher_order_gp import HigherOrderGP
  from botorch.models.model import Model
  from botorch.models.model_list_gp_regression import ModelListGP
  from botorch.models.multitask import KroneckerMultiTaskGP, MultiTaskGP
  from botorch.posteriors.gpytorch import GPyTorchPosterior
  from botorch.posteriors.posterior import Posterior
  from botorch.sampling.base import MCSampler
  from botorch.utils.low_rank import extract_batch_covar, sample_cached_cholesky
  from gpytorch.distributions.multitask_multivariate_normal import MultitaskMultivariateNormal
  from linear_operator.utils.errors import NanError, NotPSDError
  from torch import Tensor
label_desc: Use image node_id 2 for calling the CachedCholeskyMCSamplerMixin obj's underlying member method code with example usage: obj._compute_root_decomposition(posterior) and returns: lazy_covar_root