def find_nodes(expr, node_types):
    """Depth-first search of the expression tree yielding nodes of a given
    type or set of types.

    Parameters
    ----------
    expr: ibis.expr.types.Expr
    node_types: type or tuple of types

    Yields
    ------
    op: type
        A node of given node_types
    """

    def extender(op):
        return (arg for arg in op.args if isinstance(arg, ir.Expr))

    return _search_for_nodes([expr], extender, node_types)
def find_nodes ( expr , node_types ) : def extender ( op ) : return ( arg for arg in op . args if isinstance ( arg , ir . Expr ) ) return _search_for_nodes ( [ expr ] , extender , node_types )
Depth-first search of the expression tree yielding nodes of a given
    type or set of types.

    Parameters
    ----------
    expr: ibis.expr.types.Expr
    node_types: type or tuple of types

    Yields
    ------
    op: type
        A node of given node_types