class_docstr: Interface for heuristics that halt trials early, typically based on early
  results from that trial.
docstr: Perform a series of default checks for a set of trials `trial_indices` and
  determine if at least one of them is eligible for further stopping logic:
      1. Check that at least `self.min_curves` trials have completed`
      2. Check that at least one trial has reached `self.min_progression`
  Returns a boolean indicating if all checks are passed.
  
  This is useful for some situations where if no trials are eligible for stopping,
  then we can skip costly steps, such as model fitting, that occur before
  individual trials are considered for stopping.
docstr_tok: ["Perform","a","series","of","default","checks","for","a","set","of","trials","`","trial_indices","`","and","determine","if","at","least","one","of","them","is","eligible","for","further","stopping","logic",":","1",".","Check","that","at","least","`","self.min_curves","`","trials","have","completed","`","2",".","Check","that","at","least","one","trial","has","reached","`","self.min_progression","`","Returns","a","boolean","indicating","if","all","checks","are","passed",".","This","is","useful","for","some","situations","where","if","no","trials","are","eligible","for","stopping",",","then","we","can","skip","costly","steps",",","such","as","model","fitting",",","that","occur","before","individual","trials","are","considered","for","stopping","."]
code: def is_eligible_any(
      self,
      trial_indices: Set[int],
      experiment: Experiment,
      df: pd.DataFrame,
      map_key: Optional[str] = None,
  ) -> bool:
      """Perform a series of default checks for a set of trials `trial_indices` and
      determine if at least one of them is eligible for further stopping logic:
          1. Check that at least `self.min_curves` trials have completed`
          2. Check that at least one trial has reached `self.min_progression`
      Returns a boolean indicating if all checks are passed.
  
      This is useful for some situations where if no trials are eligible for stopping,
      then we can skip costly steps, such as model fitting, that occur before
      individual trials are considered for stopping.
      """
      # check that there are sufficient completed trials
      num_completed = len(
          experiment.trial_indices_by_status[TrialStatus.COMPLETED]
      )
      if (
          self.min_curves is not None
          and num_completed < self.min_curves
      ):
          self._log_and_return_completed_trials(
              logger=logger,
              num_completed=num_completed,
              min_curves=not_none(self.min_curves),
          )
          return False
  
      # check that at least one trial has reached `self.min_progression`
      df_trials = df[df["trial_index"].isin(trial_indices)].dropna(
          subset=["mean"]
      )
      any_last_prog = 0
      if not df_trials[map_key].empty:
          any_last_prog = df_trials[map_key].max()
      logger.info(
          f"Last progression of any candidate for trial stopping is {any_last_prog}."
      )
      if (
          self.min_progression is not None
          and any_last_prog < self.min_progression
      ):
          logger.info(
              f"No trials have reached {self.min_progression}. "
              "Not stopping any trials."
          )
          return False
      return True
  
imports: import logging
  from abc import ABC, abstractmethod
  from dataclasses import dataclass
  from logging import Logger
  from typing import Any, Dict, Iterable, List, Optional, Sequence, Set, Tuple, Type
  import numpy
  import pandas
  from ax.core.base_trial import TrialStatus
  from ax.core.data import Data
  from ax.core.experiment import Experiment
  from ax.core.map_data import MapData
  from ax.core.objective import MultiObjective
  from ax.modelbridge.map_torch import MapTorchModelBridge
  from ax.modelbridge.modelbridge_utils import _unpack_observations, observation_data_to_array, observation_features_to_array
  from ax.modelbridge.registry import Cont_X_trans, Y_trans
  from ax.modelbridge.transforms.base import Transform
  from ax.modelbridge.transforms.map_unit_x import MapUnitX
  from ax.models.torch_base import TorchModel
  from ax.utils.common.base import Base
  from ax.utils.common.logger import get_logger
  from ax.utils.common.typeutils import checked_cast, not_none
label_desc: Use image node_id 9 for calling the BaseEarlyStoppingStrategy obj's underlying member method code with example usage: obj.is_eligible_any(trial_indices, experiment, df, map_key) and returns: True, False, False