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