code: def test_single_objective(self) -> None:
      metric_values = [
          (0.1, 0.6, 0.1),  # feasible, best_objective_so_far = 0.1
          (0.2, 0.3, 0.2),  # feasible, best_objective_so_far = 0.2
          (0.4, 0.5, 0.6),  # infeasible, best_objective_so_far = 0.2
          (0.3, 0.4, 0.0),  # feasible, best_objective_so_far = 0.3
          (0.6, 0.6, 0.3),  # infeasible, best_objective_so_far = 0.3
          (0.9, 0.1, 0.1),  # infeasible, best_objective_so_far = 0.3
      ]
      exp = self._create_single_objective_experiment(
          metric_values=metric_values
      )
      gss = ImprovementGlobalStoppingStrategy(
          min_trials=2, window_size=3, improvement_bar=0.1
      )
      stop, message = gss.should_stop_optimization(
          experiment=exp, trial_to_check=2
      )
      self.assertFalse(stop)
      self.assertEqual(message, "")
  
      top, message = gss.should_stop_optimization(
          experiment=exp, trial_to_check=5
      )
      self.assertFalse(stop)
      self.assertEqual(
          message,
          "The improvement in best objective in the past 3 trials (=0.000) is "
          "less than 0.1 times the interquartile range (IQR) of objectives "
          "attained so far (IQR=0.100).",
      )
  
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 7 for calling the TestImprovementGlobalStoppingStrategy obj's underlying member method code with example usage: obj.test_single_objective() without return types