##// END OF EJS Templates
Fix autocall misfiring on print for python 2.6 and newer. Closes Bug #414967...
Fernando Perez -
Show More
@@ -1,3526 +1,3533
1 1 # -*- coding: utf-8 -*-
2 2 """Magic functions for InteractiveShell.
3 3 """
4 4
5 5 #*****************************************************************************
6 6 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
7 7 # Copyright (C) 2001-2006 Fernando Perez <fperez@colorado.edu>
8 8 #
9 9 # Distributed under the terms of the BSD License. The full license is in
10 10 # the file COPYING, distributed as part of this software.
11 11 #*****************************************************************************
12 12
13 13 #****************************************************************************
14 14 # Modules and globals
15 15
16 16 # Python standard modules
17 17 import __builtin__
18 import __future__
18 19 import bdb
19 20 import inspect
20 21 import os
21 22 import pdb
22 23 import pydoc
23 24 import sys
24 25 import re
25 26 import tempfile
26 27 import time
27 28 import cPickle as pickle
28 29 import textwrap
29 30 from cStringIO import StringIO
30 31 from getopt import getopt,GetoptError
31 32 from pprint import pprint, pformat
32 33
33 34 # cProfile was added in Python2.5
34 35 try:
35 36 import cProfile as profile
36 37 import pstats
37 38 except ImportError:
38 39 # profile isn't bundled by default in Debian for license reasons
39 40 try:
40 41 import profile,pstats
41 42 except ImportError:
42 43 profile = pstats = None
43 44
44 45 # Homebrewed
45 46 import IPython
46 47 from IPython import Debugger, OInspect, wildcard
47 48 from IPython.FakeModule import FakeModule
48 49 from IPython.Itpl import Itpl, itpl, printpl,itplns
49 50 from IPython.PyColorize import Parser
50 51 from IPython.ipstruct import Struct
51 52 from IPython.macro import Macro
52 53 from IPython.genutils import *
53 54 from IPython import platutils
54 55 import IPython.generics
55 56 import IPython.ipapi
56 57 from IPython.ipapi import UsageError
57 58 from IPython.testing import decorators as testdec
58 59
59 60 #***************************************************************************
60 61 # Utility functions
61 62 def on_off(tag):
62 63 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
63 64 return ['OFF','ON'][tag]
64 65
65 66 class Bunch: pass
66 67
67 68 def compress_dhist(dh):
68 69 head, tail = dh[:-10], dh[-10:]
69 70
70 71 newhead = []
71 72 done = set()
72 73 for h in head:
73 74 if h in done:
74 75 continue
75 76 newhead.append(h)
76 77 done.add(h)
77 78
78 79 return newhead + tail
79 80
80 81
81 82 #***************************************************************************
82 83 # Main class implementing Magic functionality
83 84 class Magic:
84 85 """Magic functions for InteractiveShell.
85 86
86 87 Shell functions which can be reached as %function_name. All magic
87 88 functions should accept a string, which they can parse for their own
88 89 needs. This can make some functions easier to type, eg `%cd ../`
89 90 vs. `%cd("../")`
90 91
91 92 ALL definitions MUST begin with the prefix magic_. The user won't need it
92 93 at the command line, but it is is needed in the definition. """
93 94
94 95 # class globals
95 96 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
96 97 'Automagic is ON, % prefix NOT needed for magic functions.']
97 98
98 99 #......................................................................
99 100 # some utility functions
100 101
101 102 def __init__(self,shell):
102 103
103 104 self.options_table = {}
104 105 if profile is None:
105 106 self.magic_prun = self.profile_missing_notice
106 107 self.shell = shell
107 108
108 109 # namespace for holding state we may need
109 110 self._magic_state = Bunch()
110 111
111 112 def profile_missing_notice(self, *args, **kwargs):
112 113 error("""\
113 114 The profile module could not be found. It has been removed from the standard
114 115 python packages because of its non-free license. To use profiling, install the
115 116 python-profiler package from non-free.""")
116 117
117 118 def default_option(self,fn,optstr):
118 119 """Make an entry in the options_table for fn, with value optstr"""
119 120
120 121 if fn not in self.lsmagic():
121 122 error("%s is not a magic function" % fn)
122 123 self.options_table[fn] = optstr
123 124
124 125 def lsmagic(self):
125 126 """Return a list of currently available magic functions.
126 127
127 128 Gives a list of the bare names after mangling (['ls','cd', ...], not
128 129 ['magic_ls','magic_cd',...]"""
129 130
130 131 # FIXME. This needs a cleanup, in the way the magics list is built.
131 132
132 133 # magics in class definition
133 134 class_magic = lambda fn: fn.startswith('magic_') and \
134 135 callable(Magic.__dict__[fn])
135 136 # in instance namespace (run-time user additions)
136 137 inst_magic = lambda fn: fn.startswith('magic_') and \
137 138 callable(self.__dict__[fn])
138 139 # and bound magics by user (so they can access self):
139 140 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
140 141 callable(self.__class__.__dict__[fn])
141 142 magics = filter(class_magic,Magic.__dict__.keys()) + \
142 143 filter(inst_magic,self.__dict__.keys()) + \
143 144 filter(inst_bound_magic,self.__class__.__dict__.keys())
144 145 out = []
145 146 for fn in set(magics):
146 147 out.append(fn.replace('magic_','',1))
147 148 out.sort()
148 149 return out
149 150
150 151 def extract_input_slices(self,slices,raw=False):
151 152 """Return as a string a set of input history slices.
152 153
153 154 Inputs:
154 155
155 156 - slices: the set of slices is given as a list of strings (like
156 157 ['1','4:8','9'], since this function is for use by magic functions
157 158 which get their arguments as strings.
158 159
159 160 Optional inputs:
160 161
161 162 - raw(False): by default, the processed input is used. If this is
162 163 true, the raw input history is used instead.
163 164
164 165 Note that slices can be called with two notations:
165 166
166 167 N:M -> standard python form, means including items N...(M-1).
167 168
168 169 N-M -> include items N..M (closed endpoint)."""
169 170
170 171 if raw:
171 172 hist = self.shell.input_hist_raw
172 173 else:
173 174 hist = self.shell.input_hist
174 175
175 176 cmds = []
176 177 for chunk in slices:
177 178 if ':' in chunk:
178 179 ini,fin = map(int,chunk.split(':'))
179 180 elif '-' in chunk:
180 181 ini,fin = map(int,chunk.split('-'))
181 182 fin += 1
182 183 else:
183 184 ini = int(chunk)
184 185 fin = ini+1
185 186 cmds.append(hist[ini:fin])
186 187 return cmds
187 188
188 189 def _ofind(self, oname, namespaces=None):
189 190 """Find an object in the available namespaces.
190 191
191 192 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
192 193
193 194 Has special code to detect magic functions.
194 195 """
195
196 196 oname = oname.strip()
197
198 197 alias_ns = None
199 198 if namespaces is None:
200 199 # Namespaces to search in:
201 200 # Put them in a list. The order is important so that we
202 201 # find things in the same order that Python finds them.
203 202 namespaces = [ ('Interactive', self.shell.user_ns),
204 203 ('IPython internal', self.shell.internal_ns),
205 204 ('Python builtin', __builtin__.__dict__),
206 205 ('Alias', self.shell.alias_table),
207 206 ]
208 207 alias_ns = self.shell.alias_table
209 208
210 209 # initialize results to 'null'
211 found = 0; obj = None; ospace = None; ds = None;
212 ismagic = 0; isalias = 0; parent = None
210 found = False; obj = None; ospace = None; ds = None;
211 ismagic = False; isalias = False; parent = None
212
213 # We need to special-case 'print', which as of python2.6 registers as a
214 # function but should only be treated as one if print_function was
215 # loaded with a future import. In this case, just bail.
216 if (oname == 'print' and not (self.shell.compile.compiler.flags &
217 __future__.CO_FUTURE_PRINT_FUNCTION)):
218 return {'found':found, 'obj':obj, 'namespace':ospace,
219 'ismagic':ismagic, 'isalias':isalias, 'parent':parent}
213 220
214 221 # Look for the given name by splitting it in parts. If the head is
215 222 # found, then we look for all the remaining parts as members, and only
216 223 # declare success if we can find them all.
217 224 oname_parts = oname.split('.')
218 225 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
219 226 for nsname,ns in namespaces:
220 227 try:
221 228 obj = ns[oname_head]
222 229 except KeyError:
223 230 continue
224 231 else:
225 232 #print 'oname_rest:', oname_rest # dbg
226 233 for part in oname_rest:
227 234 try:
228 235 parent = obj
229 236 obj = getattr(obj,part)
230 237 except:
231 238 # Blanket except b/c some badly implemented objects
232 239 # allow __getattr__ to raise exceptions other than
233 240 # AttributeError, which then crashes IPython.
234 241 break
235 242 else:
236 243 # If we finish the for loop (no break), we got all members
237 found = 1
244 found = True
238 245 ospace = nsname
239 246 if ns == alias_ns:
240 isalias = 1
247 isalias = True
241 248 break # namespace loop
242 249
243 250 # Try to see if it's magic
244 251 if not found:
245 252 if oname.startswith(self.shell.ESC_MAGIC):
246 253 oname = oname[1:]
247 254 obj = getattr(self,'magic_'+oname,None)
248 255 if obj is not None:
249 found = 1
256 found = True
250 257 ospace = 'IPython internal'
251 ismagic = 1
258 ismagic = True
252 259
253 260 # Last try: special-case some literals like '', [], {}, etc:
254 261 if not found and oname_head in ["''",'""','[]','{}','()']:
255 262 obj = eval(oname_head)
256 found = 1
263 found = True
257 264 ospace = 'Interactive'
258 265
259 266 return {'found':found, 'obj':obj, 'namespace':ospace,
260 267 'ismagic':ismagic, 'isalias':isalias, 'parent':parent}
261 268
262 269 def arg_err(self,func):
263 270 """Print docstring if incorrect arguments were passed"""
264 271 print 'Error in arguments:'
265 272 print OInspect.getdoc(func)
266 273
267 274 def format_latex(self,strng):
268 275 """Format a string for latex inclusion."""
269 276
270 277 # Characters that need to be escaped for latex:
271 278 escape_re = re.compile(r'(%|_|\$|#|&)',re.MULTILINE)
272 279 # Magic command names as headers:
273 280 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
274 281 re.MULTILINE)
275 282 # Magic commands
276 283 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
277 284 re.MULTILINE)
278 285 # Paragraph continue
279 286 par_re = re.compile(r'\\$',re.MULTILINE)
280 287
281 288 # The "\n" symbol
282 289 newline_re = re.compile(r'\\n')
283 290
284 291 # Now build the string for output:
285 292 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
286 293 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
287 294 strng)
288 295 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
289 296 strng = par_re.sub(r'\\\\',strng)
290 297 strng = escape_re.sub(r'\\\1',strng)
291 298 strng = newline_re.sub(r'\\textbackslash{}n',strng)
292 299 return strng
293 300
294 301 def format_screen(self,strng):
295 302 """Format a string for screen printing.
296 303
297 304 This removes some latex-type format codes."""
298 305 # Paragraph continue
299 306 par_re = re.compile(r'\\$',re.MULTILINE)
300 307 strng = par_re.sub('',strng)
301 308 return strng
302 309
303 310 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
304 311 """Parse options passed to an argument string.
305 312
306 313 The interface is similar to that of getopt(), but it returns back a
307 314 Struct with the options as keys and the stripped argument string still
308 315 as a string.
309 316
310 317 arg_str is quoted as a true sys.argv vector by using shlex.split.
311 318 This allows us to easily expand variables, glob files, quote
312 319 arguments, etc.
313 320
314 321 Options:
315 322 -mode: default 'string'. If given as 'list', the argument string is
316 323 returned as a list (split on whitespace) instead of a string.
317 324
318 325 -list_all: put all option values in lists. Normally only options
319 326 appearing more than once are put in a list.
320 327
321 328 -posix (True): whether to split the input line in POSIX mode or not,
322 329 as per the conventions outlined in the shlex module from the
323 330 standard library."""
324 331
325 332 # inject default options at the beginning of the input line
326 333 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
327 334 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
328 335
329 336 mode = kw.get('mode','string')
330 337 if mode not in ['string','list']:
331 338 raise ValueError,'incorrect mode given: %s' % mode
332 339 # Get options
333 340 list_all = kw.get('list_all',0)
334 341 posix = kw.get('posix',True)
335 342
336 343 # Check if we have more than one argument to warrant extra processing:
337 344 odict = {} # Dictionary with options
338 345 args = arg_str.split()
339 346 if len(args) >= 1:
340 347 # If the list of inputs only has 0 or 1 thing in it, there's no
341 348 # need to look for options
342 349 argv = arg_split(arg_str,posix)
343 350 # Do regular option processing
344 351 try:
345 352 opts,args = getopt(argv,opt_str,*long_opts)
346 353 except GetoptError,e:
347 354 raise UsageError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
348 355 " ".join(long_opts)))
349 356 for o,a in opts:
350 357 if o.startswith('--'):
351 358 o = o[2:]
352 359 else:
353 360 o = o[1:]
354 361 try:
355 362 odict[o].append(a)
356 363 except AttributeError:
357 364 odict[o] = [odict[o],a]
358 365 except KeyError:
359 366 if list_all:
360 367 odict[o] = [a]
361 368 else:
362 369 odict[o] = a
363 370
364 371 # Prepare opts,args for return
365 372 opts = Struct(odict)
366 373 if mode == 'string':
367 374 args = ' '.join(args)
368 375
369 376 return opts,args
370 377
371 378 #......................................................................
372 379 # And now the actual magic functions
373 380
374 381 # Functions for IPython shell work (vars,funcs, config, etc)
375 382 def magic_lsmagic(self, parameter_s = ''):
376 383 """List currently available magic functions."""
377 384 mesc = self.shell.ESC_MAGIC
378 385 print 'Available magic functions:\n'+mesc+\
379 386 (' '+mesc).join(self.lsmagic())
380 387 print '\n' + Magic.auto_status[self.shell.rc.automagic]
381 388 return None
382 389
383 390 def magic_magic(self, parameter_s = ''):
384 391 """Print information about the magic function system.
385 392
386 393 Supported formats: -latex, -brief, -rest
387 394 """
388 395
389 396 mode = ''
390 397 try:
391 398 if parameter_s.split()[0] == '-latex':
392 399 mode = 'latex'
393 400 if parameter_s.split()[0] == '-brief':
394 401 mode = 'brief'
395 402 if parameter_s.split()[0] == '-rest':
396 403 mode = 'rest'
397 404 rest_docs = []
398 405 except:
399 406 pass
400 407
401 408 magic_docs = []
402 409 for fname in self.lsmagic():
403 410 mname = 'magic_' + fname
404 411 for space in (Magic,self,self.__class__):
405 412 try:
406 413 fn = space.__dict__[mname]
407 414 except KeyError:
408 415 pass
409 416 else:
410 417 break
411 418 if mode == 'brief':
412 419 # only first line
413 420 if fn.__doc__:
414 421 fndoc = fn.__doc__.split('\n',1)[0]
415 422 else:
416 423 fndoc = 'No documentation'
417 424 else:
418 425 if fn.__doc__:
419 426 fndoc = fn.__doc__.rstrip()
420 427 else:
421 428 fndoc = 'No documentation'
422 429
423 430
424 431 if mode == 'rest':
425 432 rest_docs.append('**%s%s**::\n\n\t%s\n\n' %(self.shell.ESC_MAGIC,
426 433 fname,fndoc))
427 434
428 435 else:
429 436 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
430 437 fname,fndoc))
431 438
432 439 magic_docs = ''.join(magic_docs)
433 440
434 441 if mode == 'rest':
435 442 return "".join(rest_docs)
436 443
437 444 if mode == 'latex':
438 445 print self.format_latex(magic_docs)
439 446 return
440 447 else:
441 448 magic_docs = self.format_screen(magic_docs)
442 449 if mode == 'brief':
443 450 return magic_docs
444 451
445 452 outmsg = """
446 453 IPython's 'magic' functions
447 454 ===========================
448 455
449 456 The magic function system provides a series of functions which allow you to
450 457 control the behavior of IPython itself, plus a lot of system-type
451 458 features. All these functions are prefixed with a % character, but parameters
452 459 are given without parentheses or quotes.
453 460
454 461 NOTE: If you have 'automagic' enabled (via the command line option or with the
455 462 %automagic function), you don't need to type in the % explicitly. By default,
456 463 IPython ships with automagic on, so you should only rarely need the % escape.
457 464
458 465 Example: typing '%cd mydir' (without the quotes) changes you working directory
459 466 to 'mydir', if it exists.
460 467
461 468 You can define your own magic functions to extend the system. See the supplied
462 469 ipythonrc and example-magic.py files for details (in your ipython
463 470 configuration directory, typically $HOME/.ipython/).
464 471
465 472 You can also define your own aliased names for magic functions. In your
466 473 ipythonrc file, placing a line like:
467 474
468 475 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
469 476
470 477 will define %pf as a new name for %profile.
471 478
472 479 You can also call magics in code using the ipmagic() function, which IPython
473 480 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
474 481
475 482 For a list of the available magic functions, use %lsmagic. For a description
476 483 of any of them, type %magic_name?, e.g. '%cd?'.
477 484
478 485 Currently the magic system has the following functions:\n"""
479 486
480 487 mesc = self.shell.ESC_MAGIC
481 488 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
482 489 "\n\n%s%s\n\n%s" % (outmsg,
483 490 magic_docs,mesc,mesc,
484 491 (' '+mesc).join(self.lsmagic()),
485 492 Magic.auto_status[self.shell.rc.automagic] ) )
486 493
487 494 page(outmsg,screen_lines=self.shell.rc.screen_length)
488 495
489 496
490 497 def magic_autoindent(self, parameter_s = ''):
491 498 """Toggle autoindent on/off (if available)."""
492 499
493 500 self.shell.set_autoindent()
494 501 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
495 502
496 503
497 504 def magic_automagic(self, parameter_s = ''):
498 505 """Make magic functions callable without having to type the initial %.
499 506
500 507 Without argumentsl toggles on/off (when off, you must call it as
501 508 %automagic, of course). With arguments it sets the value, and you can
502 509 use any of (case insensitive):
503 510
504 511 - on,1,True: to activate
505 512
506 513 - off,0,False: to deactivate.
507 514
508 515 Note that magic functions have lowest priority, so if there's a
509 516 variable whose name collides with that of a magic fn, automagic won't
510 517 work for that function (you get the variable instead). However, if you
511 518 delete the variable (del var), the previously shadowed magic function
512 519 becomes visible to automagic again."""
513 520
514 521 rc = self.shell.rc
515 522 arg = parameter_s.lower()
516 523 if parameter_s in ('on','1','true'):
517 524 rc.automagic = True
518 525 elif parameter_s in ('off','0','false'):
519 526 rc.automagic = False
520 527 else:
521 528 rc.automagic = not rc.automagic
522 529 print '\n' + Magic.auto_status[rc.automagic]
523 530
524 531 @testdec.skip_doctest
525 532 def magic_autocall(self, parameter_s = ''):
526 533 """Make functions callable without having to type parentheses.
527 534
528 535 Usage:
529 536
530 537 %autocall [mode]
531 538
532 539 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
533 540 value is toggled on and off (remembering the previous state).
534 541
535 542 In more detail, these values mean:
536 543
537 544 0 -> fully disabled
538 545
539 546 1 -> active, but do not apply if there are no arguments on the line.
540 547
541 548 In this mode, you get:
542 549
543 550 In [1]: callable
544 551 Out[1]: <built-in function callable>
545 552
546 553 In [2]: callable 'hello'
547 554 ------> callable('hello')
548 555 Out[2]: False
549 556
550 557 2 -> Active always. Even if no arguments are present, the callable
551 558 object is called:
552 559
553 560 In [2]: float
554 561 ------> float()
555 562 Out[2]: 0.0
556 563
557 564 Note that even with autocall off, you can still use '/' at the start of
558 565 a line to treat the first argument on the command line as a function
559 566 and add parentheses to it:
560 567
561 568 In [8]: /str 43
562 569 ------> str(43)
563 570 Out[8]: '43'
564 571
565 572 # all-random (note for auto-testing)
566 573 """
567 574
568 575 rc = self.shell.rc
569 576
570 577 if parameter_s:
571 578 arg = int(parameter_s)
572 579 else:
573 580 arg = 'toggle'
574 581
575 582 if not arg in (0,1,2,'toggle'):
576 583 error('Valid modes: (0->Off, 1->Smart, 2->Full')
577 584 return
578 585
579 586 if arg in (0,1,2):
580 587 rc.autocall = arg
581 588 else: # toggle
582 589 if rc.autocall:
583 590 self._magic_state.autocall_save = rc.autocall
584 591 rc.autocall = 0
585 592 else:
586 593 try:
587 594 rc.autocall = self._magic_state.autocall_save
588 595 except AttributeError:
589 596 rc.autocall = self._magic_state.autocall_save = 1
590 597
591 598 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
592 599
593 600 def magic_system_verbose(self, parameter_s = ''):
594 601 """Set verbose printing of system calls.
595 602
596 603 If called without an argument, act as a toggle"""
597 604
598 605 if parameter_s:
599 606 val = bool(eval(parameter_s))
600 607 else:
601 608 val = None
602 609
603 610 self.shell.rc_set_toggle('system_verbose',val)
604 611 print "System verbose printing is:",\
605 612 ['OFF','ON'][self.shell.rc.system_verbose]
606 613
607 614
608 615 def magic_page(self, parameter_s=''):
609 616 """Pretty print the object and display it through a pager.
610 617
611 618 %page [options] OBJECT
612 619
613 620 If no object is given, use _ (last output).
614 621
615 622 Options:
616 623
617 624 -r: page str(object), don't pretty-print it."""
618 625
619 626 # After a function contributed by Olivier Aubert, slightly modified.
620 627
621 628 # Process options/args
622 629 opts,args = self.parse_options(parameter_s,'r')
623 630 raw = 'r' in opts
624 631
625 632 oname = args and args or '_'
626 633 info = self._ofind(oname)
627 634 if info['found']:
628 635 txt = (raw and str or pformat)( info['obj'] )
629 636 page(txt)
630 637 else:
631 638 print 'Object `%s` not found' % oname
632 639
633 640 def magic_profile(self, parameter_s=''):
634 641 """Print your currently active IPyhton profile."""
635 642 if self.shell.rc.profile:
636 643 printpl('Current IPython profile: $self.shell.rc.profile.')
637 644 else:
638 645 print 'No profile active.'
639 646
640 647 def magic_pinfo(self, parameter_s='', namespaces=None):
641 648 """Provide detailed information about an object.
642 649
643 650 '%pinfo object' is just a synonym for object? or ?object."""
644 651
645 652 #print 'pinfo par: <%s>' % parameter_s # dbg
646 653
647 654
648 655 # detail_level: 0 -> obj? , 1 -> obj??
649 656 detail_level = 0
650 657 # We need to detect if we got called as 'pinfo pinfo foo', which can
651 658 # happen if the user types 'pinfo foo?' at the cmd line.
652 659 pinfo,qmark1,oname,qmark2 = \
653 660 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
654 661 if pinfo or qmark1 or qmark2:
655 662 detail_level = 1
656 663 if "*" in oname:
657 664 self.magic_psearch(oname)
658 665 else:
659 666 self._inspect('pinfo', oname, detail_level=detail_level,
660 667 namespaces=namespaces)
661 668
662 669 def magic_pdef(self, parameter_s='', namespaces=None):
663 670 """Print the definition header for any callable object.
664 671
665 672 If the object is a class, print the constructor information."""
666 673 self._inspect('pdef',parameter_s, namespaces)
667 674
668 675 def magic_pdoc(self, parameter_s='', namespaces=None):
669 676 """Print the docstring for an object.
670 677
671 678 If the given object is a class, it will print both the class and the
672 679 constructor docstrings."""
673 680 self._inspect('pdoc',parameter_s, namespaces)
674 681
675 682 def magic_psource(self, parameter_s='', namespaces=None):
676 683 """Print (or run through pager) the source code for an object."""
677 684 self._inspect('psource',parameter_s, namespaces)
678 685
679 686 def magic_pfile(self, parameter_s=''):
680 687 """Print (or run through pager) the file where an object is defined.
681 688
682 689 The file opens at the line where the object definition begins. IPython
683 690 will honor the environment variable PAGER if set, and otherwise will
684 691 do its best to print the file in a convenient form.
685 692
686 693 If the given argument is not an object currently defined, IPython will
687 694 try to interpret it as a filename (automatically adding a .py extension
688 695 if needed). You can thus use %pfile as a syntax highlighting code
689 696 viewer."""
690 697
691 698 # first interpret argument as an object name
692 699 out = self._inspect('pfile',parameter_s)
693 700 # if not, try the input as a filename
694 701 if out == 'not found':
695 702 try:
696 703 filename = get_py_filename(parameter_s)
697 704 except IOError,msg:
698 705 print msg
699 706 return
700 707 page(self.shell.inspector.format(file(filename).read()))
701 708
702 709 def _inspect(self,meth,oname,namespaces=None,**kw):
703 710 """Generic interface to the inspector system.
704 711
705 712 This function is meant to be called by pdef, pdoc & friends."""
706 713
707 714 #oname = oname.strip()
708 715 #print '1- oname: <%r>' % oname # dbg
709 716 try:
710 717 oname = oname.strip().encode('ascii')
711 718 #print '2- oname: <%r>' % oname # dbg
712 719 except UnicodeEncodeError:
713 720 print 'Python identifiers can only contain ascii characters.'
714 721 return 'not found'
715 722
716 723 info = Struct(self._ofind(oname, namespaces))
717 724
718 725 if info.found:
719 726 try:
720 727 IPython.generics.inspect_object(info.obj)
721 728 return
722 729 except IPython.ipapi.TryNext:
723 730 pass
724 731 # Get the docstring of the class property if it exists.
725 732 path = oname.split('.')
726 733 root = '.'.join(path[:-1])
727 734 if info.parent is not None:
728 735 try:
729 736 target = getattr(info.parent, '__class__')
730 737 # The object belongs to a class instance.
731 738 try:
732 739 target = getattr(target, path[-1])
733 740 # The class defines the object.
734 741 if isinstance(target, property):
735 742 oname = root + '.__class__.' + path[-1]
736 743 info = Struct(self._ofind(oname))
737 744 except AttributeError: pass
738 745 except AttributeError: pass
739 746
740 747 pmethod = getattr(self.shell.inspector,meth)
741 748 formatter = info.ismagic and self.format_screen or None
742 749 if meth == 'pdoc':
743 750 pmethod(info.obj,oname,formatter)
744 751 elif meth == 'pinfo':
745 752 pmethod(info.obj,oname,formatter,info,**kw)
746 753 else:
747 754 pmethod(info.obj,oname)
748 755 else:
749 756 print 'Object `%s` not found.' % oname
750 757 return 'not found' # so callers can take other action
751 758
752 759 def magic_psearch(self, parameter_s=''):
753 760 """Search for object in namespaces by wildcard.
754 761
755 762 %psearch [options] PATTERN [OBJECT TYPE]
756 763
757 764 Note: ? can be used as a synonym for %psearch, at the beginning or at
758 765 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
759 766 rest of the command line must be unchanged (options come first), so
760 767 for example the following forms are equivalent
761 768
762 769 %psearch -i a* function
763 770 -i a* function?
764 771 ?-i a* function
765 772
766 773 Arguments:
767 774
768 775 PATTERN
769 776
770 777 where PATTERN is a string containing * as a wildcard similar to its
771 778 use in a shell. The pattern is matched in all namespaces on the
772 779 search path. By default objects starting with a single _ are not
773 780 matched, many IPython generated objects have a single
774 781 underscore. The default is case insensitive matching. Matching is
775 782 also done on the attributes of objects and not only on the objects
776 783 in a module.
777 784
778 785 [OBJECT TYPE]
779 786
780 787 Is the name of a python type from the types module. The name is
781 788 given in lowercase without the ending type, ex. StringType is
782 789 written string. By adding a type here only objects matching the
783 790 given type are matched. Using all here makes the pattern match all
784 791 types (this is the default).
785 792
786 793 Options:
787 794
788 795 -a: makes the pattern match even objects whose names start with a
789 796 single underscore. These names are normally ommitted from the
790 797 search.
791 798
792 799 -i/-c: make the pattern case insensitive/sensitive. If neither of
793 800 these options is given, the default is read from your ipythonrc
794 801 file. The option name which sets this value is
795 802 'wildcards_case_sensitive'. If this option is not specified in your
796 803 ipythonrc file, IPython's internal default is to do a case sensitive
797 804 search.
798 805
799 806 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
800 807 specifiy can be searched in any of the following namespaces:
801 808 'builtin', 'user', 'user_global','internal', 'alias', where
802 809 'builtin' and 'user' are the search defaults. Note that you should
803 810 not use quotes when specifying namespaces.
804 811
805 812 'Builtin' contains the python module builtin, 'user' contains all
806 813 user data, 'alias' only contain the shell aliases and no python
807 814 objects, 'internal' contains objects used by IPython. The
808 815 'user_global' namespace is only used by embedded IPython instances,
809 816 and it contains module-level globals. You can add namespaces to the
810 817 search with -s or exclude them with -e (these options can be given
811 818 more than once).
812 819
813 820 Examples:
814 821
815 822 %psearch a* -> objects beginning with an a
816 823 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
817 824 %psearch a* function -> all functions beginning with an a
818 825 %psearch re.e* -> objects beginning with an e in module re
819 826 %psearch r*.e* -> objects that start with e in modules starting in r
820 827 %psearch r*.* string -> all strings in modules beginning with r
821 828
822 829 Case sensitve search:
823 830
824 831 %psearch -c a* list all object beginning with lower case a
825 832
826 833 Show objects beginning with a single _:
827 834
828 835 %psearch -a _* list objects beginning with a single underscore"""
829 836 try:
830 837 parameter_s = parameter_s.encode('ascii')
831 838 except UnicodeEncodeError:
832 839 print 'Python identifiers can only contain ascii characters.'
833 840 return
834 841
835 842 # default namespaces to be searched
836 843 def_search = ['user','builtin']
837 844
838 845 # Process options/args
839 846 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
840 847 opt = opts.get
841 848 shell = self.shell
842 849 psearch = shell.inspector.psearch
843 850
844 851 # select case options
845 852 if opts.has_key('i'):
846 853 ignore_case = True
847 854 elif opts.has_key('c'):
848 855 ignore_case = False
849 856 else:
850 857 ignore_case = not shell.rc.wildcards_case_sensitive
851 858
852 859 # Build list of namespaces to search from user options
853 860 def_search.extend(opt('s',[]))
854 861 ns_exclude = ns_exclude=opt('e',[])
855 862 ns_search = [nm for nm in def_search if nm not in ns_exclude]
856 863
857 864 # Call the actual search
858 865 try:
859 866 psearch(args,shell.ns_table,ns_search,
860 867 show_all=opt('a'),ignore_case=ignore_case)
861 868 except:
862 869 shell.showtraceback()
863 870
864 871 def magic_who_ls(self, parameter_s=''):
865 872 """Return a sorted list of all interactive variables.
866 873
867 874 If arguments are given, only variables of types matching these
868 875 arguments are returned."""
869 876
870 877 user_ns = self.shell.user_ns
871 878 internal_ns = self.shell.internal_ns
872 879 user_config_ns = self.shell.user_config_ns
873 880 out = []
874 881 typelist = parameter_s.split()
875 882
876 883 for i in user_ns:
877 884 if not (i.startswith('_') or i.startswith('_i')) \
878 885 and not (i in internal_ns or i in user_config_ns):
879 886 if typelist:
880 887 if type(user_ns[i]).__name__ in typelist:
881 888 out.append(i)
882 889 else:
883 890 out.append(i)
884 891 out.sort()
885 892 return out
886 893
887 894 def magic_who(self, parameter_s=''):
888 895 """Print all interactive variables, with some minimal formatting.
889 896
890 897 If any arguments are given, only variables whose type matches one of
891 898 these are printed. For example:
892 899
893 900 %who function str
894 901
895 902 will only list functions and strings, excluding all other types of
896 903 variables. To find the proper type names, simply use type(var) at a
897 904 command line to see how python prints type names. For example:
898 905
899 906 In [1]: type('hello')\\
900 907 Out[1]: <type 'str'>
901 908
902 909 indicates that the type name for strings is 'str'.
903 910
904 911 %who always excludes executed names loaded through your configuration
905 912 file and things which are internal to IPython.
906 913
907 914 This is deliberate, as typically you may load many modules and the
908 915 purpose of %who is to show you only what you've manually defined."""
909 916
910 917 varlist = self.magic_who_ls(parameter_s)
911 918 if not varlist:
912 919 if parameter_s:
913 920 print 'No variables match your requested type.'
914 921 else:
915 922 print 'Interactive namespace is empty.'
916 923 return
917 924
918 925 # if we have variables, move on...
919 926 count = 0
920 927 for i in varlist:
921 928 print i+'\t',
922 929 count += 1
923 930 if count > 8:
924 931 count = 0
925 932 print
926 933 print
927 934
928 935 def magic_whos(self, parameter_s=''):
929 936 """Like %who, but gives some extra information about each variable.
930 937
931 938 The same type filtering of %who can be applied here.
932 939
933 940 For all variables, the type is printed. Additionally it prints:
934 941
935 942 - For {},[],(): their length.
936 943
937 944 - For numpy and Numeric arrays, a summary with shape, number of
938 945 elements, typecode and size in memory.
939 946
940 947 - Everything else: a string representation, snipping their middle if
941 948 too long."""
942 949
943 950 varnames = self.magic_who_ls(parameter_s)
944 951 if not varnames:
945 952 if parameter_s:
946 953 print 'No variables match your requested type.'
947 954 else:
948 955 print 'Interactive namespace is empty.'
949 956 return
950 957
951 958 # if we have variables, move on...
952 959
953 960 # for these types, show len() instead of data:
954 961 seq_types = [types.DictType,types.ListType,types.TupleType]
955 962
956 963 # for numpy/Numeric arrays, display summary info
957 964 try:
958 965 import numpy
959 966 except ImportError:
960 967 ndarray_type = None
961 968 else:
962 969 ndarray_type = numpy.ndarray.__name__
963 970 try:
964 971 import Numeric
965 972 except ImportError:
966 973 array_type = None
967 974 else:
968 975 array_type = Numeric.ArrayType.__name__
969 976
970 977 # Find all variable names and types so we can figure out column sizes
971 978 def get_vars(i):
972 979 return self.shell.user_ns[i]
973 980
974 981 # some types are well known and can be shorter
975 982 abbrevs = {'IPython.macro.Macro' : 'Macro'}
976 983 def type_name(v):
977 984 tn = type(v).__name__
978 985 return abbrevs.get(tn,tn)
979 986
980 987 varlist = map(get_vars,varnames)
981 988
982 989 typelist = []
983 990 for vv in varlist:
984 991 tt = type_name(vv)
985 992
986 993 if tt=='instance':
987 994 typelist.append( abbrevs.get(str(vv.__class__),
988 995 str(vv.__class__)))
989 996 else:
990 997 typelist.append(tt)
991 998
992 999 # column labels and # of spaces as separator
993 1000 varlabel = 'Variable'
994 1001 typelabel = 'Type'
995 1002 datalabel = 'Data/Info'
996 1003 colsep = 3
997 1004 # variable format strings
998 1005 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
999 1006 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
1000 1007 aformat = "%s: %s elems, type `%s`, %s bytes"
1001 1008 # find the size of the columns to format the output nicely
1002 1009 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
1003 1010 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
1004 1011 # table header
1005 1012 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
1006 1013 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
1007 1014 # and the table itself
1008 1015 kb = 1024
1009 1016 Mb = 1048576 # kb**2
1010 1017 for vname,var,vtype in zip(varnames,varlist,typelist):
1011 1018 print itpl(vformat),
1012 1019 if vtype in seq_types:
1013 1020 print len(var)
1014 1021 elif vtype in [array_type,ndarray_type]:
1015 1022 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
1016 1023 if vtype==ndarray_type:
1017 1024 # numpy
1018 1025 vsize = var.size
1019 1026 vbytes = vsize*var.itemsize
1020 1027 vdtype = var.dtype
1021 1028 else:
1022 1029 # Numeric
1023 1030 vsize = Numeric.size(var)
1024 1031 vbytes = vsize*var.itemsize()
1025 1032 vdtype = var.typecode()
1026 1033
1027 1034 if vbytes < 100000:
1028 1035 print aformat % (vshape,vsize,vdtype,vbytes)
1029 1036 else:
1030 1037 print aformat % (vshape,vsize,vdtype,vbytes),
1031 1038 if vbytes < Mb:
1032 1039 print '(%s kb)' % (vbytes/kb,)
1033 1040 else:
1034 1041 print '(%s Mb)' % (vbytes/Mb,)
1035 1042 else:
1036 1043 try:
1037 1044 vstr = str(var)
1038 1045 except UnicodeEncodeError:
1039 1046 vstr = unicode(var).encode(sys.getdefaultencoding(),
1040 1047 'backslashreplace')
1041 1048 vstr = vstr.replace('\n','\\n')
1042 1049 if len(vstr) < 50:
1043 1050 print vstr
1044 1051 else:
1045 1052 printpl(vfmt_short)
1046 1053
1047 1054 def magic_reset(self, parameter_s=''):
1048 1055 """Resets the namespace by removing all names defined by the user.
1049 1056
1050 1057 Input/Output history are left around in case you need them.
1051 1058
1052 1059 Parameters
1053 1060 ----------
1054 1061 -y : force reset without asking for confirmation.
1055 1062
1056 1063 Examples
1057 1064 --------
1058 1065 In [6]: a = 1
1059 1066
1060 1067 In [7]: a
1061 1068 Out[7]: 1
1062 1069
1063 1070 In [8]: 'a' in _ip.user_ns
1064 1071 Out[8]: True
1065 1072
1066 1073 In [9]: %reset -f
1067 1074
1068 1075 In [10]: 'a' in _ip.user_ns
1069 1076 Out[10]: False
1070 1077 """
1071 1078
1072 1079 if parameter_s == '-f':
1073 1080 ans = True
1074 1081 else:
1075 1082 ans = self.shell.ask_yes_no(
1076 1083 "Once deleted, variables cannot be recovered. Proceed (y/[n])? ")
1077 1084 if not ans:
1078 1085 print 'Nothing done.'
1079 1086 return
1080 1087 user_ns = self.shell.user_ns
1081 1088 for i in self.magic_who_ls():
1082 1089 del(user_ns[i])
1083 1090
1084 1091 # Also flush the private list of module references kept for script
1085 1092 # execution protection
1086 1093 self.shell.clear_main_mod_cache()
1087 1094
1088 1095 def magic_logstart(self,parameter_s=''):
1089 1096 """Start logging anywhere in a session.
1090 1097
1091 1098 %logstart [-o|-r|-t] [log_name [log_mode]]
1092 1099
1093 1100 If no name is given, it defaults to a file named 'ipython_log.py' in your
1094 1101 current directory, in 'rotate' mode (see below).
1095 1102
1096 1103 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
1097 1104 history up to that point and then continues logging.
1098 1105
1099 1106 %logstart takes a second optional parameter: logging mode. This can be one
1100 1107 of (note that the modes are given unquoted):\\
1101 1108 append: well, that says it.\\
1102 1109 backup: rename (if exists) to name~ and start name.\\
1103 1110 global: single logfile in your home dir, appended to.\\
1104 1111 over : overwrite existing log.\\
1105 1112 rotate: create rotating logs name.1~, name.2~, etc.
1106 1113
1107 1114 Options:
1108 1115
1109 1116 -o: log also IPython's output. In this mode, all commands which
1110 1117 generate an Out[NN] prompt are recorded to the logfile, right after
1111 1118 their corresponding input line. The output lines are always
1112 1119 prepended with a '#[Out]# ' marker, so that the log remains valid
1113 1120 Python code.
1114 1121
1115 1122 Since this marker is always the same, filtering only the output from
1116 1123 a log is very easy, using for example a simple awk call:
1117 1124
1118 1125 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
1119 1126
1120 1127 -r: log 'raw' input. Normally, IPython's logs contain the processed
1121 1128 input, so that user lines are logged in their final form, converted
1122 1129 into valid Python. For example, %Exit is logged as
1123 1130 '_ip.magic("Exit"). If the -r flag is given, all input is logged
1124 1131 exactly as typed, with no transformations applied.
1125 1132
1126 1133 -t: put timestamps before each input line logged (these are put in
1127 1134 comments)."""
1128 1135
1129 1136 opts,par = self.parse_options(parameter_s,'ort')
1130 1137 log_output = 'o' in opts
1131 1138 log_raw_input = 'r' in opts
1132 1139 timestamp = 't' in opts
1133 1140
1134 1141 rc = self.shell.rc
1135 1142 logger = self.shell.logger
1136 1143
1137 1144 # if no args are given, the defaults set in the logger constructor by
1138 1145 # ipytohn remain valid
1139 1146 if par:
1140 1147 try:
1141 1148 logfname,logmode = par.split()
1142 1149 except:
1143 1150 logfname = par
1144 1151 logmode = 'backup'
1145 1152 else:
1146 1153 logfname = logger.logfname
1147 1154 logmode = logger.logmode
1148 1155 # put logfname into rc struct as if it had been called on the command
1149 1156 # line, so it ends up saved in the log header Save it in case we need
1150 1157 # to restore it...
1151 1158 old_logfile = rc.opts.get('logfile','')
1152 1159 if logfname:
1153 1160 logfname = os.path.expanduser(logfname)
1154 1161 rc.opts.logfile = logfname
1155 1162 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1156 1163 try:
1157 1164 started = logger.logstart(logfname,loghead,logmode,
1158 1165 log_output,timestamp,log_raw_input)
1159 1166 except:
1160 1167 rc.opts.logfile = old_logfile
1161 1168 warn("Couldn't start log: %s" % sys.exc_info()[1])
1162 1169 else:
1163 1170 # log input history up to this point, optionally interleaving
1164 1171 # output if requested
1165 1172
1166 1173 if timestamp:
1167 1174 # disable timestamping for the previous history, since we've
1168 1175 # lost those already (no time machine here).
1169 1176 logger.timestamp = False
1170 1177
1171 1178 if log_raw_input:
1172 1179 input_hist = self.shell.input_hist_raw
1173 1180 else:
1174 1181 input_hist = self.shell.input_hist
1175 1182
1176 1183 if log_output:
1177 1184 log_write = logger.log_write
1178 1185 output_hist = self.shell.output_hist
1179 1186 for n in range(1,len(input_hist)-1):
1180 1187 log_write(input_hist[n].rstrip())
1181 1188 if n in output_hist:
1182 1189 log_write(repr(output_hist[n]),'output')
1183 1190 else:
1184 1191 logger.log_write(input_hist[1:])
1185 1192 if timestamp:
1186 1193 # re-enable timestamping
1187 1194 logger.timestamp = True
1188 1195
1189 1196 print ('Activating auto-logging. '
1190 1197 'Current session state plus future input saved.')
1191 1198 logger.logstate()
1192 1199
1193 1200 def magic_logstop(self,parameter_s=''):
1194 1201 """Fully stop logging and close log file.
1195 1202
1196 1203 In order to start logging again, a new %logstart call needs to be made,
1197 1204 possibly (though not necessarily) with a new filename, mode and other
1198 1205 options."""
1199 1206 self.logger.logstop()
1200 1207
1201 1208 def magic_logoff(self,parameter_s=''):
1202 1209 """Temporarily stop logging.
1203 1210
1204 1211 You must have previously started logging."""
1205 1212 self.shell.logger.switch_log(0)
1206 1213
1207 1214 def magic_logon(self,parameter_s=''):
1208 1215 """Restart logging.
1209 1216
1210 1217 This function is for restarting logging which you've temporarily
1211 1218 stopped with %logoff. For starting logging for the first time, you
1212 1219 must use the %logstart function, which allows you to specify an
1213 1220 optional log filename."""
1214 1221
1215 1222 self.shell.logger.switch_log(1)
1216 1223
1217 1224 def magic_logstate(self,parameter_s=''):
1218 1225 """Print the status of the logging system."""
1219 1226
1220 1227 self.shell.logger.logstate()
1221 1228
1222 1229 def magic_pdb(self, parameter_s=''):
1223 1230 """Control the automatic calling of the pdb interactive debugger.
1224 1231
1225 1232 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1226 1233 argument it works as a toggle.
1227 1234
1228 1235 When an exception is triggered, IPython can optionally call the
1229 1236 interactive pdb debugger after the traceback printout. %pdb toggles
1230 1237 this feature on and off.
1231 1238
1232 1239 The initial state of this feature is set in your ipythonrc
1233 1240 configuration file (the variable is called 'pdb').
1234 1241
1235 1242 If you want to just activate the debugger AFTER an exception has fired,
1236 1243 without having to type '%pdb on' and rerunning your code, you can use
1237 1244 the %debug magic."""
1238 1245
1239 1246 par = parameter_s.strip().lower()
1240 1247
1241 1248 if par:
1242 1249 try:
1243 1250 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1244 1251 except KeyError:
1245 1252 print ('Incorrect argument. Use on/1, off/0, '
1246 1253 'or nothing for a toggle.')
1247 1254 return
1248 1255 else:
1249 1256 # toggle
1250 1257 new_pdb = not self.shell.call_pdb
1251 1258
1252 1259 # set on the shell
1253 1260 self.shell.call_pdb = new_pdb
1254 1261 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1255 1262
1256 1263 def magic_debug(self, parameter_s=''):
1257 1264 """Activate the interactive debugger in post-mortem mode.
1258 1265
1259 1266 If an exception has just occurred, this lets you inspect its stack
1260 1267 frames interactively. Note that this will always work only on the last
1261 1268 traceback that occurred, so you must call this quickly after an
1262 1269 exception that you wish to inspect has fired, because if another one
1263 1270 occurs, it clobbers the previous one.
1264 1271
1265 1272 If you want IPython to automatically do this on every exception, see
1266 1273 the %pdb magic for more details.
1267 1274 """
1268 1275
1269 1276 self.shell.debugger(force=True)
1270 1277
1271 1278 @testdec.skip_doctest
1272 1279 def magic_prun(self, parameter_s ='',user_mode=1,
1273 1280 opts=None,arg_lst=None,prog_ns=None):
1274 1281
1275 1282 """Run a statement through the python code profiler.
1276 1283
1277 1284 Usage:
1278 1285 %prun [options] statement
1279 1286
1280 1287 The given statement (which doesn't require quote marks) is run via the
1281 1288 python profiler in a manner similar to the profile.run() function.
1282 1289 Namespaces are internally managed to work correctly; profile.run
1283 1290 cannot be used in IPython because it makes certain assumptions about
1284 1291 namespaces which do not hold under IPython.
1285 1292
1286 1293 Options:
1287 1294
1288 1295 -l <limit>: you can place restrictions on what or how much of the
1289 1296 profile gets printed. The limit value can be:
1290 1297
1291 1298 * A string: only information for function names containing this string
1292 1299 is printed.
1293 1300
1294 1301 * An integer: only these many lines are printed.
1295 1302
1296 1303 * A float (between 0 and 1): this fraction of the report is printed
1297 1304 (for example, use a limit of 0.4 to see the topmost 40% only).
1298 1305
1299 1306 You can combine several limits with repeated use of the option. For
1300 1307 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1301 1308 information about class constructors.
1302 1309
1303 1310 -r: return the pstats.Stats object generated by the profiling. This
1304 1311 object has all the information about the profile in it, and you can
1305 1312 later use it for further analysis or in other functions.
1306 1313
1307 1314 -s <key>: sort profile by given key. You can provide more than one key
1308 1315 by using the option several times: '-s key1 -s key2 -s key3...'. The
1309 1316 default sorting key is 'time'.
1310 1317
1311 1318 The following is copied verbatim from the profile documentation
1312 1319 referenced below:
1313 1320
1314 1321 When more than one key is provided, additional keys are used as
1315 1322 secondary criteria when the there is equality in all keys selected
1316 1323 before them.
1317 1324
1318 1325 Abbreviations can be used for any key names, as long as the
1319 1326 abbreviation is unambiguous. The following are the keys currently
1320 1327 defined:
1321 1328
1322 1329 Valid Arg Meaning
1323 1330 "calls" call count
1324 1331 "cumulative" cumulative time
1325 1332 "file" file name
1326 1333 "module" file name
1327 1334 "pcalls" primitive call count
1328 1335 "line" line number
1329 1336 "name" function name
1330 1337 "nfl" name/file/line
1331 1338 "stdname" standard name
1332 1339 "time" internal time
1333 1340
1334 1341 Note that all sorts on statistics are in descending order (placing
1335 1342 most time consuming items first), where as name, file, and line number
1336 1343 searches are in ascending order (i.e., alphabetical). The subtle
1337 1344 distinction between "nfl" and "stdname" is that the standard name is a
1338 1345 sort of the name as printed, which means that the embedded line
1339 1346 numbers get compared in an odd way. For example, lines 3, 20, and 40
1340 1347 would (if the file names were the same) appear in the string order
1341 1348 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1342 1349 line numbers. In fact, sort_stats("nfl") is the same as
1343 1350 sort_stats("name", "file", "line").
1344 1351
1345 1352 -T <filename>: save profile results as shown on screen to a text
1346 1353 file. The profile is still shown on screen.
1347 1354
1348 1355 -D <filename>: save (via dump_stats) profile statistics to given
1349 1356 filename. This data is in a format understod by the pstats module, and
1350 1357 is generated by a call to the dump_stats() method of profile
1351 1358 objects. The profile is still shown on screen.
1352 1359
1353 1360 If you want to run complete programs under the profiler's control, use
1354 1361 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1355 1362 contains profiler specific options as described here.
1356 1363
1357 1364 You can read the complete documentation for the profile module with::
1358 1365
1359 1366 In [1]: import profile; profile.help()
1360 1367 """
1361 1368
1362 1369 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1363 1370 # protect user quote marks
1364 1371 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1365 1372
1366 1373 if user_mode: # regular user call
1367 1374 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1368 1375 list_all=1)
1369 1376 namespace = self.shell.user_ns
1370 1377 else: # called to run a program by %run -p
1371 1378 try:
1372 1379 filename = get_py_filename(arg_lst[0])
1373 1380 except IOError,msg:
1374 1381 error(msg)
1375 1382 return
1376 1383
1377 1384 arg_str = 'execfile(filename,prog_ns)'
1378 1385 namespace = locals()
1379 1386
1380 1387 opts.merge(opts_def)
1381 1388
1382 1389 prof = profile.Profile()
1383 1390 try:
1384 1391 prof = prof.runctx(arg_str,namespace,namespace)
1385 1392 sys_exit = ''
1386 1393 except SystemExit:
1387 1394 sys_exit = """*** SystemExit exception caught in code being profiled."""
1388 1395
1389 1396 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1390 1397
1391 1398 lims = opts.l
1392 1399 if lims:
1393 1400 lims = [] # rebuild lims with ints/floats/strings
1394 1401 for lim in opts.l:
1395 1402 try:
1396 1403 lims.append(int(lim))
1397 1404 except ValueError:
1398 1405 try:
1399 1406 lims.append(float(lim))
1400 1407 except ValueError:
1401 1408 lims.append(lim)
1402 1409
1403 1410 # Trap output.
1404 1411 stdout_trap = StringIO()
1405 1412
1406 1413 if hasattr(stats,'stream'):
1407 1414 # In newer versions of python, the stats object has a 'stream'
1408 1415 # attribute to write into.
1409 1416 stats.stream = stdout_trap
1410 1417 stats.print_stats(*lims)
1411 1418 else:
1412 1419 # For older versions, we manually redirect stdout during printing
1413 1420 sys_stdout = sys.stdout
1414 1421 try:
1415 1422 sys.stdout = stdout_trap
1416 1423 stats.print_stats(*lims)
1417 1424 finally:
1418 1425 sys.stdout = sys_stdout
1419 1426
1420 1427 output = stdout_trap.getvalue()
1421 1428 output = output.rstrip()
1422 1429
1423 1430 page(output,screen_lines=self.shell.rc.screen_length)
1424 1431 print sys_exit,
1425 1432
1426 1433 dump_file = opts.D[0]
1427 1434 text_file = opts.T[0]
1428 1435 if dump_file:
1429 1436 prof.dump_stats(dump_file)
1430 1437 print '\n*** Profile stats marshalled to file',\
1431 1438 `dump_file`+'.',sys_exit
1432 1439 if text_file:
1433 1440 pfile = file(text_file,'w')
1434 1441 pfile.write(output)
1435 1442 pfile.close()
1436 1443 print '\n*** Profile printout saved to text file',\
1437 1444 `text_file`+'.',sys_exit
1438 1445
1439 1446 if opts.has_key('r'):
1440 1447 return stats
1441 1448 else:
1442 1449 return None
1443 1450
1444 1451 @testdec.skip_doctest
1445 1452 def magic_run(self, parameter_s ='',runner=None,
1446 1453 file_finder=get_py_filename):
1447 1454 """Run the named file inside IPython as a program.
1448 1455
1449 1456 Usage:\\
1450 1457 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1451 1458
1452 1459 Parameters after the filename are passed as command-line arguments to
1453 1460 the program (put in sys.argv). Then, control returns to IPython's
1454 1461 prompt.
1455 1462
1456 1463 This is similar to running at a system prompt:\\
1457 1464 $ python file args\\
1458 1465 but with the advantage of giving you IPython's tracebacks, and of
1459 1466 loading all variables into your interactive namespace for further use
1460 1467 (unless -p is used, see below).
1461 1468
1462 1469 The file is executed in a namespace initially consisting only of
1463 1470 __name__=='__main__' and sys.argv constructed as indicated. It thus
1464 1471 sees its environment as if it were being run as a stand-alone program
1465 1472 (except for sharing global objects such as previously imported
1466 1473 modules). But after execution, the IPython interactive namespace gets
1467 1474 updated with all variables defined in the program (except for __name__
1468 1475 and sys.argv). This allows for very convenient loading of code for
1469 1476 interactive work, while giving each program a 'clean sheet' to run in.
1470 1477
1471 1478 Options:
1472 1479
1473 1480 -n: __name__ is NOT set to '__main__', but to the running file's name
1474 1481 without extension (as python does under import). This allows running
1475 1482 scripts and reloading the definitions in them without calling code
1476 1483 protected by an ' if __name__ == "__main__" ' clause.
1477 1484
1478 1485 -i: run the file in IPython's namespace instead of an empty one. This
1479 1486 is useful if you are experimenting with code written in a text editor
1480 1487 which depends on variables defined interactively.
1481 1488
1482 1489 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1483 1490 being run. This is particularly useful if IPython is being used to
1484 1491 run unittests, which always exit with a sys.exit() call. In such
1485 1492 cases you are interested in the output of the test results, not in
1486 1493 seeing a traceback of the unittest module.
1487 1494
1488 1495 -t: print timing information at the end of the run. IPython will give
1489 1496 you an estimated CPU time consumption for your script, which under
1490 1497 Unix uses the resource module to avoid the wraparound problems of
1491 1498 time.clock(). Under Unix, an estimate of time spent on system tasks
1492 1499 is also given (for Windows platforms this is reported as 0.0).
1493 1500
1494 1501 If -t is given, an additional -N<N> option can be given, where <N>
1495 1502 must be an integer indicating how many times you want the script to
1496 1503 run. The final timing report will include total and per run results.
1497 1504
1498 1505 For example (testing the script uniq_stable.py):
1499 1506
1500 1507 In [1]: run -t uniq_stable
1501 1508
1502 1509 IPython CPU timings (estimated):\\
1503 1510 User : 0.19597 s.\\
1504 1511 System: 0.0 s.\\
1505 1512
1506 1513 In [2]: run -t -N5 uniq_stable
1507 1514
1508 1515 IPython CPU timings (estimated):\\
1509 1516 Total runs performed: 5\\
1510 1517 Times : Total Per run\\
1511 1518 User : 0.910862 s, 0.1821724 s.\\
1512 1519 System: 0.0 s, 0.0 s.
1513 1520
1514 1521 -d: run your program under the control of pdb, the Python debugger.
1515 1522 This allows you to execute your program step by step, watch variables,
1516 1523 etc. Internally, what IPython does is similar to calling:
1517 1524
1518 1525 pdb.run('execfile("YOURFILENAME")')
1519 1526
1520 1527 with a breakpoint set on line 1 of your file. You can change the line
1521 1528 number for this automatic breakpoint to be <N> by using the -bN option
1522 1529 (where N must be an integer). For example:
1523 1530
1524 1531 %run -d -b40 myscript
1525 1532
1526 1533 will set the first breakpoint at line 40 in myscript.py. Note that
1527 1534 the first breakpoint must be set on a line which actually does
1528 1535 something (not a comment or docstring) for it to stop execution.
1529 1536
1530 1537 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1531 1538 first enter 'c' (without qoutes) to start execution up to the first
1532 1539 breakpoint.
1533 1540
1534 1541 Entering 'help' gives information about the use of the debugger. You
1535 1542 can easily see pdb's full documentation with "import pdb;pdb.help()"
1536 1543 at a prompt.
1537 1544
1538 1545 -p: run program under the control of the Python profiler module (which
1539 1546 prints a detailed report of execution times, function calls, etc).
1540 1547
1541 1548 You can pass other options after -p which affect the behavior of the
1542 1549 profiler itself. See the docs for %prun for details.
1543 1550
1544 1551 In this mode, the program's variables do NOT propagate back to the
1545 1552 IPython interactive namespace (because they remain in the namespace
1546 1553 where the profiler executes them).
1547 1554
1548 1555 Internally this triggers a call to %prun, see its documentation for
1549 1556 details on the options available specifically for profiling.
1550 1557
1551 1558 There is one special usage for which the text above doesn't apply:
1552 1559 if the filename ends with .ipy, the file is run as ipython script,
1553 1560 just as if the commands were written on IPython prompt.
1554 1561 """
1555 1562
1556 1563 # get arguments and set sys.argv for program to be run.
1557 1564 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1558 1565 mode='list',list_all=1)
1559 1566
1560 1567 try:
1561 1568 filename = file_finder(arg_lst[0])
1562 1569 except IndexError:
1563 1570 warn('you must provide at least a filename.')
1564 1571 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1565 1572 return
1566 1573 except IOError,msg:
1567 1574 error(msg)
1568 1575 return
1569 1576
1570 1577 if filename.lower().endswith('.ipy'):
1571 1578 self.api.runlines(open(filename).read())
1572 1579 return
1573 1580
1574 1581 # Control the response to exit() calls made by the script being run
1575 1582 exit_ignore = opts.has_key('e')
1576 1583
1577 1584 # Make sure that the running script gets a proper sys.argv as if it
1578 1585 # were run from a system shell.
1579 1586 save_argv = sys.argv # save it for later restoring
1580 1587 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1581 1588
1582 1589 if opts.has_key('i'):
1583 1590 # Run in user's interactive namespace
1584 1591 prog_ns = self.shell.user_ns
1585 1592 __name__save = self.shell.user_ns['__name__']
1586 1593 prog_ns['__name__'] = '__main__'
1587 1594 main_mod = self.shell.new_main_mod(prog_ns)
1588 1595 else:
1589 1596 # Run in a fresh, empty namespace
1590 1597 if opts.has_key('n'):
1591 1598 name = os.path.splitext(os.path.basename(filename))[0]
1592 1599 else:
1593 1600 name = '__main__'
1594 1601
1595 1602 main_mod = self.shell.new_main_mod()
1596 1603 prog_ns = main_mod.__dict__
1597 1604 prog_ns['__name__'] = name
1598 1605
1599 1606 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1600 1607 # set the __file__ global in the script's namespace
1601 1608 prog_ns['__file__'] = filename
1602 1609
1603 1610 # pickle fix. See iplib for an explanation. But we need to make sure
1604 1611 # that, if we overwrite __main__, we replace it at the end
1605 1612 main_mod_name = prog_ns['__name__']
1606 1613
1607 1614 if main_mod_name == '__main__':
1608 1615 restore_main = sys.modules['__main__']
1609 1616 else:
1610 1617 restore_main = False
1611 1618
1612 1619 # This needs to be undone at the end to prevent holding references to
1613 1620 # every single object ever created.
1614 1621 sys.modules[main_mod_name] = main_mod
1615 1622
1616 1623 stats = None
1617 1624 try:
1618 1625 self.shell.savehist()
1619 1626
1620 1627 if opts.has_key('p'):
1621 1628 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1622 1629 else:
1623 1630 if opts.has_key('d'):
1624 1631 deb = Debugger.Pdb(self.shell.rc.colors)
1625 1632 # reset Breakpoint state, which is moronically kept
1626 1633 # in a class
1627 1634 bdb.Breakpoint.next = 1
1628 1635 bdb.Breakpoint.bplist = {}
1629 1636 bdb.Breakpoint.bpbynumber = [None]
1630 1637 # Set an initial breakpoint to stop execution
1631 1638 maxtries = 10
1632 1639 bp = int(opts.get('b',[1])[0])
1633 1640 checkline = deb.checkline(filename,bp)
1634 1641 if not checkline:
1635 1642 for bp in range(bp+1,bp+maxtries+1):
1636 1643 if deb.checkline(filename,bp):
1637 1644 break
1638 1645 else:
1639 1646 msg = ("\nI failed to find a valid line to set "
1640 1647 "a breakpoint\n"
1641 1648 "after trying up to line: %s.\n"
1642 1649 "Please set a valid breakpoint manually "
1643 1650 "with the -b option." % bp)
1644 1651 error(msg)
1645 1652 return
1646 1653 # if we find a good linenumber, set the breakpoint
1647 1654 deb.do_break('%s:%s' % (filename,bp))
1648 1655 # Start file run
1649 1656 print "NOTE: Enter 'c' at the",
1650 1657 print "%s prompt to start your script." % deb.prompt
1651 1658 try:
1652 1659 deb.run('execfile("%s")' % filename,prog_ns)
1653 1660
1654 1661 except:
1655 1662 etype, value, tb = sys.exc_info()
1656 1663 # Skip three frames in the traceback: the %run one,
1657 1664 # one inside bdb.py, and the command-line typed by the
1658 1665 # user (run by exec in pdb itself).
1659 1666 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1660 1667 else:
1661 1668 if runner is None:
1662 1669 runner = self.shell.safe_execfile
1663 1670 if opts.has_key('t'):
1664 1671 # timed execution
1665 1672 try:
1666 1673 nruns = int(opts['N'][0])
1667 1674 if nruns < 1:
1668 1675 error('Number of runs must be >=1')
1669 1676 return
1670 1677 except (KeyError):
1671 1678 nruns = 1
1672 1679 if nruns == 1:
1673 1680 t0 = clock2()
1674 1681 runner(filename,prog_ns,prog_ns,
1675 1682 exit_ignore=exit_ignore)
1676 1683 t1 = clock2()
1677 1684 t_usr = t1[0]-t0[0]
1678 1685 t_sys = t1[1]-t0[1]
1679 1686 print "\nIPython CPU timings (estimated):"
1680 1687 print " User : %10s s." % t_usr
1681 1688 print " System: %10s s." % t_sys
1682 1689 else:
1683 1690 runs = range(nruns)
1684 1691 t0 = clock2()
1685 1692 for nr in runs:
1686 1693 runner(filename,prog_ns,prog_ns,
1687 1694 exit_ignore=exit_ignore)
1688 1695 t1 = clock2()
1689 1696 t_usr = t1[0]-t0[0]
1690 1697 t_sys = t1[1]-t0[1]
1691 1698 print "\nIPython CPU timings (estimated):"
1692 1699 print "Total runs performed:",nruns
1693 1700 print " Times : %10s %10s" % ('Total','Per run')
1694 1701 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1695 1702 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1696 1703
1697 1704 else:
1698 1705 # regular execution
1699 1706 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1700 1707
1701 1708 if opts.has_key('i'):
1702 1709 self.shell.user_ns['__name__'] = __name__save
1703 1710 else:
1704 1711 # The shell MUST hold a reference to prog_ns so after %run
1705 1712 # exits, the python deletion mechanism doesn't zero it out
1706 1713 # (leaving dangling references).
1707 1714 self.shell.cache_main_mod(prog_ns,filename)
1708 1715 # update IPython interactive namespace
1709 1716
1710 1717 # Some forms of read errors on the file may mean the
1711 1718 # __name__ key was never set; using pop we don't have to
1712 1719 # worry about a possible KeyError.
1713 1720 prog_ns.pop('__name__', None)
1714 1721
1715 1722 self.shell.user_ns.update(prog_ns)
1716 1723 finally:
1717 1724 # It's a bit of a mystery why, but __builtins__ can change from
1718 1725 # being a module to becoming a dict missing some key data after
1719 1726 # %run. As best I can see, this is NOT something IPython is doing
1720 1727 # at all, and similar problems have been reported before:
1721 1728 # http://coding.derkeiler.com/Archive/Python/comp.lang.python/2004-10/0188.html
1722 1729 # Since this seems to be done by the interpreter itself, the best
1723 1730 # we can do is to at least restore __builtins__ for the user on
1724 1731 # exit.
1725 1732 self.shell.user_ns['__builtins__'] = __builtin__
1726 1733
1727 1734 # Ensure key global structures are restored
1728 1735 sys.argv = save_argv
1729 1736 if restore_main:
1730 1737 sys.modules['__main__'] = restore_main
1731 1738 else:
1732 1739 # Remove from sys.modules the reference to main_mod we'd
1733 1740 # added. Otherwise it will trap references to objects
1734 1741 # contained therein.
1735 1742 del sys.modules[main_mod_name]
1736 1743
1737 1744 self.shell.reloadhist()
1738 1745
1739 1746 return stats
1740 1747
1741 1748 def magic_runlog(self, parameter_s =''):
1742 1749 """Run files as logs.
1743 1750
1744 1751 Usage:\\
1745 1752 %runlog file1 file2 ...
1746 1753
1747 1754 Run the named files (treating them as log files) in sequence inside
1748 1755 the interpreter, and return to the prompt. This is much slower than
1749 1756 %run because each line is executed in a try/except block, but it
1750 1757 allows running files with syntax errors in them.
1751 1758
1752 1759 Normally IPython will guess when a file is one of its own logfiles, so
1753 1760 you can typically use %run even for logs. This shorthand allows you to
1754 1761 force any file to be treated as a log file."""
1755 1762
1756 1763 for f in parameter_s.split():
1757 1764 self.shell.safe_execfile(f,self.shell.user_ns,
1758 1765 self.shell.user_ns,islog=1)
1759 1766
1760 1767 @testdec.skip_doctest
1761 1768 def magic_timeit(self, parameter_s =''):
1762 1769 """Time execution of a Python statement or expression
1763 1770
1764 1771 Usage:\\
1765 1772 %timeit [-n<N> -r<R> [-t|-c]] statement
1766 1773
1767 1774 Time execution of a Python statement or expression using the timeit
1768 1775 module.
1769 1776
1770 1777 Options:
1771 1778 -n<N>: execute the given statement <N> times in a loop. If this value
1772 1779 is not given, a fitting value is chosen.
1773 1780
1774 1781 -r<R>: repeat the loop iteration <R> times and take the best result.
1775 1782 Default: 3
1776 1783
1777 1784 -t: use time.time to measure the time, which is the default on Unix.
1778 1785 This function measures wall time.
1779 1786
1780 1787 -c: use time.clock to measure the time, which is the default on
1781 1788 Windows and measures wall time. On Unix, resource.getrusage is used
1782 1789 instead and returns the CPU user time.
1783 1790
1784 1791 -p<P>: use a precision of <P> digits to display the timing result.
1785 1792 Default: 3
1786 1793
1787 1794
1788 1795 Examples:
1789 1796
1790 1797 In [1]: %timeit pass
1791 1798 10000000 loops, best of 3: 53.3 ns per loop
1792 1799
1793 1800 In [2]: u = None
1794 1801
1795 1802 In [3]: %timeit u is None
1796 1803 10000000 loops, best of 3: 184 ns per loop
1797 1804
1798 1805 In [4]: %timeit -r 4 u == None
1799 1806 1000000 loops, best of 4: 242 ns per loop
1800 1807
1801 1808 In [5]: import time
1802 1809
1803 1810 In [6]: %timeit -n1 time.sleep(2)
1804 1811 1 loops, best of 3: 2 s per loop
1805 1812
1806 1813
1807 1814 The times reported by %timeit will be slightly higher than those
1808 1815 reported by the timeit.py script when variables are accessed. This is
1809 1816 due to the fact that %timeit executes the statement in the namespace
1810 1817 of the shell, compared with timeit.py, which uses a single setup
1811 1818 statement to import function or create variables. Generally, the bias
1812 1819 does not matter as long as results from timeit.py are not mixed with
1813 1820 those from %timeit."""
1814 1821
1815 1822 import timeit
1816 1823 import math
1817 1824
1818 1825 # XXX: Unfortunately the unicode 'micro' symbol can cause problems in
1819 1826 # certain terminals. Until we figure out a robust way of
1820 1827 # auto-detecting if the terminal can deal with it, use plain 'us' for
1821 1828 # microseconds. I am really NOT happy about disabling the proper
1822 1829 # 'micro' prefix, but crashing is worse... If anyone knows what the
1823 1830 # right solution for this is, I'm all ears...
1824 1831 #
1825 1832 # Note: using
1826 1833 #
1827 1834 # s = u'\xb5'
1828 1835 # s.encode(sys.getdefaultencoding())
1829 1836 #
1830 1837 # is not sufficient, as I've seen terminals where that fails but
1831 1838 # print s
1832 1839 #
1833 1840 # succeeds
1834 1841 #
1835 1842 # See bug: https://bugs.launchpad.net/ipython/+bug/348466
1836 1843
1837 1844 #units = [u"s", u"ms",u'\xb5',"ns"]
1838 1845 units = [u"s", u"ms",u'us',"ns"]
1839 1846
1840 1847 scaling = [1, 1e3, 1e6, 1e9]
1841 1848
1842 1849 opts, stmt = self.parse_options(parameter_s,'n:r:tcp:',
1843 1850 posix=False)
1844 1851 if stmt == "":
1845 1852 return
1846 1853 timefunc = timeit.default_timer
1847 1854 number = int(getattr(opts, "n", 0))
1848 1855 repeat = int(getattr(opts, "r", timeit.default_repeat))
1849 1856 precision = int(getattr(opts, "p", 3))
1850 1857 if hasattr(opts, "t"):
1851 1858 timefunc = time.time
1852 1859 if hasattr(opts, "c"):
1853 1860 timefunc = clock
1854 1861
1855 1862 timer = timeit.Timer(timer=timefunc)
1856 1863 # this code has tight coupling to the inner workings of timeit.Timer,
1857 1864 # but is there a better way to achieve that the code stmt has access
1858 1865 # to the shell namespace?
1859 1866
1860 1867 src = timeit.template % {'stmt': timeit.reindent(stmt, 8),
1861 1868 'setup': "pass"}
1862 1869 # Track compilation time so it can be reported if too long
1863 1870 # Minimum time above which compilation time will be reported
1864 1871 tc_min = 0.1
1865 1872
1866 1873 t0 = clock()
1867 1874 code = compile(src, "<magic-timeit>", "exec")
1868 1875 tc = clock()-t0
1869 1876
1870 1877 ns = {}
1871 1878 exec code in self.shell.user_ns, ns
1872 1879 timer.inner = ns["inner"]
1873 1880
1874 1881 if number == 0:
1875 1882 # determine number so that 0.2 <= total time < 2.0
1876 1883 number = 1
1877 1884 for i in range(1, 10):
1878 1885 if timer.timeit(number) >= 0.2:
1879 1886 break
1880 1887 number *= 10
1881 1888
1882 1889 best = min(timer.repeat(repeat, number)) / number
1883 1890
1884 1891 if best > 0.0:
1885 1892 order = min(-int(math.floor(math.log10(best)) // 3), 3)
1886 1893 else:
1887 1894 order = 3
1888 1895 print u"%d loops, best of %d: %.*g %s per loop" % (number, repeat,
1889 1896 precision,
1890 1897 best * scaling[order],
1891 1898 units[order])
1892 1899 if tc > tc_min:
1893 1900 print "Compiler time: %.2f s" % tc
1894 1901
1895 1902 @testdec.skip_doctest
1896 1903 def magic_time(self,parameter_s = ''):
1897 1904 """Time execution of a Python statement or expression.
1898 1905
1899 1906 The CPU and wall clock times are printed, and the value of the
1900 1907 expression (if any) is returned. Note that under Win32, system time
1901 1908 is always reported as 0, since it can not be measured.
1902 1909
1903 1910 This function provides very basic timing functionality. In Python
1904 1911 2.3, the timeit module offers more control and sophistication, so this
1905 1912 could be rewritten to use it (patches welcome).
1906 1913
1907 1914 Some examples:
1908 1915
1909 1916 In [1]: time 2**128
1910 1917 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1911 1918 Wall time: 0.00
1912 1919 Out[1]: 340282366920938463463374607431768211456L
1913 1920
1914 1921 In [2]: n = 1000000
1915 1922
1916 1923 In [3]: time sum(range(n))
1917 1924 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1918 1925 Wall time: 1.37
1919 1926 Out[3]: 499999500000L
1920 1927
1921 1928 In [4]: time print 'hello world'
1922 1929 hello world
1923 1930 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1924 1931 Wall time: 0.00
1925 1932
1926 1933 Note that the time needed by Python to compile the given expression
1927 1934 will be reported if it is more than 0.1s. In this example, the
1928 1935 actual exponentiation is done by Python at compilation time, so while
1929 1936 the expression can take a noticeable amount of time to compute, that
1930 1937 time is purely due to the compilation:
1931 1938
1932 1939 In [5]: time 3**9999;
1933 1940 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1934 1941 Wall time: 0.00 s
1935 1942
1936 1943 In [6]: time 3**999999;
1937 1944 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1938 1945 Wall time: 0.00 s
1939 1946 Compiler : 0.78 s
1940 1947 """
1941 1948
1942 1949 # fail immediately if the given expression can't be compiled
1943 1950
1944 1951 expr = self.shell.prefilter(parameter_s,False)
1945 1952
1946 1953 # Minimum time above which compilation time will be reported
1947 1954 tc_min = 0.1
1948 1955
1949 1956 try:
1950 1957 mode = 'eval'
1951 1958 t0 = clock()
1952 1959 code = compile(expr,'<timed eval>',mode)
1953 1960 tc = clock()-t0
1954 1961 except SyntaxError:
1955 1962 mode = 'exec'
1956 1963 t0 = clock()
1957 1964 code = compile(expr,'<timed exec>',mode)
1958 1965 tc = clock()-t0
1959 1966 # skew measurement as little as possible
1960 1967 glob = self.shell.user_ns
1961 1968 clk = clock2
1962 1969 wtime = time.time
1963 1970 # time execution
1964 1971 wall_st = wtime()
1965 1972 if mode=='eval':
1966 1973 st = clk()
1967 1974 out = eval(code,glob)
1968 1975 end = clk()
1969 1976 else:
1970 1977 st = clk()
1971 1978 exec code in glob
1972 1979 end = clk()
1973 1980 out = None
1974 1981 wall_end = wtime()
1975 1982 # Compute actual times and report
1976 1983 wall_time = wall_end-wall_st
1977 1984 cpu_user = end[0]-st[0]
1978 1985 cpu_sys = end[1]-st[1]
1979 1986 cpu_tot = cpu_user+cpu_sys
1980 1987 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1981 1988 (cpu_user,cpu_sys,cpu_tot)
1982 1989 print "Wall time: %.2f s" % wall_time
1983 1990 if tc > tc_min:
1984 1991 print "Compiler : %.2f s" % tc
1985 1992 return out
1986 1993
1987 1994 @testdec.skip_doctest
1988 1995 def magic_macro(self,parameter_s = ''):
1989 1996 """Define a set of input lines as a macro for future re-execution.
1990 1997
1991 1998 Usage:\\
1992 1999 %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ...
1993 2000
1994 2001 Options:
1995 2002
1996 2003 -r: use 'raw' input. By default, the 'processed' history is used,
1997 2004 so that magics are loaded in their transformed version to valid
1998 2005 Python. If this option is given, the raw input as typed as the
1999 2006 command line is used instead.
2000 2007
2001 2008 This will define a global variable called `name` which is a string
2002 2009 made of joining the slices and lines you specify (n1,n2,... numbers
2003 2010 above) from your input history into a single string. This variable
2004 2011 acts like an automatic function which re-executes those lines as if
2005 2012 you had typed them. You just type 'name' at the prompt and the code
2006 2013 executes.
2007 2014
2008 2015 The notation for indicating number ranges is: n1-n2 means 'use line
2009 2016 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
2010 2017 using the lines numbered 5,6 and 7.
2011 2018
2012 2019 Note: as a 'hidden' feature, you can also use traditional python slice
2013 2020 notation, where N:M means numbers N through M-1.
2014 2021
2015 2022 For example, if your history contains (%hist prints it):
2016 2023
2017 2024 44: x=1
2018 2025 45: y=3
2019 2026 46: z=x+y
2020 2027 47: print x
2021 2028 48: a=5
2022 2029 49: print 'x',x,'y',y
2023 2030
2024 2031 you can create a macro with lines 44 through 47 (included) and line 49
2025 2032 called my_macro with:
2026 2033
2027 2034 In [55]: %macro my_macro 44-47 49
2028 2035
2029 2036 Now, typing `my_macro` (without quotes) will re-execute all this code
2030 2037 in one pass.
2031 2038
2032 2039 You don't need to give the line-numbers in order, and any given line
2033 2040 number can appear multiple times. You can assemble macros with any
2034 2041 lines from your input history in any order.
2035 2042
2036 2043 The macro is a simple object which holds its value in an attribute,
2037 2044 but IPython's display system checks for macros and executes them as
2038 2045 code instead of printing them when you type their name.
2039 2046
2040 2047 You can view a macro's contents by explicitly printing it with:
2041 2048
2042 2049 'print macro_name'.
2043 2050
2044 2051 For one-off cases which DON'T contain magic function calls in them you
2045 2052 can obtain similar results by explicitly executing slices from your
2046 2053 input history with:
2047 2054
2048 2055 In [60]: exec In[44:48]+In[49]"""
2049 2056
2050 2057 opts,args = self.parse_options(parameter_s,'r',mode='list')
2051 2058 if not args:
2052 2059 macs = [k for k,v in self.shell.user_ns.items() if isinstance(v, Macro)]
2053 2060 macs.sort()
2054 2061 return macs
2055 2062 if len(args) == 1:
2056 2063 raise UsageError(
2057 2064 "%macro insufficient args; usage '%macro name n1-n2 n3-4...")
2058 2065 name,ranges = args[0], args[1:]
2059 2066
2060 2067 #print 'rng',ranges # dbg
2061 2068 lines = self.extract_input_slices(ranges,opts.has_key('r'))
2062 2069 macro = Macro(lines)
2063 2070 self.shell.user_ns.update({name:macro})
2064 2071 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
2065 2072 print 'Macro contents:'
2066 2073 print macro,
2067 2074
2068 2075 def magic_save(self,parameter_s = ''):
2069 2076 """Save a set of lines to a given filename.
2070 2077
2071 2078 Usage:\\
2072 2079 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
2073 2080
2074 2081 Options:
2075 2082
2076 2083 -r: use 'raw' input. By default, the 'processed' history is used,
2077 2084 so that magics are loaded in their transformed version to valid
2078 2085 Python. If this option is given, the raw input as typed as the
2079 2086 command line is used instead.
2080 2087
2081 2088 This function uses the same syntax as %macro for line extraction, but
2082 2089 instead of creating a macro it saves the resulting string to the
2083 2090 filename you specify.
2084 2091
2085 2092 It adds a '.py' extension to the file if you don't do so yourself, and
2086 2093 it asks for confirmation before overwriting existing files."""
2087 2094
2088 2095 opts,args = self.parse_options(parameter_s,'r',mode='list')
2089 2096 fname,ranges = args[0], args[1:]
2090 2097 if not fname.endswith('.py'):
2091 2098 fname += '.py'
2092 2099 if os.path.isfile(fname):
2093 2100 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
2094 2101 if ans.lower() not in ['y','yes']:
2095 2102 print 'Operation cancelled.'
2096 2103 return
2097 2104 cmds = ''.join(self.extract_input_slices(ranges,opts.has_key('r')))
2098 2105 f = file(fname,'w')
2099 2106 f.write(cmds)
2100 2107 f.close()
2101 2108 print 'The following commands were written to file `%s`:' % fname
2102 2109 print cmds
2103 2110
2104 2111 def _edit_macro(self,mname,macro):
2105 2112 """open an editor with the macro data in a file"""
2106 2113 filename = self.shell.mktempfile(macro.value)
2107 2114 self.shell.hooks.editor(filename)
2108 2115
2109 2116 # and make a new macro object, to replace the old one
2110 2117 mfile = open(filename)
2111 2118 mvalue = mfile.read()
2112 2119 mfile.close()
2113 2120 self.shell.user_ns[mname] = Macro(mvalue)
2114 2121
2115 2122 def magic_ed(self,parameter_s=''):
2116 2123 """Alias to %edit."""
2117 2124 return self.magic_edit(parameter_s)
2118 2125
2119 2126 @testdec.skip_doctest
2120 2127 def magic_edit(self,parameter_s='',last_call=['','']):
2121 2128 """Bring up an editor and execute the resulting code.
2122 2129
2123 2130 Usage:
2124 2131 %edit [options] [args]
2125 2132
2126 2133 %edit runs IPython's editor hook. The default version of this hook is
2127 2134 set to call the __IPYTHON__.rc.editor command. This is read from your
2128 2135 environment variable $EDITOR. If this isn't found, it will default to
2129 2136 vi under Linux/Unix and to notepad under Windows. See the end of this
2130 2137 docstring for how to change the editor hook.
2131 2138
2132 2139 You can also set the value of this editor via the command line option
2133 2140 '-editor' or in your ipythonrc file. This is useful if you wish to use
2134 2141 specifically for IPython an editor different from your typical default
2135 2142 (and for Windows users who typically don't set environment variables).
2136 2143
2137 2144 This command allows you to conveniently edit multi-line code right in
2138 2145 your IPython session.
2139 2146
2140 2147 If called without arguments, %edit opens up an empty editor with a
2141 2148 temporary file and will execute the contents of this file when you
2142 2149 close it (don't forget to save it!).
2143 2150
2144 2151
2145 2152 Options:
2146 2153
2147 2154 -n <number>: open the editor at a specified line number. By default,
2148 2155 the IPython editor hook uses the unix syntax 'editor +N filename', but
2149 2156 you can configure this by providing your own modified hook if your
2150 2157 favorite editor supports line-number specifications with a different
2151 2158 syntax.
2152 2159
2153 2160 -p: this will call the editor with the same data as the previous time
2154 2161 it was used, regardless of how long ago (in your current session) it
2155 2162 was.
2156 2163
2157 2164 -r: use 'raw' input. This option only applies to input taken from the
2158 2165 user's history. By default, the 'processed' history is used, so that
2159 2166 magics are loaded in their transformed version to valid Python. If
2160 2167 this option is given, the raw input as typed as the command line is
2161 2168 used instead. When you exit the editor, it will be executed by
2162 2169 IPython's own processor.
2163 2170
2164 2171 -x: do not execute the edited code immediately upon exit. This is
2165 2172 mainly useful if you are editing programs which need to be called with
2166 2173 command line arguments, which you can then do using %run.
2167 2174
2168 2175
2169 2176 Arguments:
2170 2177
2171 2178 If arguments are given, the following possibilites exist:
2172 2179
2173 2180 - The arguments are numbers or pairs of colon-separated numbers (like
2174 2181 1 4:8 9). These are interpreted as lines of previous input to be
2175 2182 loaded into the editor. The syntax is the same of the %macro command.
2176 2183
2177 2184 - If the argument doesn't start with a number, it is evaluated as a
2178 2185 variable and its contents loaded into the editor. You can thus edit
2179 2186 any string which contains python code (including the result of
2180 2187 previous edits).
2181 2188
2182 2189 - If the argument is the name of an object (other than a string),
2183 2190 IPython will try to locate the file where it was defined and open the
2184 2191 editor at the point where it is defined. You can use `%edit function`
2185 2192 to load an editor exactly at the point where 'function' is defined,
2186 2193 edit it and have the file be executed automatically.
2187 2194
2188 2195 If the object is a macro (see %macro for details), this opens up your
2189 2196 specified editor with a temporary file containing the macro's data.
2190 2197 Upon exit, the macro is reloaded with the contents of the file.
2191 2198
2192 2199 Note: opening at an exact line is only supported under Unix, and some
2193 2200 editors (like kedit and gedit up to Gnome 2.8) do not understand the
2194 2201 '+NUMBER' parameter necessary for this feature. Good editors like
2195 2202 (X)Emacs, vi, jed, pico and joe all do.
2196 2203
2197 2204 - If the argument is not found as a variable, IPython will look for a
2198 2205 file with that name (adding .py if necessary) and load it into the
2199 2206 editor. It will execute its contents with execfile() when you exit,
2200 2207 loading any code in the file into your interactive namespace.
2201 2208
2202 2209 After executing your code, %edit will return as output the code you
2203 2210 typed in the editor (except when it was an existing file). This way
2204 2211 you can reload the code in further invocations of %edit as a variable,
2205 2212 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
2206 2213 the output.
2207 2214
2208 2215 Note that %edit is also available through the alias %ed.
2209 2216
2210 2217 This is an example of creating a simple function inside the editor and
2211 2218 then modifying it. First, start up the editor:
2212 2219
2213 2220 In [1]: ed
2214 2221 Editing... done. Executing edited code...
2215 2222 Out[1]: 'def foo():n print "foo() was defined in an editing session"n'
2216 2223
2217 2224 We can then call the function foo():
2218 2225
2219 2226 In [2]: foo()
2220 2227 foo() was defined in an editing session
2221 2228
2222 2229 Now we edit foo. IPython automatically loads the editor with the
2223 2230 (temporary) file where foo() was previously defined:
2224 2231
2225 2232 In [3]: ed foo
2226 2233 Editing... done. Executing edited code...
2227 2234
2228 2235 And if we call foo() again we get the modified version:
2229 2236
2230 2237 In [4]: foo()
2231 2238 foo() has now been changed!
2232 2239
2233 2240 Here is an example of how to edit a code snippet successive
2234 2241 times. First we call the editor:
2235 2242
2236 2243 In [5]: ed
2237 2244 Editing... done. Executing edited code...
2238 2245 hello
2239 2246 Out[5]: "print 'hello'n"
2240 2247
2241 2248 Now we call it again with the previous output (stored in _):
2242 2249
2243 2250 In [6]: ed _
2244 2251 Editing... done. Executing edited code...
2245 2252 hello world
2246 2253 Out[6]: "print 'hello world'n"
2247 2254
2248 2255 Now we call it with the output #8 (stored in _8, also as Out[8]):
2249 2256
2250 2257 In [7]: ed _8
2251 2258 Editing... done. Executing edited code...
2252 2259 hello again
2253 2260 Out[7]: "print 'hello again'n"
2254 2261
2255 2262
2256 2263 Changing the default editor hook:
2257 2264
2258 2265 If you wish to write your own editor hook, you can put it in a
2259 2266 configuration file which you load at startup time. The default hook
2260 2267 is defined in the IPython.hooks module, and you can use that as a
2261 2268 starting example for further modifications. That file also has
2262 2269 general instructions on how to set a new hook for use once you've
2263 2270 defined it."""
2264 2271
2265 2272 # FIXME: This function has become a convoluted mess. It needs a
2266 2273 # ground-up rewrite with clean, simple logic.
2267 2274
2268 2275 def make_filename(arg):
2269 2276 "Make a filename from the given args"
2270 2277 try:
2271 2278 filename = get_py_filename(arg)
2272 2279 except IOError:
2273 2280 if args.endswith('.py'):
2274 2281 filename = arg
2275 2282 else:
2276 2283 filename = None
2277 2284 return filename
2278 2285
2279 2286 # custom exceptions
2280 2287 class DataIsObject(Exception): pass
2281 2288
2282 2289 opts,args = self.parse_options(parameter_s,'prxn:')
2283 2290 # Set a few locals from the options for convenience:
2284 2291 opts_p = opts.has_key('p')
2285 2292 opts_r = opts.has_key('r')
2286 2293
2287 2294 # Default line number value
2288 2295 lineno = opts.get('n',None)
2289 2296
2290 2297 if opts_p:
2291 2298 args = '_%s' % last_call[0]
2292 2299 if not self.shell.user_ns.has_key(args):
2293 2300 args = last_call[1]
2294 2301
2295 2302 # use last_call to remember the state of the previous call, but don't
2296 2303 # let it be clobbered by successive '-p' calls.
2297 2304 try:
2298 2305 last_call[0] = self.shell.outputcache.prompt_count
2299 2306 if not opts_p:
2300 2307 last_call[1] = parameter_s
2301 2308 except:
2302 2309 pass
2303 2310
2304 2311 # by default this is done with temp files, except when the given
2305 2312 # arg is a filename
2306 2313 use_temp = 1
2307 2314
2308 2315 if re.match(r'\d',args):
2309 2316 # Mode where user specifies ranges of lines, like in %macro.
2310 2317 # This means that you can't edit files whose names begin with
2311 2318 # numbers this way. Tough.
2312 2319 ranges = args.split()
2313 2320 data = ''.join(self.extract_input_slices(ranges,opts_r))
2314 2321 elif args.endswith('.py'):
2315 2322 filename = make_filename(args)
2316 2323 data = ''
2317 2324 use_temp = 0
2318 2325 elif args:
2319 2326 try:
2320 2327 # Load the parameter given as a variable. If not a string,
2321 2328 # process it as an object instead (below)
2322 2329
2323 2330 #print '*** args',args,'type',type(args) # dbg
2324 2331 data = eval(args,self.shell.user_ns)
2325 2332 if not type(data) in StringTypes:
2326 2333 raise DataIsObject
2327 2334
2328 2335 except (NameError,SyntaxError):
2329 2336 # given argument is not a variable, try as a filename
2330 2337 filename = make_filename(args)
2331 2338 if filename is None:
2332 2339 warn("Argument given (%s) can't be found as a variable "
2333 2340 "or as a filename." % args)
2334 2341 return
2335 2342
2336 2343 data = ''
2337 2344 use_temp = 0
2338 2345 except DataIsObject:
2339 2346
2340 2347 # macros have a special edit function
2341 2348 if isinstance(data,Macro):
2342 2349 self._edit_macro(args,data)
2343 2350 return
2344 2351
2345 2352 # For objects, try to edit the file where they are defined
2346 2353 try:
2347 2354 filename = inspect.getabsfile(data)
2348 2355 if 'fakemodule' in filename.lower() and inspect.isclass(data):
2349 2356 # class created by %edit? Try to find source
2350 2357 # by looking for method definitions instead, the
2351 2358 # __module__ in those classes is FakeModule.
2352 2359 attrs = [getattr(data, aname) for aname in dir(data)]
2353 2360 for attr in attrs:
2354 2361 if not inspect.ismethod(attr):
2355 2362 continue
2356 2363 filename = inspect.getabsfile(attr)
2357 2364 if filename and 'fakemodule' not in filename.lower():
2358 2365 # change the attribute to be the edit target instead
2359 2366 data = attr
2360 2367 break
2361 2368
2362 2369 datafile = 1
2363 2370 except TypeError:
2364 2371 filename = make_filename(args)
2365 2372 datafile = 1
2366 2373 warn('Could not find file where `%s` is defined.\n'
2367 2374 'Opening a file named `%s`' % (args,filename))
2368 2375 # Now, make sure we can actually read the source (if it was in
2369 2376 # a temp file it's gone by now).
2370 2377 if datafile:
2371 2378 try:
2372 2379 if lineno is None:
2373 2380 lineno = inspect.getsourcelines(data)[1]
2374 2381 except IOError:
2375 2382 filename = make_filename(args)
2376 2383 if filename is None:
2377 2384 warn('The file `%s` where `%s` was defined cannot '
2378 2385 'be read.' % (filename,data))
2379 2386 return
2380 2387 use_temp = 0
2381 2388 else:
2382 2389 data = ''
2383 2390
2384 2391 if use_temp:
2385 2392 filename = self.shell.mktempfile(data)
2386 2393 print 'IPython will make a temporary file named:',filename
2387 2394
2388 2395 # do actual editing here
2389 2396 print 'Editing...',
2390 2397 sys.stdout.flush()
2391 2398 try:
2392 2399 self.shell.hooks.editor(filename,lineno)
2393 2400 except IPython.ipapi.TryNext:
2394 2401 warn('Could not open editor')
2395 2402 return
2396 2403
2397 2404 # XXX TODO: should this be generalized for all string vars?
2398 2405 # For now, this is special-cased to blocks created by cpaste
2399 2406 if args.strip() == 'pasted_block':
2400 2407 self.shell.user_ns['pasted_block'] = file_read(filename)
2401 2408
2402 2409 if opts.has_key('x'): # -x prevents actual execution
2403 2410 print
2404 2411 else:
2405 2412 print 'done. Executing edited code...'
2406 2413 if opts_r:
2407 2414 self.shell.runlines(file_read(filename))
2408 2415 else:
2409 2416 self.shell.safe_execfile(filename,self.shell.user_ns,
2410 2417 self.shell.user_ns)
2411 2418
2412 2419
2413 2420 if use_temp:
2414 2421 try:
2415 2422 return open(filename).read()
2416 2423 except IOError,msg:
2417 2424 if msg.filename == filename:
2418 2425 warn('File not found. Did you forget to save?')
2419 2426 return
2420 2427 else:
2421 2428 self.shell.showtraceback()
2422 2429
2423 2430 def magic_xmode(self,parameter_s = ''):
2424 2431 """Switch modes for the exception handlers.
2425 2432
2426 2433 Valid modes: Plain, Context and Verbose.
2427 2434
2428 2435 If called without arguments, acts as a toggle."""
2429 2436
2430 2437 def xmode_switch_err(name):
2431 2438 warn('Error changing %s exception modes.\n%s' %
2432 2439 (name,sys.exc_info()[1]))
2433 2440
2434 2441 shell = self.shell
2435 2442 new_mode = parameter_s.strip().capitalize()
2436 2443 try:
2437 2444 shell.InteractiveTB.set_mode(mode=new_mode)
2438 2445 print 'Exception reporting mode:',shell.InteractiveTB.mode
2439 2446 except:
2440 2447 xmode_switch_err('user')
2441 2448
2442 2449 # threaded shells use a special handler in sys.excepthook
2443 2450 if shell.isthreaded:
2444 2451 try:
2445 2452 shell.sys_excepthook.set_mode(mode=new_mode)
2446 2453 except:
2447 2454 xmode_switch_err('threaded')
2448 2455
2449 2456 def magic_colors(self,parameter_s = ''):
2450 2457 """Switch color scheme for prompts, info system and exception handlers.
2451 2458
2452 2459 Currently implemented schemes: NoColor, Linux, LightBG.
2453 2460
2454 2461 Color scheme names are not case-sensitive."""
2455 2462
2456 2463 def color_switch_err(name):
2457 2464 warn('Error changing %s color schemes.\n%s' %
2458 2465 (name,sys.exc_info()[1]))
2459 2466
2460 2467
2461 2468 new_scheme = parameter_s.strip()
2462 2469 if not new_scheme:
2463 2470 raise UsageError(
2464 2471 "%colors: you must specify a color scheme. See '%colors?'")
2465 2472 return
2466 2473 # local shortcut
2467 2474 shell = self.shell
2468 2475
2469 2476 import IPython.rlineimpl as readline
2470 2477
2471 2478 if not readline.have_readline and sys.platform == "win32":
2472 2479 msg = """\
2473 2480 Proper color support under MS Windows requires the pyreadline library.
2474 2481 You can find it at:
2475 2482 http://ipython.scipy.org/moin/PyReadline/Intro
2476 2483 Gary's readline needs the ctypes module, from:
2477 2484 http://starship.python.net/crew/theller/ctypes
2478 2485 (Note that ctypes is already part of Python versions 2.5 and newer).
2479 2486
2480 2487 Defaulting color scheme to 'NoColor'"""
2481 2488 new_scheme = 'NoColor'
2482 2489 warn(msg)
2483 2490
2484 2491 # readline option is 0
2485 2492 if not shell.has_readline:
2486 2493 new_scheme = 'NoColor'
2487 2494
2488 2495 # Set prompt colors
2489 2496 try:
2490 2497 shell.outputcache.set_colors(new_scheme)
2491 2498 except:
2492 2499 color_switch_err('prompt')
2493 2500 else:
2494 2501 shell.rc.colors = \
2495 2502 shell.outputcache.color_table.active_scheme_name
2496 2503 # Set exception colors
2497 2504 try:
2498 2505 shell.InteractiveTB.set_colors(scheme = new_scheme)
2499 2506 shell.SyntaxTB.set_colors(scheme = new_scheme)
2500 2507 except:
2501 2508 color_switch_err('exception')
2502 2509
2503 2510 # threaded shells use a verbose traceback in sys.excepthook
2504 2511 if shell.isthreaded:
2505 2512 try:
2506 2513 shell.sys_excepthook.set_colors(scheme=new_scheme)
2507 2514 except:
2508 2515 color_switch_err('system exception handler')
2509 2516
2510 2517 # Set info (for 'object?') colors
2511 2518 if shell.rc.color_info:
2512 2519 try:
2513 2520 shell.inspector.set_active_scheme(new_scheme)
2514 2521 except:
2515 2522 color_switch_err('object inspector')
2516 2523 else:
2517 2524 shell.inspector.set_active_scheme('NoColor')
2518 2525
2519 2526 def magic_color_info(self,parameter_s = ''):
2520 2527 """Toggle color_info.
2521 2528
2522 2529 The color_info configuration parameter controls whether colors are
2523 2530 used for displaying object details (by things like %psource, %pfile or
2524 2531 the '?' system). This function toggles this value with each call.
2525 2532
2526 2533 Note that unless you have a fairly recent pager (less works better
2527 2534 than more) in your system, using colored object information displays
2528 2535 will not work properly. Test it and see."""
2529 2536
2530 2537 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2531 2538 self.magic_colors(self.shell.rc.colors)
2532 2539 print 'Object introspection functions have now coloring:',
2533 2540 print ['OFF','ON'][self.shell.rc.color_info]
2534 2541
2535 2542 def magic_Pprint(self, parameter_s=''):
2536 2543 """Toggle pretty printing on/off."""
2537 2544
2538 2545 self.shell.rc.pprint = 1 - self.shell.rc.pprint
2539 2546 print 'Pretty printing has been turned', \
2540 2547 ['OFF','ON'][self.shell.rc.pprint]
2541 2548
2542 2549 def magic_exit(self, parameter_s=''):
2543 2550 """Exit IPython, confirming if configured to do so.
2544 2551
2545 2552 You can configure whether IPython asks for confirmation upon exit by
2546 2553 setting the confirm_exit flag in the ipythonrc file."""
2547 2554
2548 2555 self.shell.exit()
2549 2556
2550 2557 def magic_quit(self, parameter_s=''):
2551 2558 """Exit IPython, confirming if configured to do so (like %exit)"""
2552 2559
2553 2560 self.shell.exit()
2554 2561
2555 2562 def magic_Exit(self, parameter_s=''):
2556 2563 """Exit IPython without confirmation."""
2557 2564
2558 2565 self.shell.ask_exit()
2559 2566
2560 2567 #......................................................................
2561 2568 # Functions to implement unix shell-type things
2562 2569
2563 2570 @testdec.skip_doctest
2564 2571 def magic_alias(self, parameter_s = ''):
2565 2572 """Define an alias for a system command.
2566 2573
2567 2574 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2568 2575
2569 2576 Then, typing 'alias_name params' will execute the system command 'cmd
2570 2577 params' (from your underlying operating system).
2571 2578
2572 2579 Aliases have lower precedence than magic functions and Python normal
2573 2580 variables, so if 'foo' is both a Python variable and an alias, the
2574 2581 alias can not be executed until 'del foo' removes the Python variable.
2575 2582
2576 2583 You can use the %l specifier in an alias definition to represent the
2577 2584 whole line when the alias is called. For example:
2578 2585
2579 2586 In [2]: alias all echo "Input in brackets: <%l>"
2580 2587 In [3]: all hello world
2581 2588 Input in brackets: <hello world>
2582 2589
2583 2590 You can also define aliases with parameters using %s specifiers (one
2584 2591 per parameter):
2585 2592
2586 2593 In [1]: alias parts echo first %s second %s
2587 2594 In [2]: %parts A B
2588 2595 first A second B
2589 2596 In [3]: %parts A
2590 2597 Incorrect number of arguments: 2 expected.
2591 2598 parts is an alias to: 'echo first %s second %s'
2592 2599
2593 2600 Note that %l and %s are mutually exclusive. You can only use one or
2594 2601 the other in your aliases.
2595 2602
2596 2603 Aliases expand Python variables just like system calls using ! or !!
2597 2604 do: all expressions prefixed with '$' get expanded. For details of
2598 2605 the semantic rules, see PEP-215:
2599 2606 http://www.python.org/peps/pep-0215.html. This is the library used by
2600 2607 IPython for variable expansion. If you want to access a true shell
2601 2608 variable, an extra $ is necessary to prevent its expansion by IPython:
2602 2609
2603 2610 In [6]: alias show echo
2604 2611 In [7]: PATH='A Python string'
2605 2612 In [8]: show $PATH
2606 2613 A Python string
2607 2614 In [9]: show $$PATH
2608 2615 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2609 2616
2610 2617 You can use the alias facility to acess all of $PATH. See the %rehash
2611 2618 and %rehashx functions, which automatically create aliases for the
2612 2619 contents of your $PATH.
2613 2620
2614 2621 If called with no parameters, %alias prints the current alias table."""
2615 2622
2616 2623 par = parameter_s.strip()
2617 2624 if not par:
2618 2625 stored = self.db.get('stored_aliases', {} )
2619 2626 atab = self.shell.alias_table
2620 2627 aliases = atab.keys()
2621 2628 aliases.sort()
2622 2629 res = []
2623 2630 showlast = []
2624 2631 for alias in aliases:
2625 2632 special = False
2626 2633 try:
2627 2634 tgt = atab[alias][1]
2628 2635 except (TypeError, AttributeError):
2629 2636 # unsubscriptable? probably a callable
2630 2637 tgt = atab[alias]
2631 2638 special = True
2632 2639 # 'interesting' aliases
2633 2640 if (alias in stored or
2634 2641 special or
2635 2642 alias.lower() != os.path.splitext(tgt)[0].lower() or
2636 2643 ' ' in tgt):
2637 2644 showlast.append((alias, tgt))
2638 2645 else:
2639 2646 res.append((alias, tgt ))
2640 2647
2641 2648 # show most interesting aliases last
2642 2649 res.extend(showlast)
2643 2650 print "Total number of aliases:",len(aliases)
2644 2651 return res
2645 2652 try:
2646 2653 alias,cmd = par.split(None,1)
2647 2654 except:
2648 2655 print OInspect.getdoc(self.magic_alias)
2649 2656 else:
2650 2657 nargs = cmd.count('%s')
2651 2658 if nargs>0 and cmd.find('%l')>=0:
2652 2659 error('The %s and %l specifiers are mutually exclusive '
2653 2660 'in alias definitions.')
2654 2661 else: # all looks OK
2655 2662 self.shell.alias_table[alias] = (nargs,cmd)
2656 2663 self.shell.alias_table_validate(verbose=0)
2657 2664 # end magic_alias
2658 2665
2659 2666 def magic_unalias(self, parameter_s = ''):
2660 2667 """Remove an alias"""
2661 2668
2662 2669 aname = parameter_s.strip()
2663 2670 if aname in self.shell.alias_table:
2664 2671 del self.shell.alias_table[aname]
2665 2672 stored = self.db.get('stored_aliases', {} )
2666 2673 if aname in stored:
2667 2674 print "Removing %stored alias",aname
2668 2675 del stored[aname]
2669 2676 self.db['stored_aliases'] = stored
2670 2677
2671 2678
2672 2679 def magic_rehashx(self, parameter_s = ''):
2673 2680 """Update the alias table with all executable files in $PATH.
2674 2681
2675 2682 This version explicitly checks that every entry in $PATH is a file
2676 2683 with execute access (os.X_OK), so it is much slower than %rehash.
2677 2684
2678 2685 Under Windows, it checks executability as a match agains a
2679 2686 '|'-separated string of extensions, stored in the IPython config
2680 2687 variable win_exec_ext. This defaults to 'exe|com|bat'.
2681 2688
2682 2689 This function also resets the root module cache of module completer,
2683 2690 used on slow filesystems.
2684 2691 """
2685 2692
2686 2693
2687 2694 ip = self.api
2688 2695
2689 2696 # for the benefit of module completer in ipy_completers.py
2690 2697 del ip.db['rootmodules']
2691 2698
2692 2699 path = [os.path.abspath(os.path.expanduser(p)) for p in
2693 2700 os.environ.get('PATH','').split(os.pathsep)]
2694 2701 path = filter(os.path.isdir,path)
2695 2702
2696 2703 alias_table = self.shell.alias_table
2697 2704 syscmdlist = []
2698 2705 if os.name == 'posix':
2699 2706 isexec = lambda fname:os.path.isfile(fname) and \
2700 2707 os.access(fname,os.X_OK)
2701 2708 else:
2702 2709
2703 2710 try:
2704 2711 winext = os.environ['pathext'].replace(';','|').replace('.','')
2705 2712 except KeyError:
2706 2713 winext = 'exe|com|bat|py'
2707 2714 if 'py' not in winext:
2708 2715 winext += '|py'
2709 2716 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2710 2717 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2711 2718 savedir = os.getcwd()
2712 2719 try:
2713 2720 # write the whole loop for posix/Windows so we don't have an if in
2714 2721 # the innermost part
2715 2722 if os.name == 'posix':
2716 2723 for pdir in path:
2717 2724 os.chdir(pdir)
2718 2725 for ff in os.listdir(pdir):
2719 2726 if isexec(ff) and ff not in self.shell.no_alias:
2720 2727 # each entry in the alias table must be (N,name),
2721 2728 # where N is the number of positional arguments of the
2722 2729 # alias.
2723 2730 # Dots will be removed from alias names, since ipython
2724 2731 # assumes names with dots to be python code
2725 2732 alias_table[ff.replace('.','')] = (0,ff)
2726 2733 syscmdlist.append(ff)
2727 2734 else:
2728 2735 for pdir in path:
2729 2736 os.chdir(pdir)
2730 2737 for ff in os.listdir(pdir):
2731 2738 base, ext = os.path.splitext(ff)
2732 2739 if isexec(ff) and base.lower() not in self.shell.no_alias:
2733 2740 if ext.lower() == '.exe':
2734 2741 ff = base
2735 2742 alias_table[base.lower().replace('.','')] = (0,ff)
2736 2743 syscmdlist.append(ff)
2737 2744 # Make sure the alias table doesn't contain keywords or builtins
2738 2745 self.shell.alias_table_validate()
2739 2746 # Call again init_auto_alias() so we get 'rm -i' and other
2740 2747 # modified aliases since %rehashx will probably clobber them
2741 2748
2742 2749 # no, we don't want them. if %rehashx clobbers them, good,
2743 2750 # we'll probably get better versions
2744 2751 # self.shell.init_auto_alias()
2745 2752 db = ip.db
2746 2753 db['syscmdlist'] = syscmdlist
2747 2754 finally:
2748 2755 os.chdir(savedir)
2749 2756
2750 2757 def magic_pwd(self, parameter_s = ''):
2751 2758 """Return the current working directory path."""
2752 2759 return os.getcwd()
2753 2760
2754 2761 def magic_cd(self, parameter_s=''):
2755 2762 """Change the current working directory.
2756 2763
2757 2764 This command automatically maintains an internal list of directories
2758 2765 you visit during your IPython session, in the variable _dh. The
2759 2766 command %dhist shows this history nicely formatted. You can also
2760 2767 do 'cd -<tab>' to see directory history conveniently.
2761 2768
2762 2769 Usage:
2763 2770
2764 2771 cd 'dir': changes to directory 'dir'.
2765 2772
2766 2773 cd -: changes to the last visited directory.
2767 2774
2768 2775 cd -<n>: changes to the n-th directory in the directory history.
2769 2776
2770 2777 cd --foo: change to directory that matches 'foo' in history
2771 2778
2772 2779 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2773 2780 (note: cd <bookmark_name> is enough if there is no
2774 2781 directory <bookmark_name>, but a bookmark with the name exists.)
2775 2782 'cd -b <tab>' allows you to tab-complete bookmark names.
2776 2783
2777 2784 Options:
2778 2785
2779 2786 -q: quiet. Do not print the working directory after the cd command is
2780 2787 executed. By default IPython's cd command does print this directory,
2781 2788 since the default prompts do not display path information.
2782 2789
2783 2790 Note that !cd doesn't work for this purpose because the shell where
2784 2791 !command runs is immediately discarded after executing 'command'."""
2785 2792
2786 2793 parameter_s = parameter_s.strip()
2787 2794 #bkms = self.shell.persist.get("bookmarks",{})
2788 2795
2789 2796 oldcwd = os.getcwd()
2790 2797 numcd = re.match(r'(-)(\d+)$',parameter_s)
2791 2798 # jump in directory history by number
2792 2799 if numcd:
2793 2800 nn = int(numcd.group(2))
2794 2801 try:
2795 2802 ps = self.shell.user_ns['_dh'][nn]
2796 2803 except IndexError:
2797 2804 print 'The requested directory does not exist in history.'
2798 2805 return
2799 2806 else:
2800 2807 opts = {}
2801 2808 elif parameter_s.startswith('--'):
2802 2809 ps = None
2803 2810 fallback = None
2804 2811 pat = parameter_s[2:]
2805 2812 dh = self.shell.user_ns['_dh']
2806 2813 # first search only by basename (last component)
2807 2814 for ent in reversed(dh):
2808 2815 if pat in os.path.basename(ent) and os.path.isdir(ent):
2809 2816 ps = ent
2810 2817 break
2811 2818
2812 2819 if fallback is None and pat in ent and os.path.isdir(ent):
2813 2820 fallback = ent
2814 2821
2815 2822 # if we have no last part match, pick the first full path match
2816 2823 if ps is None:
2817 2824 ps = fallback
2818 2825
2819 2826 if ps is None:
2820 2827 print "No matching entry in directory history"
2821 2828 return
2822 2829 else:
2823 2830 opts = {}
2824 2831
2825 2832
2826 2833 else:
2827 2834 #turn all non-space-escaping backslashes to slashes,
2828 2835 # for c:\windows\directory\names\
2829 2836 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2830 2837 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2831 2838 # jump to previous
2832 2839 if ps == '-':
2833 2840 try:
2834 2841 ps = self.shell.user_ns['_dh'][-2]
2835 2842 except IndexError:
2836 2843 raise UsageError('%cd -: No previous directory to change to.')
2837 2844 # jump to bookmark if needed
2838 2845 else:
2839 2846 if not os.path.isdir(ps) or opts.has_key('b'):
2840 2847 bkms = self.db.get('bookmarks', {})
2841 2848
2842 2849 if bkms.has_key(ps):
2843 2850 target = bkms[ps]
2844 2851 print '(bookmark:%s) -> %s' % (ps,target)
2845 2852 ps = target
2846 2853 else:
2847 2854 if opts.has_key('b'):
2848 2855 raise UsageError("Bookmark '%s' not found. "
2849 2856 "Use '%%bookmark -l' to see your bookmarks." % ps)
2850 2857
2851 2858 # at this point ps should point to the target dir
2852 2859 if ps:
2853 2860 try:
2854 2861 os.chdir(os.path.expanduser(ps))
2855 2862 if self.shell.rc.term_title:
2856 2863 #print 'set term title:',self.shell.rc.term_title # dbg
2857 2864 platutils.set_term_title('IPy ' + abbrev_cwd())
2858 2865 except OSError:
2859 2866 print sys.exc_info()[1]
2860 2867 else:
2861 2868 cwd = os.getcwd()
2862 2869 dhist = self.shell.user_ns['_dh']
2863 2870 if oldcwd != cwd:
2864 2871 dhist.append(cwd)
2865 2872 self.db['dhist'] = compress_dhist(dhist)[-100:]
2866 2873
2867 2874 else:
2868 2875 os.chdir(self.shell.home_dir)
2869 2876 if self.shell.rc.term_title:
2870 2877 platutils.set_term_title("IPy ~")
2871 2878 cwd = os.getcwd()
2872 2879 dhist = self.shell.user_ns['_dh']
2873 2880
2874 2881 if oldcwd != cwd:
2875 2882 dhist.append(cwd)
2876 2883 self.db['dhist'] = compress_dhist(dhist)[-100:]
2877 2884 if not 'q' in opts and self.shell.user_ns['_dh']:
2878 2885 print self.shell.user_ns['_dh'][-1]
2879 2886
2880 2887
2881 2888 def magic_env(self, parameter_s=''):
2882 2889 """List environment variables."""
2883 2890
2884 2891 return os.environ.data
2885 2892
2886 2893 def magic_pushd(self, parameter_s=''):
2887 2894 """Place the current dir on stack and change directory.
2888 2895
2889 2896 Usage:\\
2890 2897 %pushd ['dirname']
2891 2898 """
2892 2899
2893 2900 dir_s = self.shell.dir_stack
2894 2901 tgt = os.path.expanduser(parameter_s)
2895 2902 cwd = os.getcwd().replace(self.home_dir,'~')
2896 2903 if tgt:
2897 2904 self.magic_cd(parameter_s)
2898 2905 dir_s.insert(0,cwd)
2899 2906 return self.magic_dirs()
2900 2907
2901 2908 def magic_popd(self, parameter_s=''):
2902 2909 """Change to directory popped off the top of the stack.
2903 2910 """
2904 2911 if not self.shell.dir_stack:
2905 2912 raise UsageError("%popd on empty stack")
2906 2913 top = self.shell.dir_stack.pop(0)
2907 2914 self.magic_cd(top)
2908 2915 print "popd ->",top
2909 2916
2910 2917 def magic_dirs(self, parameter_s=''):
2911 2918 """Return the current directory stack."""
2912 2919
2913 2920 return self.shell.dir_stack
2914 2921
2915 2922 def magic_dhist(self, parameter_s=''):
2916 2923 """Print your history of visited directories.
2917 2924
2918 2925 %dhist -> print full history\\
2919 2926 %dhist n -> print last n entries only\\
2920 2927 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2921 2928
2922 2929 This history is automatically maintained by the %cd command, and
2923 2930 always available as the global list variable _dh. You can use %cd -<n>
2924 2931 to go to directory number <n>.
2925 2932
2926 2933 Note that most of time, you should view directory history by entering
2927 2934 cd -<TAB>.
2928 2935
2929 2936 """
2930 2937
2931 2938 dh = self.shell.user_ns['_dh']
2932 2939 if parameter_s:
2933 2940 try:
2934 2941 args = map(int,parameter_s.split())
2935 2942 except:
2936 2943 self.arg_err(Magic.magic_dhist)
2937 2944 return
2938 2945 if len(args) == 1:
2939 2946 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2940 2947 elif len(args) == 2:
2941 2948 ini,fin = args
2942 2949 else:
2943 2950 self.arg_err(Magic.magic_dhist)
2944 2951 return
2945 2952 else:
2946 2953 ini,fin = 0,len(dh)
2947 2954 nlprint(dh,
2948 2955 header = 'Directory history (kept in _dh)',
2949 2956 start=ini,stop=fin)
2950 2957
2951 2958 @testdec.skip_doctest
2952 2959 def magic_sc(self, parameter_s=''):
2953 2960 """Shell capture - execute a shell command and capture its output.
2954 2961
2955 2962 DEPRECATED. Suboptimal, retained for backwards compatibility.
2956 2963
2957 2964 You should use the form 'var = !command' instead. Example:
2958 2965
2959 2966 "%sc -l myfiles = ls ~" should now be written as
2960 2967
2961 2968 "myfiles = !ls ~"
2962 2969
2963 2970 myfiles.s, myfiles.l and myfiles.n still apply as documented
2964 2971 below.
2965 2972
2966 2973 --
2967 2974 %sc [options] varname=command
2968 2975
2969 2976 IPython will run the given command using commands.getoutput(), and
2970 2977 will then update the user's interactive namespace with a variable
2971 2978 called varname, containing the value of the call. Your command can
2972 2979 contain shell wildcards, pipes, etc.
2973 2980
2974 2981 The '=' sign in the syntax is mandatory, and the variable name you
2975 2982 supply must follow Python's standard conventions for valid names.
2976 2983
2977 2984 (A special format without variable name exists for internal use)
2978 2985
2979 2986 Options:
2980 2987
2981 2988 -l: list output. Split the output on newlines into a list before
2982 2989 assigning it to the given variable. By default the output is stored
2983 2990 as a single string.
2984 2991
2985 2992 -v: verbose. Print the contents of the variable.
2986 2993
2987 2994 In most cases you should not need to split as a list, because the
2988 2995 returned value is a special type of string which can automatically
2989 2996 provide its contents either as a list (split on newlines) or as a
2990 2997 space-separated string. These are convenient, respectively, either
2991 2998 for sequential processing or to be passed to a shell command.
2992 2999
2993 3000 For example:
2994 3001
2995 3002 # all-random
2996 3003
2997 3004 # Capture into variable a
2998 3005 In [1]: sc a=ls *py
2999 3006
3000 3007 # a is a string with embedded newlines
3001 3008 In [2]: a
3002 3009 Out[2]: 'setup.py\\nwin32_manual_post_install.py'
3003 3010
3004 3011 # which can be seen as a list:
3005 3012 In [3]: a.l
3006 3013 Out[3]: ['setup.py', 'win32_manual_post_install.py']
3007 3014
3008 3015 # or as a whitespace-separated string:
3009 3016 In [4]: a.s
3010 3017 Out[4]: 'setup.py win32_manual_post_install.py'
3011 3018
3012 3019 # a.s is useful to pass as a single command line:
3013 3020 In [5]: !wc -l $a.s
3014 3021 146 setup.py
3015 3022 130 win32_manual_post_install.py
3016 3023 276 total
3017 3024
3018 3025 # while the list form is useful to loop over:
3019 3026 In [6]: for f in a.l:
3020 3027 ...: !wc -l $f
3021 3028 ...:
3022 3029 146 setup.py
3023 3030 130 win32_manual_post_install.py
3024 3031
3025 3032 Similiarly, the lists returned by the -l option are also special, in
3026 3033 the sense that you can equally invoke the .s attribute on them to
3027 3034 automatically get a whitespace-separated string from their contents:
3028 3035
3029 3036 In [7]: sc -l b=ls *py
3030 3037
3031 3038 In [8]: b
3032 3039 Out[8]: ['setup.py', 'win32_manual_post_install.py']
3033 3040
3034 3041 In [9]: b.s
3035 3042 Out[9]: 'setup.py win32_manual_post_install.py'
3036 3043
3037 3044 In summary, both the lists and strings used for ouptut capture have
3038 3045 the following special attributes:
3039 3046
3040 3047 .l (or .list) : value as list.
3041 3048 .n (or .nlstr): value as newline-separated string.
3042 3049 .s (or .spstr): value as space-separated string.
3043 3050 """
3044 3051
3045 3052 opts,args = self.parse_options(parameter_s,'lv')
3046 3053 # Try to get a variable name and command to run
3047 3054 try:
3048 3055 # the variable name must be obtained from the parse_options
3049 3056 # output, which uses shlex.split to strip options out.
3050 3057 var,_ = args.split('=',1)
3051 3058 var = var.strip()
3052 3059 # But the the command has to be extracted from the original input
3053 3060 # parameter_s, not on what parse_options returns, to avoid the
3054 3061 # quote stripping which shlex.split performs on it.
3055 3062 _,cmd = parameter_s.split('=',1)
3056 3063 except ValueError:
3057 3064 var,cmd = '',''
3058 3065 # If all looks ok, proceed
3059 3066 out,err = self.shell.getoutputerror(cmd)
3060 3067 if err:
3061 3068 print >> Term.cerr,err
3062 3069 if opts.has_key('l'):
3063 3070 out = SList(out.split('\n'))
3064 3071 else:
3065 3072 out = LSString(out)
3066 3073 if opts.has_key('v'):
3067 3074 print '%s ==\n%s' % (var,pformat(out))
3068 3075 if var:
3069 3076 self.shell.user_ns.update({var:out})
3070 3077 else:
3071 3078 return out
3072 3079
3073 3080 def magic_sx(self, parameter_s=''):
3074 3081 """Shell execute - run a shell command and capture its output.
3075 3082
3076 3083 %sx command
3077 3084
3078 3085 IPython will run the given command using commands.getoutput(), and
3079 3086 return the result formatted as a list (split on '\\n'). Since the
3080 3087 output is _returned_, it will be stored in ipython's regular output
3081 3088 cache Out[N] and in the '_N' automatic variables.
3082 3089
3083 3090 Notes:
3084 3091
3085 3092 1) If an input line begins with '!!', then %sx is automatically
3086 3093 invoked. That is, while:
3087 3094 !ls
3088 3095 causes ipython to simply issue system('ls'), typing
3089 3096 !!ls
3090 3097 is a shorthand equivalent to:
3091 3098 %sx ls
3092 3099
3093 3100 2) %sx differs from %sc in that %sx automatically splits into a list,
3094 3101 like '%sc -l'. The reason for this is to make it as easy as possible
3095 3102 to process line-oriented shell output via further python commands.
3096 3103 %sc is meant to provide much finer control, but requires more
3097 3104 typing.
3098 3105
3099 3106 3) Just like %sc -l, this is a list with special attributes:
3100 3107
3101 3108 .l (or .list) : value as list.
3102 3109 .n (or .nlstr): value as newline-separated string.
3103 3110 .s (or .spstr): value as whitespace-separated string.
3104 3111
3105 3112 This is very useful when trying to use such lists as arguments to
3106 3113 system commands."""
3107 3114
3108 3115 if parameter_s:
3109 3116 out,err = self.shell.getoutputerror(parameter_s)
3110 3117 if err:
3111 3118 print >> Term.cerr,err
3112 3119 return SList(out.split('\n'))
3113 3120
3114 3121 def magic_bg(self, parameter_s=''):
3115 3122 """Run a job in the background, in a separate thread.
3116 3123
3117 3124 For example,
3118 3125
3119 3126 %bg myfunc(x,y,z=1)
3120 3127
3121 3128 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
3122 3129 execution starts, a message will be printed indicating the job
3123 3130 number. If your job number is 5, you can use
3124 3131
3125 3132 myvar = jobs.result(5) or myvar = jobs[5].result
3126 3133
3127 3134 to assign this result to variable 'myvar'.
3128 3135
3129 3136 IPython has a job manager, accessible via the 'jobs' object. You can
3130 3137 type jobs? to get more information about it, and use jobs.<TAB> to see
3131 3138 its attributes. All attributes not starting with an underscore are
3132 3139 meant for public use.
3133 3140
3134 3141 In particular, look at the jobs.new() method, which is used to create
3135 3142 new jobs. This magic %bg function is just a convenience wrapper
3136 3143 around jobs.new(), for expression-based jobs. If you want to create a
3137 3144 new job with an explicit function object and arguments, you must call
3138 3145 jobs.new() directly.
3139 3146
3140 3147 The jobs.new docstring also describes in detail several important
3141 3148 caveats associated with a thread-based model for background job
3142 3149 execution. Type jobs.new? for details.
3143 3150
3144 3151 You can check the status of all jobs with jobs.status().
3145 3152
3146 3153 The jobs variable is set by IPython into the Python builtin namespace.
3147 3154 If you ever declare a variable named 'jobs', you will shadow this
3148 3155 name. You can either delete your global jobs variable to regain
3149 3156 access to the job manager, or make a new name and assign it manually
3150 3157 to the manager (stored in IPython's namespace). For example, to
3151 3158 assign the job manager to the Jobs name, use:
3152 3159
3153 3160 Jobs = __builtins__.jobs"""
3154 3161
3155 3162 self.shell.jobs.new(parameter_s,self.shell.user_ns)
3156 3163
3157 3164 def magic_r(self, parameter_s=''):
3158 3165 """Repeat previous input.
3159 3166
3160 3167 Note: Consider using the more powerfull %rep instead!
3161 3168
3162 3169 If given an argument, repeats the previous command which starts with
3163 3170 the same string, otherwise it just repeats the previous input.
3164 3171
3165 3172 Shell escaped commands (with ! as first character) are not recognized
3166 3173 by this system, only pure python code and magic commands.
3167 3174 """
3168 3175
3169 3176 start = parameter_s.strip()
3170 3177 esc_magic = self.shell.ESC_MAGIC
3171 3178 # Identify magic commands even if automagic is on (which means
3172 3179 # the in-memory version is different from that typed by the user).
3173 3180 if self.shell.rc.automagic:
3174 3181 start_magic = esc_magic+start
3175 3182 else:
3176 3183 start_magic = start
3177 3184 # Look through the input history in reverse
3178 3185 for n in range(len(self.shell.input_hist)-2,0,-1):
3179 3186 input = self.shell.input_hist[n]
3180 3187 # skip plain 'r' lines so we don't recurse to infinity
3181 3188 if input != '_ip.magic("r")\n' and \
3182 3189 (input.startswith(start) or input.startswith(start_magic)):
3183 3190 #print 'match',`input` # dbg
3184 3191 print 'Executing:',input,
3185 3192 self.shell.runlines(input)
3186 3193 return
3187 3194 print 'No previous input matching `%s` found.' % start
3188 3195
3189 3196
3190 3197 def magic_bookmark(self, parameter_s=''):
3191 3198 """Manage IPython's bookmark system.
3192 3199
3193 3200 %bookmark <name> - set bookmark to current dir
3194 3201 %bookmark <name> <dir> - set bookmark to <dir>
3195 3202 %bookmark -l - list all bookmarks
3196 3203 %bookmark -d <name> - remove bookmark
3197 3204 %bookmark -r - remove all bookmarks
3198 3205
3199 3206 You can later on access a bookmarked folder with:
3200 3207 %cd -b <name>
3201 3208 or simply '%cd <name>' if there is no directory called <name> AND
3202 3209 there is such a bookmark defined.
3203 3210
3204 3211 Your bookmarks persist through IPython sessions, but they are
3205 3212 associated with each profile."""
3206 3213
3207 3214 opts,args = self.parse_options(parameter_s,'drl',mode='list')
3208 3215 if len(args) > 2:
3209 3216 raise UsageError("%bookmark: too many arguments")
3210 3217
3211 3218 bkms = self.db.get('bookmarks',{})
3212 3219
3213 3220 if opts.has_key('d'):
3214 3221 try:
3215 3222 todel = args[0]
3216 3223 except IndexError:
3217 3224 raise UsageError(
3218 3225 "%bookmark -d: must provide a bookmark to delete")
3219 3226 else:
3220 3227 try:
3221 3228 del bkms[todel]
3222 3229 except KeyError:
3223 3230 raise UsageError(
3224 3231 "%%bookmark -d: Can't delete bookmark '%s'" % todel)
3225 3232
3226 3233 elif opts.has_key('r'):
3227 3234 bkms = {}
3228 3235 elif opts.has_key('l'):
3229 3236 bks = bkms.keys()
3230 3237 bks.sort()
3231 3238 if bks:
3232 3239 size = max(map(len,bks))
3233 3240 else:
3234 3241 size = 0
3235 3242 fmt = '%-'+str(size)+'s -> %s'
3236 3243 print 'Current bookmarks:'
3237 3244 for bk in bks:
3238 3245 print fmt % (bk,bkms[bk])
3239 3246 else:
3240 3247 if not args:
3241 3248 raise UsageError("%bookmark: You must specify the bookmark name")
3242 3249 elif len(args)==1:
3243 3250 bkms[args[0]] = os.getcwd()
3244 3251 elif len(args)==2:
3245 3252 bkms[args[0]] = args[1]
3246 3253 self.db['bookmarks'] = bkms
3247 3254
3248 3255 def magic_pycat(self, parameter_s=''):
3249 3256 """Show a syntax-highlighted file through a pager.
3250 3257
3251 3258 This magic is similar to the cat utility, but it will assume the file
3252 3259 to be Python source and will show it with syntax highlighting. """
3253 3260
3254 3261 try:
3255 3262 filename = get_py_filename(parameter_s)
3256 3263 cont = file_read(filename)
3257 3264 except IOError:
3258 3265 try:
3259 3266 cont = eval(parameter_s,self.user_ns)
3260 3267 except NameError:
3261 3268 cont = None
3262 3269 if cont is None:
3263 3270 print "Error: no such file or variable"
3264 3271 return
3265 3272
3266 3273 page(self.shell.pycolorize(cont),
3267 3274 screen_lines=self.shell.rc.screen_length)
3268 3275
3269 3276 def _rerun_pasted(self):
3270 3277 """ Rerun a previously pasted command.
3271 3278 """
3272 3279 b = self.user_ns.get('pasted_block', None)
3273 3280 if b is None:
3274 3281 raise UsageError('No previous pasted block available')
3275 3282 print "Re-executing '%s...' (%d chars)"% (b.split('\n',1)[0], len(b))
3276 3283 exec b in self.user_ns
3277 3284
3278 3285 def _get_pasted_lines(self, sentinel):
3279 3286 """ Yield pasted lines until the user enters the given sentinel value.
3280 3287 """
3281 3288 from IPython import iplib
3282 3289 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
3283 3290 while True:
3284 3291 l = iplib.raw_input_original(':')
3285 3292 if l == sentinel:
3286 3293 return
3287 3294 else:
3288 3295 yield l
3289 3296
3290 3297 def _strip_pasted_lines_for_code(self, raw_lines):
3291 3298 """ Strip non-code parts of a sequence of lines to return a block of
3292 3299 code.
3293 3300 """
3294 3301 # Regular expressions that declare text we strip from the input:
3295 3302 strip_re = [r'^\s*In \[\d+\]:', # IPython input prompt
3296 3303 r'^\s*(\s?>)+', # Python input prompt
3297 3304 r'^\s*\.{3,}', # Continuation prompts
3298 3305 r'^\++',
3299 3306 ]
3300 3307
3301 3308 strip_from_start = map(re.compile,strip_re)
3302 3309
3303 3310 lines = []
3304 3311 for l in raw_lines:
3305 3312 for pat in strip_from_start:
3306 3313 l = pat.sub('',l)
3307 3314 lines.append(l)
3308 3315
3309 3316 block = "\n".join(lines) + '\n'
3310 3317 #print "block:\n",block
3311 3318 return block
3312 3319
3313 3320 def _execute_block(self, block, par):
3314 3321 """ Execute a block, or store it in a variable, per the user's request.
3315 3322 """
3316 3323 if not par:
3317 3324 b = textwrap.dedent(block)
3318 3325 self.user_ns['pasted_block'] = b
3319 3326 exec b in self.user_ns
3320 3327 else:
3321 3328 self.user_ns[par] = SList(block.splitlines())
3322 3329 print "Block assigned to '%s'" % par
3323 3330
3324 3331 def magic_cpaste(self, parameter_s=''):
3325 3332 """Allows you to paste & execute a pre-formatted code block from clipboard.
3326 3333
3327 3334 You must terminate the block with '--' (two minus-signs) alone on the
3328 3335 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
3329 3336 is the new sentinel for this operation)
3330 3337
3331 3338 The block is dedented prior to execution to enable execution of method
3332 3339 definitions. '>' and '+' characters at the beginning of a line are
3333 3340 ignored, to allow pasting directly from e-mails, diff files and
3334 3341 doctests (the '...' continuation prompt is also stripped). The
3335 3342 executed block is also assigned to variable named 'pasted_block' for
3336 3343 later editing with '%edit pasted_block'.
3337 3344
3338 3345 You can also pass a variable name as an argument, e.g. '%cpaste foo'.
3339 3346 This assigns the pasted block to variable 'foo' as string, without
3340 3347 dedenting or executing it (preceding >>> and + is still stripped)
3341 3348
3342 3349 '%cpaste -r' re-executes the block previously entered by cpaste.
3343 3350
3344 3351 Do not be alarmed by garbled output on Windows (it's a readline bug).
3345 3352 Just press enter and type -- (and press enter again) and the block
3346 3353 will be what was just pasted.
3347 3354
3348 3355 IPython statements (magics, shell escapes) are not supported (yet).
3349 3356
3350 3357 See also
3351 3358 --------
3352 3359 paste: automatically pull code from clipboard.
3353 3360 """
3354 3361
3355 3362 opts,args = self.parse_options(parameter_s,'rs:',mode='string')
3356 3363 par = args.strip()
3357 3364 if opts.has_key('r'):
3358 3365 self._rerun_pasted()
3359 3366 return
3360 3367
3361 3368 sentinel = opts.get('s','--')
3362 3369
3363 3370 block = self._strip_pasted_lines_for_code(
3364 3371 self._get_pasted_lines(sentinel))
3365 3372
3366 3373 self._execute_block(block, par)
3367 3374
3368 3375 def magic_paste(self, parameter_s=''):
3369 3376 """Allows you to paste & execute a pre-formatted code block from clipboard.
3370 3377
3371 3378 The text is pulled directly from the clipboard without user
3372 3379 intervention.
3373 3380
3374 3381 The block is dedented prior to execution to enable execution of method
3375 3382 definitions. '>' and '+' characters at the beginning of a line are
3376 3383 ignored, to allow pasting directly from e-mails, diff files and
3377 3384 doctests (the '...' continuation prompt is also stripped). The
3378 3385 executed block is also assigned to variable named 'pasted_block' for
3379 3386 later editing with '%edit pasted_block'.
3380 3387
3381 3388 You can also pass a variable name as an argument, e.g. '%paste foo'.
3382 3389 This assigns the pasted block to variable 'foo' as string, without
3383 3390 dedenting or executing it (preceding >>> and + is still stripped)
3384 3391
3385 3392 '%paste -r' re-executes the block previously entered by cpaste.
3386 3393
3387 3394 IPython statements (magics, shell escapes) are not supported (yet).
3388 3395
3389 3396 See also
3390 3397 --------
3391 3398 cpaste: manually paste code into terminal until you mark its end.
3392 3399 """
3393 3400 opts,args = self.parse_options(parameter_s,'r:',mode='string')
3394 3401 par = args.strip()
3395 3402 if opts.has_key('r'):
3396 3403 self._rerun_pasted()
3397 3404 return
3398 3405
3399 3406 text = self.shell.hooks.clipboard_get()
3400 3407 block = self._strip_pasted_lines_for_code(text.splitlines())
3401 3408 self._execute_block(block, par)
3402 3409
3403 3410 def magic_quickref(self,arg):
3404 3411 """ Show a quick reference sheet """
3405 3412 import IPython.usage
3406 3413 qr = IPython.usage.quick_reference + self.magic_magic('-brief')
3407 3414
3408 3415 page(qr)
3409 3416
3410 3417 def magic_upgrade(self,arg):
3411 3418 """ Upgrade your IPython installation
3412 3419
3413 3420 This will copy the config files that don't yet exist in your
3414 3421 ipython dir from the system config dir. Use this after upgrading
3415 3422 IPython if you don't wish to delete your .ipython dir.
3416 3423
3417 3424 Call with -nolegacy to get rid of ipythonrc* files (recommended for
3418 3425 new users)
3419 3426
3420 3427 """
3421 3428 ip = self.getapi()
3422 3429 ipinstallation = path(IPython.__file__).dirname()
3423 3430 upgrade_script = '%s "%s"' % (sys.executable,ipinstallation / 'upgrade_dir.py')
3424 3431 src_config = ipinstallation / 'UserConfig'
3425 3432 userdir = path(ip.options.ipythondir)
3426 3433 cmd = '%s "%s" "%s"' % (upgrade_script, src_config, userdir)
3427 3434 print ">",cmd
3428 3435 shell(cmd)
3429 3436 if arg == '-nolegacy':
3430 3437 legacy = userdir.files('ipythonrc*')
3431 3438 print "Nuking legacy files:",legacy
3432 3439
3433 3440 [p.remove() for p in legacy]
3434 3441 suffix = (sys.platform == 'win32' and '.ini' or '')
3435 3442 (userdir / ('ipythonrc' + suffix)).write_text('# Empty, see ipy_user_conf.py\n')
3436 3443
3437 3444
3438 3445 def magic_doctest_mode(self,parameter_s=''):
3439 3446 """Toggle doctest mode on and off.
3440 3447
3441 3448 This mode allows you to toggle the prompt behavior between normal
3442 3449 IPython prompts and ones that are as similar to the default IPython
3443 3450 interpreter as possible.
3444 3451
3445 3452 It also supports the pasting of code snippets that have leading '>>>'
3446 3453 and '...' prompts in them. This means that you can paste doctests from
3447 3454 files or docstrings (even if they have leading whitespace), and the
3448 3455 code will execute correctly. You can then use '%history -tn' to see
3449 3456 the translated history without line numbers; this will give you the
3450 3457 input after removal of all the leading prompts and whitespace, which
3451 3458 can be pasted back into an editor.
3452 3459
3453 3460 With these features, you can switch into this mode easily whenever you
3454 3461 need to do testing and changes to doctests, without having to leave
3455 3462 your existing IPython session.
3456 3463 """
3457 3464
3458 3465 # XXX - Fix this to have cleaner activate/deactivate calls.
3459 3466 from IPython.Extensions import InterpreterPasteInput as ipaste
3460 3467 from IPython.ipstruct import Struct
3461 3468
3462 3469 # Shorthands
3463 3470 shell = self.shell
3464 3471 oc = shell.outputcache
3465 3472 rc = shell.rc
3466 3473 meta = shell.meta
3467 3474 # dstore is a data store kept in the instance metadata bag to track any
3468 3475 # changes we make, so we can undo them later.
3469 3476 dstore = meta.setdefault('doctest_mode',Struct())
3470 3477 save_dstore = dstore.setdefault
3471 3478
3472 3479 # save a few values we'll need to recover later
3473 3480 mode = save_dstore('mode',False)
3474 3481 save_dstore('rc_pprint',rc.pprint)
3475 3482 save_dstore('xmode',shell.InteractiveTB.mode)
3476 3483 save_dstore('rc_separate_out',rc.separate_out)
3477 3484 save_dstore('rc_separate_out2',rc.separate_out2)
3478 3485 save_dstore('rc_prompts_pad_left',rc.prompts_pad_left)
3479 3486 save_dstore('rc_separate_in',rc.separate_in)
3480 3487
3481 3488 if mode == False:
3482 3489 # turn on
3483 3490 ipaste.activate_prefilter()
3484 3491
3485 3492 oc.prompt1.p_template = '>>> '
3486 3493 oc.prompt2.p_template = '... '
3487 3494 oc.prompt_out.p_template = ''
3488 3495
3489 3496 # Prompt separators like plain python
3490 3497 oc.input_sep = oc.prompt1.sep = ''
3491 3498 oc.output_sep = ''
3492 3499 oc.output_sep2 = ''
3493 3500
3494 3501 oc.prompt1.pad_left = oc.prompt2.pad_left = \
3495 3502 oc.prompt_out.pad_left = False
3496 3503
3497 3504 rc.pprint = False
3498 3505
3499 3506 shell.magic_xmode('Plain')
3500 3507
3501 3508 else:
3502 3509 # turn off
3503 3510 ipaste.deactivate_prefilter()
3504 3511
3505 3512 oc.prompt1.p_template = rc.prompt_in1
3506 3513 oc.prompt2.p_template = rc.prompt_in2
3507 3514 oc.prompt_out.p_template = rc.prompt_out
3508 3515
3509 3516 oc.input_sep = oc.prompt1.sep = dstore.rc_separate_in
3510 3517
3511 3518 oc.output_sep = dstore.rc_separate_out
3512 3519 oc.output_sep2 = dstore.rc_separate_out2
3513 3520
3514 3521 oc.prompt1.pad_left = oc.prompt2.pad_left = \
3515 3522 oc.prompt_out.pad_left = dstore.rc_prompts_pad_left
3516 3523
3517 3524 rc.pprint = dstore.rc_pprint
3518 3525
3519 3526 shell.magic_xmode(dstore.xmode)
3520 3527
3521 3528 # Store new mode and inform
3522 3529 dstore.mode = bool(1-int(mode))
3523 3530 print 'Doctest mode is:',
3524 3531 print ['OFF','ON'][dstore.mode]
3525 3532
3526 3533 # end Magic
General Comments 0
You need to be logged in to leave comments. Login now