human
I wrote the below code

    def formatWithName(obj):
        if hasattr(obj, 'name'):
            return u'{0}    ({1})'.format(obj, obj.name)
        else:
            return u'{0}'.format(obj)
    result = []
    lineage = []
    for (parent, child) in trace:
        if ((not lineage) or (lineage[(-1)] is not parent)):
            if (parent in lineage):
                while (lineage[(-1)] is not parent):
                    lineage.pop()
            else:
                if (not lineage):
                    result.append(u'{0}\n'.format(formatWithName(parent)))
                lineage.append(parent)
        result.append((u'        ' * len(lineage)))
        result.append(u'->    {0}\n'.format(formatWithName(child)))
    return u''.join(result)

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

def formatTrace(trace):