class_docstr: Interface for wrappers that augment the input and reduce the analysis.
  
  This class is an interface for wrappers that:
  * augment the input to the analyzer by creating new samples.
  * reduce the returned analysis to match the initial input shapes.
  
  :param subanalyzer: The analyzer to be wrapped.
  :param augment_by_n: Number of samples to create.
code: def __init__(
      self,
      subanalyzer: AnalyzerNetworkBase,
      *args,
      augment_by_n: int = 2,
      neuron_selection_mode="max_activation",
      **kwargs,
  ):
      if neuron_selection_mode == "max_activation":
          # TODO: find a more transparent way.
          #
          # Since AugmentReduceBase analyzers augment the input,
          # it is possible that the neuron w/ max activation changes.
          # As a workaround, the index of the maximally activated neuron
          # w.r.t. the "unperturbed" input is computed and used in combination
          # with neuron_selection_mode = "index" in the subanalyzer.
          #
          # NOTE:
          # The analyzer will still have neuron_selection_mode = "max_activation"!
          subanalyzer._neuron_selection_mode = "index"
  
      super().__init__(
          subanalyzer,
          *args,
          neuron_selection_mode=neuron_selection_mode,
          **kwargs,
      )
  
      self._augment_by_n: int = augment_by_n
  
imports: from __future__ import annotations
  import numpy
  import tensorflow.keras.backend
  import tensorflow.keras.layers
  import tensorflow.keras.models
  import innvestigate.backend
  import innvestigate.layers
  from innvestigate.analyzer.base import AnalyzerBase
  from innvestigate.analyzer.network_base import AnalyzerNetworkBase
  from innvestigate.backend.types import OptionalList, Tensor
label_desc: Use image node_id 1 to create a new AugmentReduceBase object from inherited base classes: WrapperBase with example: obj = AugmentReduceBase(subanalyzer)