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