human
Here's a good function header given the following:
I wrote the below code

    (aty, bty) = sig.args
    dtype = sig.return_type
    a = make_array(aty)(context, builder, args[0])
    b = make_array(bty)(context, builder, args[1])
    (n,) = cgutils.unpack_tuple(builder, a.shape)
    def check_args(a, b):
        (m,) = a.shape
        (n,) = b.shape
        if (m != n):
            raise ValueError('incompatible    array    sizes    for    np.dot(a,    b)    (vector    *    vector)')
    context.compile_internal(builder, check_args, signature(types.none, *sig.args), args)
    check_c_int(context, builder, n)
    out = cgutils.alloca_once(builder, context.get_value_type(dtype))
    call_xxdot(context, builder, conjugate, dtype, n, a.data, b.data, out)
    return builder.load(out)

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

def dot_2_vv(context, builder, sig, args, conjugate=False):