human
I wrote the below code

    conditions = ()
    hps = {}
    expr_to_config(expr, conditions, hps)
    rval = io.StringIO()
    print('digraph    {', file=rval)
    edges = set()
    def var_node(a):
        print(('"%s"    [    shape=box];' % a), file=rval)
    def cond_node(a):
        print(('"%s"    [    shape=ellipse];' % a), file=rval)
    def edge(a, b):
        text = ('"%s"    ->    "%s";' % (a, b))
        if (text not in edges):
            print(text, file=rval)
            edges.add(text)
    for (hp, dct) in list(hps.items()):
        var_node(hp)
        for and_conds in dct['conditions']:
            if (len(and_conds) > 1):
                parent_label = '    &    '.join([('%(name)s%(op)s%(val)s' % cond.__dict__) for cond in and_conds])
                cond_node(parent_label)
                edge(parent_label, hp)
                for cond in and_conds:
                    sub_parent_label = ('%s%s%s' % (cond.name, cond.op, cond.val))
                    cond_node(sub_parent_label)
                    edge(cond.name, sub_parent_label)
                    edge(sub_parent_label, parent_label)
            elif (len(and_conds) == 1):
                parent_label = ('%s%s%s' % (and_conds[0].name, and_conds[0].op, and_conds[0].val))
                edge(and_conds[0].name, parent_label)
                cond_node(parent_label)
                edge(parent_label, hp)
    print('}', file=rval)
    return rval.getvalue()

What's a good function header?

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

def dot_hyperparameters(expr):