class_docstr: Class representing an ensemble of multiple anomaly detection models.
code: def __init__(
      self,
      config: DetectorEnsembleConfig = None,
      models: List[DetectorBase] = None,
  ):
      super().__init__(config=config, models=models)
      for model in self.models:
          assert isinstance(model, DetectorBase), (
              f"Expected all models in {type(self).__name__} to be anomaly "
              f"detectors, but got a {type(model).__name__}."
          )
          model.config.enable_threshold = self.per_model_threshold
  
imports: import logging
  import traceback
  from typing import List
  import pandas
  from merlion.evaluate.anomaly import TSADMetric, TSADEvaluator, TSADEvaluatorConfig
  from merlion.models.anomaly.base import DetectorBase, DetectorConfig
  from merlion.models.ensemble.base import EnsembleConfig, EnsembleTrainConfig, EnsembleBase
  from merlion.models.ensemble.combine import Mean
  from merlion.post_process.threshold import AggregateAlarms
  from merlion.utils import TimeSeries
label_desc: Use image node_id 1 to create a new DetectorEnsemble object from inherited base classes: EnsembleBase, DetectorBase with example: obj = DetectorEnsemble(config, models)