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