Return a properly-structured dict of results. The default returns a dict with
        results keyed by :attr:`Experiment.RESULTS`, the data point in the parameter space
        keyed by :attr:`Experiment.PARAMETERS`, and timing and other metadata keyed
        by :attr:`Experiment.METADATA`. Overriding this method can be used to record extra
        values, but be sure to call the base method as well.

        :param params: the parameters we ran under
        :param meta: the metadata for this run
        :param res: the direct experimental results from do()
        :returns: a :term:`results dict`

def report( self, params, meta, res ):
        """Return a properly-structured dict of results. The default returns a dict with
        results keyed by :attr:`Experiment.RESULTS`, the data point in the parameter space
        keyed by :attr:`Experiment.PARAMETERS`, and timing and other metadata keyed
        by :attr:`Experiment.METADATA`. Overriding this method can be used to record extra
        values, but be sure to call the base method as well.

        :param params: the parameters we ran under
        :param meta: the metadata for this run
        :param res: the direct experimental results from do()
        :returns: a :term:`results dict`"""
        rc = dict()
        rc[self.PARAMETERS] = params.copy()
        rc[self.METADATA] = meta.copy()
        rc[self.RESULTS] = res
        return rc