code: def share_recorder(self, f, inputs, new_inputs, cfg):
      # share quantization parameters for Add2 and Concat
      fn = f.info.type_name
      recorder_activation = cfg.recorder_activation
      recorder_weight = cfg.recorder_weight
      axes = [3] if cfg.channel_last else [1]
  
      if fn in ["Add2", "Concatenate"]:
          idx = 0
          min_rank = inputs[0].rank
          for i, input_var in enumerate(new_inputs[1:]):
              if input_var.rank < min_rank:
                  idx = i + 1
                  min_rank = input_var.rank
          shared_name = "x0"
          scope = self.get_parameter_scope(
              new_inputs[idx].parent.inputs[1]
          )
          for i, input_var in enumerate(new_inputs):
              if i == idx:
                  continue
              input_var = input_var.parent.inputs[0]
              with nn.parameter_scope(scope):
                  input_var = recorder_activation()(
                      input_var,
                      axes=axes,
                      training=self._training,
                      name=shared_name,
                  )
              new_inputs[i] = input_var
      return new_inputs
  
imports: import nnabla
  import nnabla.functions
  import numpy
  from collections import defaultdict
  from .graph_converter import FunctionModifier
  from .batch_normalization_folding import BatchNormalizationFoldingModifier
  from .batch_normalization_self_folding import BatchNormalizationSelfFoldingModifier
  from .remove_function import RemoveFunctionModifier
label_desc: Use image node_id 4 for calling the QuantizeNonQNNToRecordingModifier obj's underlying member method code with example usage: obj.share_recorder(f, inputs, new_inputs, cfg) and returns: new_inputs