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