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

    allowed_flags(options, [])
    f = sympify(f)
    if f.is_Atom:
        return f
    else:
        (P, Q) = f.as_numer_denom()
    options = set_defaults(options, extension=True)
    ((P, Q), opt) = parallel_poly_from_expr((P, Q), x, **options)
    if P.is_multivariate:
        raise NotImplementedError('multivariate    partial    fraction    decomposition')
    (common, P, Q) = P.cancel(Q)
    (poly, P) = P.div(Q, auto=True)
    (P, Q) = P.rat_clear_denoms(Q)
    polypart = poly
    if (dummies is None):
        def dummies(name):
            d = Dummy(name)
            while True:
                (yield d)
        dummies = dummies('w')
    rationalpart = apart_list_full_decomposition(P, Q, dummies)
    return (common, polypart, rationalpart)

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

@public
def apart_list(f, x=None, dummies=None, **options):