code: def solver(self) -> MVNXPB:
      if self._solver is None:
          self._solver = MVNXPB(
              covariance_matrix=self.covariance_matrix,
              bounds=self.bounds - self.loc.unsqueeze(-1),
          )
          self._solver.solve()
      return self._solver
  
file_path: botorch/botorch/utils/probability/truncated_multivariate_normal.py
imports: from __future__ import annotations
  from typing import Optional, Sequence
  import torch
  from botorch.utils.probability.lin_ess import LinearEllipticalSliceSampler
  from botorch.utils.probability.mvnxpb import MVNXPB
  from botorch.utils.probability.utils import get_constants_like
  from torch import Tensor
  from torch.distributions.multivariate_normal import MultivariateNormal
label_desc: Use image node_id 5 for calling the TruncatedMultivariateNormal obj's underlying member method code with example usage: obj.solver() and returns: self