Source code for mordred._base

import os
import warnings

from importlib import import_module
from ..error import MissingValueBase

from .descriptor import (
    Descriptor, UnaryOperatingDescriptor,
    ConstDescriptor, BinaryOperatingDescriptor,
)
from .calculator import Calculator, get_descriptors_from_module
from .parallel import parallel


__all__ = (
    'all_descriptors',
    'Descriptor',
    'Calculator',
    'get_descriptors_from_module',
    'is_missing',
)


[docs]def all_descriptors(): r"""**[deprecated]** use mordred.descriptors module instead. yield all descriptor modules. :returns: all modules :rtype: :py:class:`Iterator` (:py:class:`Descriptor`) """ warnings.warn( 'all_descriptors() is deprecated, use mordred.descriptors module instead', DeprecationWarning, stacklevel=2, ) base_dir = os.path.dirname(os.path.dirname(__file__)) for name in os.listdir(base_dir): name, ext = os.path.splitext(name) if name[:1] == '_' or ext != '.py' or name == 'descriptors': continue yield import_module('..' + name, __package__)
def _Descriptor__call__(self, mol, id=-1): r"""calculate single descriptor value. :type id: int :param id: conformer id :returns: descriptor result :rtype: scalar """ v = Calculator(self)(mol, id)[0] if isinstance(v, MissingValueBase): raise v.error return v def _from_json(obj, descs): name = obj.get('name') args = obj.get('args') or {} if name is None: raise ValueError('invalid json: {}'.format(obj)) if name == UnaryOperatingDescriptor.__name__: return UnaryOperatingDescriptor( args['name'], args['operator'], _from_json(args['value']) ) elif name == BinaryOperatingDescriptor.__name__: return BinaryOperatingDescriptor( args['name'], args['operator'], _from_json(args['left']), _from_json(args['right']) ) cls = descs.get(name) if cls is None: raise ValueError('unknown class: {}'.format(name)) instance = cls(**(obj.get('args') or {})) return instance @classmethod def _Descriptor_from_json(self, obj): '''create Descriptor instance from json dict. Parameters: obj(dict): descriptor dict Returns: Descriptor: descriptor ''' descs = getattr(self, '_all_descriptors', None) if descs is None: from mordred import descriptors descs = { cls.__name__: cls for cls in get_descriptors_from_module(descriptors, submodule=True) } descs[ConstDescriptor.__name__] = ConstDescriptor self._all_descriptors = descs return _from_json(obj, descs) def is_missing(v): '''check argument is either MissingValue or not Parameters: v(any): value Returns: bool ''' return isinstance(v, MissingValueBase) Descriptor.__call__ = _Descriptor__call__ Descriptor.from_json = _Descriptor_from_json Calculator._parallel = parallel