class_docstr: Applies basic post-filtering to a time series of anomaly scores
  
  1. Determine which points are anomalies by comparing the absolute value of
     their anomaly score to ``alm_threshold``
  2. Only fire an alarm when ``min_alm_in_window`` of points (within a window
     of ``alarm_window_minutes`` minutes) are labeled as anomalies.
  3. If there is an alarm, then all alarms for the next ``alm_suppress_minutes``
     minutes will be suppressed.
  
  Return a time series of filtered anomaly scores, where the only non-zero
  values are the anomaly scores which were marked as alarms (and not
  suppressed).
code: def __init__(
      self,
      alm_threshold: float = None,
      abs_score=True,
      min_alm_in_window: int = 2,
      alm_window_minutes: float = 60,
      alm_suppress_minutes: float = 120,
      bin_sz: int = 10,
      default_hist_gap_thres: float = 1.2,
  ):
      super().__init__(
          alm_threshold=alm_threshold,
          abs_score=abs_score,
          min_alm_in_window=min_alm_in_window,
          alm_window_minutes=alm_window_minutes,
          alm_suppress_minutes=alm_suppress_minutes,
      )
      self.threshold = AdaptiveThreshold(
          alm_threshold=alm_threshold,
          abs_score=abs_score,
          bin_sz=bin_sz,
          default_hist_gap_thres=default_hist_gap_thres,
      )
  
imports: import bisect
  import logging
  import numpy
  from merlion.evaluate.anomaly import TSADMetric
  from merlion.post_process.base import PostRuleBase
  from merlion.utils import UnivariateTimeSeries, TimeSeries
label_desc: Use image node_id 1 to create a new AdaptiveAggregateAlarms object from inherited base classes: AggregateAlarms with example: obj = AdaptiveAggregateAlarms(alm_threshold, abs_score, min_alm_in_window, alm_window_minutes, alm_suppress_minutes, bin_sz, default_hist_gap_thres)