human
I wrote the below code

    @custom_model
    def model_a(x):
        return x
    assert (model_a.param_names == ())
    assert (model_a.n_inputs == 1)
    sig = signature(model_a.__init__)
    assert (list(sig.parameters.keys()) == [u'self', u'args', u'kwargs'])
    sig = signature(model_a.__call__)
    assert (list(sig.parameters.keys()) == [u'self', u'x', u'model_set_axis', u'with_bounding_box', u'fill_value', u'equivalencies'])
    @custom_model
    def model_b(x, a=1, b=2):
        return ((x + a) + b)
    assert (model_b.param_names == (u'a', u'b'))
    assert (model_b.n_inputs == 1)
    sig = signature(model_b.__init__)
    assert (list(sig.parameters.keys()) == [u'self', u'a', u'b', u'kwargs'])
    assert ([x.default for x in sig.parameters.values()] == [sig.empty, 1, 2, sig.empty])
    sig = signature(model_b.__call__)
    assert (list(sig.parameters.keys()) == [u'self', u'x', u'model_set_axis', u'with_bounding_box', u'fill_value', u'equivalencies'])
    @custom_model
    def model_c(x, y, a=1, b=2):
        return (((x + y) + a) + b)
    assert (model_c.param_names == (u'a', u'b'))
    assert (model_c.n_inputs == 2)
    sig = signature(model_c.__init__)
    assert (list(sig.parameters.keys()) == [u'self', u'a', u'b', u'kwargs'])
    assert ([x.default for x in sig.parameters.values()] == [sig.empty, 1, 2, sig.empty])
    sig = signature(model_c.__call__)
    assert (list(sig.parameters.keys()) == [u'self', u'x', u'y', u'model_set_axis', u'with_bounding_box', u'fill_value', u'equivalencies'])

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

def test_custom_model_signature():