Commit 343e1d40 authored by Bharath Ramsundar's avatar Bharath Ramsundar
Browse files

New comments and cleanup

parent 8f1917f5
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -691,6 +691,8 @@ class Dataset(object):

    TODO(rbharath, joegomes): It is unclear whether this should be a Dataset
    function. Might get refactored out.
    TODO(rbharath, joegomes): If y_n were an exposed part of the API, this
    function could be entirely written in userspace.
    """
    if len(self) == 0:
      return None, None, None, None
+4 −1
Original line number Diff line number Diff line
@@ -30,7 +30,10 @@ class AtomicCoordinates(Featurizer):

    N = mol.GetNumAtoms()
    coords = np.zeros((N,3))
    # TODO(joegomes, rbharath): Add comment about magic number

    # RDKit stores atomic coordinates in Angstrom. Atomic unit of length is the
    # bohr (1 bohr = 0.529177 Angstrom). Converting units makes gradient calculation
    # consistent with most QM software packages.
    coords_in_bohr = [mol.GetConformer(0).GetAtomPosition(i).__div__(0.52917721092)
                      for i in xrange(N)]

+8 −3
Original line number Diff line number Diff line
@@ -103,7 +103,7 @@ class Metric(object):
  """Wrapper class for computing user-defined metrics."""

  def __init__(self, metric, task_averager=None, name=None, threshold=None,
               verbosity=None, mode=None, compute_force_metrics=False):
               verbosity=None, mode=None, compute_energy_metric=False):
    """
    Args:
      metric: function that takes args y_true, y_pred (in that order) and
@@ -136,7 +136,11 @@ class Metric(object):
        raise ValueError("Must specify mode for new metric.")
    assert mode in ["classification", "regression"]
    self.mode = mode
    self.compute_force_metrics = compute_force_metrics 
    # The convention used is that the first task is the metric.
    # TODO(rbharath, joegomes): This doesn't seem like it should be hard-coded as
    # an option in the Metric class. Instead, this should be possible to move into
    # user-space as a custom task_averager function.
    self.compute_energy_metric = compute_energy_metric

  def compute_metric(self, y_true, y_pred, w=None, n_classes=2, filter_nans=True):
    """Compute a performance metric for each task.
@@ -182,7 +186,8 @@ class Metric(object):
      if filter_nans:
        computed_metrics = np.array(computed_metrics)
        computed_metrics = computed_metrics[~np.isnan(computed_metrics)]
      if self.compute_force_metrics:
      if self.compute_energy_metric:
        # TODO(rbharath, joegomes): What is this magic number?
        force_error = self.task_averager(computed_metrics[1:])*4961.47596096
        print("Force error (metric: np.mean(%s)): %f kJ/mol/A" % (self.name, force_error))
        return computed_metrics[0]
+0 −3
Original line number Diff line number Diff line
@@ -10,9 +10,7 @@ import numpy as np
from deepchem.utils.save import log
from deepchem.models import Model
import sklearn
######################################################## DEBUG
from deepchem.transformers import undo_transforms
######################################################## DEBUG

class SingletaskToMultitask(Model):
  """
@@ -123,7 +121,6 @@ class SingletaskToMultitask(Model):
            verbosity=self.verbosity)
        task_model.reload()

      #y_pred[:, ind] = task_model.predict(dataset, transformers)
      y_pred[:, ind] = task_model.predict(dataset, [])
    y_pred = undo_transforms(y_pred, transformers)
    return y_pred