class_docstr: Sample from a set of points according to a tempered acquisition value.
  
  Given an acquisition function `acq_func`, this sampling strategies draws
  samples from a `batch_shape x N x d`-dim tensor `X` according to a multinomial
  distribution over its indices given by
  
      weight(X[..., i, :]) ~ exp(eta * standardize(acq_func(X[..., i, :])))
  
  where `standardize(Y)` standardizes `Y` to zero mean and unit variance. As the
  temperature parameter `eta -> 0`, this approaches uniform sampling, while as
  `eta -> infty`, this approaches selecting the maximizer(s) of the acquisition
  function `acq_func`.
  
  Example:
      >>> UCB = UpperConfidenceBound(model, beta=0.1)
      >>> BMUCB = BoltzmannSampling(UCB, eta=0.5)
      >>> X = torch.rand(2, 100, 3)
      >>> sampled_X = BMUCB(X, num_samples=5)
docstr: Boltzmann Acquisition Value Sampling.
  
  Args:
      acq_func: The acquisition function; to be evaluated in batch at the
          individual points of a q-batch (not jointly, as is the case for
          acquisition functions). Can be analytic or Monte-Carlo.
      eta: The temperature parameter in the softmax.
      replacement: If True, sample with replacement.
docstr_tok: ["Boltzmann","Acquisition","Value","Sampling",".","Args",":","acq_func",":","The","acquisition","function",";","to","be","evaluated","in","batch","at","the","individual","points","of","a","q-batch","(","not","jointly",",","as","is","the","case","for","acquisition","functions",")",".","Can","be","analytic","or","Monte-Carlo",".","eta",":","The","temperature","parameter","in","the","softmax",".","replacement",":","If","True",",","sample","with","replacement","."]
code: def __init__(
      self,
      acq_func: AcquisitionFunction,
      eta: float = 1.0,
      replacement: bool = True,
  ) -> None:
      r"""Boltzmann Acquisition Value Sampling.
  
      Args:
          acq_func: The acquisition function; to be evaluated in batch at the
              individual points of a q-batch (not jointly, as is the case for
              acquisition functions). Can be analytic or Monte-Carlo.
          eta: The temperature parameter in the softmax.
          replacement: If True, sample with replacement.
      """
      super().__init__()
      self.acq_func = acq_func
      self.eta = eta
      self.replacement = replacement
  
imports: from __future__ import annotations
  from abc import ABC, abstractmethod
  from typing import Any, Optional, Union
  import torch
  from botorch.acquisition.acquisition import AcquisitionFunction
  from botorch.acquisition.objective import IdentityMCObjective, MCAcquisitionObjective, PosteriorTransform
  from botorch.generation.utils import _flip_sub_unique
  from botorch.models.model import Model
  from botorch.models.model_list_gp_regression import ModelListGP
  from botorch.models.multitask import MultiTaskGP
  from botorch.utils.sampling import batched_multinomial
  from botorch.utils.transforms import standardize
  from torch import Tensor
  from torch.nn import Module
label_desc: Use image node_id 1 to create a new BoltzmannSampling object from inherited base classes: SamplingStrategy with example: obj = BoltzmannSampling(acq_func, eta, replacement)