# -*- coding: utf-8 -*-
"""Functions for deleting nodes and edges in networks."""
from ...filters.edge_filters import filter_edges
from ...filters.edge_predicates import is_associative_relation, not_causal_relation
from ...filters.node_filters import filter_nodes
from ...filters.node_predicates import is_biological_process, is_isolated_list_abundance, is_pathology
from ...pipeline import in_place_transformation
__all__ = [
'remove_filtered_edges',
'remove_filtered_nodes',
'remove_associations',
'remove_pathologies',
'remove_biological_processes',
'remove_isolated_list_abundances',
'remove_non_causal_edges',
]
[docs]@in_place_transformation
def remove_filtered_edges(graph, edge_predicates=None):
"""Remove edges passing the given edge predicates.
:param pybel.BELGraph graph: A BEL graph
:param edge_predicates: A predicate or list of predicates
:type edge_predicates: None or ((pybel.BELGraph, tuple, tuple, int) -> bool) or iter[(pybel.BELGraph, tuple, tuple, int) -> bool]]
:return:
"""
edges = list(filter_edges(graph, edge_predicates=edge_predicates))
graph.remove_edges_from(edges)
[docs]@in_place_transformation
def remove_filtered_nodes(graph, node_predicates=None):
"""Remove nodes passing the given node predicates.
:param pybel.BELGraph graph: A BEL graph
:type node_predicates: None or ((pybel.BELGraph, tuple) -> bool) or iter[(pybel.BELGraph, tuple) -> bool)]
"""
nodes = list(filter_nodes(graph, node_predicates=node_predicates))
graph.remove_nodes_from(nodes)
[docs]@in_place_transformation
def remove_associations(graph):
"""Remove all associative relationships from the graph.
:param pybel.BELGraph graph: A BEL graph
"""
remove_filtered_edges(graph, is_associative_relation)
[docs]@in_place_transformation
def remove_pathologies(graph):
"""Remove pathology nodes from the graph.
:param pybel.BELGraph graph: A BEL graph
"""
remove_filtered_nodes(graph, node_predicates=is_pathology)
[docs]@in_place_transformation
def remove_biological_processes(graph):
"""Remove biological process nodes from the graph.
:param pybel.BELGraph graph: A BEL graph
"""
remove_filtered_nodes(graph, node_predicates=is_biological_process)
[docs]@in_place_transformation
def remove_isolated_list_abundances(graph):
"""Remove isolated list abundances from the graph.
:param pybel.BELGraph graph: A BEL graph
"""
remove_filtered_nodes(graph, is_isolated_list_abundance)
[docs]@in_place_transformation
def remove_non_causal_edges(graph):
"""Remove non-causal edges from the graph."""
remove_filtered_edges(graph, not_causal_relation)