human
I wrote the below code

    if (file is None):
        file = sys.stdout
    taxa = tree.get_terminals()
    max_label_width = max((len(str(taxon)) for taxon in taxa))
    drawing_width = ((column_width - max_label_width) - 1)
    drawing_height = ((2 * len(taxa)) - 1)
    def get_col_positions(tree):
        'Create    a    mapping    of    each    clade    to    its    column    position.'
        depths = tree.depths()
        if (not max(depths.values())):
            depths = tree.depths(unit_branch_lengths=True)
        fudge_margin = int(math.ceil(math.log(len(taxa), 2)))
        cols_per_branch_unit = ((drawing_width - fudge_margin) / float(max(depths.values())))
        return dict(((clade, int(((blen * cols_per_branch_unit) + 1.0))) for (clade, blen) in depths.items()))
    def get_row_positions(tree):
        positions = dict(((taxon, (2 * idx)) for (idx, taxon) in enumerate(taxa)))
        def calc_row(clade):
            for subclade in clade:
                if (subclade not in positions):
                    calc_row(subclade)
            positions[clade] = ((positions[clade.clades[0]] + positions[clade.clades[(-1)]]) // 2)
        calc_row(tree.root)
        return positions
    col_positions = get_col_positions(tree)
    row_positions = get_row_positions(tree)
    char_matrix = [['    ' for x in range(drawing_width)] for y in range(drawing_height)]
    def draw_clade(clade, startcol):
        thiscol = col_positions[clade]
        thisrow = row_positions[clade]
        for col in range(startcol, thiscol):
            char_matrix[thisrow][col] = '_'
        if clade.clades:
            toprow = row_positions[clade.clades[0]]
            botrow = row_positions[clade.clades[(-1)]]
            for row in range((toprow + 1), (botrow + 1)):
                char_matrix[row][thiscol] = '|'
            if ((col_positions[clade.clades[0]] - thiscol) < 2):
                char_matrix[toprow][thiscol] = ','
            for child in clade:
                draw_clade(child, (thiscol + 1))
    draw_clade(tree.root, 0)
    for...

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

def draw_ascii(tree, file=None, column_width=80):