Source code for pybel.struct.filters.node_predicates.activities

# -*- coding: utf-8 -*-

"""Pre-defined predicates for nodes."""

from ..utils import part_has_modifier
from ...graph import BELGraph
from ....constants import (
    ACTIVITY,
    DEGRADATION,
    SOURCE_MODIFIER,
    TARGET_MODIFIER,
    TRANSLOCATION,
)
from ....dsl import BaseEntity

__all__ = [
    "has_edge_modifier",
    "has_activity",
    "is_degraded",
    "is_translocated",
]


[docs]def has_edge_modifier(graph: BELGraph, node: BaseEntity, modifier: str) -> bool: """Return true if over any of a nodes edges, it has a given modifier. Modifier can be one of: - :data:`pybel.constants.ACTIVITY`, - :data:`pybel.constants.DEGRADATION` - :data:`pybel.constants.TRANSLOCATION`. :param modifier: One of :data:`pybel.constants.ACTIVITY`, :data:`pybel.constants.DEGRADATION`, or :data:`pybel.constants.TRANSLOCATION` """ modifier_in_subject = any( part_has_modifier(d, SOURCE_MODIFIER, modifier) for _, _, d in graph.out_edges(node, data=True) ) modifier_in_object = any( part_has_modifier(d, TARGET_MODIFIER, modifier) for _, _, d in graph.in_edges(node, data=True) ) return modifier_in_subject or modifier_in_object
[docs]def has_activity(graph: BELGraph, node: BaseEntity) -> bool: """Return true if over any of the node's edges, it has a molecular activity.""" return has_edge_modifier(graph, node, ACTIVITY)
[docs]def is_degraded(graph: BELGraph, node: BaseEntity) -> bool: """Return true if over any of the node's edges, it is degraded.""" return has_edge_modifier(graph, node, DEGRADATION)
[docs]def is_translocated(graph: BELGraph, node: BaseEntity) -> bool: """Return true if over any of the node's edges, it is translocated.""" return has_edge_modifier(graph, node, TRANSLOCATION)