def output_merge(cls, alpha_in, beta_in, out_in):
 def wrapper(maker):
  @local_optimizer([GpuElemwise])
  @wraps(maker)
  def opt(node):
   if (isinstance(node.op, GpuElemwise) and (node.op.scalar_op == scal.add) and (node.nin == 2)):
    targ = find_node(node.inputs[0], cls)
    W = node.inputs[1]
    if (targ is None):
     targ = find_node(node.inputs[1], cls)
     W = node.inputs[0]
    if (targ is None):
     return None
    if (W.dtype != targ.outputs[0].dtype):
     return None
    if (not is_equal(targ.inputs[beta_in], 0.0)):
     return None
    if (W.broadcastable != targ.inputs[out_in].broadcastable):
     return None
    inputs = list(targ.inputs)
    inputs[out_in] = W
    inputs[beta_in] = _one.clone()
    return maker(targ, *inputs)
  return opt
 return wrapper

def output_merge ( cls , alpha_in , beta_in , out_in ) : def wrapper ( maker ) : @ local_optimizer ( [ GpuElemwise ] ) @ wraps ( maker ) def opt ( node ) : if ( isinstance ( node . op , GpuElemwise ) and ( node . op . scalar_op == scal . add ) and ( node . nin == 2 ) ) : targ = find_node ( node . inputs [ 0 ] , cls ) W = node . inputs [ 1 ] if ( targ is None ) : targ = find_node ( node . inputs [ 1 ] , cls ) W = node . inputs [ 0 ] if ( targ is None ) : return None if ( W . dtype != targ . outputs [ 0 ] . dtype ) : return None if ( not is_equal ( targ . inputs [ beta_in ] , 0.0 ) ) : return None if ( W . broadcastable != targ . inputs [ out_in ] . broadcastable ) : return None inputs = list ( targ . inputs ) inputs [ out_in ] = W inputs [ beta_in ] = _one . clone ( ) return maker ( targ , * inputs ) return opt return wrapper
decorator to merge addition by a value on the output .