code: def best_feasible_objective(
      optimization_config: OptimizationConfig,
      values: Dict[str, np.ndarray],
  ) -> np.ndarray:
      """Compute the best feasible objective value found by each iteration.
  
      Args:
          optimization_config: Optimization config.
          values: Dictionary from metric name to array of value at each
              iteration. If optimization config contains outcome constraints, values
              for them must be present in `values`.
  
      Returns: Array of cumulative best feasible value.
      """
      # Get objective at each iteration
      objective = optimization_config.objective
      f = values[objective.metric.name]
      # Set infeasible points to have infinitely bad values
      infeas_val = np.Inf if objective.minimize else -np.Inf
      for oc in optimization_config.outcome_constraints:
          if oc.relative:
              raise ValueError(
                  "Benchmark aggregation does not support relative constraints"
              )
          g = values[oc.metric.name]
          feas = (
              g <= oc.bound
              if oc.op == ComparisonOp.LEQ
              else g >= oc.bound
          )
          f[~feas] = infeas_val
  
      # Get cumulative best
      minimize = objective.minimize
      accumulate = (
          np.minimum.accumulate if minimize else np.maximum.accumulate
      )
      return accumulate(f)
  
imports: from collections import defaultdict
  from typing import Dict, Iterable, List, NamedTuple, Optional, Set, Tuple
  import numpy
  from ax.core.arm import Arm
  from ax.core.base_trial import BaseTrial, TrialStatus
  from ax.core.batch_trial import BatchTrial
  from ax.core.data import Data
  from ax.core.experiment import Experiment
  from ax.core.generator_run import GeneratorRun
  from ax.core.objective import MultiObjective
  from ax.core.observation import ObservationFeatures
  from ax.core.optimization_config import OptimizationConfig
  from ax.core.trial import Trial
  from ax.core.types import ComparisonOp
  from ax.utils.common.typeutils import not_none
  from pyre_extensions import none_throws
label_desc: Use image node_id 4 for calling a global function with example usage: best_feasible_objective(optimization_config, values) and returns: accumulate