<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def lineage(expr, container=Stack):
 """Yield the path of the expression tree that comprises a column expression. Parameters expr : Expr An ibis expression. It must be an instance of :class:`ibis.expr.types.ColumnExpr`. container : Container, {Stack, Queue} Stack for depth-first traversal, and Queue for breadth-first. Depth-first will reach root table nodes before continuing on to other columns in a column that is derived from multiple column. Breadth- first will traverse all columns at each level before reaching root tables. Yields ------ node : Expr A column and its dependencies """

    if not isinstance(expr, ir.ColumnExpr):
        raise TypeError('Input expression must be an instance of ColumnExpr')

    c = container([(expr, expr._name)])

    seen = set()

    # while we haven't visited everything
    while c:
        node, name = c.get()

        if node not in seen:
            seen.add(node)
            yield node

        # add our dependencies to the container if they match our name
        # and are ibis expressions
        c.extend(
            (arg, getattr(arg, '_name', name))
            for arg in c.visitor(_get_args(node.op(), name))
            if isinstance(arg, ir.Expr)
        )