class_docstr: Implements psychoacoustic model of Lin and Abdulla (2015) following Qin et al. (2019) simplifications.
  
  | Paper link: Lin and Abdulla (2015), https://www.springer.com/gp/book/9783319079738
  | Paper link: Qin et al. (2019), http://proceedings.mlr.press/v97/qin19a.html
docstr: Filter maskers.
  
  First, discard all maskers that are below the absolute threshold of hearing. Second, reduce pairs of maskers
  that are within 0.5 bark distance of each other by keeping the larger masker.
  
  :param maskers: Masker PSD values.
  :param masker_idx: Masker indices.
  :return: Filtered PSD maskers and indices.
code: def filter_maskers(
      self, maskers: np.ndarray, masker_idx: np.ndarray
  ) -> Tuple[np.ndarray, np.ndarray]:
      """
      Filter maskers.
  
      First, discard all maskers that are below the absolute threshold of hearing. Second, reduce pairs of maskers
      that are within 0.5 bark distance of each other by keeping the larger masker.
  
      :param maskers: Masker PSD values.
      :param masker_idx: Masker indices.
      :return: Filtered PSD maskers and indices.
      """
      # filter on the absolute threshold of hearing
      # note: deviates from Qin et al. implementation by filtering first on ATH and only then on bark distance
      ath_condition = (
          maskers > self.absolute_threshold_hearing[masker_idx]
      )
      masker_idx = masker_idx[ath_condition]
      maskers = maskers[ath_condition]
  
      # filter on the bark distance
      bark_condition = np.ones(masker_idx.shape, dtype=bool)
      i_prev = 0
      for i in range(1, len(masker_idx)):
          # find pairs of maskers that are within 0.5 bark distance of each other
          if self.bark[i] - self.bark[i_prev] < 0.5:
              # discard the smaller masker
              i_todelete, i_prev = (
                  (i_prev, i_prev + 1)
                  if maskers[i_prev] < maskers[i]
                  else (i, i_prev)
              )
              bark_condition[i_todelete] = False
          else:
              i_prev = i
      masker_idx = masker_idx[bark_condition]
      maskers = maskers[bark_condition]
  
      return maskers, masker_idx
  
imports: from __future__ import absolute_import, division, print_function, unicode_literals
  import logging
  from typing import TYPE_CHECKING, Optional, Tuple, Union
  import numpy
  import scipy.signal
  from art.attacks.attack import EvasionAttack
  from art.estimators.estimator import BaseEstimator, LossGradientsMixin, NeuralNetworkMixin
  from art.estimators.pytorch import PyTorchEstimator
  from art.estimators.speech_recognition.speech_recognizer import SpeechRecognizerMixin
  from art.estimators.tensorflow import TensorFlowV2Estimator
  from art.utils import pad_sequence_input
label_desc: Use image node_id 11 for calling the PsychoacousticMasker obj's underlying member method code with example usage: obj.filter_maskers(maskers, masker_idx) and returns: maskers,  masker_idx