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