Source code for molpher.core.MolpherMol


# Copyright (c) 2016 Martin Sicho
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

import warnings

import molpher.swig_wrappers.core as wrappers
import molpher.core.ExplorationTree
from molpher.core._utils import shorten_repr


[docs]class MolpherMol(wrappers.MolpherMol): """ :param smiles: smiles of the molecule that is to be created :type smiles: `str` :param other: another instance, the new instance will be its copy (tree ownership is not transferred onto the copy) :type other: `molpher.swig_wrappers.core.MolpherMol` or its derived class This a specialized version of the `molpher.swig_wrappers.core.MolpherMol` proxy class. It implements some additional functionality for ease of use from Python. .. seealso:: `molpher.swig_wrappers.core.MolpherMol` """ def __init__(self, smiles=None, other=None): if smiles and other: warnings.warn( "Both SMILES string and another MolpherMol instance specified. Using another instance to initialize..." , RuntimeWarning ) if other and isinstance(other, wrappers.MolpherMol): super(MolpherMol, self).__init__(other) elif smiles and type(smiles) == str: super(MolpherMol, self).__init__(smiles) elif not smiles and not other: super(MolpherMol, self).__init__() else: raise AttributeError('Invalid argumetns supplied to the constructor.') def __repr__(self): return shorten_repr(MolpherMol, self) def __lt__(self, other): return self.smiles < other.smiles
[docs] def copy(self): """ Returns a copy of this instance. If this instance has a `tree` assigned, the returned will have `None` instead. :return: a copy of this instance :rtype: """ copy = super(MolpherMol, self).copy() copy.__class__ = MolpherMol return copy
@property def tree(self): """ A reference to the tree this instance is currently in. If the molecule is not present in any tree, this value is `None`. :return: reference to the tree this instance is currently in :rtype: :class:`~molpher.core.ExplorationTree.ExplorationTree` or `None` """ ret = self.getTree() if ret: ret.__class__ = molpher.core.ExplorationTree return ret @property def smiles(self): """ :return: canonical SMILES string of this molecule :rtype: `str` """ return self.getSMILES() @smiles.setter def smiles(self, val): self.setSMILES(val) @property def parent_smiles(self): """ Canonical SMILES string of the parent molecule in the tree. Can be an empty `str`, if the molecule is a root of the tree or is not associated with any. :return: canonical SMILES string of the parent molecule in the tree :rtype: `str` """ return self.getParentSMILES() @property def parent_operator(self): """ The name of the :term:`chemical operator <chemical operators>` :term:`selector <selectors>` that lead to the creation of this molecule. :return: name of the parent chemical operator :rtype: `str` """ return wrappers.ChemOperShortDesc(self.getParentOper()) @property def dist_to_target(self): """ The value of the objective function. In the original implementation, this is the structural distance to the target molecule using a `similarity measure`. This value can be changed. :return: value of the objective function :rtype: `float` """ return self.getDistToTarget() @dist_to_target.setter def dist_to_target(self, dist): self.setDistToTarget(dist) @property def sascore(self): """ The synthetic feasibility score of the molecule according to Ertl. .. todo:: add reference This value can be changed. :return: synthetic feasibility score :rtype: `float` """ return self.getSAScore() @sascore.setter def sascore(self, val): self.setSAScore(val) @property def historic_descendents(self): """ Canonical SMILES strings of all molecules derived from this compound. :return: :rtype: `str` """ return self.getHistoricDescendants() @property def descendents(self): """ Canonical SMILES strings of all molecules derived from this compound that are currently present in the tree. :return: :rtype: `str` """ return self.getDescendants() @property def gens_without_improvement(self): """ Number of morph generations derived from this molecule that did not contain any morphs with an improvement in the objective function from the target molecule. This value can be changed. :return: number of non-producing generations :rtype: `int` """ return self.getItersWithoutDistImprovement() @gens_without_improvement.setter def gens_without_improvement(self, value): self.setItersWithoutDistImprovement(value)