def get_subgraph_edges(graph: BELGraph,<EOL>annotation: str,<EOL>value: str,<EOL>source_filter=None,<EOL>target_filter=None,<EOL>):
if source_filter is None:<EOL><INDENT>source_filter = keep_node_permissive<EOL><DEDENT>if target_filter is None:<EOL><INDENT>target_filter = keep_node_permissive<EOL><DEDENT>for u, v, k, data in graph.edges(keys=True, data=True):<EOL><INDENT>if not edge_has_annotation(data, annotation):<EOL><INDENT>continue<EOL><DEDENT>if data[ANNOTATIONS][annotation] == value and source_filter(graph, u) and target_filter(graph, v):<EOL><INDENT>yield u, v, k, data<EOL><DEDENT><DEDENT>
Gets all edges from a given subgraph whose source and target nodes pass all of the given filters

    :param pybel.BELGraph graph: A BEL graph
    :param str annotation:  The annotation to search
    :param str value: The annotation value to search by
    :param source_filter: Optional filter for source nodes (graph, node) -> bool
    :param target_filter: Optional filter for target nodes (graph, node) -> bool
    :return: An iterable of (source node, target node, key, data) for all edges that match the annotation/value and
             node filters
    :rtype: iter[tuple]