Source code for mordred.Constitutional
import numpy as np
from ._base import Descriptor
from ._atomic_property import AtomicProperty, get_properties
__all__ = ("ConstitutionalSum", "ConstitutionalMean")
[docs]
class ConstitutionalSum(Descriptor):
    r"""sum of constitutional descriptor.
    .. math::
        S_p = \sum^A_{i=1} \frac{p_i}{p_{\rm C}}
    where
    :math:`p_i` is atomic property of i-th atom,
    :math:`p_{\rm C}` is atomic property of carbon
    :type prop: :py:class:`str` or :py:class:`function`
    :param prop: :ref:`atomic_properties`
    """
    since = "1.0.0"
    __slots__ = ("_prop",)
[docs]
    def description(self):
        return "sum of constitutional weighted by {}".format(self._prop.get_long()) 
    @classmethod
    def preset(cls, version):
        return map(cls, get_properties())
    def parameters(self):
        return (self._prop,)
    def __init__(self, prop="v"):
        self._prop = AtomicProperty(self.explicit_hydrogens, prop)
    _prefix = "S"
    def __str__(self):
        return "{}{}".format(self._prefix, self._prop.as_argument)
    def dependencies(self):
        return {"P": self._prop}
    def calculate(self, P):
        return np.sum(P / self._prop.carbon)
    rtype = float 
[docs]
class ConstitutionalMean(ConstitutionalSum):
    r"""mean of constitutional descriptor.
    .. math::
        M_p = \frac{S_p}{A}
    :type prop: :py:class:`str` or :py:class:`function`
    :param prop: :ref:`atomic_properties`
    :rtype: float
    """
    since = "1.0.0"
    __slots__ = ("_prop",)
    _prefix = "M"
[docs]
    def description(self):
        return "mean of constitutional weighted by {}".format(self._prop.get_long()) 
    @classmethod
    def preset(cls, version):
        return map(cls, get_properties())
    def dependencies(self):
        return {"S": ConstitutionalSum(self._prop)}
    def calculate(self, S):
        return S / self.mol.GetNumAtoms()