docstr: Generates data for a given trial, from the provided values for
  the metrics (m1,m2,m3).
  
  Args:
      trial: Trial to generate the data for.
      values: A tuple (m1, m2, m3) representing the mean for each of
          the three metrics.
  
  Returns:
      A Data object to be attached to the experiment.
docstr_tok: ["Generates","data","for","a","given","trial",",","from","the","provided","values","for","the","metrics","(","m1",",","m2",",","m3",")",".","Args",":","trial",":","Trial","to","generate","the","data","for",".","values",":","A","tuple","(","m1",",","m2",",","m3",")","representing","the","mean","for","each","of","the","three","metrics",".","Returns",":","A","Data","object","to","be","attached","to","the","experiment","."]
code: def _get_data_for_trial(
      self, trial: Trial, values: Tuple[float, float, float]
  ) -> Data:
      """
      Generates data for a given trial, from the provided values for
      the metrics (m1,m2,m3).
  
      Args:
          trial: Trial to generate the data for.
          values: A tuple (m1, m2, m3) representing the mean for each of
              the three metrics.
  
      Returns:
          A Data object to be attached to the experiment.
      """
      df_dicts = [
          {
              "trial_index": trial.index,
              "metric_name": "m1",
              "arm_name": not_none(trial.arm).name,
              "mean": values[0],
              "sem": 0.0,
          },
          {
              "trial_index": trial.index,
              "metric_name": "m2",
              "arm_name": not_none(trial.arm).name,
              "mean": values[1],
              "sem": 0.0,
          },
          {
              "trial_index": trial.index,
              "metric_name": "m3",
              "arm_name": not_none(trial.arm).name,
              "mean": values[2],
              "sem": 0.0,
          },
      ]
      return Data(df=pd.DataFrame.from_records(df_dicts))
  
imports: from typing import List, Tuple
  import numpy
  import pandas
  from ax.core.arm import Arm
  from ax.core.batch_trial import BatchTrial
  from ax.core.data import Data
  from ax.core.experiment import Experiment
  from ax.core.metric import Metric
  from ax.core.objective import MultiObjective, Objective
  from ax.core.optimization_config import MultiObjectiveOptimizationConfig, OptimizationConfig
  from ax.core.outcome_constraint import ObjectiveThreshold, OutcomeConstraint
  from ax.core.parameter import ParameterType, RangeParameter
  from ax.core.search_space import SearchSpace
  from ax.core.trial import Trial
  from ax.core.types import ComparisonOp
  from ax.global_stopping.strategies.improvement import constraint_satisfaction, ImprovementGlobalStoppingStrategy
  from ax.utils.common.testutils import TestCase
  from ax.utils.common.typeutils import checked_cast, not_none
  from ax.utils.testing.core_stubs import get_experiment, get_experiment_with_data
label_desc: Use image node_id 3 for calling the TestImprovementGlobalStoppingStrategy obj's underlying member method code with example usage: obj._get_data_for_trial(trial, values) and returns: Data