class_docstr: Convert ordered ChoiceParameters to integer RangeParameters.
  
  Parameters will be transformed to an integer RangeParameters, mapped from the
  original choice domain to a contiguous range `0, 1, ..., n_choices - 1`
  of integers. Does not transform task parameters.
  
  In the inverse transform, parameters will be mapped back onto the original domain.
  
  In order to encode all ChoiceParameters (not just ordered ChoiceParameters),
  use ChoiceEncode instead.
  
  Transform is done in-place.
class_docstr_tok: ["Convert","ordered","ChoiceParameters","to","integer","RangeParameters",".","Parameters","will","be","transformed","to","an","integer","RangeParameters",",","mapped","from","the","original","choice","domain","to","a","contiguous","range","`","0",",","1",",","...",",","n_choices","-","1","`","of","integers",".","Does","not","transform","task","parameters",".","In","the","inverse","transform",",","parameters","will","be","mapped","back","onto","the","original","domain",".","In","order","to","encode","all","ChoiceParameters","(","not","just","ordered","ChoiceParameters",")",",","use","ChoiceEncode","instead",".","Transform","is","done","in-place","."]
code: def _transform_search_space(
      self, search_space: SearchSpace
  ) -> SearchSpace:
      transformed_parameters: Dict[str, Parameter] = {}
      for p_name, p in search_space.parameters.items():
          if p_name in self.encoded_parameters and isinstance(
              p, ChoiceParameter
          ):
              if p.is_fidelity:
                  raise ValueError(
                      f"Cannot choice-encode fidelity parameter {p_name}"
                  )
              # Choice(|K|) => Range(0, K-1)
              transformed_parameters[p_name] = RangeParameter(
                  name=p_name,
                  parameter_type=ParameterType.INT,
                  lower=0,
                  upper=len(p.values) - 1,
              )
          else:
              transformed_parameters[p.name] = p
      return construct_new_search_space(
          search_space=search_space,
          parameters=list(transformed_parameters.values()),
          parameter_constraints=[
              pc.clone_with_transformed_parameters(
                  transformed_parameters=transformed_parameters
              )
              for pc in search_space.parameter_constraints
          ],
      )
  
file_path: Ax/ax/modelbridge/transforms/choice_encode.py
imports: from typing import Dict, List, Optional, Tuple, TYPE_CHECKING
  import numpy
  from ax.core.observation import Observation, ObservationFeatures
  from ax.core.parameter import ChoiceParameter, Parameter, ParameterType, RangeParameter
  from ax.core.search_space import SearchSpace
  from ax.core.types import TParamValue
  from ax.modelbridge.transforms.base import Transform
  from ax.modelbridge.transforms.utils import ClosestLookupDict, construct_new_search_space
  from ax.models.types import TConfig
label_desc: Use image node_id 2 for calling the OrderedChoiceEncode obj's underlying member method code with example usage: obj._transform_search_space(search_space) and returns: construct_new_search_space