Can you capture the output of ipython's magic methods? (timeit)
Asked Answered
T

2

31

I want to capture and plot the results from 5 or so timeit calls with logarithmically increasing sizes of N to show how methodX() scales with input.

So far I have tried:

output = %timeit -r 10 results = methodX(N)

It does not work...

Can't find info in the docs either. I feel like you should be able to at least intercept the string that is printed. After that I can parse it to extract my info.

Has anyone done this or tried?

PS: this is in an ipython notebook if that makes a diff.

Tinsmith answered 26/6, 2013 at 2:48 Comment(1)
possible duplicate of Capture the result of an IPython magic functionLonglimbed
L
52

This duplicate question Capture the result of an IPython magic function has an answer demonstrating that this has since been implemented.

Calling the %timeit magic with the -o option like:

%timeit -o <statement>

returns a TimeitResult object which is a simple object with all information about the %timeit run as attributes. For example:

In [1]: result = %timeit -o 1 + 2
Out[1]: 10000000 loops, best of 3: 23.2 ns per loop

In [2]: result.best
Out[2]: 2.3192405700683594e-08
Longlimbed answered 27/8, 2014 at 16:28 Comment(4)
This seems specific to only some magic commands (maybe just %timeit?). It does not work with %%timeit. Using result = %%timeit -o as the line of a cell returns None.Brittani
@StevenC.Howell You can use %%timeit -o without assignment. It will return a TimeitResult object and thanks to IPython's output capture you can retrieve the result by accessing _.Pyszka
From the docs for timeit : "In cell mode (%%timeit) the statement in the first line is used as setup code (executed but not timed) and the body of the cell is timed. The cell body has access to any variables created in the setup code." github.com/ipython/ipython/blob/…Indecency
Additionally, if you add -q the you don't the normal output.Viens
F
1

PS: this is in an ipython notebook if that makes a diff.

No it does not.

On dev there is te %%capture cell magic. The other way would be to modify the timeit magic to return value instead of printing, or use the timeit module itself. Patches welcomed.

Familiar answered 26/6, 2013 at 6:13 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.