class_docstr: Stacked version of GarNet. First three arguments to the constructor must be lists of integers.
  Basically offers no performance advantage, but the configuration is consolidated (and is useful
  when e.g. converting the layer to HLS)
code: def _setup_transforms(self, n_aggregators, n_filters, n_propagate):
      self._transform_layers = []
      # inputs are lists
      for it, (p, a, f) in enumerate(
          zip(n_propagate, n_aggregators, n_filters)
      ):
          if self._quantize_transforms is not None:
              input_feature_transform = NamedQDense(
                  p,
                  kernel_quantizer="quantized_bits(%i,%i,0,alpha=1)"
                  % (self._total_bits, self._int_bits),
                  bias_quantizer="quantized_bits(%i,%i,0,alpha=1)"
                  % (self._total_bits, self._int_bits),
                  name=("FLR%d" % it),
              )
              output_feature_transform = NamedQDense(
                  f,
                  kernel_quantizer="quantized_bits(%i,%i,0,alpha=1)"
                  % (self._total_bits, self._int_bits),
                  name=("Fout%d" % it),
              )
  
              if (
                  self._output_activation is None
                  or self._output_activation == "linear"
              ):
                  output_activation_transform = QActivation(
                      "quantized_bits(%i, %i)"
                      % (self._total_bits, self._int_bits)
                  )
              else:
                  output_activation_transform = QActivation(
                      "quantized_%s(%i, %i)"
                      % (
                          self._output_activation,
                          self._total_bits,
                          self._int_bits,
                      )
                  )
          else:
              input_feature_transform = NamedDense(
                  p, name=("FLR%d" % it)
              )
              output_feature_transform = NamedDense(
                  f, name=("Fout%d" % it)
              )
              output_activation_transform = keras.layers.Activation(
                  self._output_activation
              )
  
          aggregator_distance = NamedDense(a, name=("S%d" % it))
  
          self._transform_layers.append(
              (
                  input_feature_transform,
                  aggregator_distance,
                  output_feature_transform,
                  output_activation_transform,
              )
          )
  
      self._sublayers = sum(
          (list(layers) for layers in self._transform_layers), []
      )
  
imports: import tensorflow.keras
  from qkeras import QActivation, QDense, ternary
label_desc: Use image node_id 1 for calling the GarNetStack obj's underlying member method code with example usage: obj._setup_transforms(n_aggregators, n_filters, n_propagate) without return types