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