class_docstr: Single `BatchNormalization -> Convolution` pass is folded into one `Convolution`.
  
  If there is a `BatchNormalization -> Convolution` pass,
  fold the batch normalization parameters to the kernel
  and bias (if it exists) of the preceding convolution,
  then skip the batch normalization following the convolution.
  
  Supported folding functions: `Convolution`, `Deconvolution`, `Affine`.
class_docstr_tok: ["Single","`","BatchNormalization","-",">","Convolution","`","pass","is","folded","into","one","`","Convolution","`",".","If","there","is","a","`","BatchNormalization","-",">","Convolution","`","pass",",","fold","the","batch","normalization","parameters","to","the","kernel","and","bias","(","if","it","exists",")","of","the","preceding","convolution",",","then","skip","the","batch","normalization","following","the","convolution",".","Supported","folding","functions",":","`","Convolution","`",",","`","Deconvolution","`",",","`","Affine","`","."]
code: def modify(self, f, inputs):
      outputs = f.outputs[0]
  
      # Not end
      if len(outputs.function_references) == 0:
          return
  
      # If not BatchNorm and previous func is not BatchNorm
      prev_func = f.inputs[0].parent
      if f.info.type_name != "BatchNormalization":
          if (
              prev_func == None
              or prev_func.info.type_name != "BatchNormalization"
          ):
              return
  
      # Function is BN whose next function is an inner-prod layer
      if f.info.type_name == "BatchNormalization":
          for fr in outputs.function_references:
              if fr.info.type_name in self._fct_set:
                  return inputs[0]
  
      # Variable is not forked
      if len(f.outputs[0].function_references) != 1:
          return
  
      # Function is inner-product layer
      if not f.info.type_name in self._fct_set:
          return
  
      ip_func = f
      bn_func = prev_func
      w_data, b_data = self._compute_folded_parameters(ip_func, bn_func)
      ip_func.inputs[1].d = w_data
      ip_func.inputs[2].d = b_data
  
      x = inputs[0]
      w = ip_func.inputs[1]
      b = ip_func.inputs[2]
  
      h = self.connect(f, x, w, b)
  
      return h
  
imports: import nnabla
  import nnabla.functions
  import numpy
  from nnabla.initializer import ConstantInitializer
  from nnabla.parameter import get_parameter_or_create
  from .graph_converter import FunctionModifier
label_desc: Use image node_id 2 for calling the BatchNormalizationFoldingOppositeModifierInner obj's underlying member method code with example usage: obj.modify(f, inputs) and returns: h, inputs