Source code for graphein.molecule.features.edges.bonds

"""Functions for computing atomic features for molecules."""
# %%
# 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
from __future__ import annotations

import logging
from typing import Any, Dict

log = logging.getLogger(__name__)


[docs]def add_bond_type( u: str, v: str, d: Dict[str, Any] ) -> rdkit.Chem.rdchem.BondType: """Adds bond type as an edge feature to the graph. :param u: First node in the edge. :type u: str :param v: Second node in the edge. :type v: str :param d: Dictionary of edge metadata. :type d: Dict[str, Any] :return: Returns the bond type. :rtype: rdkit.Chem.rdchem.BondType """ if "bond" not in d.keys(): log.debug(f"No RDKit bond found on edge {u}-{v}") d["bond_type"] = None return None bond_type = d["bond"].GetBondType() d["bond_type"] = bond_type return bond_type
[docs]def bond_is_aromatic(u: str, v: str, d: Dict[str, Any]) -> bool: """Adds indicator of aromaticity of a bond to the graph as an edge feature. :param u: First node in the edge. :type u: str :param v: Second node in the edge. :type v: str :param d: Dictionary of edge metadata. :type d: Dict[str, Any] :return: Returns indicator of aromaticity of bond. :rtype: bool """ if "bond" not in d.keys(): log.debug(f"No RDKit bond found on edge {u}-{v}") d["aromatic"] = None return None bond_is_aromatic = d["bond"].GetIsAromatic() d["_aromatic"] = bond_is_aromatic return bond_is_aromatic
[docs]def bond_is_conjugated(u: str, v: str, d: Dict[str, Any]) -> bool: """Adds indicator of conjugated bond to the graph as an edge feature. :param u: First node in the edge. :type u: str :param v: Second node in the edge. :type v: str :param d: Dictionary of edge metadata. :type d: Dict[str, Any] :return: Returns indicator of conjugated bond. :rtype: bool """ if "bond" not in d.keys(): log.debug(f"No RDKit bond found on edge {u}-{v}") d["conjugated"] = None return None bond_is_conjugated = d["bond"].GetIsConjugated() d["conjugated"] = bond_is_conjugated return bond_is_conjugated
[docs]def bond_is_in_ring(u: str, v: str, d: Dict[str, Any]) -> bool: """Adds indicator of ring membership to the graph as an edge feature. :param u: First node in the edge. :type u: str :param v: Second node in the edge. :type v: str :param d: Dictionary of edge metadata. :type d: Dict[str, Any] :return: Returns indicator of ring membership of bond. :rtype: bool """ if "bond" not in d.keys(): log.debug(f"No RDKit bond found on edge {u}-{v}") d["ring"] = None return None bond_is_in_ring = d["bond"].IsInRing() d["ring"] = bond_is_in_ring return bond_is_in_ring
[docs]def bond_is_in_ring_size( u: str, v: str, d: Dict[str, Any], ring_size: int ) -> int: """Adds indicator of ring membership of size ``ring_size`` to the graph as an edge feature. :param u: First node in the edge. :type u: str :param v: Second node in the edge. :type v: str :param d: Dictionary of edge metadata. :type d: Dict[str, Any] :param ring_size: Size of the ring to look for :type ring_size: int :return: Returns ring size of bond. :rtype: int """ if "bond" not in d.keys(): log.debug(f"No RDKit bond found on edge {u}-{v}") d[f"ring_size_{ring_size}"] = None return None bond_is_in_ring = d["bond"].IsInRingSize(ring_size) d[f"ring_size_{ring_size}"] = bond_is_in_ring return bond_is_in_ring
[docs]def bond_stereo( u: str, v: str, d: Dict[str, Any] ) -> rdkit.Chem.rdchem.BondStereo: """Adds bond stereo configuration as an edge feature to the graph. :param u: First node in the edge. :type u: str :param v: Second node in the edge. :type v: str :param d: Dictionary of edge metadata. :type d: Dict[str, Any] :return: Returns the bond stereo. :rtype: rdkit.Chem.rdchem.BondStereo """ if "bond" not in d.keys(): log.debug(f"No RDKit bond found on edge {u}-{v}") d["bond_stereo"] = None return None bond_stereo = d["bond"].GetStereo() d["bond_stereo"] = bond_stereo return bond_stereo