Skip to content

WIP: add timeit option in runner

Bas Nijholt requested to merge timed_runnrer into master

This is probably useful for testing.

This will only work with the SequentialExecutor or an executor that does a better job of pickling, I marked it as a WIP because of this reason.

import adaptive
import numpy as np
import holoviews as hv
adaptive.notebook_extension()

def f(x):
    return x**2

learner = adaptive.Learner1D(f, (-1, 1))

runner = adaptive.Runner(learner, adaptive.runner.SequentialExecutor(), 
                         goal=lambda l: l.loss() < 0.00001, timeit=True)

we can then easily generate a plot:

def running_mean(x, N):
    cumsum = np.cumsum(np.insert(x, 0, 0)) 
    return (cumsum[N:] - cumsum[:-N]) / float(N)

(hv.Curve(running_mean(runner.times['add_point'], 200), label='add_point') 
 * hv.Curve(running_mean(runner.times['choose_points'], 200), label='choose_points') 
 * hv.Curve(running_mean(runner.times['function'], 200), label='function'))

times

For the future

The runner can also be made smarter. For example, it could notice that choose_points takes longer than evaluating the function, then it could choose to choose more points at once.

Edited by Bas Nijholt

Merge request reports