def prune_ast()

in reference/src/main/python/similar.py [0:0]


def prune_ast(ast, leaf_features):
    global leaf_idx
    if isinstance(ast, list):
        no_leaf = True
        ret = []
        for elem in ast:
            (flag, tmp) = prune_ast(elem, leaf_features)
            ret.append(tmp)
            no_leaf = no_leaf and flag
        if no_leaf:
            return (True, None)
        else:
            return (False, ret)
    elif isinstance(ast, dict):
        if "leaf" in ast and ast["leaf"]:
            leaf_idx += 1
            if leaf_features[leaf_idx - 1] is None:
                return (True, copy_leaf_dummy(ast))
            else:
                return (False, ast)
        else:
            return (True, ast)
    else:
        return (True, ast)