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