Contact
CoCalc Logo Icon
StoreFeaturesDocsShareSupport News AboutSign UpSign In
| Download

All published worksheets from http://sagenb.org

Views: 168739
Image: ubuntu2004

Adapting a useful trick, we attempt to set up analogues of IPython's "magic" %timeit function for notebook cells.  See timeit for documentation on the underlying Python library module.

First, we wrap an existing Sage library function:

class timeit1: def __init__(self, number=0, repeat=3, precision=3, preparse=False): self.number = number self.repeat = repeat self.precision = precision self.preparse = preparse def eval(self, s, globals, locals): return sage.misc.sage_timeit.sage_timeit(s, globals, number=self.number, repeat=self.repeat, precision=self.precision, preparse=self.preparse)
%timeit1() c = (1 + 1j) / 3 z = 0 for i in xrange(100): z = z**2 + c
625 loops, best of 3: 16.9 µs per loop
import time
%timeit1(number=1) print 'Sleeping...' time.sleep(1) print 'Awake!'
1 loops, best of 3: 996 ms per loop

Here's an alternative, with sample statistics computed for repeat iterations:

class timeit2: def __init__(self, repeat=1, precision=3, preparse=True): import time self.time = time.time self.repeat = repeat self.precision = int(precision) self.preparse = preparse def eval(self, s, globals, locals): if self.preparse: s = preparse(s) results = [] for r in xrange(self.repeat): start_time = self.time() ans = python.eval(s, globals, locals) results.append(self.time() - start_time) v = vector(RDF, results) print 'r = %d, mean = %.*g, std. dev. = %.*g' % (self.repeat, self.precision, v.mean(), self.precision, v.standard_deviation(population=True)) return ans
def iterate(f, n, x): ans = x for i in xrange(n): ans = f(ans) return ans
%timeit2(repeat=10) big = iterate(lambda x: x ^ x, 2, 8)
r = 10, mean = 0.108, std. dev. = 0.0175
%timeit2(repeat=3, precision=5) print 'Sleeping...' time.sleep(1) print 'Awake!'
Sleeping... Awake! Sleeping... Awake! Sleeping... Awake! r = 3, mean = 0.99736, std. dev. = 0.0049723