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