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