Source code for graphein.grn.edges
"""Functions for adding edges to Gene Regulatory Networks from various sources."""
# %%
# Graphein
# Author: Arian Jamasb <arian@jamasb.io>, Ramon Vinas
# License: MIT
# Project Website: https://github.com/a-r-j/graphein
# Code Repository: https://github.com/a-r-j/graphein
from collections.abc import Callable
import networkx as nx
import pandas as pd
from loguru import logger as log
from graphein.grn.parse_regnetwork import RegNetwork_df
from graphein.grn.parse_trrust import TRRUST_df
[docs]
def add_trrust_edges(
G: nx.Graph, trrust_filtering_funcs: list[Callable] | None = None
) -> nx.Graph:
"""
Adds edges from TRRUST to GRNGraph
:param G: Graph to edges to (populated with gene_id nodes)
:type G: nx.Graph
:param trrust_filtering_funcs: List of functions to apply to TRRUST
dataframe as pre-processing prior to graph constructions. Defaults to
``None``.
:type trrust_filtering_funcs: List[Callable], optional
:return: nx.Graph GRNGraph with TRRUST regulatory interactions added
as edges
:rtype: nx.Graph
"""
G.graph["sources"].append("trrust")
G.graph["trrust_df"] = TRRUST_df(
G.graph["gene_list"],
filtering_funcs=trrust_filtering_funcs,
)
add_interacting_genes(G, df=G.graph["trrust_df"], kind="trrust")
return G
[docs]
def add_regnetwork_edges(
G: nx.Graph, regnetwork_filtering_funcs: list[Callable] | None = None
) -> nx.Graph:
"""
Adds edges from RegNetwork to GRNGraph
:param G: Graph to edges to (populated with gene_id nodes).
:type G: nx.Graph
:param kwargs: Additional parameters to pass to RegNetwork.
:return: nx.Graph GRNGraph with RegNetwork regulatory interactions added
as edges.
"""
G.graph["sources"].append("regnetwork")
G.graph["regnetwork_df"] = RegNetwork_df(
G.graph["gene_list"],
filtering_funcs=regnetwork_filtering_funcs,
)
add_interacting_genes(G, df=G.graph["regnetwork_df"], kind="regnetwork")
return G
[docs]
def add_interacting_genes(
G: nx.Graph, df: pd.DataFrame, kind: str
) -> nx.Graph:
"""
Generic function for adding interaction edges to GRNGraph.
:param G: GRNGraph to populate with edges.
:type G: nx.Graph
:param df: DataFrame containing edgelist.
:type df: pd.DataFrame
:param kind: name of interaction type.
:type kind: str
:returns: Graph with edges added.
:rtype: nx.Graph
"""
gene_1 = df["g1"].values
gene_2 = df["g2"].values
reg_type = df["regtype"].values
interacting_genes = set(zip(gene_1, gene_2, reg_type))
for g1, g2, r in interacting_genes:
if G.has_edge(g1, g2):
G.edges[g1, g2]["kind"].add(kind)
G.edges[g1, g2]["regtype"].add(r)
else:
G.add_edge(g1, g2, kind={kind}, regtype={r})
log.debug(f"Added {len(df)} {kind} interaction edges")
return G