class_docstr: This class specifies the basic skeleton for a random model.
  
  As random generators do not make use of models, they do not implement
  the fit or predict methods.
  
  These models do not need data, or optimization configs.
  
  To satisfy search space parameter constraints, these models can use
  rejection sampling. To enable rejection sampling for a subclass, only
  only `_gen_samples` needs to be implemented, or alternatively,
  `_gen_unconstrained`/`gen` can be directly implemented.
  
  Attributes:
      deduplicate: If True (defaults to True), a single instantiation
          of the model will not return the same point twice. This flag
          is used in rejection sampling.
      seed: An optional seed value for scrambling.
      generated_points: A set of previously generated points to use
          for deduplication. These should be provided in the raw transformed
          space the model operates in.
      fallback_to_sample_polytope: If True, when rejection sampling fails,
          we fall back to the HitAndRunPolytopeSampler.
class_docstr_tok: ["This","class","specifies","the","basic","skeleton","for","a","random","model",".","As","random","generators","do","not","make","use","of","models",",","they","do","not","implement","the","fit","or","predict","methods",".","These","models","do","not","need","data",",","or","optimization","configs",".","To","satisfy","search","space","parameter","constraints",",","these","models","can","use","rejection","sampling",".","To","enable","rejection","sampling","for","a","subclass",",","only","only","`","_gen_samples","`","needs","to","be","implemented",",","or","alternatively",",","`","_gen_unconstrained","`","\/","`","gen","`","can","be","directly","implemented",".","Attributes",":","deduplicate",":","If","True","(","defaults","to","True",")",",","a","single","instantiation","of","the","model","will","not","return","the","same","point","twice",".","This","flag","is","used","in","rejection","sampling",".","seed",":","An","optional","seed","value","for","scrambling",".","generated_points",":","A","set","of","previously","generated","points","to","use","for","deduplication",".","These","should","be","provided","in","the","raw","transformed","space","the","model","operates","in",".","fallback_to_sample_polytope",":","If","True",",","when","rejection","sampling","fails",",","we","fall","back","to","the","HitAndRunPolytopeSampler","."]
docstr: Generate n points, from an unconstrained parameter space, using _gen_samples.
  
  Args:
      n: Number of points to generate.
      d: Dimension of parameter space.
      tunable_feature_indices: Parameter indices (in d) which are tunable.
      fixed_features: A map {feature_index: value} for features that
          should be fixed to a particular value during generation.
  
  Returns:
      An (n x d) array of generated points.
docstr_tok: ["Generate","n","points",",","from","an","unconstrained","parameter","space",",","using","_gen_samples",".","Args",":","n",":","Number","of","points","to","generate",".","d",":","Dimension","of","parameter","space",".","tunable_feature_indices",":","Parameter","indices","(","in","d",")","which","are","tunable",".","fixed_features",":","A","map","{","feature_index",":","value","}","for","features","that","should","be","fixed","to","a","particular","value","during","generation",".","Returns",":","An","(","n","x","d",")","array","of","generated","points","."]
code: def _gen_unconstrained(
      self,
      n: int,
      d: int,
      tunable_feature_indices: np.ndarray,
      fixed_features: Optional[Dict[int, float]] = None,
  ) -> np.ndarray:
      """Generate n points, from an unconstrained parameter space, using _gen_samples.
  
      Args:
          n: Number of points to generate.
          d: Dimension of parameter space.
          tunable_feature_indices: Parameter indices (in d) which are tunable.
          fixed_features: A map {feature_index: value} for features that
              should be fixed to a particular value during generation.
  
      Returns:
          An (n x d) array of generated points.
  
      """
      tunable_points = self._gen_samples(
          n=n, tunable_d=len(tunable_feature_indices)
      )
      points = add_fixed_features(
          tunable_points=tunable_points,
          d=d,
          tunable_feature_indices=tunable_feature_indices,
          fixed_features=fixed_features,
      )
      return points
  
imports: from logging import Logger
  from typing import Any, Callable, Dict, List, Optional, Tuple
  import numpy
  import torch
  from ax.exceptions.core import SearchSpaceExhausted
  from ax.models.base import Model
  from ax.models.model_utils import add_fixed_features, rejection_sample, tunable_feature_indices, validate_bounds
  from ax.models.types import TConfig
  from ax.utils.common.docutils import copy_doc
  from ax.utils.common.logger import get_logger
  from ax.utils.common.typeutils import checked_cast, checked_cast_to_tuple
  from botorch.utils.sampling import HitAndRunPolytopeSampler
  from torch import Tensor
label_desc: Use image node_id 4 for calling the RandomModel obj's underlying member method code with example usage: obj._gen_unconstrained(n, d, tunable_feature_indices, fixed_features) and returns: points