human
I wrote the below code

    def movable(i):
        return (i.owner and isinstance(i.owner.op, (IncSubtensor, AdvancedIncSubtensor1, AdvancedIncSubtensor)) and (i.type == o_type) and (len(i.clients) == 1) and (not i.owner.op.set_instead_of_inc))
    if (node.op == T.add):
        o_type = node.outputs[0].type
        movable_inputs = [i for i in node.inputs if movable(i)]
        if movable_inputs:
            new_inputs = ([i for i in node.inputs if (not movable(i))] + [mi.owner.inputs[0] for mi in movable_inputs])
            if (len(new_inputs) == 0):
                new_add = new_inputs[0]
            else:
                new_add = T.add(*new_inputs)
                copy_stack_trace(node.outputs[0], new_add)
            tip = new_add
            for mi in movable_inputs:
                assert (tip.type == o_type)
                assert (tip.type == mi.owner.inputs[0].type)
                tip = mi.owner.op(tip, *mi.owner.inputs[1:])
                copy_stack_trace((node.outputs + mi.owner.outputs), tip)
            return [tip]

What's a good function header?
 Here's a good function header?
assistant
#Here's a good function header.

@register_canonicalize
@gof.local_optimizer([T.add])
def local_IncSubtensor_serialize(node):