##// END OF EJS Templates
Add -q option (suppress print upon creation) to %macro...
Jeff Knisley -
Show More
@@ -1,1177 +1,1183 b''
1 1 # -*- coding: utf-8 -*-
2 2 """Implementation of execution-related magic functions.
3 3 """
4 4 #-----------------------------------------------------------------------------
5 5 # Copyright (c) 2012 The IPython Development Team.
6 6 #
7 7 # Distributed under the terms of the Modified BSD License.
8 8 #
9 9 # The full license is in the file COPYING.txt, distributed with this software.
10 10 #-----------------------------------------------------------------------------
11 11
12 12 #-----------------------------------------------------------------------------
13 13 # Imports
14 14 #-----------------------------------------------------------------------------
15 15
16 16 # Stdlib
17 17 import __builtin__ as builtin_mod
18 18 import ast
19 19 import bdb
20 20 import os
21 21 import sys
22 22 import time
23 23 from StringIO import StringIO
24 24
25 25 # cProfile was added in Python2.5
26 26 try:
27 27 import cProfile as profile
28 28 import pstats
29 29 except ImportError:
30 30 # profile isn't bundled by default in Debian for license reasons
31 31 try:
32 32 import profile, pstats
33 33 except ImportError:
34 34 profile = pstats = None
35 35
36 36 # Our own packages
37 37 from IPython.core import debugger, oinspect
38 38 from IPython.core import magic_arguments
39 39 from IPython.core import page
40 40 from IPython.core.error import UsageError
41 41 from IPython.core.macro import Macro
42 42 from IPython.core.magic import (Magics, magics_class, line_magic, cell_magic,
43 43 line_cell_magic, on_off, needs_local_scope)
44 44 from IPython.testing.skipdoctest import skip_doctest
45 45 from IPython.utils import py3compat
46 46 from IPython.utils.contexts import preserve_keys
47 47 from IPython.utils.io import capture_output
48 48 from IPython.utils.ipstruct import Struct
49 49 from IPython.utils.module_paths import find_mod
50 50 from IPython.utils.path import get_py_filename, unquote_filename, shellglob
51 51 from IPython.utils.timing import clock, clock2
52 52 from IPython.utils.warn import warn, error
53 53
54 54
55 55 #-----------------------------------------------------------------------------
56 56 # Magic implementation classes
57 57 #-----------------------------------------------------------------------------
58 58
59 59 @magics_class
60 60 class ExecutionMagics(Magics):
61 61 """Magics related to code execution, debugging, profiling, etc.
62 62
63 63 """
64 64
65 65 def __init__(self, shell):
66 66 super(ExecutionMagics, self).__init__(shell)
67 67 if profile is None:
68 68 self.prun = self.profile_missing_notice
69 69 # Default execution function used to actually run user code.
70 70 self.default_runner = None
71 71
72 72 def profile_missing_notice(self, *args, **kwargs):
73 73 error("""\
74 74 The profile module could not be found. It has been removed from the standard
75 75 python packages because of its non-free license. To use profiling, install the
76 76 python-profiler package from non-free.""")
77 77
78 78 @skip_doctest
79 79 @line_cell_magic
80 80 def prun(self, parameter_s='', cell=None):
81 81
82 82 """Run a statement through the python code profiler.
83 83
84 84 Usage, in line mode:
85 85 %prun [options] statement
86 86
87 87 Usage, in cell mode:
88 88 %%prun [options] [statement]
89 89 code...
90 90 code...
91 91
92 92 In cell mode, the additional code lines are appended to the (possibly
93 93 empty) statement in the first line. Cell mode allows you to easily
94 94 profile multiline blocks without having to put them in a separate
95 95 function.
96 96
97 97 The given statement (which doesn't require quote marks) is run via the
98 98 python profiler in a manner similar to the profile.run() function.
99 99 Namespaces are internally managed to work correctly; profile.run
100 100 cannot be used in IPython because it makes certain assumptions about
101 101 namespaces which do not hold under IPython.
102 102
103 103 Options:
104 104
105 105 -l <limit>: you can place restrictions on what or how much of the
106 106 profile gets printed. The limit value can be:
107 107
108 108 * A string: only information for function names containing this string
109 109 is printed.
110 110
111 111 * An integer: only these many lines are printed.
112 112
113 113 * A float (between 0 and 1): this fraction of the report is printed
114 114 (for example, use a limit of 0.4 to see the topmost 40% only).
115 115
116 116 You can combine several limits with repeated use of the option. For
117 117 example, '-l __init__ -l 5' will print only the topmost 5 lines of
118 118 information about class constructors.
119 119
120 120 -r: return the pstats.Stats object generated by the profiling. This
121 121 object has all the information about the profile in it, and you can
122 122 later use it for further analysis or in other functions.
123 123
124 124 -s <key>: sort profile by given key. You can provide more than one key
125 125 by using the option several times: '-s key1 -s key2 -s key3...'. The
126 126 default sorting key is 'time'.
127 127
128 128 The following is copied verbatim from the profile documentation
129 129 referenced below:
130 130
131 131 When more than one key is provided, additional keys are used as
132 132 secondary criteria when the there is equality in all keys selected
133 133 before them.
134 134
135 135 Abbreviations can be used for any key names, as long as the
136 136 abbreviation is unambiguous. The following are the keys currently
137 137 defined:
138 138
139 139 Valid Arg Meaning
140 140 "calls" call count
141 141 "cumulative" cumulative time
142 142 "file" file name
143 143 "module" file name
144 144 "pcalls" primitive call count
145 145 "line" line number
146 146 "name" function name
147 147 "nfl" name/file/line
148 148 "stdname" standard name
149 149 "time" internal time
150 150
151 151 Note that all sorts on statistics are in descending order (placing
152 152 most time consuming items first), where as name, file, and line number
153 153 searches are in ascending order (i.e., alphabetical). The subtle
154 154 distinction between "nfl" and "stdname" is that the standard name is a
155 155 sort of the name as printed, which means that the embedded line
156 156 numbers get compared in an odd way. For example, lines 3, 20, and 40
157 157 would (if the file names were the same) appear in the string order
158 158 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
159 159 line numbers. In fact, sort_stats("nfl") is the same as
160 160 sort_stats("name", "file", "line").
161 161
162 162 -T <filename>: save profile results as shown on screen to a text
163 163 file. The profile is still shown on screen.
164 164
165 165 -D <filename>: save (via dump_stats) profile statistics to given
166 166 filename. This data is in a format understood by the pstats module, and
167 167 is generated by a call to the dump_stats() method of profile
168 168 objects. The profile is still shown on screen.
169 169
170 170 -q: suppress output to the pager. Best used with -T and/or -D above.
171 171
172 172 If you want to run complete programs under the profiler's control, use
173 173 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
174 174 contains profiler specific options as described here.
175 175
176 176 You can read the complete documentation for the profile module with::
177 177
178 178 In [1]: import profile; profile.help()
179 179 """
180 180 opts, arg_str = self.parse_options(parameter_s, 'D:l:rs:T:q',
181 181 list_all=True, posix=False)
182 182 if cell is not None:
183 183 arg_str += '\n' + cell
184 184 return self._run_with_profiler(arg_str, opts, self.shell.user_ns)
185 185
186 186 def _run_with_profiler(self, code, opts, namespace):
187 187 """
188 188 Run `code` with profiler. Used by ``%prun`` and ``%run -p``.
189 189
190 190 Parameters
191 191 ----------
192 192 code : str
193 193 Code to be executed.
194 194 opts : Struct
195 195 Options parsed by `self.parse_options`.
196 196 namespace : dict
197 197 A dictionary for Python namespace (e.g., `self.shell.user_ns`).
198 198
199 199 """
200 200
201 201 # Fill default values for unspecified options:
202 202 opts.merge(Struct(D=[''], l=[], s=['time'], T=['']))
203 203
204 204 prof = profile.Profile()
205 205 try:
206 206 prof = prof.runctx(code, namespace, namespace)
207 207 sys_exit = ''
208 208 except SystemExit:
209 209 sys_exit = """*** SystemExit exception caught in code being profiled."""
210 210
211 211 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
212 212
213 213 lims = opts.l
214 214 if lims:
215 215 lims = [] # rebuild lims with ints/floats/strings
216 216 for lim in opts.l:
217 217 try:
218 218 lims.append(int(lim))
219 219 except ValueError:
220 220 try:
221 221 lims.append(float(lim))
222 222 except ValueError:
223 223 lims.append(lim)
224 224
225 225 # Trap output.
226 226 stdout_trap = StringIO()
227 227 stats_stream = stats.stream
228 228 try:
229 229 stats.stream = stdout_trap
230 230 stats.print_stats(*lims)
231 231 finally:
232 232 stats.stream = stats_stream
233 233
234 234 output = stdout_trap.getvalue()
235 235 output = output.rstrip()
236 236
237 237 if 'q' not in opts:
238 238 page.page(output)
239 239 print sys_exit,
240 240
241 241 dump_file = opts.D[0]
242 242 text_file = opts.T[0]
243 243 if dump_file:
244 244 dump_file = unquote_filename(dump_file)
245 245 prof.dump_stats(dump_file)
246 246 print '\n*** Profile stats marshalled to file',\
247 247 repr(dump_file)+'.',sys_exit
248 248 if text_file:
249 249 text_file = unquote_filename(text_file)
250 250 pfile = open(text_file,'w')
251 251 pfile.write(output)
252 252 pfile.close()
253 253 print '\n*** Profile printout saved to text file',\
254 254 repr(text_file)+'.',sys_exit
255 255
256 256 if 'r' in opts:
257 257 return stats
258 258 else:
259 259 return None
260 260
261 261 @line_magic
262 262 def pdb(self, parameter_s=''):
263 263 """Control the automatic calling of the pdb interactive debugger.
264 264
265 265 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
266 266 argument it works as a toggle.
267 267
268 268 When an exception is triggered, IPython can optionally call the
269 269 interactive pdb debugger after the traceback printout. %pdb toggles
270 270 this feature on and off.
271 271
272 272 The initial state of this feature is set in your configuration
273 273 file (the option is ``InteractiveShell.pdb``).
274 274
275 275 If you want to just activate the debugger AFTER an exception has fired,
276 276 without having to type '%pdb on' and rerunning your code, you can use
277 277 the %debug magic."""
278 278
279 279 par = parameter_s.strip().lower()
280 280
281 281 if par:
282 282 try:
283 283 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
284 284 except KeyError:
285 285 print ('Incorrect argument. Use on/1, off/0, '
286 286 'or nothing for a toggle.')
287 287 return
288 288 else:
289 289 # toggle
290 290 new_pdb = not self.shell.call_pdb
291 291
292 292 # set on the shell
293 293 self.shell.call_pdb = new_pdb
294 294 print 'Automatic pdb calling has been turned',on_off(new_pdb)
295 295
296 296 @line_magic
297 297 def debug(self, parameter_s=''):
298 298 """Activate the interactive debugger in post-mortem mode.
299 299
300 300 If an exception has just occurred, this lets you inspect its stack
301 301 frames interactively. Note that this will always work only on the last
302 302 traceback that occurred, so you must call this quickly after an
303 303 exception that you wish to inspect has fired, because if another one
304 304 occurs, it clobbers the previous one.
305 305
306 306 If you want IPython to automatically do this on every exception, see
307 307 the %pdb magic for more details.
308 308 """
309 309 self.shell.debugger(force=True)
310 310
311 311 @line_magic
312 312 def tb(self, s):
313 313 """Print the last traceback with the currently active exception mode.
314 314
315 315 See %xmode for changing exception reporting modes."""
316 316 self.shell.showtraceback()
317 317
318 318 @skip_doctest
319 319 @line_magic
320 320 def run(self, parameter_s='', runner=None,
321 321 file_finder=get_py_filename):
322 322 """Run the named file inside IPython as a program.
323 323
324 324 Usage:
325 325 %run [-n -i -e -G]
326 326 [( -t [-N<N>] | -d [-b<N>] | -p [profile options] )]
327 327 ( -m mod | file ) [args]
328 328
329 329 Parameters after the filename are passed as command-line arguments to
330 330 the program (put in sys.argv). Then, control returns to IPython's
331 331 prompt.
332 332
333 333 This is similar to running at a system prompt:\\
334 334 $ python file args\\
335 335 but with the advantage of giving you IPython's tracebacks, and of
336 336 loading all variables into your interactive namespace for further use
337 337 (unless -p is used, see below).
338 338
339 339 The file is executed in a namespace initially consisting only of
340 340 __name__=='__main__' and sys.argv constructed as indicated. It thus
341 341 sees its environment as if it were being run as a stand-alone program
342 342 (except for sharing global objects such as previously imported
343 343 modules). But after execution, the IPython interactive namespace gets
344 344 updated with all variables defined in the program (except for __name__
345 345 and sys.argv). This allows for very convenient loading of code for
346 346 interactive work, while giving each program a 'clean sheet' to run in.
347 347
348 348 Arguments are expanded using shell-like glob match. Patterns
349 349 '*', '?', '[seq]' and '[!seq]' can be used. Additionally,
350 350 tilde '~' will be expanded into user's home directory. Unlike
351 351 real shells, quotation does not suppress expansions. Use
352 352 *two* back slashes (e.g., '\\\\*') to suppress expansions.
353 353 To completely disable these expansions, you can use -G flag.
354 354
355 355 Options:
356 356
357 357 -n: __name__ is NOT set to '__main__', but to the running file's name
358 358 without extension (as python does under import). This allows running
359 359 scripts and reloading the definitions in them without calling code
360 360 protected by an ' if __name__ == "__main__" ' clause.
361 361
362 362 -i: run the file in IPython's namespace instead of an empty one. This
363 363 is useful if you are experimenting with code written in a text editor
364 364 which depends on variables defined interactively.
365 365
366 366 -e: ignore sys.exit() calls or SystemExit exceptions in the script
367 367 being run. This is particularly useful if IPython is being used to
368 368 run unittests, which always exit with a sys.exit() call. In such
369 369 cases you are interested in the output of the test results, not in
370 370 seeing a traceback of the unittest module.
371 371
372 372 -t: print timing information at the end of the run. IPython will give
373 373 you an estimated CPU time consumption for your script, which under
374 374 Unix uses the resource module to avoid the wraparound problems of
375 375 time.clock(). Under Unix, an estimate of time spent on system tasks
376 376 is also given (for Windows platforms this is reported as 0.0).
377 377
378 378 If -t is given, an additional -N<N> option can be given, where <N>
379 379 must be an integer indicating how many times you want the script to
380 380 run. The final timing report will include total and per run results.
381 381
382 382 For example (testing the script uniq_stable.py)::
383 383
384 384 In [1]: run -t uniq_stable
385 385
386 386 IPython CPU timings (estimated):\\
387 387 User : 0.19597 s.\\
388 388 System: 0.0 s.\\
389 389
390 390 In [2]: run -t -N5 uniq_stable
391 391
392 392 IPython CPU timings (estimated):\\
393 393 Total runs performed: 5\\
394 394 Times : Total Per run\\
395 395 User : 0.910862 s, 0.1821724 s.\\
396 396 System: 0.0 s, 0.0 s.
397 397
398 398 -d: run your program under the control of pdb, the Python debugger.
399 399 This allows you to execute your program step by step, watch variables,
400 400 etc. Internally, what IPython does is similar to calling:
401 401
402 402 pdb.run('execfile("YOURFILENAME")')
403 403
404 404 with a breakpoint set on line 1 of your file. You can change the line
405 405 number for this automatic breakpoint to be <N> by using the -bN option
406 406 (where N must be an integer). For example::
407 407
408 408 %run -d -b40 myscript
409 409
410 410 will set the first breakpoint at line 40 in myscript.py. Note that
411 411 the first breakpoint must be set on a line which actually does
412 412 something (not a comment or docstring) for it to stop execution.
413 413
414 414 Or you can specify a breakpoint in a different file::
415 415
416 416 %run -d -b myotherfile.py:20 myscript
417 417
418 418 When the pdb debugger starts, you will see a (Pdb) prompt. You must
419 419 first enter 'c' (without quotes) to start execution up to the first
420 420 breakpoint.
421 421
422 422 Entering 'help' gives information about the use of the debugger. You
423 423 can easily see pdb's full documentation with "import pdb;pdb.help()"
424 424 at a prompt.
425 425
426 426 -p: run program under the control of the Python profiler module (which
427 427 prints a detailed report of execution times, function calls, etc).
428 428
429 429 You can pass other options after -p which affect the behavior of the
430 430 profiler itself. See the docs for %prun for details.
431 431
432 432 In this mode, the program's variables do NOT propagate back to the
433 433 IPython interactive namespace (because they remain in the namespace
434 434 where the profiler executes them).
435 435
436 436 Internally this triggers a call to %prun, see its documentation for
437 437 details on the options available specifically for profiling.
438 438
439 439 There is one special usage for which the text above doesn't apply:
440 440 if the filename ends with .ipy, the file is run as ipython script,
441 441 just as if the commands were written on IPython prompt.
442 442
443 443 -m: specify module name to load instead of script path. Similar to
444 444 the -m option for the python interpreter. Use this option last if you
445 445 want to combine with other %run options. Unlike the python interpreter
446 446 only source modules are allowed no .pyc or .pyo files.
447 447 For example::
448 448
449 449 %run -m example
450 450
451 451 will run the example module.
452 452
453 453 -G: disable shell-like glob expansion of arguments.
454 454
455 455 """
456 456
457 457 # get arguments and set sys.argv for program to be run.
458 458 opts, arg_lst = self.parse_options(parameter_s,
459 459 'nidtN:b:pD:l:rs:T:em:G',
460 460 mode='list', list_all=1)
461 461 if "m" in opts:
462 462 modulename = opts["m"][0]
463 463 modpath = find_mod(modulename)
464 464 if modpath is None:
465 465 warn('%r is not a valid modulename on sys.path'%modulename)
466 466 return
467 467 arg_lst = [modpath] + arg_lst
468 468 try:
469 469 filename = file_finder(arg_lst[0])
470 470 except IndexError:
471 471 warn('you must provide at least a filename.')
472 472 print '\n%run:\n', oinspect.getdoc(self.run)
473 473 return
474 474 except IOError as e:
475 475 try:
476 476 msg = str(e)
477 477 except UnicodeError:
478 478 msg = e.message
479 479 error(msg)
480 480 return
481 481
482 482 if filename.lower().endswith('.ipy'):
483 483 with preserve_keys(self.shell.user_ns, '__file__'):
484 484 self.shell.user_ns['__file__'] = filename
485 485 self.shell.safe_execfile_ipy(filename)
486 486 return
487 487
488 488 # Control the response to exit() calls made by the script being run
489 489 exit_ignore = 'e' in opts
490 490
491 491 # Make sure that the running script gets a proper sys.argv as if it
492 492 # were run from a system shell.
493 493 save_argv = sys.argv # save it for later restoring
494 494
495 495 if 'G' in opts:
496 496 args = arg_lst[1:]
497 497 else:
498 498 # tilde and glob expansion
499 499 args = shellglob(map(os.path.expanduser, arg_lst[1:]))
500 500
501 501 sys.argv = [filename] + args # put in the proper filename
502 502 # protect sys.argv from potential unicode strings on Python 2:
503 503 if not py3compat.PY3:
504 504 sys.argv = [ py3compat.cast_bytes(a) for a in sys.argv ]
505 505
506 506 if 'i' in opts:
507 507 # Run in user's interactive namespace
508 508 prog_ns = self.shell.user_ns
509 509 __name__save = self.shell.user_ns['__name__']
510 510 prog_ns['__name__'] = '__main__'
511 511 main_mod = self.shell.new_main_mod(prog_ns)
512 512 else:
513 513 # Run in a fresh, empty namespace
514 514 if 'n' in opts:
515 515 name = os.path.splitext(os.path.basename(filename))[0]
516 516 else:
517 517 name = '__main__'
518 518
519 519 main_mod = self.shell.new_main_mod()
520 520 prog_ns = main_mod.__dict__
521 521 prog_ns['__name__'] = name
522 522
523 523 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
524 524 # set the __file__ global in the script's namespace
525 525 prog_ns['__file__'] = filename
526 526
527 527 # pickle fix. See interactiveshell for an explanation. But we need to
528 528 # make sure that, if we overwrite __main__, we replace it at the end
529 529 main_mod_name = prog_ns['__name__']
530 530
531 531 if main_mod_name == '__main__':
532 532 restore_main = sys.modules['__main__']
533 533 else:
534 534 restore_main = False
535 535
536 536 # This needs to be undone at the end to prevent holding references to
537 537 # every single object ever created.
538 538 sys.modules[main_mod_name] = main_mod
539 539
540 540 if 'p' in opts or 'd' in opts:
541 541 if 'm' in opts:
542 542 code = 'run_module(modulename, prog_ns)'
543 543 code_ns = {
544 544 'run_module': self.shell.safe_run_module,
545 545 'prog_ns': prog_ns,
546 546 'modulename': modulename,
547 547 }
548 548 else:
549 549 code = 'execfile(filename, prog_ns)'
550 550 code_ns = {
551 551 'execfile': self.shell.safe_execfile,
552 552 'prog_ns': prog_ns,
553 553 'filename': get_py_filename(filename),
554 554 }
555 555
556 556 try:
557 557 stats = None
558 558 with self.shell.readline_no_record:
559 559 if 'p' in opts:
560 560 stats = self._run_with_profiler(code, opts, code_ns)
561 561 else:
562 562 if 'd' in opts:
563 563 self._run_with_debugger(
564 564 code, code_ns, opts.get('b', ['1'])[0], filename)
565 565 else:
566 566 if 'm' in opts:
567 567 def run():
568 568 self.shell.safe_run_module(modulename, prog_ns)
569 569 else:
570 570 if runner is None:
571 571 runner = self.default_runner
572 572 if runner is None:
573 573 runner = self.shell.safe_execfile
574 574
575 575 def run():
576 576 runner(filename, prog_ns, prog_ns,
577 577 exit_ignore=exit_ignore)
578 578
579 579 if 't' in opts:
580 580 # timed execution
581 581 try:
582 582 nruns = int(opts['N'][0])
583 583 if nruns < 1:
584 584 error('Number of runs must be >=1')
585 585 return
586 586 except (KeyError):
587 587 nruns = 1
588 588 self._run_with_timing(run, nruns)
589 589 else:
590 590 # regular execution
591 591 run()
592 592
593 593 if 'i' in opts:
594 594 self.shell.user_ns['__name__'] = __name__save
595 595 else:
596 596 # The shell MUST hold a reference to prog_ns so after %run
597 597 # exits, the python deletion mechanism doesn't zero it out
598 598 # (leaving dangling references).
599 599 self.shell.cache_main_mod(prog_ns, filename)
600 600 # update IPython interactive namespace
601 601
602 602 # Some forms of read errors on the file may mean the
603 603 # __name__ key was never set; using pop we don't have to
604 604 # worry about a possible KeyError.
605 605 prog_ns.pop('__name__', None)
606 606
607 607 with preserve_keys(self.shell.user_ns, '__file__'):
608 608 self.shell.user_ns.update(prog_ns)
609 609 finally:
610 610 # It's a bit of a mystery why, but __builtins__ can change from
611 611 # being a module to becoming a dict missing some key data after
612 612 # %run. As best I can see, this is NOT something IPython is doing
613 613 # at all, and similar problems have been reported before:
614 614 # http://coding.derkeiler.com/Archive/Python/comp.lang.python/2004-10/0188.html
615 615 # Since this seems to be done by the interpreter itself, the best
616 616 # we can do is to at least restore __builtins__ for the user on
617 617 # exit.
618 618 self.shell.user_ns['__builtins__'] = builtin_mod
619 619
620 620 # Ensure key global structures are restored
621 621 sys.argv = save_argv
622 622 if restore_main:
623 623 sys.modules['__main__'] = restore_main
624 624 else:
625 625 # Remove from sys.modules the reference to main_mod we'd
626 626 # added. Otherwise it will trap references to objects
627 627 # contained therein.
628 628 del sys.modules[main_mod_name]
629 629
630 630 return stats
631 631
632 632 def _run_with_debugger(self, code, code_ns, break_point, filename):
633 633 """
634 634 Run `code` in debugger with a break point.
635 635
636 636 Parameters
637 637 ----------
638 638 code : str
639 639 Code to execute.
640 640 code_ns : dict
641 641 A namespace in which `code` is executed.
642 642 break_point : str
643 643 Line number in the file specified by `filename` argument
644 644 or a string in the format ``file:line``. In the latter
645 645 case, `filename` is ignored.
646 646 See also :func:`.parse_breakpoint`.
647 647 filename : str
648 648 Path to the file in which break point is specified.
649 649
650 650 Raises
651 651 ------
652 652 UsageError
653 653 If no meaningful break point is given by `break_point` and
654 654 `filename`.
655 655
656 656 """
657 657 deb = debugger.Pdb(self.shell.colors)
658 658 # reset Breakpoint state, which is moronically kept
659 659 # in a class
660 660 bdb.Breakpoint.next = 1
661 661 bdb.Breakpoint.bplist = {}
662 662 bdb.Breakpoint.bpbynumber = [None]
663 663 # Set an initial breakpoint to stop execution
664 664 maxtries = 10
665 665 bp_file, bp_line = parse_breakpoint(break_point, filename)
666 666 checkline = deb.checkline(bp_file, bp_line)
667 667 if not checkline:
668 668 for bp in range(bp_line + 1, bp_line + maxtries + 1):
669 669 if deb.checkline(bp_file, bp):
670 670 break
671 671 else:
672 672 msg = ("\nI failed to find a valid line to set "
673 673 "a breakpoint\n"
674 674 "after trying up to line: %s.\n"
675 675 "Please set a valid breakpoint manually "
676 676 "with the -b option." % bp)
677 677 raise UsageError(msg)
678 678 # if we find a good linenumber, set the breakpoint
679 679 deb.do_break('%s:%s' % (bp_file, bp_line))
680 680
681 681 # Mimic Pdb._runscript(...)
682 682 deb._wait_for_mainpyfile = True
683 683 deb.mainpyfile = deb.canonic(filename)
684 684
685 685 # Start file run
686 686 print "NOTE: Enter 'c' at the",
687 687 print "%s prompt to start your script." % deb.prompt
688 688 try:
689 689 #save filename so it can be used by methods on the deb object
690 690 deb._exec_filename = filename
691 691 deb.run(code, code_ns)
692 692
693 693 except:
694 694 etype, value, tb = sys.exc_info()
695 695 # Skip three frames in the traceback: the %run one,
696 696 # one inside bdb.py, and the command-line typed by the
697 697 # user (run by exec in pdb itself).
698 698 self.shell.InteractiveTB(etype, value, tb, tb_offset=3)
699 699
700 700 @staticmethod
701 701 def _run_with_timing(run, nruns):
702 702 """
703 703 Run function `run` and print timing information.
704 704
705 705 Parameters
706 706 ----------
707 707 run : callable
708 708 Any callable object which takes no argument.
709 709 nruns : int
710 710 Number of times to execute `run`.
711 711
712 712 """
713 713 twall0 = time.time()
714 714 if nruns == 1:
715 715 t0 = clock2()
716 716 run()
717 717 t1 = clock2()
718 718 t_usr = t1[0] - t0[0]
719 719 t_sys = t1[1] - t0[1]
720 720 print "\nIPython CPU timings (estimated):"
721 721 print " User : %10.2f s." % t_usr
722 722 print " System : %10.2f s." % t_sys
723 723 else:
724 724 runs = range(nruns)
725 725 t0 = clock2()
726 726 for nr in runs:
727 727 run()
728 728 t1 = clock2()
729 729 t_usr = t1[0] - t0[0]
730 730 t_sys = t1[1] - t0[1]
731 731 print "\nIPython CPU timings (estimated):"
732 732 print "Total runs performed:", nruns
733 733 print " Times : %10s %10s" % ('Total', 'Per run')
734 734 print " User : %10.2f s, %10.2f s." % (t_usr, t_usr / nruns)
735 735 print " System : %10.2f s, %10.2f s." % (t_sys, t_sys / nruns)
736 736 twall1 = time.time()
737 737 print "Wall time: %10.2f s." % (twall1 - twall0)
738 738
739 739 @skip_doctest
740 740 @line_cell_magic
741 741 def timeit(self, line='', cell=None):
742 742 """Time execution of a Python statement or expression
743 743
744 744 Usage, in line mode:
745 745 %timeit [-n<N> -r<R> [-t|-c]] statement
746 746 or in cell mode:
747 747 %%timeit [-n<N> -r<R> [-t|-c]] setup_code
748 748 code
749 749 code...
750 750
751 751 Time execution of a Python statement or expression using the timeit
752 752 module. This function can be used both as a line and cell magic:
753 753
754 754 - In line mode you can time a single-line statement (though multiple
755 755 ones can be chained with using semicolons).
756 756
757 757 - In cell mode, the statement in the first line is used as setup code
758 758 (executed but not timed) and the body of the cell is timed. The cell
759 759 body has access to any variables created in the setup code.
760 760
761 761 Options:
762 762 -n<N>: execute the given statement <N> times in a loop. If this value
763 763 is not given, a fitting value is chosen.
764 764
765 765 -r<R>: repeat the loop iteration <R> times and take the best result.
766 766 Default: 3
767 767
768 768 -t: use time.time to measure the time, which is the default on Unix.
769 769 This function measures wall time.
770 770
771 771 -c: use time.clock to measure the time, which is the default on
772 772 Windows and measures wall time. On Unix, resource.getrusage is used
773 773 instead and returns the CPU user time.
774 774
775 775 -p<P>: use a precision of <P> digits to display the timing result.
776 776 Default: 3
777 777
778 778
779 779 Examples
780 780 --------
781 781 ::
782 782
783 783 In [1]: %timeit pass
784 784 10000000 loops, best of 3: 53.3 ns per loop
785 785
786 786 In [2]: u = None
787 787
788 788 In [3]: %timeit u is None
789 789 10000000 loops, best of 3: 184 ns per loop
790 790
791 791 In [4]: %timeit -r 4 u == None
792 792 1000000 loops, best of 4: 242 ns per loop
793 793
794 794 In [5]: import time
795 795
796 796 In [6]: %timeit -n1 time.sleep(2)
797 797 1 loops, best of 3: 2 s per loop
798 798
799 799
800 800 The times reported by %timeit will be slightly higher than those
801 801 reported by the timeit.py script when variables are accessed. This is
802 802 due to the fact that %timeit executes the statement in the namespace
803 803 of the shell, compared with timeit.py, which uses a single setup
804 804 statement to import function or create variables. Generally, the bias
805 805 does not matter as long as results from timeit.py are not mixed with
806 806 those from %timeit."""
807 807
808 808 import timeit
809 809
810 810 opts, stmt = self.parse_options(line,'n:r:tcp:',
811 811 posix=False, strict=False)
812 812 if stmt == "" and cell is None:
813 813 return
814 814
815 815 timefunc = timeit.default_timer
816 816 number = int(getattr(opts, "n", 0))
817 817 repeat = int(getattr(opts, "r", timeit.default_repeat))
818 818 precision = int(getattr(opts, "p", 3))
819 819 if hasattr(opts, "t"):
820 820 timefunc = time.time
821 821 if hasattr(opts, "c"):
822 822 timefunc = clock
823 823
824 824 timer = timeit.Timer(timer=timefunc)
825 825 # this code has tight coupling to the inner workings of timeit.Timer,
826 826 # but is there a better way to achieve that the code stmt has access
827 827 # to the shell namespace?
828 828 transform = self.shell.input_splitter.transform_cell
829 829
830 830 if cell is None:
831 831 # called as line magic
832 832 ast_setup = ast.parse("pass")
833 833 ast_stmt = ast.parse(transform(stmt))
834 834 else:
835 835 ast_setup = ast.parse(transform(stmt))
836 836 ast_stmt = ast.parse(transform(cell))
837 837
838 838 ast_setup = self.shell.transform_ast(ast_setup)
839 839 ast_stmt = self.shell.transform_ast(ast_stmt)
840 840
841 841 # This codestring is taken from timeit.template - we fill it in as an
842 842 # AST, so that we can apply our AST transformations to the user code
843 843 # without affecting the timing code.
844 844 timeit_ast_template = ast.parse('def inner(_it, _timer):\n'
845 845 ' setup\n'
846 846 ' _t0 = _timer()\n'
847 847 ' for _i in _it:\n'
848 848 ' stmt\n'
849 849 ' _t1 = _timer()\n'
850 850 ' return _t1 - _t0\n')
851 851
852 852 class TimeitTemplateFiller(ast.NodeTransformer):
853 853 "This is quite tightly tied to the template definition above."
854 854 def visit_FunctionDef(self, node):
855 855 "Fill in the setup statement"
856 856 self.generic_visit(node)
857 857 if node.name == "inner":
858 858 node.body[:1] = ast_setup.body
859 859
860 860 return node
861 861
862 862 def visit_For(self, node):
863 863 "Fill in the statement to be timed"
864 864 if getattr(getattr(node.body[0], 'value', None), 'id', None) == 'stmt':
865 865 node.body = ast_stmt.body
866 866 return node
867 867
868 868 timeit_ast = TimeitTemplateFiller().visit(timeit_ast_template)
869 869 timeit_ast = ast.fix_missing_locations(timeit_ast)
870 870
871 871 # Track compilation time so it can be reported if too long
872 872 # Minimum time above which compilation time will be reported
873 873 tc_min = 0.1
874 874
875 875 t0 = clock()
876 876 code = compile(timeit_ast, "<magic-timeit>", "exec")
877 877 tc = clock()-t0
878 878
879 879 ns = {}
880 880 exec code in self.shell.user_ns, ns
881 881 timer.inner = ns["inner"]
882 882
883 883 if number == 0:
884 884 # determine number so that 0.2 <= total time < 2.0
885 885 number = 1
886 886 for i in range(1, 10):
887 887 if timer.timeit(number) >= 0.2:
888 888 break
889 889 number *= 10
890 890
891 891 best = min(timer.repeat(repeat, number)) / number
892 892
893 893 print u"%d loops, best of %d: %s per loop" % (number, repeat,
894 894 _format_time(best, precision))
895 895 if tc > tc_min:
896 896 print "Compiler time: %.2f s" % tc
897 897
898 898 @skip_doctest
899 899 @needs_local_scope
900 900 @line_cell_magic
901 901 def time(self,line='', cell=None, local_ns=None):
902 902 """Time execution of a Python statement or expression.
903 903
904 904 The CPU and wall clock times are printed, and the value of the
905 905 expression (if any) is returned. Note that under Win32, system time
906 906 is always reported as 0, since it can not be measured.
907 907
908 908 This function can be used both as a line and cell magic:
909 909
910 910 - In line mode you can time a single-line statement (though multiple
911 911 ones can be chained with using semicolons).
912 912
913 913 - In cell mode, you can time the cell body (a directly
914 914 following statement raises an error).
915 915
916 916 This function provides very basic timing functionality. Use the timeit
917 917 magic for more controll over the measurement.
918 918
919 919 Examples
920 920 --------
921 921 ::
922 922
923 923 In [1]: %time 2**128
924 924 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
925 925 Wall time: 0.00
926 926 Out[1]: 340282366920938463463374607431768211456L
927 927
928 928 In [2]: n = 1000000
929 929
930 930 In [3]: %time sum(range(n))
931 931 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
932 932 Wall time: 1.37
933 933 Out[3]: 499999500000L
934 934
935 935 In [4]: %time print 'hello world'
936 936 hello world
937 937 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
938 938 Wall time: 0.00
939 939
940 940 Note that the time needed by Python to compile the given expression
941 941 will be reported if it is more than 0.1s. In this example, the
942 942 actual exponentiation is done by Python at compilation time, so while
943 943 the expression can take a noticeable amount of time to compute, that
944 944 time is purely due to the compilation:
945 945
946 946 In [5]: %time 3**9999;
947 947 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
948 948 Wall time: 0.00 s
949 949
950 950 In [6]: %time 3**999999;
951 951 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
952 952 Wall time: 0.00 s
953 953 Compiler : 0.78 s
954 954 """
955 955
956 956 # fail immediately if the given expression can't be compiled
957 957
958 958 if line and cell:
959 959 raise UsageError("Can't use statement directly after '%%time'!")
960 960
961 961 if cell:
962 962 expr = self.shell.input_transformer_manager.transform_cell(cell)
963 963 else:
964 964 expr = self.shell.input_transformer_manager.transform_cell(line)
965 965
966 966 # Minimum time above which parse time will be reported
967 967 tp_min = 0.1
968 968
969 969 t0 = clock()
970 970 expr_ast = ast.parse(expr)
971 971 tp = clock()-t0
972 972
973 973 # Apply AST transformations
974 974 expr_ast = self.shell.transform_ast(expr_ast)
975 975
976 976 # Minimum time above which compilation time will be reported
977 977 tc_min = 0.1
978 978
979 979 if len(expr_ast.body)==1 and isinstance(expr_ast.body[0], ast.Expr):
980 980 mode = 'eval'
981 981 source = '<timed eval>'
982 982 expr_ast = ast.Expression(expr_ast.body[0].value)
983 983 else:
984 984 mode = 'exec'
985 985 source = '<timed exec>'
986 986 t0 = clock()
987 987 code = compile(expr_ast, source, mode)
988 988 tc = clock()-t0
989 989
990 990 # skew measurement as little as possible
991 991 glob = self.shell.user_ns
992 992 wtime = time.time
993 993 # time execution
994 994 wall_st = wtime()
995 995 if mode=='eval':
996 996 st = clock2()
997 997 out = eval(code, glob, local_ns)
998 998 end = clock2()
999 999 else:
1000 1000 st = clock2()
1001 1001 exec code in glob, local_ns
1002 1002 end = clock2()
1003 1003 out = None
1004 1004 wall_end = wtime()
1005 1005 # Compute actual times and report
1006 1006 wall_time = wall_end-wall_st
1007 1007 cpu_user = end[0]-st[0]
1008 1008 cpu_sys = end[1]-st[1]
1009 1009 cpu_tot = cpu_user+cpu_sys
1010 1010 # On windows cpu_sys is always zero, so no new information to the next print
1011 1011 if sys.platform != 'win32':
1012 1012 print "CPU times: user %s, sys: %s, total: %s" % \
1013 1013 (_format_time(cpu_user),_format_time(cpu_sys),_format_time(cpu_tot))
1014 1014 print "Wall time: %s" % _format_time(wall_time)
1015 1015 if tc > tc_min:
1016 1016 print "Compiler : %s" % _format_time(tc)
1017 1017 if tp > tp_min:
1018 1018 print "Parser : %s" % _format_time(tp)
1019 1019 return out
1020 1020
1021 1021 @skip_doctest
1022 1022 @line_magic
1023 1023 def macro(self, parameter_s=''):
1024 1024 """Define a macro for future re-execution. It accepts ranges of history,
1025 1025 filenames or string objects.
1026 1026
1027 1027 Usage:\\
1028 1028 %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ...
1029 1029
1030 1030 Options:
1031 1031
1032 1032 -r: use 'raw' input. By default, the 'processed' history is used,
1033 1033 so that magics are loaded in their transformed version to valid
1034 Python. If this option is given, the raw input as typed as the
1034 Python. If this option is given, the raw input as typed at the
1035 1035 command line is used instead.
1036
1037 -q: quiet macro definition. By default, a tag line is printed
1038 to indicate the macro has been created, and then the contents of
1039 the macro are printed. If this option is given, then no printout
1040 is produced once the macro is created.
1036 1041
1037 1042 This will define a global variable called `name` which is a string
1038 1043 made of joining the slices and lines you specify (n1,n2,... numbers
1039 1044 above) from your input history into a single string. This variable
1040 1045 acts like an automatic function which re-executes those lines as if
1041 1046 you had typed them. You just type 'name' at the prompt and the code
1042 1047 executes.
1043 1048
1044 1049 The syntax for indicating input ranges is described in %history.
1045 1050
1046 1051 Note: as a 'hidden' feature, you can also use traditional python slice
1047 1052 notation, where N:M means numbers N through M-1.
1048 1053
1049 For example, if your history contains (%hist prints it)::
1054 For example, if your history contains (print using %hist -n )::
1050 1055
1051 1056 44: x=1
1052 1057 45: y=3
1053 1058 46: z=x+y
1054 1059 47: print x
1055 1060 48: a=5
1056 1061 49: print 'x',x,'y',y
1057 1062
1058 1063 you can create a macro with lines 44 through 47 (included) and line 49
1059 1064 called my_macro with::
1060 1065
1061 1066 In [55]: %macro my_macro 44-47 49
1062 1067
1063 1068 Now, typing `my_macro` (without quotes) will re-execute all this code
1064 1069 in one pass.
1065 1070
1066 1071 You don't need to give the line-numbers in order, and any given line
1067 1072 number can appear multiple times. You can assemble macros with any
1068 1073 lines from your input history in any order.
1069 1074
1070 1075 The macro is a simple object which holds its value in an attribute,
1071 1076 but IPython's display system checks for macros and executes them as
1072 1077 code instead of printing them when you type their name.
1073 1078
1074 1079 You can view a macro's contents by explicitly printing it with::
1075 1080
1076 1081 print macro_name
1077 1082
1078 1083 """
1079 opts,args = self.parse_options(parameter_s,'r',mode='list')
1084 opts,args = self.parse_options(parameter_s,'rq',mode='list')
1080 1085 if not args: # List existing macros
1081 1086 return sorted(k for k,v in self.shell.user_ns.iteritems() if\
1082 1087 isinstance(v, Macro))
1083 1088 if len(args) == 1:
1084 1089 raise UsageError(
1085 1090 "%macro insufficient args; usage '%macro name n1-n2 n3-4...")
1086 1091 name, codefrom = args[0], " ".join(args[1:])
1087 1092
1088 1093 #print 'rng',ranges # dbg
1089 1094 try:
1090 1095 lines = self.shell.find_user_code(codefrom, 'r' in opts)
1091 1096 except (ValueError, TypeError) as e:
1092 1097 print e.args[0]
1093 1098 return
1094 1099 macro = Macro(lines)
1095 1100 self.shell.define_macro(name, macro)
1096 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1097 print '=== Macro contents: ==='
1098 print macro,
1101 if not ( 'q' in opts) :
1102 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1103 print '=== Macro contents: ==='
1104 print macro,
1099 1105
1100 1106 @magic_arguments.magic_arguments()
1101 1107 @magic_arguments.argument('output', type=str, default='', nargs='?',
1102 1108 help="""The name of the variable in which to store output.
1103 1109 This is a utils.io.CapturedIO object with stdout/err attributes
1104 1110 for the text of the captured output.
1105 1111
1106 1112 CapturedOutput also has a show() method for displaying the output,
1107 1113 and __call__ as well, so you can use that to quickly display the
1108 1114 output.
1109 1115
1110 1116 If unspecified, captured output is discarded.
1111 1117 """
1112 1118 )
1113 1119 @magic_arguments.argument('--no-stderr', action="store_true",
1114 1120 help="""Don't capture stderr."""
1115 1121 )
1116 1122 @magic_arguments.argument('--no-stdout', action="store_true",
1117 1123 help="""Don't capture stdout."""
1118 1124 )
1119 1125 @cell_magic
1120 1126 def capture(self, line, cell):
1121 1127 """run the cell, capturing stdout/err"""
1122 1128 args = magic_arguments.parse_argstring(self.capture, line)
1123 1129 out = not args.no_stdout
1124 1130 err = not args.no_stderr
1125 1131 with capture_output(out, err) as io:
1126 1132 self.shell.run_cell(cell)
1127 1133 if args.output:
1128 1134 self.shell.user_ns[args.output] = io
1129 1135
1130 1136 def parse_breakpoint(text, current_file):
1131 1137 '''Returns (file, line) for file:line and (current_file, line) for line'''
1132 1138 colon = text.find(':')
1133 1139 if colon == -1:
1134 1140 return current_file, int(text)
1135 1141 else:
1136 1142 return text[:colon], int(text[colon+1:])
1137 1143
1138 1144 def _format_time(timespan, precision=3):
1139 1145 """Formats the timespan in a human readable form"""
1140 1146 import math
1141 1147
1142 1148 if timespan >= 60.0:
1143 1149 # we have more than a minute, format that in a human readable form
1144 1150 # Idea from http://snipplr.com/view/5713/
1145 1151 parts = [("d", 60*60*24),("h", 60*60),("min", 60), ("s", 1)]
1146 1152 time = []
1147 1153 leftover = timespan
1148 1154 for suffix, length in parts:
1149 1155 value = int(leftover / length)
1150 1156 if value > 0:
1151 1157 leftover = leftover % length
1152 1158 time.append(u'%s%s' % (str(value), suffix))
1153 1159 if leftover < 1:
1154 1160 break
1155 1161 return " ".join(time)
1156 1162
1157 1163
1158 1164 # Unfortunately the unicode 'micro' symbol can cause problems in
1159 1165 # certain terminals.
1160 1166 # See bug: https://bugs.launchpad.net/ipython/+bug/348466
1161 1167 # Try to prevent crashes by being more secure than it needs to
1162 1168 # E.g. eclipse is able to print a µ, but has no sys.stdout.encoding set.
1163 1169 units = [u"s", u"ms",u'us',"ns"] # the save value
1164 1170 if hasattr(sys.stdout, 'encoding') and sys.stdout.encoding:
1165 1171 try:
1166 1172 u'\xb5'.encode(sys.stdout.encoding)
1167 1173 units = [u"s", u"ms",u'\xb5s',"ns"]
1168 1174 except:
1169 1175 pass
1170 1176 scaling = [1, 1e3, 1e6, 1e9]
1171 1177
1172 1178 if timespan > 0.0:
1173 1179 order = min(-int(math.floor(math.log10(timespan)) // 3), 3)
1174 1180 else:
1175 1181 order = 3
1176 1182 ret = u"%.*g %s" % (precision, timespan * scaling[order], units[order])
1177 1183 return ret
General Comments 0
You need to be logged in to leave comments. Login now