class_docstr: Implements REMBO (Bayesian optimization in a linear subspace).
  
  The (D x d) projection matrix A must be provided, and must be that used for
  the initialization. In the original REMBO paper A ~ N(0, 1). Box bounds
  in the low-d space must also be provided, which in the REMBO paper should
  be [(-sqrt(d), sqrt(d)]^d.
  
  Function evaluations happen in the high-D space, and so the arms on the
  experiment will also be tracked in the high-D space. This class maintains
  a list of points in the low-d spac that have been launched, so we can match
  arms in high-D space back to their low-d point on update.
  
  Args:
      A: (D x d) projection matrix.
      initial_X_d: Points in low-d space for initial data.
      bounds_d: Box bounds in the low-d space.
      kwargs: kwargs for BotorchModel init
code: def __init__(
      self,
      A: Tensor,
      initial_X_d: Tensor,
      bounds_d: List[Tuple[float, float]],
      **kwargs: Any,
  ) -> None:
      warn(
          "REMBO is deprecated and does not guarantee correctness. "
          "It will be removed in Ax 0.5.0.",
          DeprecationWarning,
      )
      self.A = A
      # compute pseudo inverse once and cache it
      self._pinvA: Tensor = torch.pinverse(A)
      # Projected points in low-d space generated in the optimization
      self.X_d: List[Tensor] = list(initial_X_d)
      # Projected points that were generated by this model
      self.X_d_gen: List[Tensor] = []
      self.bounds_d = bounds_d
      self.num_outputs = 0
      super().__init__(**kwargs)
  
imports: import dataclasses
  from typing import Any, List, Optional, Tuple
  from warnings import warn
  import torch
  from ax.core.search_space import SearchSpaceDigest
  from ax.core.types import TCandidateMetadata
  from ax.models.torch.botorch import BotorchModel
  from ax.models.torch_base import TorchGenResults, TorchModel, TorchOptConfig
  from ax.utils.common.docutils import copy_doc
  from botorch.utils.datasets import SupervisedDataset
  from torch import Tensor
label_desc: Use image node_id 1 to create a new REMBO object from inherited base classes: BotorchModel with example: obj = REMBO(A, initial_X_d, bounds_d)