Source code for mordred.Polarizability

from ._base import Descriptor
from ._atomic_property import polarizability78, polarizability94

__all__ = ("APol", "BPol")


class PolarizabilityBase(Descriptor):
    __slots__ = ("_use78",)

    @classmethod
    def preset(cls, version):
        yield cls()

    def __str__(self):
        return self.__class__.__name__.lower() + ("78" if self._use78 else "")

    def parameters(self):
        return (self._use78,)

    def __init__(self, use78=False):
        self._use78 = use78

    def _get_table(self):
        return polarizability78 if self._use78 else polarizability94

    rtype = float


[docs]class APol(PolarizabilityBase): r"""atomic polarizability descriptor. :type use78: bool :param use78: use old atomic polarizability data """ since = "1.0.0" __slots__ = ()
[docs] def description(self): return "atomic polarizability"
def calculate(self): table = self._get_table() return sum(table[a.GetAtomicNum()] for a in self.mol.GetAtoms())
[docs]class BPol(PolarizabilityBase): r"""bond polarizability descriptor. :type use78: bool :param use78: use old atomic polarizability data """ since = "1.0.0" __slots__ = ()
[docs] def description(self): return "bond polarizability"
def calculate(self): table = self._get_table() def bond_pol(bond): a = bond.GetBeginAtom().GetAtomicNum() b = bond.GetEndAtom().GetAtomicNum() return abs(table[a] - table[b]) return float(sum(bond_pol(b) for b in self.mol.GetBonds()))