def report(self, fraction=None):
r = Dict()<EOL>local_key = self.stack_key<EOL>if local_key is None: return {}<EOL>runtimes = self.runtimes()<EOL>for key in self.stack_keys:<EOL><INDENT>if self.current_times.get(key) is None: <EOL><INDENT>self.start(key=key)<EOL><DEDENT>runtime = runtimes.get(key) or self.runtime(key)<EOL>if key == local_key and fraction is not None:<EOL><INDENT>r[key] = fraction<EOL><DEDENT>elif runtime is not None:<EOL><INDENT>r[key] = (time() - self.current_times[key]) / runtime<EOL><DEDENT><DEDENT>return r<EOL>
report the total progress for the current stack, optionally given the local fraction completed.
        fraction=None: if given, used as the fraction of the local method so far completed.
        runtimes=None: if given, used as the expected runtimes for the current stack.