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