human
I wrote the below code

    commuted_method_getter = attrgetter(method_name_for_op(op, commute=True))
    @with_doc(("Binary    Operator:    '%s'" % op))
    @with_name(method_name_for_op(op))
    @coerce_numbers_to_my_dtype
    def binary_operator(self, other):
        return_type = binop_return_type(op)
        if isinstance(self, NumExprFactor):
            (self_expr, other_expr, new_inputs) = self.build_binary_op(op, other)
            return return_type('({left})    {op}    ({right})'.format(left=self_expr, op=op, right=other_expr), new_inputs, dtype=binop_return_dtype(op, self.dtype, other.dtype))
        elif isinstance(other, NumExprFactor):
            return commuted_method_getter(other)(self)
        elif isinstance(other, Term):
            if (self is other):
                return return_type('x_0    {op}    x_0'.format(op=op), (self,), dtype=binop_return_dtype(op, self.dtype, other.dtype))
            return return_type('x_0    {op}    x_1'.format(op=op), (self, other), dtype=binop_return_dtype(op, self.dtype, other.dtype))
        elif isinstance(other, Number):
            return return_type('x_0    {op}    ({constant})'.format(op=op, constant=other), binds=(self,), dtype=binop_return_dtype(op, self.dtype, other.dtype))
        raise BadBinaryOperator(op, self, other)
    return binary_operator

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

def binary_operator(op):