code: def scatter_plot_with_hypervolume_trace_plotly(
      experiment: Experiment,
  ) -> go.Figure:
      """
      Plots the hypervolume of the Pareto frontier after each iteration with the same
      color scheme as the Pareto frontier plot. This is useful for understanding if the
      frontier is expanding or if the optimization has stalled out.
  
      Arguments:
          experiment: MOO experiment to calculate the hypervolume trace from
      """
      hypervolume_trace = BestPointMixin._get_trace(
          experiment=experiment
      )
  
      df = pd.DataFrame(
          {
              "hypervolume": hypervolume_trace,
              "trial_index": [*range(len(hypervolume_trace))],
          }
      )
  
      return px.line(
          data_frame=df,
          x="trial_index",
          y="hypervolume",
          title="Pareto Frontier Hypervolume Trace",
          markers=True,
      )
  
imports: import warnings
  from typing import Dict, Iterable, List, Optional, Tuple, Union
  import numpy
  import pandas
  import plotly.graph_objs
  from ax.core.experiment import Experiment
  from ax.core.objective import MultiObjective
  from ax.core.optimization_config import MultiObjectiveOptimizationConfig, OptimizationConfig
  from ax.core.outcome_constraint import ObjectiveThreshold
  from ax.exceptions.core import UserInputError
  from ax.plot.base import AxPlotConfig, AxPlotTypes, CI_OPACITY, DECIMALS
  from ax.plot.color import COLORS, DISCRETE_COLOR_SCALE, rgba
  from ax.plot.helper import _format_CI, _format_dict, extend_range
  from ax.plot.pareto_utils import ParetoFrontierResults
  from ax.service.utils.best_point_mixin import BestPointMixin
  from ax.utils.common.typeutils import checked_cast, not_none
  from plotly import express
  from scipy.stats import norm
label_desc: Use image node_id 3 for calling a global function with example usage: scatter_plot_with_hypervolume_trace_plotly(experiment) and returns: px