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