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