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