class_docstr: This is a lightweight stateless class that bundles together instantiation utils.
  It is used both on its own and as a mixin to AxClient, with the intent that
  these methods can be overridden by its subclasses for specific use cases.
class_docstr_tok: ["This","is","a","lightweight","stateless","class","that","bundles","together","instantiation","utils",".","It","is","used","both","on","its","own","and","as","a","mixin","to","AxClient",",","with","the","intent","that","these","methods","can","be","overridden","by","its","subclasses","for","specific","use","cases","."]
docstr: Parse objectives and constraints to define optimization config.
  
  The resulting optimization config will be regular single-objective config
  if `objectives` is a list of one element and a multi-objective config
  otherwise.
  
  NOTE: If passing in multiple objectives, `objective_thresholds` must be a
  non-empty list defining constraints for each objective.
docstr_tok: ["Parse","objectives","and","constraints","to","define","optimization","config",".","The","resulting","optimization","config","will","be","regular","single-objective","config","if","`","objectives","`","is","a","list","of","one","element","and","a","multi-objective","config","otherwise",".","NOTE",":","If","passing","in","multiple","objectives",",","`","objective_thresholds","`","must","be","a","non-empty","list","defining","constraints","for","each","objective","."]
code: def optimization_config_from_objectives(
      objectives: List[Objective],
      objective_thresholds: List[ObjectiveThreshold],
      outcome_constraints: List[OutcomeConstraint],
  ) -> OptimizationConfig:
      """Parse objectives and constraints to define optimization config.
  
      The resulting optimization config will be regular single-objective config
      if `objectives` is a list of one element and a multi-objective config
      otherwise.
  
      NOTE: If passing in multiple objectives, `objective_thresholds` must be a
      non-empty list defining constraints for each objective.
      """
      if len(objectives) == 1:
          if objective_thresholds:
              raise ValueError(
                  "Single-objective optimizations must not specify objective "
                  "thresholds."
              )
          return OptimizationConfig(
              objective=objectives[0],
              outcome_constraints=outcome_constraints,
          )
  
      if not objective_thresholds:
          logger.info(
              "Due to non-specification, we will use the heuristic for selecting "
              "objective thresholds."
          )
  
      return MultiObjectiveOptimizationConfig(
          objective=MultiObjective(objectives=objectives),
          outcome_constraints=outcome_constraints,
          objective_thresholds=objective_thresholds,
      )
  
imports: import enum
  from dataclasses import dataclass
  from logging import Logger
  from typing import Any, Dict, List, Optional, Sequence, Type, Union
  from ax.core.arm import Arm
  from ax.core.experiment import DataType, DEFAULT_OBJECTIVE_NAME, Experiment
  from ax.core.map_metric import MapMetric
  from ax.core.metric import Metric
  from ax.core.objective import MultiObjective, Objective
  from ax.core.observation import ObservationFeatures
  from ax.core.optimization_config import MultiObjectiveOptimizationConfig, ObjectiveThreshold, OptimizationConfig
  from ax.core.outcome_constraint import OutcomeConstraint
  from ax.core.parameter import ChoiceParameter, FixedParameter, Parameter, PARAMETER_PYTHON_TYPE_MAP, ParameterType, RangeParameter, TParameterType
  from ax.core.parameter_constraint import OrderConstraint, ParameterConstraint
  from ax.core.search_space import HierarchicalSearchSpace, SearchSpace
  from ax.core.types import ComparisonOp, TParameterization, TParamValue
  from ax.exceptions.core import UnsupportedError
  from ax.utils.common.constants import Keys
  from ax.utils.common.logger import get_logger
  from ax.utils.common.typeutils import checked_cast, checked_cast_optional, checked_cast_to_tuple, not_none
label_desc: Use image node_id 15 for calling the InstantiationBase obj's underlying member method code with example usage: obj.optimization_config_from_objectives(objectives, objective_thresholds, outcome_constraints) and returns: MultiObjectiveOptimizationConfig, OptimizationConfig