code: def optimization_trace_all_methods(
      y_dict: Dict[str, np.ndarray],
      optimum: Optional[float] = None,
      title: str = "",
      ylabel: str = "",
      hover_labels: Optional[List[str]] = None,
      trace_colors: List[Tuple[int]] = DISCRETE_COLOR_SCALE,
      optimum_color: Tuple[int] = COLORS.ORANGE.value,
  ) -> AxPlotConfig:
      """Plots a comparison of optimization traces with 2-SEM bands for multiple
      methods on the same problem.
  
      Args:
          y: a mapping of method names to (r x t) arrays, where r is the number
              of runs in the test, and t is the number of trials.
          optimum: value of the optimal objective.
          title: title for this plot.
          ylabel: label for the Y-axis.
          hover_labels: optional, text to show on hover; list where the i-th value
              corresponds to the i-th value in the value of the `y` argument.
          trace_colors: tuples of 3 int values representing
              RGB colors to use for different methods shown in the combination plot.
              Defaults to Ax discrete color scale.
          optimum_color: tuple of 3 int values representing an RGB color.
              Defaults to orange.
  
      Returns:
          AxPlotConfig: plot of the comparison of optimization traces with IQR
      """
      data: List[go.Scatter] = []
  
      for i, (method, y) in enumerate(y_dict.items()):
          # If there are more traces than colors, start reusing colors.
          color = trace_colors[i % len(trace_colors)]
          trace = mean_trace_scatter(
              y=y, trace_color=color, legend_label=method
          )
          lower, upper = sem_range_scatter(
              y=y, trace_color=color, legend_label=method
          )
  
          data.extend([lower, trace, upper])
  
      if optimum is not None:
          num_iterations = max(y.shape[1] for y in y_dict.values())
          data.append(
              optimum_objective_scatter(
                  optimum=optimum,
                  num_iterations=num_iterations,
                  optimum_color=optimum_color,
              )
          )
  
      layout = go.Layout(
          title=title,
          showlegend=True,
          yaxis={"title": ylabel},
          xaxis={"title": "Iteration"},
      )
  
      return AxPlotConfig(
          data=go.Figure(layout=layout, data=data),
          plot_type=AxPlotTypes.GENERIC,
      )
  
imports: from datetime import datetime, timedelta
  from typing import Any, Dict, List, Optional, Tuple, Union
  import numpy
  import pandas
  import plotly.graph_objs
  from ax.core.experiment import Experiment
  from ax.plot.base import AxPlotConfig, AxPlotTypes
  from ax.plot.color import COLORS, DISCRETE_COLOR_SCALE, rgba
  from ax.utils.common.timeutils import timestamps_in_range
  from ax.utils.common.typeutils import not_none
  from plotly import express
  from plotly.express.colors import sample_colorscale
label_desc: Use image node_id 11 for calling a global function with example usage: optimization_trace_all_methods(y_dict, optimum, title, ylabel, hover_labels, trace_colors, optimum_color) and returns: AxPlotConfig