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