class_docstr: OptimizerPass to merge consecutive BatchNormalization layers.
  These may exist in a model after QKerasFactorizeAlpha layer.
  Scale and Bias of each layer are combined into scale and bias of a single layer.
class_docstr_tok: ["OptimizerPass","to","merge","consecutive","BatchNormalization","layers",".","These","may","exist","in","a","model","after","QKerasFactorizeAlpha","layer",".","Scale","and","Bias","of","each","layer","are","combined","into","scale","and","bias","of","a","single","layer","."]
code: def transform(self, model, node):
      bn0 = node.get_input_node()
      bn1 = node
      bn0_map = bn0.get_output_use_map()
      bn1_map = bn1.get_output_use_map()
      if len(bn0_map[bn0.name]) > 1 or len(bn1_map[bn1.name]) > 1:
          return False
  
      s0 = bn0.weights["scale"].data
      b0 = bn0.weights["bias"].data
      s1 = bn1.weights["scale"].data
      b1 = bn1.weights["bias"].data
  
      s2 = s0 * s1
      b2 = s1 * b0 + b1
  
      bn0.weights["scale"].data = s2
      bn0.weights["bias"].data = b2
  
      model.remove_node(node, rewire=True)
      return True
  
imports: import numpy
  import tensorflow
  from hls4ml.model.layers import BatchNormalization, register_layer
  from hls4ml.model.optimizer import ConfigurableOptimizerPass, OptimizerPass, register_pass
  from hls4ml.model.types import FixedPrecisionType, IntegerPrecisionType, NamedType, QKerasPO2Quantizer
label_desc: Use image node_id 2 for calling the FuseConsecutiveBatchNormalization obj's underlying member method code with example usage: obj.transform(model, node) and returns: True, False