class_docstr: Generation strategy for HeSBO.
  
  Args:
      D: Dimensionality of high-dimensional space
      d: Dimensionality of low-dimensional space
      k: Number of random projections
      init_per_proj: Number of arms to use for random initialization of each
          of the k projections.
      name: Name of strategy
      dtype: torch dtype
      device: torch device
      gp_kwargs: kwargs sent along to the GP model
class_docstr_tok: ["Generation","strategy","for","HeSBO",".","Args",":","D",":","Dimensionality","of","high-dimensional","space","d",":","Dimensionality","of","low-dimensional","space","k",":","Number","of","random","projections","init_per_proj",":","Number","of","arms","to","use","for","random","initialization","of","each","of","the","k","projections",".","name",":","Name","of","strategy","dtype",":","torch","dtype","device",":","torch","device","gp_kwargs",":","kwargs","sent","along","to","the","GP","model"]
docstr: Generate the projection matrix A as a (D x d) tensor
  
  Also return the box bounds for the low-d space.
docstr_tok: ["Generate","the","projection","matrix","A","as","a","(","D","x","d",")","tensor","Also","return","the","box","bounds","for","the","low-d","space","."]
code: def get_projection(
      self, D: int, d: int, dtype: torch.dtype, device: torch.device
  ) -> Tuple[torch.Tensor, List[Tuple[float, float]]]:
      """Generate the projection matrix A as a (D x d) tensor
  
      Also return the box bounds for the low-d space.
      """
      A = torch.zeros((D, d), dtype=dtype, device=device)
      h = torch.randint(d, size=(D,))
      s = 2 * torch.randint(2, size=(D,)) - 1
      for i in range(D):
          A[i, h[i]] = s[i]
  
      bounds_d = [(-1.0, 1.0)] * d
      return A, bounds_d
  
imports: import math
  from collections import defaultdict
  from typing import Any, Dict, List, Optional, Set, Tuple
  import numpy
  import torch
  from ax.core.data import Data
  from ax.core.experiment import Experiment
  from ax.core.generator_run import GeneratorRun
  from ax.core.search_space import SearchSpace
  from ax.modelbridge.factory import DEFAULT_TORCH_DEVICE
  from ax.modelbridge.generation_strategy import GenerationStep, GenerationStrategy
  from ax.modelbridge.random import RandomModelBridge
  from ax.modelbridge.torch import TorchModelBridge
  from ax.modelbridge.transforms.centered_unit_x import CenteredUnitX
  from ax.modelbridge.transforms.standardize_y import StandardizeY
  from ax.models.random.rembo_initializer import REMBOInitializer
  from ax.models.torch.rembo import REMBO
  from ax.utils.common.typeutils import not_none
label_desc: Use image node_id 2 for calling the HeSBOStrategy obj's underlying member method code with example usage: obj.get_projection(D, d, dtype, device) and returns: A,  bounds_d