Source code for graphein.rna.subgraphs

"""Provides functions for extracting subgraphs from RNA graphs."""

# Graphein
# Author: Arian Jamasb <arian@jamasb.io>
# License: MIT
# Project Website: https://github.com/a-r-j/graphein
# Code Repository: https://github.com/a-r-j/graphein

import networkx as nx
import numpy as np

import graphein.protein.subgraphs as protein
from graphein.rna.constants import (
    PHOSPHORIC_ACID_ATOMS,
    RIBOSE_ATOMS,
    RNA_BACKBONE_ATOMS,
)


[docs] def extract_subgraph_from_node_list( g, node_list: list[str] | None, filter_dataframe: bool = True, update_coords: bool = True, recompute_distmat: bool = False, inverse: bool = False, return_node_list: bool = False, ) -> nx.Graph | list[str]: """Extracts a subgraph from a graph based on a list of nodes. :param g: The graph to extract the subgraph from. :type g: nx.Graph :param node_list: The list of nodes to extract. :type node_list: List[str], optional :param filter_dataframe: Whether to filter the ``pdb_df`` DataFrame of the graph. Defaults to ``True``. :type filter_dataframe: bool :param update_coords: Whether to update the coordinates of the graph. Defaults to ``True``. :type update_coords: bool :param recompute_distmat: Whether to recompute the distance matrix of the graph. Defaults to ``False``. :type recompute_distmat: bool :param inverse: Whether to inverse the selection. Defaults to ``False``. :type inverse: bool :return: The subgraph or node list if ``return_node_list=True``. :rtype: Union[nx.Graph, List[str]] """ return protein.extract_subgraph_from_node_list( g, node_list=node_list, filter_dataframe=filter_dataframe, update_coords=update_coords, recompute_distmat=recompute_distmat, inverse=inverse, return_node_list=return_node_list, )
[docs] def extract_subgraph_from_backbone( g: nx.Graph, filter_dataframe: bool = True, update_coords: bool = True, recompute_distmat: bool = True, inverse: bool = False, return_node_list: bool = False, ): """Extracts a subgraph from an RNA structure retaining only backbone atoms. Backbone atoms are defined in :ref:`graphein.rna.constants.RNA_BACKBONE_ATOMS`. :param g: RNA Structure Graph to extract subgraph from. :type g: nx.Graph :param filter_dataframe: Whether to filter the ``pdb_df`` dataframe of the graph. Defaults to ``True``. :type filter_dataframe: bool :param update_coords: Whether to update the coordinates of the graph. Defaults to ``True``. :type update_coords: bool :param recompute_distmat: Whether to recompute the distance matrix of the graph. Defaults to ``False``. :type recompute_distmat: bool :param inverse: Whether to inverse the selection. Defaults to ``False``. :type inverse: bool :return: The subgraph or node list if ``return_node_list=True``. :rtype: Union[nx.Graph, List[str]] """ return protein.extract_subgraph_from_atom_types( g, atom_types=RNA_BACKBONE_ATOMS, filter_dataframe=filter_dataframe, update_coords=update_coords, recompute_distmat=recompute_distmat, inverse=inverse, return_node_list=return_node_list, )
[docs] def extract_subgraph_from_bases( g: nx.Graph, filter_dataframe: bool = True, update_coords: bool = True, recompute_distmat: bool = True, inverse: bool = False, return_node_list: bool = False, ): """Extracts a subgraph from an RNA structure retaining only base atoms. Backbone atoms are defined in :ref:`graphein.rna.constancts.RNA_BACKBONE_ATOMS`. We exclude these to perform the selection. :param g: RNA Structure Graph to extract subgraph from. :type g: nx.Graph :param filter_dataframe: Whether to filter the ``pdb_df`` dataframe of the graph. Defaults to ``True``. :type filter_dataframe: bool :param update_coords: Whether to update the coordinates of the graph. Defaults to ``True``. :type update_coords: bool :param recompute_distmat: Whether to recompute the distance matrix of the graph. Defaults to ``False``. :type recompute_distmat: bool :param inverse: Whether to inverse the selection. Defaults to ``False``. :type inverse: bool :return: The subgraph or node list if ``return_node_list=True``. :rtype: Union[nx.Graph, List[str]] """ inverse = not inverse return protein.extract_subgraph_from_atom_types( g, atom_types=RNA_BACKBONE_ATOMS, filter_dataframe=filter_dataframe, update_coords=update_coords, recompute_distmat=recompute_distmat, inverse=inverse, return_node_list=return_node_list, )
[docs] def extract_subgraph_from_phosphoric_acid( g: nx.Graph, filter_dataframe: bool = True, update_coords: bool = True, recompute_distmat: bool = True, inverse: bool = False, return_node_list: bool = False, ): """Extracts a subgraph from an RNA structure retaining only base atoms. Phosphoric acid atoms are defined in :ref:`graphein.rna.constancts.PHOSPHORIC_ACID_ATOMS`. :param g: RNA Structure Graph to extract subgraph from. :type g: nx.Graph :param filter_dataframe: Whether to filter the ``pdb_df`` dataframe of the graph. Defaults to ``True``. :type filter_dataframe: bool :param update_coords: Whether to update the coordinates of the graph. Defaults to ``True``. :type update_coords: bool :param recompute_distmat: Whether to recompute the distance matrix of the graph. Defaults to ``False``. :type recompute_distmat: bool :param inverse: Whether to inverse the selection. Defaults to ``False``. :type inverse: bool :return: The subgraph or node list if ``return_node_list=True``. :rtype: Union[nx.Graph, List[str]] """ return protein.extract_subgraph_from_atom_types( g, atom_types=PHOSPHORIC_ACID_ATOMS, filter_dataframe=filter_dataframe, update_coords=update_coords, recompute_distmat=recompute_distmat, inverse=inverse, return_node_list=return_node_list, )
[docs] def extract_subgraph_from_ribose( g: nx.Graph, filter_dataframe: bool = True, update_coords: bool = True, recompute_distmat: bool = True, inverse: bool = False, return_node_list: bool = False, ): """Extracts a subgraph from an RNA structure retaining only base atoms. Ribose atoms are defined in :ref:`graphein.rna.constants.RIBOSE_ATOMS`. :param g: RNA Structure Graph to extract subgraph from. :type g: nx.Graph :param filter_dataframe: Whether to filter the ``pdb_df`` dataframe of the graph. Defaults to ``True``. :type filter_dataframe: bool :param update_coords: Whether to update the coordinates of the graph. Defaults to ``True``. :type update_coords: bool :param recompute_distmat: Whether to recompute the distance matrix of the graph. Defaults to ``False``. :type recompute_distmat: bool :param inverse: Whether to inverse the selection. Defaults to ``False``. :type inverse: bool :return: The subgraph or node list if ``return_node_list=True``. :rtype: Union[nx.Graph, List[str]] """ return protein.extract_subgraph_from_atom_types( g, atom_types=RIBOSE_ATOMS, filter_dataframe=filter_dataframe, update_coords=update_coords, recompute_distmat=recompute_distmat, inverse=inverse, return_node_list=return_node_list, )
[docs] def extract_subgraph_from_point( g: nx.Graph, centre_point: np.ndarray | tuple[float, float, float], radius: float, filter_dataframe: bool = True, update_coords: bool = True, recompute_distmat: bool = False, inverse: bool = False, return_node_list: bool = False, ) -> nx.Graph | list[str]: """Extracts a subgraph from a graph based on a centre point and radius. :param g: The graph to extract the subgraph from. :type g: nx.Graph :param centre_point: The centre point of the subgraph. :type centre_point: Tuple[float, float, float] :param radius: The radius of the subgraph. :type radius: float :param filter_dataframe: Whether to filter the ``pdb_df`` dataframe of the graph. Defaults to ``True``. :type filter_dataframe: bool :param update_coords: Whether to update the coordinates of the graph. Defaults to ``True``. :type update_coords: bool :param recompute_distmat: Whether to recompute the distance matrix of the graph. Defaults to ``False``. :type recompute_distmat: bool :param inverse: Whether to inverse the selection. Defaults to ``False``. :type inverse: bool :return: The subgraph or node list if ``return_node_list=True``. :rtype: Union[nx.Graph, List[str]] """ return protein.extract_subgraph_from_point( g=g, centre_point=centre_point, radius=radius, filter_dataframe=filter_dataframe, update_coords=update_coords, recompute_distmat=recompute_distmat, inverse=inverse, return_node_list=return_node_list, )
[docs] def extract_subgraph_from_atom_types( g: nx.Graph, atom_types: list[str], filter_dataframe: bool = True, update_coords: bool = True, recompute_distmat: bool = False, inverse: bool = False, return_node_list: bool = False, ) -> nx.Graph | list[str]: """Extracts a subgraph from an RNA graph based on a list of atom types. :param g: The graph to extract the subgraph from. :type g: nx.Graph :param atom_types: The list of atom types to extract. :type atom_types: List[str] :param filter_dataframe: Whether to filter the ``pdb_df`` dataframe of the graph. Defaults to ``True``. :type filter_dataframe: bool :param update_coords: Whether to update the coordinates of the graph. Defaults to ``True``. :type update_coords: bool :param recompute_distmat: Whether to recompute the distance matrix of the graph. Defaults to ``False``. :type recompute_distmat: bool :param inverse: Whether to inverse the selection. Defaults to ``False``. :type inverse: bool :return: The subgraph or node list if ``return_node_list=True``. :rtype: Union[nx.Graph, List[str]] """ return protein.extract_subgraph_from_atom_types( g, atom_types=atom_types, filter_dataframe=filter_dataframe, inverse=inverse, return_node_list=return_node_list, update_coords=update_coords, recompute_distmat=recompute_distmat, )
[docs] def extract_subgraph_from_residue_types( g: nx.Graph, residue_types: list[str], filter_dataframe: bool = True, update_coords: bool = True, recompute_distmat: bool = False, inverse: bool = False, return_node_list: bool = False, ) -> nx.Graph | list[str]: """Extracts a subgraph from a graph based on a list of allowable (nucleotide) residue types. :param g: The graph to extract the subgraph from. :type g: nx.Graph :param residue_types: List of allowable residue types (1-letter residue names). E.g. ``["A", "G"]``. :type residue_types: List[str] :param filter_dataframe: Whether to filer the ``pdb_df`` of the graph, defaults to ``True``. :type filter_dataframe: bool, optional :param update_coords: Whether to update the coordinates of the graph. Defaults to ``True``. :type update_coords: bool :param recompute_distmat: Whether to recompute the distance matrix of the graph. Defaults to ``False``. :type recompute_distmat: bool :param inverse: Whether to inverse the selection. Defaults to ``False``. :type inverse: bool :return: The subgraph or node list if ``return_node_list=True``. :rtype: Union[nx.Graph, List[str]] """ return protein.extract_subgraph_from_residue_types( g, residue_types, filter_dataframe=filter_dataframe, inverse=inverse, return_node_list=return_node_list, update_coords=update_coords, recompute_distmat=recompute_distmat, )
[docs] def extract_subgraph_from_chains( g: nx.Graph, chains: list[str], filter_dataframe: bool = True, update_coords: bool = True, recompute_distmat: bool = False, inverse: bool = False, return_node_list: bool = False, ) -> nx.Graph | list[str]: """Extracts a subgraph from a graph based on a chain. :param g: The graph to extract the subgraph from. :type g: nx.Graph :param chains: The chain(s) to extract. E.g. ``["A", "C"]``. :type chains: List[str] :param filter_dataframe: Whether to filter the ``pdb_df`` dataframe of the graph. Defaults to ``True``. :type filter_dataframe: bool :param update_coords: Whether to update the coordinates of the graph. Defaults to ``True``. :type update_coords: bool :param recompute_distmat: Whether to recompute the distance matrix of the graph. Defaults to ``False``. :type recompute_distmat: bool :param inverse: Whether to inverse the selection. Defaults to ``False``. :type inverse: bool :return: The subgraph or node list if ``return_node_list=True``. :rtype: Union[nx.Graph, List[str]] """ return protein.extract_subgraph_from_chains( g, chains, filter_dataframe=filter_dataframe, update_coords=update_coords, recompute_distmat=recompute_distmat, inverse=inverse, return_node_list=return_node_list, )
[docs] def extract_subgraph_by_sequence_position( g: nx.Graph, sequence_positions: list[int], filter_dataframe: bool = True, update_coords: bool = True, recompute_distmat: bool = False, inverse: bool = False, return_node_list: bool = False, ) -> nx.Graph | list[str]: """Extracts a subgraph from a graph based on a chain. :param g: The graph to extract the subgraph from. :type g: nx.Graph :param chain: The sequence positions to extract. E.g. ``[1, 3, 5, 7]``. :type chain: List[int] :param filter_dataframe: Whether to filter the ``pdb_df`` dataframe of the graph. Defaults to ``True``. :type filter_dataframe: bool :param update_coords: Whether to update the coordinates of the graph. Defaults to ``True``. :type update_coords: bool :param recompute_distmat: Whether to recompute the distance matrix of the graph. Defaults to ``False``. :type recompute_distmat: bool :param inverse: Whether to inverse the selection. Defaults to ``False``. :type inverse: bool :return: The subgraph or node list if ``return_node_list=True``. :rtype: Union[nx.Graph, List[str]] """ return protein.extract_subgraph_by_sequence_position( g, sequence_positions=sequence_positions, filter_dataframe=filter_dataframe, inverse=inverse, return_node_list=return_node_list, recompute_distmat=recompute_distmat, update_coords=update_coords, )
[docs] def extract_subgraph_by_bond_type( g: nx.Graph, bond_types: list[str], filter_dataframe: bool = True, update_coords: bool = True, recompute_distmat: bool = False, inverse: bool = False, return_node_list: bool = False, ) -> nx.Graph | list[str]: """Extracts a subgraph from a graph based on a list of allowable bond types. :param g: The graph to extract the subgraph from. :type g: nx.Graph :param bond_types: List of allowable bond types. :type bond_types: List[str] :param filter_dataframe: Whether to filter the ``pdb_df`` of the graph, defaults to ``True``. :type filter_dataframe: bool, optional :param update_coords: Whether to update the coordinates of the graph. Defaults to ``True``. :type update_coords: bool :param recompute_distmat: Whether to recompute the distance matrix of the graph. Defaults to ``False``. :type recompute_distmat: bool :param inverse: Whether to inverse the selection, defaults to ``False``. :type inverse: bool, optional :param return_node_list: Whether to return the node list, defaults to ``False``. :type return_node_list: bool, optional :return: The subgraph or node list if ``return_node_list=True``. :rtype: Union[nx.Graph, List[str]] """ return protein.extract_subgraph_by_bond_type( g, bond_types=bond_types, filter_dataframe=filter_dataframe, inverse=inverse, return_node_list=return_node_list, recompute_distmat=recompute_distmat, update_coords=update_coords, )
[docs] def extract_k_hop_subgraph( g: nx.Graph, central_node: str, k: int, k_only: bool = False, filter_dataframe: bool = True, update_coords: bool = True, recompute_distmat: bool = False, inverse: bool = False, return_node_list: bool = False, ) -> nx.Graph | list[str]: """Extracts a k-hop subgraph. :param g: The graph to extract the subgraph from. :type g: nx.Graph :param central_node: The central node to extract the subgraph from. :type central_node: str :param k: The number of hops to extract. :type k: int :param k_only: Whether to only extract the exact k-hop subgraph (e.g. include 2-hop neighbours in 5-hop graph). Defaults to ``False``. :type k_only: bool :param filter_dataframe: Whether to filter the ``pdb_df`` of the graph, defaults to ``True``. :type filter_dataframe: bool, optional :param update_coords: Whether to update the coordinates of the graph. Defaults to ``True``. :type update_coords: bool :param recompute_distmat: Whether to recompute the distance matrix of the graph. Defaults to ``False``. :type recompute_distmat: bool :param inverse: Whether to inverse the selection, defaults to ``False``. :type inverse: bool, optional :param return_node_list: Whether to return the node list. Defaults to ``False``. :type return_node_list: bool :return: The subgraph or node list if ``return_node_list=True``. :rtype: Union[nx.Graph, List[str]] """ return protein.extract_k_hop_subgraph( g, central_node=central_node, k=k, k_only=k_only, filter_dataframe=filter_dataframe, inverse=inverse, return_node_list=return_node_list, recompute_distmat=recompute_distmat, update_coords=update_coords, )