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