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