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