class_docstr: Managed optimization loop, in which Ax oversees deployment of trials and
  gathering data.
class_docstr_tok: ["Managed","optimization","loop",",","in","which","Ax","oversees","deployment","of","trials","and","gathering","data","."]
docstr: Run a single step of the optimization plan.
docstr_tok: ["Run","a","single","step","of","the","optimization","plan","."]
code: def run_trial(self) -> None:
      """Run a single step of the optimization plan."""
      if self.current_trial >= self.total_trials:
          raise ValueError(
              "Optimization is complete, cannot run another trial."
          )
      logger.info(
          f"Running optimization trial {self.current_trial + 1}..."
      )
  
      trial = self._get_new_trial()
  
      trial.mark_running(no_runner_required=True)
      _, data = data_and_evaluations_from_raw_data(
          raw_data={
              arm.name: self._call_evaluation_function(
                  arm.parameters, weight
              )
              for arm, weight in self._get_weights_by_arm(trial)
          },
          trial_index=self.current_trial,
          sample_sizes={},
          data_type=self.experiment.default_data_type,
          metric_names=not_none(
              self.experiment.optimization_config
          ).objective.metric_names,
      )
  
      self.experiment.attach_data(data=data)
      trial.mark_completed()
      self.current_trial += 1
  
imports: from __future__ import annotations
  import inspect
  import logging
  from typing import Iterable, List, Optional, Tuple
  from ax.core.arm import Arm
  from ax.core.base_trial import BaseTrial
  from ax.core.batch_trial import BatchTrial
  from ax.core.experiment import Experiment
  from ax.core.formatting_utils import data_and_evaluations_from_raw_data
  from ax.core.trial import Trial
  from ax.core.types import TEvaluationFunction, TEvaluationOutcome, TModelPredictArm, TParameterization
  from ax.core.utils import get_pending_observation_features
  from ax.exceptions.constants import CHOLESKY_ERROR_ANNOTATION
  from ax.exceptions.core import SearchSpaceExhausted, UserInputError
  from ax.modelbridge.base import ModelBridge
  from ax.modelbridge.dispatch_utils import choose_generation_strategy
  from ax.modelbridge.generation_strategy import GenerationStrategy
  from ax.modelbridge.registry import Models
  from ax.service.utils.best_point import get_best_parameters_from_model_predictions, get_best_raw_objective_point
  from ax.service.utils.instantiation import InstantiationBase, TParameterRepresentation
  from ax.utils.common.executils import retry_on_exception
  from ax.utils.common.logger import get_logger
  from ax.utils.common.typeutils import not_none
label_desc: Use image node_id 7 for calling the OptimizationLoop obj's underlying member method code with example usage: obj.run_trial() without return types