class_docstr: Special exception indicating that maximum number of trials running in
  parallel set on a given step (as `GenerationStep.max_parallelism`) has been
  reached. Upon getting this exception, users should wait until more trials
  are completed with data, to generate new trials.
class_docstr_tok: ["Special","exception","indicating","that","maximum","number","of","trials","running","in","parallel","set","on","a","given","step","(","as","`","GenerationStep.max_parallelism","`",")","has","been","reached",".","Upon","getting","this","exception",",","users","should","wait","until","more","trials","are","completed","with","data",",","to","generate","new","trials","."]
code: def __init__(
      self,
      model_name: str,
      num_running: int,
      step_index: Optional[int] = None,
      node_name: Optional[str] = None,
  ) -> None:
      if node_name is not None:
          msg_start = f"Maximum parallelism for generation node #{node_name} ({model_name})"
      else:
          msg_start = f"Maximum parallelism for generation step #{step_index} ({model_name})"
      super().__init__(
          msg_start
          + f" has been reached: {num_running} trials are currently 'running'. Some "
          "trials need to be completed before more trials can be generated. See "
          "https://ax.dev/docs/bayesopt.html to understand why limited parallelism "
          "improves performance of Bayesian optimization."
      )
  
file_path: Ax/ax/exceptions/generation_strategy.py
imports: import typing
  from typing import Optional
  from ax.exceptions.core import AxError, OptimizationComplete
label_desc: Use image node_id 1 to create a new MaxParallelismReachedException object from inherited base classes: AxError with example: obj = MaxParallelismReachedException(model_name, num_running, step_index, node_name)